UNPKG

1.67 kBJavaScriptView Raw
1/* eslint-disable global-require,import/no-commonjs */
2
3const { promises: fsp } = require('fs');
4const { join, basename, relative } = require('path');
5const { compile } = require('json-schema-to-typescript');
6const camelcase = require('camelcase');
7const parameterSchema = require('../schemas/parameter-config.json');
8
9const configSchemas = ['display-config.json', 'serverscript-config.json'];
10const log = console.log; // eslint-disable-line no-console
11const writeJSON = (path, value) => fsp.writeFile(path, `${JSON.stringify(value, null, ' ')}\n`);
12
13async function bundleSchemas() {
14 for (const filename of configSchemas) {
15 // Inline parameter schema
16 const schemaPath = join(__dirname, '../schemas', filename);
17
18 log(`Updating schema at '${relative(process.cwd(), schemaPath)}'`);
19
20 const schema = require(schemaPath);
21 schema.properties.parameters.items = {
22 $comment: "NOTE: This is imported from './parameter-config.json'",
23 ...parameterSchema,
24 $schema: undefined,
25 };
26
27 await writeJSON(schemaPath, schema);
28
29 // Create type definitions
30 const schemaName = basename(schemaPath, '.json');
31 const typeName = camelcase(schemaName, { pascalCase: true });
32 const dtsPath = join(__dirname, '../types/schemas/', `${schemaName}.d.ts`);
33
34 log(`Updating type definitions at '${relative(process.cwd(), dtsPath)}'`);
35
36 const compiled = await compile(schema, typeName, { format: false });
37 await fsp.writeFile(dtsPath, compiled);
38 }
39
40 log('Done');
41}
42
43module.exports = bundleSchemas;
44if (require.main === module) {
45 bundleSchemas().catch((error) => {
46 console.error(error);
47 process.exitCode = 1;
48 });
49}