Skip to content

Commit c40f26c

Browse files
authored
fix(@jsii/spec): speed up assembly validation by 20x for large libraries (#3565)
1 parent d9ba233 commit c40f26c

3 files changed

Lines changed: 35 additions & 14 deletions

File tree

packages/@jsii/spec/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"package": "package-js"
3232
},
3333
"dependencies": {
34-
"jsonschema": "^1.4.1"
34+
"ajv": "^8.11.0"
3535
},
3636
"devDependencies": {
3737
"jsii-build-tools": "^0.0.0",
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1-
import { Schema, Validator } from 'jsonschema';
1+
import Ajv from 'ajv';
22

33
import { Assembly } from './assembly';
44

55
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires
6-
export const schema: Schema = require('../schema/jsii-spec.schema.json');
6+
export const schema = require('../schema/jsii-spec.schema.json');
77

88
export function validateAssembly(obj: any): Assembly {
9-
const validator = new Validator();
10-
validator.addSchema(schema); // For definitions
11-
const result = validator.validate(obj, schema, { nestedErrors: true });
12-
if (result.valid) {
13-
return obj;
9+
const ajv = new Ajv();
10+
const validate = ajv.compile(schema);
11+
validate(obj);
12+
13+
if (validate.errors) {
14+
throw new Error(
15+
`Invalid assembly:\n${validate.errors
16+
.map((e) => ` * ${e.message}`)
17+
.join('\n')
18+
.toString()}`,
19+
);
1420
}
15-
throw new Error(`Invalid assembly:\n${result.toString()}`);
21+
return obj;
1622
}

yarn.lock

Lines changed: 20 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)