@squiz/dx-json-schema-lib 1.79.0 → 1.80.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/jest.config.ts +13 -2
  3. package/lib/JsonSchemaService.d.ts +34 -0
  4. package/lib/JsonSchemaService.js +140 -0
  5. package/lib/JsonSchemaService.js.map +1 -0
  6. package/lib/JsonSchemaService.spec.d.ts +1 -0
  7. package/lib/JsonSchemaService.spec.js +1807 -0
  8. package/lib/JsonSchemaService.spec.js.map +1 -0
  9. package/lib/JsonValidationService.d.ts +11 -33
  10. package/lib/JsonValidationService.js +43 -194
  11. package/lib/JsonValidationService.js.map +1 -1
  12. package/lib/JsonValidationService.spec.js +19 -1800
  13. package/lib/JsonValidationService.spec.js.map +1 -1
  14. package/lib/index.d.ts +1 -0
  15. package/lib/index.js +1 -0
  16. package/lib/index.js.map +1 -1
  17. package/lib/jsonTypeResolution/TypeResolver.d.ts +0 -1
  18. package/lib/jsonTypeResolution/TypeResolver.js +0 -3
  19. package/lib/jsonTypeResolution/TypeResolver.js.map +1 -1
  20. package/lib/jsonTypeResolution/TypeResolver.spec.js +10 -0
  21. package/lib/jsonTypeResolution/TypeResolver.spec.js.map +1 -1
  22. package/lib/manifest/v1/DxComponentInputSchema.spec.js +18 -0
  23. package/lib/manifest/v1/DxComponentInputSchema.spec.js.map +1 -1
  24. package/lib/manifest/v1/DxContentMetaSchema.json +24 -32
  25. package/lib/manifest/v1/JobV1.d.ts +23 -18
  26. package/lib/manifest/v1/__test__/schemas/invalidUiMetadata.json +31 -0
  27. package/lib/manifest/v1/v1.d.ts +23 -18
  28. package/lib/manifest/v1/v1.spec.js +3 -66
  29. package/lib/manifest/v1/v1.spec.js.map +1 -1
  30. package/lib/processValidationResult.d.ts +2 -0
  31. package/lib/processValidationResult.js +24 -0
  32. package/lib/processValidationResult.js.map +1 -0
  33. package/lib/validators/customKeywordValidators.d.ts +2 -0
  34. package/lib/validators/customKeywordValidators.js +47 -0
  35. package/lib/validators/customKeywordValidators.js.map +1 -0
  36. package/lib/validators/customKeywordValidators.spec.d.ts +1 -0
  37. package/lib/validators/customKeywordValidators.spec.js +100 -0
  38. package/lib/validators/customKeywordValidators.spec.js.map +1 -0
  39. package/package.json +1 -1
  40. package/src/JsonSchemaService.spec.ts +2198 -0
  41. package/src/JsonSchemaService.ts +159 -0
  42. package/src/JsonValidationService.spec.ts +26 -2195
  43. package/src/JsonValidationService.ts +64 -226
  44. package/src/index.ts +1 -0
  45. package/src/jsonTypeResolution/TypeResolver.spec.ts +12 -0
  46. package/src/jsonTypeResolution/TypeResolver.ts +0 -4
  47. package/src/manifest/v1/DxComponentInputSchema.spec.ts +21 -0
  48. package/src/manifest/v1/DxContentMetaSchema.json +24 -32
  49. package/src/manifest/v1/JobV1.ts +23 -23
  50. package/src/manifest/v1/__test__/schemas/invalidUiMetadata.json +31 -0
  51. package/src/manifest/v1/v1.spec.ts +3 -73
  52. package/src/manifest/v1/v1.ts +23 -23
  53. package/src/processValidationResult.ts +20 -0
  54. package/src/validators/customKeywordValidators.spec.ts +171 -0
  55. package/src/validators/customKeywordValidators.ts +53 -0
  56. package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ ## 1.80.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 63fecb7: Add enumWidget ui:metadata configuration
8
+
3
9
  ## 1.79.0
4
10
 
5
11
  ### Minor Changes
package/jest.config.ts CHANGED
@@ -1,14 +1,25 @@
1
1
  import type { Config } from 'jest';
2
2
 
3
3
  import { config as configFunc } from 'dotenv';
4
+ import { defaultConfig } from '../../jest.config';
4
5
  configFunc();
5
6
 
6
7
  // Sync object
