forked from alibaba/lowcode-engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtransform.js
More file actions
35 lines (30 loc) · 1.18 KB
/
transform.js
File metadata and controls
35 lines (30 loc) · 1.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const yaml = require('js-yaml');
const fs = require('fs');
const path = require('path');
const Ajv = require('ajv');
const { compile } = require('json-schema-to-typescript');
const { ESLint } = require('eslint');
const ajv = new Ajv();
const eslint = new ESLint({ fix: true });
const YamlPath = path.resolve(__dirname, '../schemas/schema.yml');
const JsonPath = path.resolve(__dirname, '../src/validate/schema.json');
const tsPath = path.resolve(__dirname, '../src/core/schema/types.ts');
// Get document, or throw exception on error
(async function () {
try {
const schema = yaml.load(fs.readFileSync(YamlPath, 'utf8'));
ajv.compile(schema);
fs.writeFileSync(JsonPath, JSON.stringify(schema, null, 2), 'utf-8');
console.log('yaml file is successfully transformed into json');
const ts = await compile(schema, 'ComponentMeta');
fs.writeFileSync(tsPath, ts);
// Lint files. This doesn't modify target files.
const results = await eslint.lintFiles([tsPath]);
// Modify the files with the fixed code.
await ESLint.outputFixes(results);
console.log('schema/types.d.ts is successfully generated');
} catch (e) {
console.log(e);
process.exit(1);
}
})();