@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.
- package/CHANGELOG.md +6 -0
- package/jest.config.ts +13 -2
- package/lib/JsonSchemaService.d.ts +34 -0
- package/lib/JsonSchemaService.js +140 -0
- package/lib/JsonSchemaService.js.map +1 -0
- package/lib/JsonSchemaService.spec.d.ts +1 -0
- package/lib/JsonSchemaService.spec.js +1807 -0
- package/lib/JsonSchemaService.spec.js.map +1 -0
- package/lib/JsonValidationService.d.ts +11 -33
- package/lib/JsonValidationService.js +43 -194
- package/lib/JsonValidationService.js.map +1 -1
- package/lib/JsonValidationService.spec.js +19 -1800
- package/lib/JsonValidationService.spec.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/jsonTypeResolution/TypeResolver.d.ts +0 -1
- package/lib/jsonTypeResolution/TypeResolver.js +0 -3
- package/lib/jsonTypeResolution/TypeResolver.js.map +1 -1
- package/lib/jsonTypeResolution/TypeResolver.spec.js +10 -0
- package/lib/jsonTypeResolution/TypeResolver.spec.js.map +1 -1
- package/lib/manifest/v1/DxComponentInputSchema.spec.js +18 -0
- package/lib/manifest/v1/DxComponentInputSchema.spec.js.map +1 -1
- package/lib/manifest/v1/DxContentMetaSchema.json +24 -32
- package/lib/manifest/v1/JobV1.d.ts +23 -18
- package/lib/manifest/v1/__test__/schemas/invalidUiMetadata.json +31 -0
- package/lib/manifest/v1/v1.d.ts +23 -18
- package/lib/manifest/v1/v1.spec.js +3 -66
- package/lib/manifest/v1/v1.spec.js.map +1 -1
- package/lib/processValidationResult.d.ts +2 -0
- package/lib/processValidationResult.js +24 -0
- package/lib/processValidationResult.js.map +1 -0
- package/lib/validators/customKeywordValidators.d.ts +2 -0
- package/lib/validators/customKeywordValidators.js +47 -0
- package/lib/validators/customKeywordValidators.js.map +1 -0
- package/lib/validators/customKeywordValidators.spec.d.ts +1 -0
- package/lib/validators/customKeywordValidators.spec.js +100 -0
- package/lib/validators/customKeywordValidators.spec.js.map +1 -0
- package/package.json +1 -1
- package/src/JsonSchemaService.spec.ts +2198 -0
- package/src/JsonSchemaService.ts +159 -0
- package/src/JsonValidationService.spec.ts +26 -2195
- package/src/JsonValidationService.ts +64 -226
- package/src/index.ts +1 -0
- package/src/jsonTypeResolution/TypeResolver.spec.ts +12 -0
- package/src/jsonTypeResolution/TypeResolver.ts +0 -4
- package/src/manifest/v1/DxComponentInputSchema.spec.ts +21 -0
- package/src/manifest/v1/DxContentMetaSchema.json +24 -32
- package/src/manifest/v1/JobV1.ts +23 -23
- package/src/manifest/v1/__test__/schemas/invalidUiMetadata.json +31 -0
- package/src/manifest/v1/v1.spec.ts +3 -73
- package/src/manifest/v1/v1.ts +23 -23
- package/src/processValidationResult.ts +20 -0
- package/src/validators/customKeywordValidators.spec.ts +171 -0
- package/src/validators/customKeywordValidators.ts +53 -0
- package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.processValidationResult = void 0;
|
4
|
+
const SchemaValidationError_1 = require("./errors/SchemaValidationError");
|
5
|
+
function processValidationResult(errors) {
|
6
|
+
if (errors.length > 0) {
|
7
|
+
const ValidationDataMap = errors.reduce((acc, error) => {
|
8
|
+
var _a;
|
9
|
+
const pointer = (_a = error === null || error === void 0 ? void 0 : error.data) === null || _a === void 0 ? void 0 : _a.pointer;
|
10
|
+
const validationData = {
|
11
|
+
message: error.message,
|
12
|
+
data: error.data,
|
13
|
+
};
|
14
|
+
Object.keys(acc).includes(pointer) && Array.isArray(acc[pointer])
|
15
|
+
? acc[pointer].push(validationData)
|
16
|
+
: (acc[pointer] = [validationData]);
|
17
|
+
return acc;
|
18
|
+
}, {});
|
19
|
+
throw new SchemaValidationError_1.SchemaValidationError(errors.map((a) => a.message).join(',\n'), undefined, ValidationDataMap);
|
20
|
+
}
|
21
|
+
return true;
|
22
|
+
}
|
23
|
+
exports.processValidationResult = processValidationResult;
|
24
|
+
//# sourceMappingURL=processValidationResult.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"processValidationResult.js","sourceRoot":"","sources":["../src/processValidationResult.ts"],"names":[],"mappings":";;;AACA,0EAA0G;AAE1G,SAAgB,uBAAuB,CAAC,MAAmB;IACzD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;QACrB,MAAM,iBAAiB,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAsB,EAAE,KAAgB,EAAE,EAAE;;YACtG,MAAM,OAAO,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,IAAI,0CAAE,OAAO,CAAC;YACrC,MAAM,cAAc,GAAmB;gBACrC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;aACjB,CAAC;YACF,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC/D,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC;gBACnC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;YACtC,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,IAAI,6CAAqB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;KACzG;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAhBD,0DAgBC"}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.customKeywordValidators = void 0;
|
4
|
+
exports.customKeywordValidators = {
|
5
|
+
'ui:metadata': (core, schema, value, pointer) => {
|
6
|
+
const fieldValue = value;
|
7
|
+
const uiMetadata = fieldValue['ui:metadata'];
|
8
|
+
if (uiMetadata === null || uiMetadata === void 0 ? void 0 : uiMetadata.quickOption) {
|
9
|
+
if (!fieldValue.enum) {
|
10
|
+
const error = {
|
11
|
+
name: 'uiMetadataError',
|
12
|
+
code: 'uiMetadata-error',
|
13
|
+
type: 'error',
|
14
|
+
message: `ui:metadata property quickOption is only valid for enum based properties.`,
|
15
|
+
data: { expected: 'enum', pointer: pointer, received: typeof value, value: value },
|
16
|
+
};
|
17
|
+
return [error];
|
18
|
+
}
|
19
|
+
}
|
20
|
+
if (uiMetadata === null || uiMetadata === void 0 ? void 0 : uiMetadata.enumWidget) {
|
21
|
+
if (!fieldValue.enum) {
|
22
|
+
const error = {
|
23
|
+
name: 'uiMetadataError',
|
24
|
+
code: 'uiMetadata-error',
|
25
|
+
type: 'error',
|
26
|
+
message: `ui:metadata property enumWidget is only valid for enum based properties.`,
|
27
|
+
data: { expected: 'enum', pointer: pointer, received: typeof value, value: value },
|
28
|
+
};
|
29
|
+
return [error];
|
30
|
+
}
|
31
|
+
}
|
32
|
+
if (uiMetadata === null || uiMetadata === void 0 ? void 0 : uiMetadata.collapsedByDefault) {
|
33
|
+
if (fieldValue.type !== 'object') {
|
34
|
+
const error = {
|
35
|
+
name: 'uiMetadataError',
|
36
|
+
code: 'uiMetadata-error',
|
37
|
+
type: 'error',
|
38
|
+
message: `ui:metadata property collapsedByDefault is only valid for object properties.`,
|
39
|
+
data: { expected: 'object', pointer: pointer, received: typeof value, value: value },
|
40
|
+
};
|
41
|
+
return [error];
|
42
|
+
}
|
43
|
+
}
|
44
|
+
return undefined;
|
45
|
+
},
|
46
|
+
};
|
47
|
+
//# sourceMappingURL=customKeywordValidators.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"customKeywordValidators.js","sourceRoot":"","sources":["../../src/validators/customKeywordValidators.ts"],"names":[],"mappings":";;;AAGa,QAAA,uBAAuB,GAGhC;IACF,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAA2B,EAAE;QACvE,MAAM,UAAU,GAAG,KAA6B,CAAC;QACjD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;QAE7C,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,WAAW,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBACpB,MAAM,KAAK,GAAc;oBACvB,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,2EAA2E;oBACpF,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;iBACnF,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;SACF;QAED,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,UAAU,EAAE;YAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;gBACpB,MAAM,KAAK,GAAc;oBACvB,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,0EAA0E;oBACnF,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;iBACnF,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;SACF;QAED,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,kBAAkB,EAAE;YAClC,IAAI,UAAU,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAChC,MAAM,KAAK,GAAc;oBACvB,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,kBAAkB;oBACxB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,8EAA8E;oBACvF,IAAI,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;iBACrF,CAAC;gBACF,OAAO,CAAC,KAAK,CAAC,CAAC;aAChB;SACF;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,100 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const customKeywordValidators_1 = require("./customKeywordValidators");
|
4
|
+
describe('customKeywordValidators', () => {
|
5
|
+
describe('ui:metadata', () => {
|
6
|
+
it('no ui:metadata is valid', () => {
|
7
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
8
|
+
// eslint-disable-next-line
|
9
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
10
|
+
null, null, {}, '#/functions/0/input/properties/users-contact');
|
11
|
+
expect(result).toBe(undefined);
|
12
|
+
});
|
13
|
+
it('no quickOption without enum is valid', () => {
|
14
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
15
|
+
// eslint-disable-next-line
|
16
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
17
|
+
null, null, { 'ui:metadata': {} }, '#/functions/0/input/properties/users-contact');
|
18
|
+
expect(result).toBe(undefined);
|
19
|
+
});
|
20
|
+
it('quickOption is valid on enum', () => {
|
21
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
22
|
+
// eslint-disable-next-line
|
23
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
24
|
+
null, null, { enum: ['north', 'south'], 'ui:metadata': { quickOption: true } }, '#/functions/0/input/properties/users-contact');
|
25
|
+
expect(result).toBe(undefined);
|
26
|
+
});
|
27
|
+
it('quickOption:false is valid without enum', () => {
|
28
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
29
|
+
// eslint-disable-next-line
|
30
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
31
|
+
null, null, { 'ui:metadata': { quickOption: false } }, '#/functions/0/input/properties/users-contact');
|
32
|
+
expect(result).toBe(undefined);
|
33
|
+
});
|
34
|
+
it('quickOption:false is valid with enum', () => {
|
35
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
36
|
+
// eslint-disable-next-line
|
37
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
38
|
+
null, null, { enum: ['north', 'south'], 'ui:metadata': { quickOption: false } }, '#/functions/0/input/properties/users-contact');
|
39
|
+
expect(result).toBe(undefined);
|
40
|
+
});
|
41
|
+
it('quickOption:true is not valid without enum', () => {
|
42
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
43
|
+
// eslint-disable-next-line
|
44
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
45
|
+
null, null, { 'ui:metadata': { quickOption: true } }, '#/functions/0/input/properties/users-contact');
|
46
|
+
const error = Array.isArray(result) ? result[0] : result;
|
47
|
+
expect(result).not.toEqual(undefined);
|
48
|
+
expect(error).toEqual(expect.objectContaining({
|
49
|
+
name: 'uiMetadataError',
|
50
|
+
code: 'uiMetadata-error',
|
51
|
+
type: 'error',
|
52
|
+
}));
|
53
|
+
});
|
54
|
+
it('quickOption:true is valid with empty enum', () => {
|
55
|
+
// Enums being empty is a separate JSON schema rule / validation issue
|
56
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
57
|
+
// eslint-disable-next-line
|
58
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
59
|
+
null, null, { enum: [], 'ui:metadata': { quickOption: true } }, '#/functions/0/input/properties/users-contact');
|
60
|
+
expect(result).toEqual(undefined);
|
61
|
+
});
|
62
|
+
it.each(['radio', 'dropdown'])('enumWidget:%s is valid with enum', (enumWidget) => {
|
63
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
64
|
+
// eslint-disable-next-line
|
65
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
66
|
+
null, null, { enum: [], 'ui:metadata': { enumWidget } }, '#/functions/0/input/properties/users-contact');
|
67
|
+
expect(result).toEqual(undefined);
|
68
|
+
});
|
69
|
+
it('enumWidget is invalid without enum', () => {
|
70
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
71
|
+
// eslint-disable-next-line
|
72
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
73
|
+
null, null, { 'ui:metadata': { enumWidget: 'radio' } }, '#/functions/0/input/properties/users-contact');
|
74
|
+
expect(result).toContainEqual(expect.objectContaining({
|
75
|
+
name: 'uiMetadataError',
|
76
|
+
code: 'uiMetadata-error',
|
77
|
+
type: 'error',
|
78
|
+
}));
|
79
|
+
});
|
80
|
+
it('collapsedByDefault is valid with object property', () => {
|
81
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
82
|
+
// eslint-disable-next-line
|
83
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
84
|
+
null, null, { type: 'object', 'ui:metadata': { collapsedByDefault: true } }, '#/functions/0/input/properties/users-contact');
|
85
|
+
expect(result).toEqual(undefined);
|
86
|
+
});
|
87
|
+
it('collapsedByDefault is invalid for non-object properties', () => {
|
88
|
+
const result = customKeywordValidators_1.customKeywordValidators['ui:metadata'](
|
89
|
+
// eslint-disable-next-line
|
90
|
+
// @ts-ignore - the null properties aren't used in this keyword validation
|
91
|
+
null, null, { type: 'string', 'ui:metadata': { collapsedByDefault: true } }, '#/functions/0/input/properties/users-contact');
|
92
|
+
expect(result).toContainEqual(expect.objectContaining({
|
93
|
+
name: 'uiMetadataError',
|
94
|
+
code: 'uiMetadata-error',
|
95
|
+
type: 'error',
|
96
|
+
}));
|
97
|
+
});
|
98
|
+
});
|
99
|
+
});
|
100
|
+
//# sourceMappingURL=customKeywordValidators.spec.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"customKeywordValidators.spec.js","sourceRoot":"","sources":["../../src/validators/customKeywordValidators.spec.ts"],"names":[],"mappings":"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"}
|