diff --git a/.changeset/bright-rules-shout.md b/.changeset/bright-rules-shout.md new file mode 100644 index 0000000000..f7cdae3b4f --- /dev/null +++ b/.changeset/bright-rules-shout.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-model': patch +--- + +Defer `ajv` compilation of schema validators to improve module-import performance diff --git a/packages/catalog-model/src/kinds/util.ts b/packages/catalog-model/src/kinds/util.ts index c77b77cb97..40c88b7066 100644 --- a/packages/catalog-model/src/kinds/util.ts +++ b/packages/catalog-model/src/kinds/util.ts @@ -22,9 +22,12 @@ import { KindValidator } from './types'; // exported kind validators have the `KindValidator` signature which is // different. So let's postpone that change until a later time. export function ajvCompiledJsonSchemaValidator(schema: unknown): KindValidator { - const validator = entityKindSchemaValidator(schema); + let validator: undefined | ((data: unknown) => any); return { async check(data) { + if (!validator) { + validator = entityKindSchemaValidator(schema); + } return validator(data) === data; }, };