7
8
  const config: Config = {
8
- preset: 'ts-jest',
9
+ ...defaultConfig,
9
10
  testTimeout: 60_000,
10
11
  testEnvironment: 'node',
11
-
12
+ clearMocks: false,
13
+ resetMocks: false,
14
+ resetModules: false,
15
+ coverageThreshold: {
16
+ global: {
17
+ branches: 80,
18
+ functions: 90,
19
+ lines: 90,
20
+ statements: 90,
21
+ },
22
+ },
12
23
  testPathIgnorePatterns: [
13
24
  '<rootDir>/lib/',
14
25
  '<rootDir>/cdk.out/',
@@ -0,0 +1,34 @@
1
+ import { Input } from '@sagold/json-query';
2
+ import { JSONSchema, Draft } from '@squiz/json-schema-library';
3
+ import { AnyPrimitiveType, AnyResolvableType, TypeResolver } from './jsonTypeResolution/TypeResolver';
4
+ export declare const ComponentInputMetaSchema: MetaSchemaInput;
5
+ export declare const RenderInputMetaSchema: MetaSchemaInput;
6
+ export declare const ManifestV1MetaSchema: MetaSchemaInput;
7
+ export declare const JobV1MetaSchema: MetaSchemaInput;
8
+ interface MetaSchemaInput {
9
+ root: JSONSchema;
10
+ remotes?: Record<string, JSONSchema>;
11
+ }
12
+ /**
13
+ * A service that can be used to validate and resolve JSON against a schema.
14
+ */
15
+ export declare class JSONSchemaService<P extends AnyPrimitiveType, R extends AnyResolvableType> {
16
+ private typeResolver;
17
+ schema: Draft;
18
+ constructor(typeResolver: TypeResolver<P, R>, metaSchema: MetaSchemaInput);
19
+ private doResolveRef;
20
+ /**
21
+ * Validate an input value against a specified schema
22
+ * @throws {SchemaValidationError} if the input is invalid
23
+ * @returns true if the input is valid
24
+ */
25
+ validateInput(input: unknown, inputSchema?: JSONSchema): true | never;
26
+ /**
27
+ * Resolve an input object by replacing all resolvable shapes with their resolved values
28
+ * @param input any input object which matches the input schema
29
+ * @param inputSchema a JSONSchema which provides type information about the input object
30
+ * @returns the input object with all resolvable shapes resolved
31
+ */
32
+ resolveInput(input: Input, inputSchema: JSONSchema): Promise<Input>;
33
+ }
34
+ export {};
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.JSONSchemaService = exports.JobV1MetaSchema = exports.ManifestV1MetaSchema = exports.RenderInputMetaSchema = exports.ComponentInputMetaSchema = void 0;
7
+ const json_query_1 = __importDefault(require("@sagold/json-query"));
8
+ const DxComponentInputSchema_json_1 = __importDefault(require("./manifest/v1/DxComponentInputSchema.json"));
9
+ const DxComponentIcons_json_1 = __importDefault(require("./manifest/v1/DxComponentIcons.json"));
10
+ const DxContentMetaSchema_json_1 = __importDefault(require("./manifest/v1/DxContentMetaSchema.json"));
11
+ const MatrixAssetSchema_json_1 = __importDefault(require("./manifest/v1/MatrixAssetSchema.json"));
12
+ const Draft_07_json_1 = __importDefault(require("./manifest/v1/Draft-07.json"));
13
+ const JobV1_json_1 = __importDefault(require("./manifest/v1/JobV1.json"));
14
+ const v1_json_1 = __importDefault(require("./manifest/v1/v1.json"));
15
+ const json_schema_library_1 = require("@squiz/json-schema-library");
16
+ const json_schema_library_2 = require("@squiz/json-schema-library");
17
+ const JsonResolutionError_1 = require("./errors/JsonResolutionError");
18
+ const processValidationResult_1 = require("./processValidationResult");
19
+ const _1 = require(".");
20
+ exports.ComponentInputMetaSchema = {
21
+ root: DxComponentInputSchema_json_1.default,
22
+ remotes: {
23
+ 'DxComponentInputSchema.json/DxContentMetaSchema.json': DxContentMetaSchema_json_1.default,
24
+ },
25
+ };
26
+ exports.RenderInputMetaSchema = {
27
+ root: Draft_07_json_1.default,
28
+ };
29
+ exports.ManifestV1MetaSchema = {
30
+ root: v1_json_1.default,
31
+ remotes: {
32
+ 'DxComponentInputSchema.json/DxContentMetaSchema.json': DxContentMetaSchema_json_1.default,
33
+ '/DxComponentInputSchema.json': DxComponentInputSchema_json_1.default,
34
+ '/DxComponentIcons.json': DxComponentIcons_json_1.default,
35
+ '/MatrixAssetSchema.json': MatrixAssetSchema_json_1.default,
36
+ 'http://json-schema.org/draft-07/schema': Draft_07_json_1.default,
37
+ 'http://json-schema.org/draft-07/schema#': Draft_07_json_1.default,
38
+ },
39
+ };
40
+ exports.JobV1MetaSchema = {
41
+ root: JobV1_json_1.default,
42
+ remotes: {
43
+ 'DxComponentInputSchema.json/DxContentMetaSchema.json': DxContentMetaSchema_json_1.default,
44
+ '/DxComponentInputSchema.json': DxComponentInputSchema_json_1.default,
45
+ 'http://json-schema.org/draft-07/schema': Draft_07_json_1.default,
46
+ 'http://json-schema.org/draft-07/schema#': Draft_07_json_1.default,
47
+ },
48
+ };
49
+ /**
50
+ * A service that can be used to validate and resolve JSON against a schema.
51
+ */
52
+ class JSONSchemaService {
53
+ constructor(typeResolver, metaSchema) {
54
+ this.typeResolver = typeResolver;
55
+ this.schema = new json_schema_library_1.Draft({
56
+ ..._1.defaultConfig,
57
+ resolveRef: (schema, rootSchema) => this.doResolveRef(schema, rootSchema),
58
+ validate: (core, data, schema, pointer) => _1.defaultConfig.validate(core, data, schema, pointer),
59
+ resolveOneOf: (core, data, schema, pointer) => _1.defaultConfig.resolveOneOf(core, data, schema, pointer),
60
+ }, metaSchema.root);
61
+ for (const [key, value] of Object.entries(metaSchema.remotes || {})) {
62
+ this.schema.addRemoteSchema(key, value);
63
+ }
64
+ for (const schema of this.typeResolver.validationSchemaDefinitions) {
65
+ // Please find a better way of doing this.
66
+ this.schema.addRemoteSchema(`/${schema.title}.json`, schema);
67
+ this.schema.addRemoteSchema(`#/${schema.title}.json`, schema);
68
+ }
69
+ }
70
+ doResolveRef(schema, rootSchema) {
71
+ const initialRef = json_schema_library_2.draft07Config.resolveRef(schema, rootSchema);
72
+ if (!initialRef)
73
+ return initialRef;
74
+ if (!this.typeResolver.isPrimitiveType(initialRef.type))
75
+ return initialRef;
76
+ const validationSchemas = this.typeResolver.getValidationSchemaForPrimitive(initialRef.type);
77
+ // All validation schemas are pre-compiled as remote schemas and are referenced below
78
+ const fullValidationSchema = {
79
+ oneOf: validationSchemas.map((schema) => ({ $ref: `${schema.title}.json` })),
80
+ };
81
+ return this.schema.compileSchema(fullValidationSchema);
82
+ }
83
+ /**
84
+ * Validate an input value against a specified schema
85
+ * @throws {SchemaValidationError} if the input is invalid
86
+ * @returns true if the input is valid
87
+ */
88
+ validateInput(input, inputSchema = this.schema.rootSchema) {
89
+ inputSchema = this.schema.compileSchema(inputSchema);
90
+ const errors = this.schema.validate(input, inputSchema);
91
+ return (0, processValidationResult_1.processValidationResult)(errors);
92
+ }
93
+ /**
94
+ * Resolve an input object by replacing all resolvable shapes with their resolved values
95
+ * @param input any input object which matches the input schema
96
+ * @param inputSchema a JSONSchema which provides type information about the input object
97
+ * @returns the input object with all resolvable shapes resolved
98
+ */
99
+ async resolveInput(input, inputSchema) {
100
+ const setters = [];
101
+ this.schema.each(input, async (schema, value, pointer) => {
102
+ // Bug in library for Array item schemas which won't resolve the oneOf schema
103
+ if (Array.isArray(schema === null || schema === void 0 ? void 0 : schema.oneOf)) {
104
+ const oldSchema = schema;
105
+ schema = this.schema.resolveOneOf(value, schema);
106
+ schema.oneOfSchema = oldSchema;
107
+ }
108
+ if (!this.typeResolver.isResolvableSchema(schema))
109
+ return;
110
+ // If its a resolvable schema, it should exist in a oneOf array with other schemas
111
+ // Including a primitive schema
112
+ const allPossibleSchemaTitles = schema.oneOfSchema.oneOf.map((o) => o.$ref.replace('.json', ''));
113
+ const primitiveSchema = allPossibleSchemaTitles.find((title) => this.typeResolver.isPrimitiveType(title));
114
+ if (!primitiveSchema)
115
+ return;
116
+ const resolver = this.typeResolver.tryGetResolver(primitiveSchema, schema);
117
+ if (!resolver)
118
+ return;
119
+ const setResolvedData = Promise.resolve()
120
+ .then(() => resolver(value))
121
+ .then((resolvedData) => (item) => json_query_1.default.set(item, pointer, resolvedData, 'replace'))
122
+ .catch((e) => Promise.reject(new JsonResolutionError_1.JsonResolutionError(e, pointer, value)));
123
+ setters.push(setResolvedData);
124
+ }, inputSchema);
125
+ const potentialResolutionErrors = [];
126
+ for (const resolveResult of await Promise.allSettled(setters)) {
127
+ if (resolveResult.status === 'rejected') {
128
+ potentialResolutionErrors.push(resolveResult.reason);
129
+ continue;
130
+ }
131
+ input = resolveResult.value(input);
132
+ }
133
+ if (potentialResolutionErrors.length) {
134
+ throw new Error(`Error(s) occurred when resolving JSON:\n${potentialResolutionErrors.join('\n')}`);
135
+ }
136
+ return input;
137
+ }
138
+ }
139
+ exports.JSONSchemaService = JSONSchemaService;
140
+ //# sourceMappingURL=JsonSchemaService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JsonSchemaService.js","sourceRoot":"","sources":["../src/JsonSchemaService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};