mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-11 20:05:25 +00:00
61 lines
No EOL
2 KiB
TypeScript
61 lines
No EOL
2 KiB
TypeScript
import path, { dirname } from "path";
|
|
import { mkdir, rm, writeFile } from "fs/promises";
|
|
import $RefParser from "@apidevtools/json-schema-ref-parser";
|
|
import { compileFromFile } from "json-schema-to-typescript";
|
|
import { glob } from "glob";
|
|
|
|
|
|
const BANNER_COMMENT = 'THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!';
|
|
|
|
(async () => {
|
|
const cwd = process.cwd();
|
|
const schemasBasePath = path.resolve(`${cwd}/../../schemas`);
|
|
const srcDir = path.resolve(`${cwd}/src`);
|
|
const docsDir = path.resolve(`${cwd}/../../docs/snippets/schemas`);
|
|
const schemas = await glob(`${schemasBasePath}/**/*.json`);
|
|
|
|
await Promise.all(schemas.map(async (schemaPath) => {
|
|
const name = path.parse(schemaPath).name;
|
|
const version = path.basename(path.dirname(schemaPath));
|
|
|
|
const srcOutDir = path.join(srcDir, version);
|
|
const docsOutDir = path.join(docsDir, version);
|
|
|
|
await mkdir(srcOutDir, { recursive: true });
|
|
await mkdir(docsOutDir, { recursive: true });
|
|
|
|
// Generate schema
|
|
const schema = JSON.stringify(await $RefParser.bundle(schemaPath), null, 2);
|
|
|
|
// Write to src
|
|
await writeFile(
|
|
path.join(srcOutDir, `${name}.schema.ts`),
|
|
`// ${BANNER_COMMENT}\n` +
|
|
'const schema = ' +
|
|
schema +
|
|
` as const;\nexport { schema as ${name}Schema };`,
|
|
);
|
|
|
|
// Write to docs
|
|
await writeFile(
|
|
path.join(docsOutDir, `${name}.schema.mdx`),
|
|
`{/* ${BANNER_COMMENT} */}\n` +
|
|
'```json\n' +
|
|
schema +
|
|
'\n```\n'
|
|
);
|
|
|
|
// Generate types
|
|
const content = await compileFromFile(schemaPath, {
|
|
bannerComment: `// ${BANNER_COMMENT}\n`,
|
|
cwd: dirname(schemaPath),
|
|
ignoreMinAndMaxItems: true,
|
|
declareExternallyReferenced: true,
|
|
unreachableDefinitions: true,
|
|
});
|
|
await writeFile(
|
|
path.join(srcOutDir, `${name}.type.ts`),
|
|
content,
|
|
)
|
|
}));
|
|
})(); |