@sanity/validation 2.30.0 → 2.30.1-dev-preview.1013
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{dist/dts → lib/dts/src}/Rule.d.ts +3 -3
- package/lib/dts/src/Rule.d.ts.map +1 -0
- package/lib/dts/src/Rule.js +336 -0
- package/lib/dts/src/Rule.js.map +1 -0
- package/{dist/dts → lib/dts/src}/ValidationError.d.ts +3 -3
- package/lib/dts/src/ValidationError.d.ts.map +1 -0
- package/lib/dts/src/ValidationError.js +18 -0
- package/lib/dts/src/ValidationError.js.map +1 -0
- package/{dist/dts → lib/dts/src}/index.d.ts +12 -12
- package/lib/dts/src/index.d.ts.map +1 -0
- package/lib/dts/src/index.js +7 -0
- package/lib/dts/src/index.js.map +1 -0
- package/{dist/dts → lib/dts/src}/inferFromSchema.d.ts +3 -3
- package/lib/dts/src/inferFromSchema.d.ts.map +1 -0
- package/lib/dts/src/inferFromSchema.js +14 -0
- package/lib/dts/src/inferFromSchema.js.map +1 -0
- package/{dist/dts → lib/dts/src}/inferFromSchemaType.d.ts +4 -4
- package/lib/dts/src/inferFromSchemaType.d.ts.map +1 -0
- package/lib/dts/src/inferFromSchemaType.js +33 -0
- package/lib/dts/src/inferFromSchemaType.js.map +1 -0
- package/{dist/dts → lib/dts/src}/util/convertToValidationMarker.d.ts +5 -5
- package/lib/dts/src/util/convertToValidationMarker.d.ts.map +1 -0
- package/lib/dts/src/util/convertToValidationMarker.js +51 -0
- package/lib/dts/src/util/convertToValidationMarker.js.map +1 -0
- package/{dist/dts → lib/dts/src}/util/deepEquals.d.ts +5 -5
- package/lib/dts/src/util/deepEquals.d.ts.map +1 -0
- package/lib/dts/src/util/deepEquals.js +65 -0
- package/lib/dts/src/util/deepEquals.js.map +1 -0
- package/{dist/dts → lib/dts/src}/util/escapeRegex.d.ts +2 -2
- package/lib/dts/src/util/escapeRegex.d.ts.map +1 -0
- package/lib/dts/src/util/escapeRegex.js +6 -0
- package/lib/dts/src/util/escapeRegex.js.map +1 -0
- package/{dist/dts → lib/dts/src}/util/normalizeValidationRules.d.ts +5 -5
- package/lib/dts/src/util/normalizeValidationRules.d.ts.map +1 -0
- package/lib/dts/src/util/normalizeValidationRules.js +104 -0
- package/lib/dts/src/util/normalizeValidationRules.js.map +1 -0
- package/{dist/dts → lib/dts/src}/util/normalizeValidationRules.test.d.ts +0 -0
- package/lib/dts/src/util/normalizeValidationRules.test.d.ts.map +1 -0
- package/lib/dts/src/util/normalizeValidationRules.test.js +150 -0
- package/lib/dts/src/util/normalizeValidationRules.test.js.map +1 -0
- package/{dist/dts → lib/dts/src}/util/pathToString.d.ts +2 -2
- package/lib/dts/src/util/pathToString.d.ts.map +1 -0
- package/lib/dts/src/util/pathToString.js +18 -0
- package/lib/dts/src/util/pathToString.js.map +1 -0
- package/{dist/dts → lib/dts/src}/util/typeString.d.ts +1 -1
- package/lib/dts/src/util/typeString.d.ts.map +1 -0
- package/lib/dts/src/util/typeString.js +23 -0
- package/lib/dts/src/util/typeString.js.map +1 -0
- package/{dist/dts → lib/dts/src}/util/typeString.test.d.ts +0 -0
- package/lib/dts/src/util/typeString.test.d.ts.map +1 -0
- package/lib/dts/src/util/typeString.test.js +24 -0
- package/lib/dts/src/util/typeString.test.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validateDocument.d.ts +22 -21
- package/lib/dts/src/validateDocument.d.ts.map +1 -0
- package/lib/dts/src/validateDocument.js +142 -0
- package/lib/dts/src/validateDocument.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validateDocument.test.d.ts +0 -0
- package/lib/dts/src/validateDocument.test.d.ts.map +1 -0
- package/lib/dts/src/validateDocument.test.js +703 -0
- package/lib/dts/src/validateDocument.test.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validators/arrayValidator.d.ts +3 -3
- package/lib/dts/src/validators/arrayValidator.d.ts.map +1 -0
- package/lib/dts/src/validators/arrayValidator.js +79 -0
- package/lib/dts/src/validators/arrayValidator.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validators/booleanValidator.d.ts +3 -3
- package/lib/dts/src/validators/booleanValidator.d.ts.map +1 -0
- package/lib/dts/src/validators/booleanValidator.js +12 -0
- package/lib/dts/src/validators/booleanValidator.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validators/dateValidator.d.ts +4 -4
- package/lib/dts/src/validators/dateValidator.d.ts.map +1 -0
- package/lib/dts/src/validators/dateValidator.js +83 -0
- package/lib/dts/src/validators/dateValidator.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validators/genericValidator.d.ts +3 -3
- package/lib/dts/src/validators/genericValidator.d.ts.map +1 -0
- package/lib/dts/src/validators/genericValidator.js +93 -0
- package/lib/dts/src/validators/genericValidator.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validators/numberValidator.d.ts +3 -3
- package/lib/dts/src/validators/numberValidator.d.ts.map +1 -0
- package/lib/dts/src/validators/numberValidator.js +47 -0
- package/lib/dts/src/validators/numberValidator.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validators/objectValidator.d.ts +3 -3
- package/lib/dts/src/validators/objectValidator.d.ts.map +1 -0
- package/lib/dts/src/validators/objectValidator.js +48 -0
- package/lib/dts/src/validators/objectValidator.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validators/slugValidator.d.ts +8 -8
- package/lib/dts/src/validators/slugValidator.d.ts.map +1 -0
- package/lib/dts/src/validators/slugValidator.js +83 -0
- package/lib/dts/src/validators/slugValidator.js.map +1 -0
- package/{dist/dts → lib/dts/src}/validators/stringValidator.d.ts +3 -3
- package/lib/dts/src/validators/stringValidator.d.ts.map +1 -0
- package/lib/dts/src/validators/stringValidator.js +94 -0
- package/lib/dts/src/validators/stringValidator.js.map +1 -0
- package/lib/dts/test/array.test.d.ts +2 -0
- package/lib/dts/test/array.test.d.ts.map +1 -0
- package/lib/dts/test/array.test.js +55 -0
- package/lib/dts/test/array.test.js.map +1 -0
- package/lib/dts/test/children.test.d.ts +2 -0
- package/lib/dts/test/children.test.d.ts.map +1 -0
- package/lib/dts/test/children.test.js +70 -0
- package/lib/dts/test/children.test.js.map +1 -0
- package/lib/dts/test/createSchema.d.ts +6 -0
- package/lib/dts/test/createSchema.d.ts.map +1 -0
- package/lib/dts/test/createSchema.js +19 -0
- package/lib/dts/test/createSchema.js.map +1 -0
- package/lib/dts/test/generics.test.d.ts +2 -0
- package/lib/dts/test/generics.test.d.ts.map +1 -0
- package/lib/dts/test/generics.test.js +60 -0
- package/lib/dts/test/generics.test.js.map +1 -0
- package/lib/dts/test/infer.test.d.ts +2 -0
- package/lib/dts/test/infer.test.d.ts.map +1 -0
- package/lib/dts/test/infer.test.js +243 -0
- package/lib/dts/test/infer.test.js.map +1 -0
- package/lib/dts/test/mocks/mockSanityClient.d.ts +6 -0
- package/lib/dts/test/mocks/mockSanityClient.d.ts.map +1 -0
- package/lib/dts/test/mocks/mockSanityClient.js +8 -0
- package/lib/dts/test/mocks/mockSanityClient.js.map +1 -0
- package/lib/dts/test/nullExport.d.ts +3 -0
- package/lib/dts/test/nullExport.d.ts.map +1 -0
- package/lib/dts/test/nullExport.js +4 -0
- package/lib/dts/test/nullExport.js.map +1 -0
- package/lib/dts/test/numbers.test.d.ts +2 -0
- package/lib/dts/test/numbers.test.d.ts.map +1 -0
- package/lib/dts/test/numbers.test.js +57 -0
- package/lib/dts/test/numbers.test.js.map +1 -0
- package/lib/dts/test/strings.test.d.ts +2 -0
- package/lib/dts/test/strings.test.d.ts.map +1 -0
- package/lib/dts/test/strings.test.js +100 -0
- package/lib/dts/test/strings.test.js.map +1 -0
- package/lib/dts/tsconfig.lib.tsbuildinfo +1 -0
- package/lib/dts/tsconfig.tsbuildinfo +1 -0
- package/lib/index.cjs +1318 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.js +1308 -48
- package/lib/index.js.map +1 -0
- package/package.json +21 -11
- package/src/Rule.ts +6 -2
- package/src/inferFromSchema.ts +7 -1
- package/src/util/convertToValidationMarker.ts +5 -3
- package/src/validateDocument.test.ts +22 -23
- package/src/validateDocument.ts +3 -1
- package/src/validators/dateValidator.ts +4 -4
- package/src/validators/slugValidator.ts +3 -3
- package/src/validators/stringValidator.ts +2 -1
- package/dist/dts/Rule.d.ts.map +0 -1
- package/dist/dts/ValidationError.d.ts.map +0 -1
- package/dist/dts/getClient.d.ts +0 -3
- package/dist/dts/getClient.d.ts.map +0 -1
- package/dist/dts/index.d.ts.map +0 -1
- package/dist/dts/inferFromSchema.d.ts.map +0 -1
- package/dist/dts/inferFromSchemaType.d.ts.map +0 -1
- package/dist/dts/util/convertToValidationMarker.d.ts.map +0 -1
- package/dist/dts/util/deepEquals.d.ts.map +0 -1
- package/dist/dts/util/escapeRegex.d.ts.map +0 -1
- package/dist/dts/util/normalizeValidationRules.d.ts.map +0 -1
- package/dist/dts/util/normalizeValidationRules.test.d.ts.map +0 -1
- package/dist/dts/util/pathToString.d.ts.map +0 -1
- package/dist/dts/util/typeString.d.ts.map +0 -1
- package/dist/dts/util/typeString.test.d.ts.map +0 -1
- package/dist/dts/validateDocument.d.ts.map +0 -1
- package/dist/dts/validateDocument.test.d.ts.map +0 -1
- package/dist/dts/validators/arrayValidator.d.ts.map +0 -1
- package/dist/dts/validators/booleanValidator.d.ts.map +0 -1
- package/dist/dts/validators/dateValidator.d.ts.map +0 -1
- package/dist/dts/validators/genericValidator.d.ts.map +0 -1
- package/dist/dts/validators/numberValidator.d.ts.map +0 -1
- package/dist/dts/validators/objectValidator.d.ts.map +0 -1
- package/dist/dts/validators/slugValidator.d.ts.map +0 -1
- package/dist/dts/validators/stringValidator.d.ts.map +0 -1
- package/jest.config.js +0 -5
- package/lib/Rule.js +0 -491
- package/lib/ValidationError.js +0 -39
- package/lib/getClient.js +0 -20
- package/lib/inferFromSchema.js +0 -22
- package/lib/inferFromSchemaType.js +0 -86
- package/lib/util/convertToValidationMarker.js +0 -65
- package/lib/util/deepEquals.js +0 -87
- package/lib/util/escapeRegex.js +0 -14
- package/lib/util/normalizeValidationRules.js +0 -115
- package/lib/util/pathToString.js +0 -30
- package/lib/util/typeString.js +0 -29
- package/lib/validateDocument.js +0 -231
- package/lib/validators/arrayValidator.js +0 -123
- package/lib/validators/booleanValidator.js +0 -29
- package/lib/validators/dateValidator.js +0 -120
- package/lib/validators/genericValidator.js +0 -135
- package/lib/validators/numberValidator.js +0 -70
- package/lib/validators/objectValidator.js +0 -93
- package/lib/validators/slugValidator.js +0 -133
- package/lib/validators/stringValidator.js +0 -131
- package/src/getClient.ts +0 -13
- package/tsconfig.json +0 -10
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modified version of fast-deep-equal (https://github.com/epoberezkin/fast-deep-equal)
|
|
3
|
+
* MIT-licensed, copyright (c) 2017 Evgeny Poberezkin
|
|
4
|
+
**/
|
|
5
|
+
// NOTE: when converting to typescript, some of the checks were inlined (vs
|
|
6
|
+
// having them in a variable) because the type predicate type narrowing only
|
|
7
|
+
// works when type predicate is called inline in the condition that starts the
|
|
8
|
+
// control flow branch.
|
|
9
|
+
// see here: https://www.typescriptlang.org/docs/handbook/2/narrowing.html
|
|
10
|
+
export default function deepEquals(a, b) {
|
|
11
|
+
if (a === b) {
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
15
|
+
if (a.length != b.length)
|
|
16
|
+
return false;
|
|
17
|
+
for (let i = 0; i < a.length; i++) {
|
|
18
|
+
if (!deepEquals(a[i], b[i])) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
if (Array.isArray(a) != Array.isArray(b)) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
if (a && b && typeof a === 'object' && typeof b === 'object') {
|
|
28
|
+
const keys = Object.keys(a);
|
|
29
|
+
if (keys.length !== Object.keys(b).length) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (a instanceof Date && b instanceof Date) {
|
|
33
|
+
return a.getTime() === b.getTime();
|
|
34
|
+
}
|
|
35
|
+
if (a instanceof Date != b instanceof Date) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
if (a instanceof RegExp && b instanceof RegExp) {
|
|
39
|
+
return a.toString() == b.toString();
|
|
40
|
+
}
|
|
41
|
+
if (a instanceof RegExp != b instanceof RegExp) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
for (let i = 0; i < keys.length; i++) {
|
|
45
|
+
if (keys[i] === '_key') {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (!Object.prototype.hasOwnProperty.call(b, keys[i])) {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
for (let i = 0; i < keys.length; i++) {
|
|
53
|
+
const key = keys[i];
|
|
54
|
+
if (key === '_key') {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (!deepEquals(a[key], b[key])) {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=deepEquals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deepEquals.js","sourceRoot":"","sources":["../../../../src/util/deepEquals.ts"],"names":[],"mappings":"AAAA;;;IAGI;AAEJ,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAC9E,uBAAuB;AACvB,0EAA0E;AAC1E,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,CAAU,EAAE,CAAU;IACvD,IAAI,CAAC,KAAK,CAAC,EAAE;QACX,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACxC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAA;QACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACjC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gBAC3B,OAAO,KAAK,CAAA;aACb;SACF;QACD,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACxC,OAAO,KAAK,CAAA;KACb;IAED,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAC3B,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;YACzC,OAAO,KAAK,CAAA;SACb;QAED,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;YAC1C,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;SACnC;QAED,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;YAC1C,OAAO,KAAK,CAAA;SACb;QAED,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,YAAY,MAAM,EAAE;YAC9C,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;SACpC;QAED,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,YAAY,MAAM,EAAE;YAC9C,OAAO,KAAK,CAAA;SACb;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;gBACtB,SAAQ;aACT;YAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE;gBACrD,OAAO,KAAK,CAAA;aACb;SACF;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAmB,CAAA;YACrC,IAAI,GAAG,KAAK,MAAM,EAAE;gBAClB,SAAQ;aACT;YAED,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC/B,OAAO,KAAK,CAAA;aACb;SACF;QAED,OAAO,IAAI,CAAA;KACZ;IAED,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
declare const _default: (string: string) => string;
|
|
2
|
-
export default _default;
|
|
1
|
+
declare const _default: (string: string) => string;
|
|
2
|
+
export default _default;
|
|
3
3
|
//# sourceMappingURL=escapeRegex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escapeRegex.d.ts","sourceRoot":"","sources":["../../../../src/util/escapeRegex.ts"],"names":[],"mappings":"iCACwB,MAAM,KAAG,MAAM;AAAvC,wBAGC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escapeRegex.js","sourceRoot":"","sources":["../../../../src/util/escapeRegex.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,eAAe,CAAC,MAAc,EAAU,EAAE;IACxC,8BAA8B;IAC9B,OAAO,MAAM,CAAC,OAAO,CAAC,6CAA6C,EAAE,MAAM,CAAC,CAAA;AAC9E,CAAC,CAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SchemaType, Rule } from '@sanity/types';
|
|
2
|
-
/**
|
|
3
|
-
* Takes in `SchemaValidationValue` and returns an array of `Rule` instances.
|
|
4
|
-
*/
|
|
5
|
-
export default function normalizeValidationRules(typeDef: SchemaType | undefined): Rule[];
|
|
1
|
+
import { SchemaType, Rule } from '@sanity/types';
|
|
2
|
+
/**
|
|
3
|
+
* Takes in `SchemaValidationValue` and returns an array of `Rule` instances.
|
|
4
|
+
*/
|
|
5
|
+
export default function normalizeValidationRules(typeDef: SchemaType | undefined): Rule[];
|
|
6
6
|
//# sourceMappingURL=normalizeValidationRules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeValidationRules.d.ts","sourceRoot":"","sources":["../../../../src/util/normalizeValidationRules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAAE,IAAI,EAAqB,MAAM,eAAe,CAAA;AA6ElE;;GAEG;AACH,MAAM,CAAC,OAAO,UAAU,wBAAwB,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,EAAE,CAqCxF"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import RuleClass from '../Rule';
|
|
2
|
+
import { slugValidator } from '../validators/slugValidator';
|
|
3
|
+
const ruleConstraintTypes = {
|
|
4
|
+
array: true,
|
|
5
|
+
boolean: true,
|
|
6
|
+
date: true,
|
|
7
|
+
number: true,
|
|
8
|
+
object: true,
|
|
9
|
+
string: true,
|
|
10
|
+
};
|
|
11
|
+
const isRuleConstraint = (typeString) => typeString in ruleConstraintTypes;
|
|
12
|
+
function getTypeChain(type, visited) {
|
|
13
|
+
if (!type)
|
|
14
|
+
return [];
|
|
15
|
+
if (visited.has(type))
|
|
16
|
+
return [];
|
|
17
|
+
visited.add(type);
|
|
18
|
+
const next = type.type ? getTypeChain(type.type, visited) : [];
|
|
19
|
+
return [...next, type];
|
|
20
|
+
}
|
|
21
|
+
function baseRuleReducer(inputRule, type) {
|
|
22
|
+
let baseRule = inputRule;
|
|
23
|
+
if (isRuleConstraint(type.jsonType)) {
|
|
24
|
+
baseRule = baseRule.type(type.jsonType);
|
|
25
|
+
}
|
|
26
|
+
const typeOptionsList =
|
|
27
|
+
// if type.options is truthy
|
|
28
|
+
type?.options &&
|
|
29
|
+
// and type.options is an object (non-null from the previous)
|
|
30
|
+
typeof type.options === 'object' &&
|
|
31
|
+
// and if `list` is in options
|
|
32
|
+
'list' in type.options &&
|
|
33
|
+
// then finally access the list
|
|
34
|
+
type.options.list;
|
|
35
|
+
if (Array.isArray(typeOptionsList)) {
|
|
36
|
+
baseRule = baseRule.valid(typeOptionsList.map((option) => extractValueFromListOption(option, type)));
|
|
37
|
+
}
|
|
38
|
+
if (type.name === 'datetime')
|
|
39
|
+
return baseRule.type('Date');
|
|
40
|
+
if (type.name === 'date')
|
|
41
|
+
return baseRule.type('Date');
|
|
42
|
+
if (type.name === 'url')
|
|
43
|
+
return baseRule.uri();
|
|
44
|
+
if (type.name === 'slug')
|
|
45
|
+
return baseRule.custom(slugValidator);
|
|
46
|
+
if (type.name === 'reference')
|
|
47
|
+
return baseRule.reference();
|
|
48
|
+
if (type.name === 'email')
|
|
49
|
+
return baseRule.email();
|
|
50
|
+
return baseRule;
|
|
51
|
+
}
|
|
52
|
+
function hasValueField(typeDef) {
|
|
53
|
+
if (!typeDef)
|
|
54
|
+
return false;
|
|
55
|
+
if (!('fields' in typeDef) && typeDef.type)
|
|
56
|
+
return hasValueField(typeDef.type);
|
|
57
|
+
if (!('fields' in typeDef))
|
|
58
|
+
return false;
|
|
59
|
+
if (!Array.isArray(typeDef.fields))
|
|
60
|
+
return false;
|
|
61
|
+
return typeDef.fields.some((field) => field.name === 'value');
|
|
62
|
+
}
|
|
63
|
+
function extractValueFromListOption(option, typeDef) {
|
|
64
|
+
// If you define a `list` option with object items, where the item has a `value` field,
|
|
65
|
+
// we don't want to treat that as the value but rather the surrounding object
|
|
66
|
+
// This differs from the case where you have a title/value pair setup for a string/number, for instance
|
|
67
|
+
if (typeDef.jsonType === 'object' && hasValueField(typeDef))
|
|
68
|
+
return option;
|
|
69
|
+
return option.value === undefined
|
|
70
|
+
? option
|
|
71
|
+
: option.value;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Takes in `SchemaValidationValue` and returns an array of `Rule` instances.
|
|
75
|
+
*/
|
|
76
|
+
export default function normalizeValidationRules(typeDef) {
|
|
77
|
+
if (!typeDef) {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
const validation = typeDef.validation;
|
|
81
|
+
if (Array.isArray(validation)) {
|
|
82
|
+
return validation.flatMap((i) => normalizeValidationRules({
|
|
83
|
+
...typeDef,
|
|
84
|
+
validation: i,
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
if (validation instanceof RuleClass) {
|
|
88
|
+
return [validation];
|
|
89
|
+
}
|
|
90
|
+
const baseRule =
|
|
91
|
+
// using an object + Object.values to de-dupe the type chain by type name
|
|
92
|
+
Object.values(getTypeChain(typeDef, new Set()).reduce((acc, type) => {
|
|
93
|
+
acc[type.name] = type;
|
|
94
|
+
return acc;
|
|
95
|
+
}, {})).reduce(baseRuleReducer, new RuleClass(typeDef));
|
|
96
|
+
if (!validation) {
|
|
97
|
+
return [baseRule];
|
|
98
|
+
}
|
|
99
|
+
return normalizeValidationRules({
|
|
100
|
+
...typeDef,
|
|
101
|
+
validation: validation(baseRule),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=normalizeValidationRules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeValidationRules.js","sourceRoot":"","sources":["../../../../src/util/normalizeValidationRules.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeValidationRules.test.d.ts","sourceRoot":"","sources":["../../../../src/util/normalizeValidationRules.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import RuleClass from '../Rule';
|
|
2
|
+
import normalizeValidationRules from './normalizeValidationRules';
|
|
3
|
+
describe('normalizeValidationRules', () => {
|
|
4
|
+
// see `infer.test.ts` for more related tests.
|
|
5
|
+
// note the Schema.compile runs this function indirectly via `inferFromSchema`
|
|
6
|
+
it('utilizes schema types to infer base rules', () => {
|
|
7
|
+
const coolNumberType = {
|
|
8
|
+
jsonType: 'number',
|
|
9
|
+
name: 'coolNumber',
|
|
10
|
+
};
|
|
11
|
+
const rules = normalizeValidationRules(coolNumberType);
|
|
12
|
+
expect(rules).toHaveLength(1);
|
|
13
|
+
const [rule] = rules;
|
|
14
|
+
expect(rule).toBeInstanceOf(RuleClass);
|
|
15
|
+
expect(rule._rules).toMatchObject([
|
|
16
|
+
{
|
|
17
|
+
constraint: 'Number',
|
|
18
|
+
flag: 'type',
|
|
19
|
+
},
|
|
20
|
+
]);
|
|
21
|
+
});
|
|
22
|
+
it('follows the type chain to determine the base rule', () => {
|
|
23
|
+
const sickDatetime = {
|
|
24
|
+
type: {
|
|
25
|
+
type: {
|
|
26
|
+
jsonType: 'string',
|
|
27
|
+
},
|
|
28
|
+
name: 'datetime',
|
|
29
|
+
},
|
|
30
|
+
name: 'sickDatetime',
|
|
31
|
+
};
|
|
32
|
+
const rules = normalizeValidationRules(sickDatetime);
|
|
33
|
+
expect(rules).toHaveLength(1);
|
|
34
|
+
const [rule] = rules;
|
|
35
|
+
// type chain is applied from inner to outer so the resulting type should be
|
|
36
|
+
// date instead of string
|
|
37
|
+
expect(rule._rules).toMatchObject([
|
|
38
|
+
{
|
|
39
|
+
constraint: 'Date',
|
|
40
|
+
flag: 'type',
|
|
41
|
+
},
|
|
42
|
+
]);
|
|
43
|
+
});
|
|
44
|
+
it('converts a validation function to a rule instance', () => {
|
|
45
|
+
const coolStringType = {
|
|
46
|
+
jsonType: 'string',
|
|
47
|
+
name: 'coolString',
|
|
48
|
+
validation: (rule) => rule.uppercase(),
|
|
49
|
+
};
|
|
50
|
+
const rules = normalizeValidationRules(coolStringType);
|
|
51
|
+
expect(rules).toHaveLength(1);
|
|
52
|
+
const [rule] = rules;
|
|
53
|
+
expect(rule).toBeInstanceOf(RuleClass);
|
|
54
|
+
expect(rule._rules).toMatchObject([
|
|
55
|
+
{
|
|
56
|
+
constraint: 'String',
|
|
57
|
+
flag: 'type',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
constraint: 'uppercase',
|
|
61
|
+
flag: 'stringCasing',
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
});
|
|
65
|
+
it('converts falsy values to an empty array', () => {
|
|
66
|
+
expect(normalizeValidationRules(undefined)).toEqual([]);
|
|
67
|
+
});
|
|
68
|
+
it('converts schema list options with titles to `rule.valid` constraints', () => {
|
|
69
|
+
const stringTypeWithOptions = {
|
|
70
|
+
jsonType: 'string',
|
|
71
|
+
name: 'stringTypeWithOptions',
|
|
72
|
+
options: {
|
|
73
|
+
list: [
|
|
74
|
+
{ title: 'Blue', value: 'blue' },
|
|
75
|
+
{ title: 'Red', value: 'red' },
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
const rules = normalizeValidationRules(stringTypeWithOptions);
|
|
80
|
+
expect(rules).toHaveLength(1);
|
|
81
|
+
const [rule] = rules;
|
|
82
|
+
expect(rule).toBeInstanceOf(RuleClass);
|
|
83
|
+
expect(rule._rules).toMatchObject([
|
|
84
|
+
{
|
|
85
|
+
constraint: 'String',
|
|
86
|
+
flag: 'type',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
constraint: ['blue', 'red'],
|
|
90
|
+
flag: 'valid',
|
|
91
|
+
},
|
|
92
|
+
]);
|
|
93
|
+
});
|
|
94
|
+
it('converts schema list options with strings only to `rule.valid` constraints', () => {
|
|
95
|
+
const stringTypeWithOptions = {
|
|
96
|
+
jsonType: 'string',
|
|
97
|
+
name: 'stringTypeWithOptions',
|
|
98
|
+
options: {
|
|
99
|
+
list: ['blue', 'red'],
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
const rules = normalizeValidationRules(stringTypeWithOptions);
|
|
103
|
+
expect(rules).toHaveLength(1);
|
|
104
|
+
const [rule] = rules;
|
|
105
|
+
expect(rule).toBeInstanceOf(RuleClass);
|
|
106
|
+
expect(rule._rules).toMatchObject([
|
|
107
|
+
{
|
|
108
|
+
constraint: 'String',
|
|
109
|
+
flag: 'type',
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
constraint: ['blue', 'red'],
|
|
113
|
+
flag: 'valid',
|
|
114
|
+
},
|
|
115
|
+
]);
|
|
116
|
+
});
|
|
117
|
+
it('converts arrays of validation', () => {
|
|
118
|
+
const coolNumberType = {
|
|
119
|
+
jsonType: 'number',
|
|
120
|
+
name: 'coolNumber',
|
|
121
|
+
validation: [(rule) => rule.greaterThan(3), RuleClass.number().lessThan(5)],
|
|
122
|
+
};
|
|
123
|
+
const rules = normalizeValidationRules(coolNumberType);
|
|
124
|
+
expect(rules).toHaveLength(2);
|
|
125
|
+
const [first, second] = rules;
|
|
126
|
+
expect(first).toBeInstanceOf(RuleClass);
|
|
127
|
+
expect(first._rules).toMatchObject([
|
|
128
|
+
{
|
|
129
|
+
constraint: 'Number',
|
|
130
|
+
flag: 'type',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
constraint: 3,
|
|
134
|
+
flag: 'greaterThan',
|
|
135
|
+
},
|
|
136
|
+
]);
|
|
137
|
+
expect(second).toBeInstanceOf(RuleClass);
|
|
138
|
+
expect(second._rules).toMatchObject([
|
|
139
|
+
{
|
|
140
|
+
constraint: 'Number',
|
|
141
|
+
flag: 'type',
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
constraint: 5,
|
|
145
|
+
flag: 'lessThan',
|
|
146
|
+
},
|
|
147
|
+
]);
|
|
148
|
+
});
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=normalizeValidationRules.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeValidationRules.test.js","sourceRoot":"","sources":["../../../../src/util/normalizeValidationRules.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { Path } from '@sanity/types';
|
|
2
|
-
export default function pathToString(path?: Path | undefined): string;
|
|
1
|
+
import { Path } from '@sanity/types';
|
|
2
|
+
export default function pathToString(path?: Path | undefined): string;
|
|
3
3
|
//# sourceMappingURL=pathToString.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathToString.d.ts","sourceRoot":"","sources":["../../../../src/util/pathToString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAgB,MAAM,eAAe,CAAA;AAEjD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,IAAI,GAAE,IAAI,GAAG,SAAc,GAAG,MAAM,CAkBxE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isKeyedObject } from '@sanity/types';
|
|
2
|
+
export default function pathToString(path = []) {
|
|
3
|
+
return path.reduce((target, segment, i) => {
|
|
4
|
+
const segmentType = typeof segment;
|
|
5
|
+
if (segmentType === 'number') {
|
|
6
|
+
return `${target}[${segment}]`;
|
|
7
|
+
}
|
|
8
|
+
if (segmentType === 'string') {
|
|
9
|
+
const separator = i === 0 ? '' : '.';
|
|
10
|
+
return `${target}${separator}${segment}`;
|
|
11
|
+
}
|
|
12
|
+
if (isKeyedObject(segment)) {
|
|
13
|
+
return `${target}[_key=="${segment._key}"]`;
|
|
14
|
+
}
|
|
15
|
+
throw new Error(`Unsupported path segment "${segment}"`);
|
|
16
|
+
}, '');
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=pathToString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pathToString.js","sourceRoot":"","sources":["../../../../src/util/pathToString.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,aAAa,EAAC,MAAM,eAAe,CAAA;AAEjD,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,OAAyB,EAAE;IAC9D,OAAO,IAAI,CAAC,MAAM,CAAS,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE;QAChD,MAAM,WAAW,GAAG,OAAO,OAAO,CAAA;QAClC,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC5B,OAAO,GAAG,MAAM,IAAI,OAAO,GAAG,CAAA;SAC/B;QAED,IAAI,WAAW,KAAK,QAAQ,EAAE;YAC5B,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAA;YACpC,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,EAAE,CAAA;SACzC;QAED,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE;YAC1B,OAAO,GAAG,MAAM,WAAW,OAAO,CAAC,IAAI,IAAI,CAAA;SAC5C;QAED,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,GAAG,CAAC,CAAA;IAC1D,CAAC,EAAE,EAAE,CAAC,CAAA;AACR,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export default function typeString(obj: unknown): string;
|
|
1
|
+
export default function typeString(obj: unknown): string;
|
|
2
2
|
//# sourceMappingURL=typeString.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeString.d.ts","sourceRoot":"","sources":["../../../../src/util/typeString.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CASvD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// this file was adapted from a previous dependency `type-of-is`
|
|
2
|
+
// https://github.com/stephenhandley/type-of-is/blob/7138a7e79f5af7c286bf8123f60843a91aaebf38/index.js
|
|
3
|
+
const _toString = {}.toString;
|
|
4
|
+
const builtIns = [Object, Function, Array, String, Boolean, Number, Date, RegExp, Error];
|
|
5
|
+
function isBuiltIn(_constructor) {
|
|
6
|
+
for (let i = 0; i < builtIns.length; i++) {
|
|
7
|
+
if (builtIns[i] === _constructor)
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
export default function typeString(obj) {
|
|
13
|
+
// [object Blah] -> Blah
|
|
14
|
+
const stringType = _toString.call(obj).slice(8, -1);
|
|
15
|
+
if (obj === null || obj === undefined)
|
|
16
|
+
return stringType.toLowerCase();
|
|
17
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
18
|
+
const constructorType = obj.constructor;
|
|
19
|
+
if (constructorType && !isBuiltIn(constructorType))
|
|
20
|
+
return constructorType.name;
|
|
21
|
+
return stringType;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=typeString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeString.js","sourceRoot":"","sources":["../../../../src/util/typeString.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,sGAAsG;AACtG,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAA;AAE7B,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;AAExF,SAAS,SAAS,CAAC,YAAqB;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACxC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,YAAY;YAAE,OAAO,IAAI,CAAA;KAC9C;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,GAAY;IAC7C,wBAAwB;IACxB,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACnD,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,UAAU,CAAC,WAAW,EAAE,CAAA;IAEtE,wDAAwD;IACxD,MAAM,eAAe,GAAI,GAAc,CAAC,WAAW,CAAA;IACnD,IAAI,eAAe,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC;QAAE,OAAO,eAAe,CAAC,IAAI,CAAA;IAC/E,OAAO,UAAU,CAAA;AACnB,CAAC"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeString.test.d.ts","sourceRoot":"","sources":["../../../../src/util/typeString.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import typeString from './typeString';
|
|
2
|
+
describe('typeString', () => {
|
|
3
|
+
it('returns the a type string of built in types', () => {
|
|
4
|
+
expect(typeString({})).toBe('Object');
|
|
5
|
+
expect(typeString(function () {
|
|
6
|
+
// intentionally blank
|
|
7
|
+
})).toBe('Function');
|
|
8
|
+
expect(typeString(['hey'])).toBe('Array');
|
|
9
|
+
expect(typeString('some string')).toBe('String');
|
|
10
|
+
expect(typeString(false)).toBe('Boolean');
|
|
11
|
+
expect(typeString(5)).toBe('Number');
|
|
12
|
+
expect(typeString(new Date())).toBe('Date');
|
|
13
|
+
});
|
|
14
|
+
it('returns a type string string using the constructor', () => {
|
|
15
|
+
class ExampleClass {
|
|
16
|
+
}
|
|
17
|
+
expect(typeString(new ExampleClass())).toBe('ExampleClass');
|
|
18
|
+
});
|
|
19
|
+
it('returns a type string for null or undefined', () => {
|
|
20
|
+
expect(typeString(null)).toBe('null');
|
|
21
|
+
expect(typeString(undefined)).toBe('undefined');
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=typeString.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typeString.test.js","sourceRoot":"","sources":["../../../../src/util/typeString.test.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,cAAc,CAAA;AAErC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,MAAM,CACJ,UAAU,CAAC;YACT,sBAAsB;QACxB,CAAC,CAAC,CACH,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAClB,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACzC,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChD,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACzC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpC,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,YAAY;SAAG;QACrB,MAAM,CAAC,UAAU,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC7D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACrC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
import { SanityDocument, Schema, SchemaType, ValidationContext, ValidationMarker } from '@sanity/types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export {}
|
|
1
|
+
import { SanityDocument, Schema, SchemaType, ValidationContext, ValidationMarker } from '@sanity/types';
|
|
2
|
+
import { SanityClient } from '@sanity/client';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveTypeForArrayItem(item: unknown, candidates: SchemaType[]): SchemaType | undefined;
|
|
7
|
+
export default function validateDocument(client: SanityClient, doc: SanityDocument, schema: Schema, context?: Pick<ValidationContext, 'getDocumentExists'>): Promise<ValidationMarker[]>;
|
|
8
|
+
/**
|
|
9
|
+
* this is used make optional properties required by replacing optionals with
|
|
10
|
+
* `T[P] | undefined`. this is used to prevent errors in `validateItem` where
|
|
11
|
+
* an option from a previous invocation would be incorrectly passed down.
|
|
12
|
+
*
|
|
13
|
+
* https://medium.com/terria/typescript-transforming-optional-properties-to-required-properties-that-may-be-undefined-7482cb4e1585
|
|
14
|
+
*/
|
|
15
|
+
declare type ExplicitUndefined<T> = {
|
|
16
|
+
[P in keyof Required<T>]: Pick<T, P> extends Required<Pick<T, P>> ? T[P] : T[P] | undefined;
|
|
17
|
+
};
|
|
18
|
+
declare type ValidateItemOptions = {
|
|
19
|
+
value: unknown;
|
|
20
|
+
} & ExplicitUndefined<ValidationContext>;
|
|
21
|
+
export declare function validateItem({ value, type, path, parent, ...restOfContext }: ValidateItemOptions): Promise<ValidationMarker[]>;
|
|
22
|
+
export {};
|
|
22
23
|
//# sourceMappingURL=validateDocument.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateDocument.d.ts","sourceRoot":"","sources":["../../../src/validateDocument.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,MAAM,EACN,UAAU,EACV,iBAAiB,EACjB,gBAAgB,EAMjB,MAAM,eAAe,CAAA;AAEtB,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAA;AAW3C;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,UAAU,EAAE,GACvB,UAAU,GAAG,SAAS,CAiBxB;AAED,wBAA8B,gBAAgB,CAC5C,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,GACrD,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA2B7B;AAED;;;;;;GAMG;AACH,aAAK,iBAAiB,CAAC,CAAC,IAAI;KACzB,CAAC,IAAI,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,SAAS,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS;CAC5F,CAAA;AAED,aAAK,mBAAmB,GAAG;IACzB,KAAK,EAAE,OAAO,CAAA;CACf,GAAG,iBAAiB,CAAC,iBAAiB,CAAC,CAAA;AAExC,wBAAsB,YAAY,CAAC,EACjC,KAAK,EACL,IAAI,EACJ,IAAS,EACT,MAAM,EACN,GAAG,aAAa,EACjB,EAAE,mBAAmB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA4HnD"}
|