// @ts-nocheck import filewalker from 'filewalker'; import { uniq } from 'lodash'; import path from 'path'; export const makeSchemaMap = async (srcDir: string): Promise> => { return new Promise((resolve: any) => { const baseUrl = 'https://schemas.coastapp.com/'; const schemaMap = new Map(); filewalker(srcDir) .on('file', (p: string) => { const file = path.parse(p); if (file.ext === '.ts') { const schema = require(path.join(process.cwd(), srcDir, p)).default; injectLocalDefinitions(schema); const pathname = schema.$id.replace(baseUrl, ''); schemaMap.set(pathname, schema); } }) .on('done', () => resolve(schemaMap)) .walk(); }); }; function injectLocalDefinitions(schema: any): void { if (schema.definitions?.cardBlock) { Object.keys(schema.definitions).forEach((key: string) => { if (schema.definitions[key].$injectLocalDef) { const targetDef = schema.definitions[key]; const sourceDef = schema.definitions[targetDef.$injectLocalDef]; Object.keys(sourceDef.properties).forEach((sourceKey: string) => { if (!targetDef.properties[sourceKey]) { targetDef.properties[sourceKey] = sourceDef.properties[sourceKey]; } }); if (sourceDef.required) { if (targetDef.required) { targetDef.required = uniq(targetDef.required.concat(sourceDef.required)); } else { targetDef.required = sourceDef.required; } } delete targetDef.$injectLocalDef; } }); } }