@sanity/validation 3.0.0-dev-preview.20 → 3.0.0-dev-preview.21

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.
Files changed (142) hide show
  1. package/lib/dts/src/index.d.ts +36 -13
  2. package/lib/index.js +1525 -1291
  3. package/lib/index.js.map +1 -1
  4. package/lib/index.mjs +1542 -0
  5. package/lib/index.mjs.map +1 -0
  6. package/package.json +24 -18
  7. package/src/index.ts +3 -1
  8. package/src/util/requestIdleCallback.ts +31 -0
  9. package/src/validateDocument.test.ts +0 -80
  10. package/src/validateDocument.ts +82 -43
  11. package/src/validators/slugValidator.ts +16 -2
  12. package/lib/dts/src/Rule.d.ts +0 -4
  13. package/lib/dts/src/Rule.d.ts.map +0 -1
  14. package/lib/dts/src/Rule.js +0 -336
  15. package/lib/dts/src/Rule.js.map +0 -1
  16. package/lib/dts/src/ValidationError.d.ts +0 -4
  17. package/lib/dts/src/ValidationError.d.ts.map +0 -1
  18. package/lib/dts/src/ValidationError.js +0 -18
  19. package/lib/dts/src/ValidationError.js.map +0 -1
  20. package/lib/dts/src/index.d.ts.map +0 -1
  21. package/lib/dts/src/index.js +0 -7
  22. package/lib/dts/src/index.js.map +0 -1
  23. package/lib/dts/src/inferFromSchema.d.ts +0 -4
  24. package/lib/dts/src/inferFromSchema.d.ts.map +0 -1
  25. package/lib/dts/src/inferFromSchema.js +0 -14
  26. package/lib/dts/src/inferFromSchema.js.map +0 -1
  27. package/lib/dts/src/inferFromSchemaType.d.ts +0 -5
  28. package/lib/dts/src/inferFromSchemaType.d.ts.map +0 -1
  29. package/lib/dts/src/inferFromSchemaType.js +0 -33
  30. package/lib/dts/src/inferFromSchemaType.js.map +0 -1
  31. package/lib/dts/src/util/convertToValidationMarker.d.ts +0 -6
  32. package/lib/dts/src/util/convertToValidationMarker.d.ts.map +0 -1
  33. package/lib/dts/src/util/convertToValidationMarker.js +0 -51
  34. package/lib/dts/src/util/convertToValidationMarker.js.map +0 -1
  35. package/lib/dts/src/util/deepEquals.d.ts +0 -6
  36. package/lib/dts/src/util/deepEquals.d.ts.map +0 -1
  37. package/lib/dts/src/util/deepEquals.js +0 -65
  38. package/lib/dts/src/util/deepEquals.js.map +0 -1
  39. package/lib/dts/src/util/escapeRegex.d.ts +0 -3
  40. package/lib/dts/src/util/escapeRegex.d.ts.map +0 -1
  41. package/lib/dts/src/util/escapeRegex.js +0 -6
  42. package/lib/dts/src/util/escapeRegex.js.map +0 -1
  43. package/lib/dts/src/util/normalizeValidationRules.d.ts +0 -6
  44. package/lib/dts/src/util/normalizeValidationRules.d.ts.map +0 -1
  45. package/lib/dts/src/util/normalizeValidationRules.js +0 -104
  46. package/lib/dts/src/util/normalizeValidationRules.js.map +0 -1
  47. package/lib/dts/src/util/normalizeValidationRules.test.d.ts +0 -2
  48. package/lib/dts/src/util/normalizeValidationRules.test.d.ts.map +0 -1
  49. package/lib/dts/src/util/normalizeValidationRules.test.js +0 -150
  50. package/lib/dts/src/util/normalizeValidationRules.test.js.map +0 -1
  51. package/lib/dts/src/util/pathToString.d.ts +0 -3
  52. package/lib/dts/src/util/pathToString.d.ts.map +0 -1
  53. package/lib/dts/src/util/pathToString.js +0 -18
  54. package/lib/dts/src/util/pathToString.js.map +0 -1
  55. package/lib/dts/src/util/typeString.d.ts +0 -2
  56. package/lib/dts/src/util/typeString.d.ts.map +0 -1
  57. package/lib/dts/src/util/typeString.js +0 -23
  58. package/lib/dts/src/util/typeString.js.map +0 -1
  59. package/lib/dts/src/util/typeString.test.d.ts +0 -2
  60. package/lib/dts/src/util/typeString.test.d.ts.map +0 -1
  61. package/lib/dts/src/util/typeString.test.js +0 -24
  62. package/lib/dts/src/util/typeString.test.js.map +0 -1
  63. package/lib/dts/src/validateDocument.d.ts +0 -25
  64. package/lib/dts/src/validateDocument.d.ts.map +0 -1
  65. package/lib/dts/src/validateDocument.js +0 -165
  66. package/lib/dts/src/validateDocument.js.map +0 -1
  67. package/lib/dts/src/validateDocument.test.d.ts +0 -2
  68. package/lib/dts/src/validateDocument.test.d.ts.map +0 -1
  69. package/lib/dts/src/validateDocument.test.js +0 -717
  70. package/lib/dts/src/validateDocument.test.js.map +0 -1
  71. package/lib/dts/src/validators/arrayValidator.d.ts +0 -4
  72. package/lib/dts/src/validators/arrayValidator.d.ts.map +0 -1
  73. package/lib/dts/src/validators/arrayValidator.js +0 -79
  74. package/lib/dts/src/validators/arrayValidator.js.map +0 -1
  75. package/lib/dts/src/validators/booleanValidator.d.ts +0 -4
  76. package/lib/dts/src/validators/booleanValidator.d.ts.map +0 -1
  77. package/lib/dts/src/validators/booleanValidator.js +0 -12
  78. package/lib/dts/src/validators/booleanValidator.js.map +0 -1
  79. package/lib/dts/src/validators/dateValidator.d.ts +0 -5
  80. package/lib/dts/src/validators/dateValidator.d.ts.map +0 -1
  81. package/lib/dts/src/validators/dateValidator.js +0 -83
  82. package/lib/dts/src/validators/dateValidator.js.map +0 -1
  83. package/lib/dts/src/validators/genericValidator.d.ts +0 -4
  84. package/lib/dts/src/validators/genericValidator.d.ts.map +0 -1
  85. package/lib/dts/src/validators/genericValidator.js +0 -93
  86. package/lib/dts/src/validators/genericValidator.js.map +0 -1
  87. package/lib/dts/src/validators/numberValidator.d.ts +0 -4
  88. package/lib/dts/src/validators/numberValidator.d.ts.map +0 -1
  89. package/lib/dts/src/validators/numberValidator.js +0 -47
  90. package/lib/dts/src/validators/numberValidator.js.map +0 -1
  91. package/lib/dts/src/validators/objectValidator.d.ts +0 -4
  92. package/lib/dts/src/validators/objectValidator.d.ts.map +0 -1
  93. package/lib/dts/src/validators/objectValidator.js +0 -48
  94. package/lib/dts/src/validators/objectValidator.js.map +0 -1
  95. package/lib/dts/src/validators/slugValidator.d.ts +0 -9
  96. package/lib/dts/src/validators/slugValidator.d.ts.map +0 -1
  97. package/lib/dts/src/validators/slugValidator.js +0 -83
  98. package/lib/dts/src/validators/slugValidator.js.map +0 -1
  99. package/lib/dts/src/validators/stringValidator.d.ts +0 -4
  100. package/lib/dts/src/validators/stringValidator.d.ts.map +0 -1
  101. package/lib/dts/src/validators/stringValidator.js +0 -94
  102. package/lib/dts/src/validators/stringValidator.js.map +0 -1
  103. package/lib/dts/test/array.test.d.ts +0 -2
  104. package/lib/dts/test/array.test.d.ts.map +0 -1
  105. package/lib/dts/test/array.test.js +0 -55
  106. package/lib/dts/test/array.test.js.map +0 -1
  107. package/lib/dts/test/children.test.d.ts +0 -2
  108. package/lib/dts/test/children.test.d.ts.map +0 -1
  109. package/lib/dts/test/children.test.js +0 -70
  110. package/lib/dts/test/children.test.js.map +0 -1
  111. package/lib/dts/test/createSchema.d.ts +0 -6
  112. package/lib/dts/test/createSchema.d.ts.map +0 -1
  113. package/lib/dts/test/createSchema.js +0 -19
  114. package/lib/dts/test/createSchema.js.map +0 -1
  115. package/lib/dts/test/generics.test.d.ts +0 -2
  116. package/lib/dts/test/generics.test.d.ts.map +0 -1
  117. package/lib/dts/test/generics.test.js +0 -60
  118. package/lib/dts/test/generics.test.js.map +0 -1
  119. package/lib/dts/test/infer.test.d.ts +0 -2
  120. package/lib/dts/test/infer.test.d.ts.map +0 -1
  121. package/lib/dts/test/infer.test.js +0 -244
  122. package/lib/dts/test/infer.test.js.map +0 -1
  123. package/lib/dts/test/mocks/mockSanityClient.d.ts +0 -6
  124. package/lib/dts/test/mocks/mockSanityClient.d.ts.map +0 -1
  125. package/lib/dts/test/mocks/mockSanityClient.js +0 -8
  126. package/lib/dts/test/mocks/mockSanityClient.js.map +0 -1
  127. package/lib/dts/test/nullExport.d.ts +0 -3
  128. package/lib/dts/test/nullExport.d.ts.map +0 -1
  129. package/lib/dts/test/nullExport.js +0 -4
  130. package/lib/dts/test/nullExport.js.map +0 -1
  131. package/lib/dts/test/numbers.test.d.ts +0 -2
  132. package/lib/dts/test/numbers.test.d.ts.map +0 -1
  133. package/lib/dts/test/numbers.test.js +0 -57
  134. package/lib/dts/test/numbers.test.js.map +0 -1
  135. package/lib/dts/test/strings.test.d.ts +0 -2
  136. package/lib/dts/test/strings.test.d.ts.map +0 -1
  137. package/lib/dts/test/strings.test.js +0 -100
  138. package/lib/dts/test/strings.test.js.map +0 -1
  139. package/lib/dts/tsconfig.lib.tsbuildinfo +0 -1
  140. package/lib/dts/tsconfig.tsbuildinfo +0 -1
  141. package/lib/index.cjs +0 -1341
  142. package/lib/index.cjs.map +0 -1
@@ -10,9 +10,12 @@ import {
10
10
  isBlockSchemaType,
11
11
  isSpanSchemaType,
12
12
  } from '@sanity/types'
13
- import {uniqBy} from 'lodash'
13
+ import {concat, defer, merge, Observable, of} from 'rxjs'
14
+ import {catchError, map, mergeAll, mergeMap, toArray} from 'rxjs/operators'
15
+ import {flatten, uniqBy} from 'lodash'
14
16
  import type {SanityClient} from '@sanity/client'
15
17
  import typeString from './util/typeString'
18
+ import {cancelIdleCallback, requestIdleCallback} from './util/requestIdleCallback'
16
19
  import ValidationErrorClass from './ValidationError'
17
20
  import normalizeValidationRules from './util/normalizeValidationRules'
18
21
 
@@ -46,6 +49,7 @@ export function resolveTypeForArrayItem(
46
49
  candidates.find((candidate) => candidate.name === 'object' && primitive === 'object')
47
50
  )
48
51
  }
52
+ const EMPTY_MARKERS: ValidationMarker[] = []
49
53
 
50
54
  export default async function validateDocument(
51
55
  getClient: (options: {apiVersion: string}) => SanityClient,
@@ -53,10 +57,19 @@ export default async function validateDocument(
53
57
  schema: Schema,
54
58
  context?: Pick<ValidationContext, 'getDocumentExists'>
55
59
  ): Promise<ValidationMarker[]> {
60
+ return validateDocumentObservable(getClient, doc, schema, context).toPromise()
61
+ }
62
+
63
+ export function validateDocumentObservable(
64
+ getClient: (options: {apiVersion: string}) => SanityClient,
65
+ doc: SanityDocument,
66
+ schema: Schema,
67
+ context?: Pick<ValidationContext, 'getDocumentExists'>
68
+ ): Observable<ValidationMarker[]> {
56
69
  const documentType = schema.get(doc._type)
57
70
  if (!documentType) {
58
71
  console.warn('Schema type for object type "%s" not found, skipping validation', doc._type)
59
- return []
72
+ return of(EMPTY_MARKERS)
60
73
  }
61
74
 
62
75
  const client = getClient({apiVersion: '2021-06-07'})
@@ -95,18 +108,19 @@ export default async function validateDocument(
95
108
  /* eslint-enable no-proto */
96
109
  // </TEMPORARY UGLY HACK TO PRINT DEPRECATION WARNINGS ON USE>
97
110
 
98
- try {
99
- return await validateItem(validationOptions)
100
- } catch (err) {
101
- console.error(err)
102
- return [
103
- {
104
- level: 'error',
105
- path: [],
106
- item: new ValidationErrorClass(err?.message),
107
- },
108
- ]
109
- }
111
+ return validateItemObservable(validationOptions).pipe(
112
+ catchError((err) => {
113
+ console.error(err)
114
+ return of([
115
+ {
116
+ type: 'validation' as const,
117
+ level: 'error' as const,
118
+ path: [],
119
+ item: new ValidationErrorClass(err?.message),
120
+ },
121
+ ])
122
+ })
123
+ )
110
124
  }
111
125
 
112
126
  /**
@@ -124,27 +138,32 @@ type ValidateItemOptions = {
124
138
  value: unknown
125
139
  } & ExplicitUndefined<ValidationContext>
126
140
 
127
- export async function validateItem({
141
+ export function validateItem(opts: ValidateItemOptions): Promise<ValidationMarker[]> {
142
+ return validateItemObservable(opts).toPromise()
143
+ }
144
+
145
+ function validateItemObservable({
128
146
  value,
129
147
  type,
130
148
  path = [],
131
149
  parent,
132
150
  ...restOfContext
133
- }: ValidateItemOptions): Promise<ValidationMarker[]> {
151
+ }: ValidateItemOptions): Observable<ValidationMarker[]> {
134
152
  const rules = normalizeValidationRules(type)
135
-
136
153
  // run validation for the current value
137
154
  const selfChecks = rules.map((rule) =>
138
- rule.validate(value, {
139
- ...restOfContext,
140
- parent,
141
- path,
142
- type,
143
- })
155
+ defer(() =>
156
+ rule.validate(value, {
157
+ ...restOfContext,
158
+ parent,
159
+ path,
160
+ type,
161
+ })
162
+ )
144
163
  )
145
164
 
146
165
  // run validation for nested values (conditionally)
147
- let nestedChecks: Array<Promise<ValidationMarker[]>> = []
166
+ let nestedChecks: Array<Observable<ValidationMarker[]>> = []
148
167
 
149
168
  const selfIsRequired = rules.some((rule) => rule.isRequired())
150
169
  const shouldRunNestedObjectValidation =
@@ -171,12 +190,14 @@ export async function validateItem({
171
190
  const fieldType = fieldTypes[name]
172
191
  return normalizeValidationRules({...fieldType, validation}).map((subRule) => {
173
192
  const nestedValue = isRecord(value) ? value[name] : undefined
174
- return subRule.validate(nestedValue, {
175
- ...restOfContext,
176
- parent: value,
177
- path: path.concat(name),
178
- type: fieldType,
179
- })
193
+ return defer(() =>
194
+ subRule.validate(nestedValue, {
195
+ ...restOfContext,
196
+ parent: value,
197
+ path: path.concat(name),
198
+ type: fieldType,
199
+ })
200
+ )
180
201
  })
181
202
  })
182
203
  )
@@ -184,7 +205,7 @@ export async function validateItem({
184
205
  // Validation from each field's schema `validation: Rule => {/* ... */}` function
185
206
  nestedChecks = nestedChecks.concat(
186
207
  type.fields.map((field) =>
187
- validateItem({
208
+ validateItemObservable({
188
209
  ...restOfContext,
189
210
  parent: value,
190
211
  value: isRecord(value) ? value[field.name] : undefined,
@@ -204,7 +225,7 @@ export async function validateItem({
204
225
  if (shouldRunNestedValidationForArrays) {
205
226
  nestedChecks = nestedChecks.concat(
206
227
  value.map((item) =>
207
- validateItem({
228
+ validateItemObservable({
208
229
  ...restOfContext,
209
230
  parent: value,
210
231
  value: item,
@@ -225,16 +246,16 @@ export async function validateItem({
225
246
  const spanType = spanChildrenField.type.of.find(isSpanSchemaType)
226
247
 
227
248
  const annotations = (spanType?.annotations || []).reduce<Map<string, SchemaType>>(
228
- (map, annotationType) => {
229
- map.set(annotationType.name, annotationType)
230
- return map
249
+ (acc, annotationType) => {
250
+ acc.set(annotationType.name, annotationType)
251
+ return acc
231
252
  },
232
253
  new Map()
233
254
  )
234
255
 
235
256
  nestedChecks = nestedChecks.concat(
236
257
  value.markDefs.map((markDef) =>
237
- validateItem({
258
+ validateItemObservable({
238
259
  ...restOfContext,
239
260
  parent: value,
240
261
  value: markDef,
@@ -245,13 +266,31 @@ export async function validateItem({
245
266
  )
246
267
  }
247
268
 
248
- const results = (await Promise.all([...selfChecks, ...nestedChecks])).flat()
269
+ return defer(() => merge([...selfChecks, ...nestedChecks])).pipe(
270
+ mergeMap((validateNode) => concat(idle(), validateNode), 40),
271
+ mergeAll(),
272
+ toArray(),
273
+ map(flatten),
274
+ map((results) => {
275
+ // run `uniqBy` if `_fieldRules` are present because they can
276
+ // cause repeat markers
277
+ if (rules.some((rule) => rule._fieldRules)) {
278
+ return uniqBy(results, (rule) => JSON.stringify(rule))
279
+ }
280
+ return results
281
+ })
282
+ )
283
+ }
249
284
 
250
- // run `uniqBy` if `_fieldRules` are present because they can
251
- // cause repeat markers
252
- if (rules.some((rule) => rule._fieldRules)) {
253
- return uniqBy(results, (rule) => JSON.stringify(rule))
254
- }
285
+ function idle(timeout?: number): Observable<never> {
286
+ return new Observable<never>((observer) => {
287
+ const handle = requestIdleCallback(
288
+ () => {
289
+ observer.complete()
290
+ },
291
+ timeout ? {timeout} : undefined
292
+ )
255
293
 
256
- return results
294
+ return () => cancelIdleCallback(handle)
295
+ })
257
296
  }
@@ -1,4 +1,12 @@
1
- import {SlugIsUniqueValidator, Path, CustomValidator, isKeyedObject} from '@sanity/types'
1
+ import {
2
+ SlugIsUniqueValidator,
3
+ Path,
4
+ CustomValidator,
5
+ isKeyedObject,
6
+ SlugValidationContext,
7
+ SlugParent,
8
+ SlugSchemaType,
9
+ } from '@sanity/types'
2
10
  import {memoize} from 'lodash'
3
11
  // import getClient from '../getClient'
4
12
 
@@ -94,7 +102,13 @@ export const slugValidator: CustomValidator = async (value, context) => {
94
102
  const options = context?.type?.options as {isUnique?: SlugIsUniqueValidator} | undefined
95
103
  const isUnique = options?.isUnique || defaultIsUnique
96
104
 
97
- const wasUnique = await isUnique(slugValue, {...context, defaultIsUnique})
105
+ const slugContext: SlugValidationContext = {
106
+ ...context,
107
+ parent: context.parent as SlugParent,
108
+ type: context.type as SlugSchemaType,
109
+ defaultIsUnique,
110
+ }
111
+ const wasUnique = await isUnique(slugValue, slugContext)
98
112
  if (wasUnique) {
99
113
  return true
100
114
  }
@@ -1,4 +0,0 @@
1
- import { RuleClass } from '@sanity/types';
2
- declare const Rule: RuleClass;
3
- export default Rule;
4
- //# sourceMappingURL=Rule.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Rule.d.ts","sourceRoot":"","sources":["../../../src/Rule.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,SAAS,EAUV,MAAM,eAAe,CAAA;AA0DtB,QAAA,MAAM,IAAI,EAAE,SAsWX,CAAA;AAED,eAAe,IAAI,CAAA"}
@@ -1,336 +0,0 @@
1
- var _a;
2
- import { cloneDeep, get } from 'lodash';
3
- import ValidationErrorClass from './ValidationError';
4
- import escapeRegex from './util/escapeRegex';
5
- import { convertToValidationMarker } from './util/convertToValidationMarker';
6
- import pathToString from './util/pathToString';
7
- import genericValidator from './validators/genericValidator';
8
- import booleanValidator from './validators/booleanValidator';
9
- import numberValidator from './validators/numberValidator';
10
- import stringValidator from './validators/stringValidator';
11
- import arrayValidator from './validators/arrayValidator';
12
- import objectValidator from './validators/objectValidator';
13
- import dateValidator from './validators/dateValidator';
14
- const typeValidators = {
15
- Boolean: booleanValidator,
16
- Number: numberValidator,
17
- String: stringValidator,
18
- Array: arrayValidator,
19
- Object: objectValidator,
20
- Date: dateValidator,
21
- };
22
- const getBaseType = (type) => {
23
- return type && type.type ? getBaseType(type.type) : type;
24
- };
25
- const isFieldRef = (constraint) => {
26
- if (typeof constraint !== 'object' || !constraint)
27
- return false;
28
- return constraint.type === Rule.FIELD_REF;
29
- };
30
- const EMPTY_ARRAY = [];
31
- const FIELD_REF = Symbol('FIELD_REF');
32
- const ruleConstraintTypes = [
33
- 'Array',
34
- 'Boolean',
35
- 'Date',
36
- 'Number',
37
- 'Object',
38
- 'String',
39
- ];
40
- // Note: `RuleClass` and `Rule` are split to fit the current `@sanity/types`
41
- // setup. Classes are a bit weird in the `@sanity/types` package because classes
42
- // create an actual javascript class while simultaneously creating a type
43
- // definition.
44
- //
45
- // This implicitly creates two types:
46
- // 1. the instance type — `Rule` and
47
- // 2. the static/class type - `RuleClass`
48
- //
49
- // The `RuleClass` type contains the static methods and the `Rule` instance
50
- // contains the instance methods.
51
- //
52
- // This package exports the RuleClass as a value without implicitly exporting
53
- // an instance definition. This should help reminder downstream users to import
54
- // from the `@sanity/types` package.
55
- const Rule = (_a = class Rule {
56
- constructor(typeDef) {
57
- this._type = undefined;
58
- this._level = undefined;
59
- this._required = undefined;
60
- this._typeDef = undefined;
61
- this._message = undefined;
62
- this._rules = [];
63
- this._fieldRules = undefined;
64
- // Alias to static method, since we often have access to an _instance_ of a rule but not the actual Rule class
65
- this.valueOfField = Rule.valueOfField.bind(Rule);
66
- this._typeDef = typeDef;
67
- this.reset();
68
- }
69
- _mergeRequired(next) {
70
- if (this._required === 'required' || next._required === 'required')
71
- return 'required';
72
- if (this._required === 'optional' || next._required === 'optional')
73
- return 'optional';
74
- return undefined;
75
- }
76
- error(message) {
77
- const rule = this.clone();
78
- rule._level = 'error';
79
- rule._message = message || undefined;
80
- return rule;
81
- }
82
- warning(message) {
83
- const rule = this.clone();
84
- rule._level = 'warning';
85
- rule._message = message || undefined;
86
- return rule;
87
- }
88
- info(message) {
89
- const rule = this.clone();
90
- rule._level = 'info';
91
- rule._message = message || undefined;
92
- return rule;
93
- }
94
- reset() {
95
- this._type = this._type || undefined;
96
- this._rules = (this._rules || []).filter((rule) => rule.flag === 'type');
97
- this._message = undefined;
98
- this._required = undefined;
99
- this._level = 'error';
100
- this._fieldRules = undefined;
101
- return this;
102
- }
103
- isRequired() {
104
- return this._required === 'required';
105
- }
106
- clone() {
107
- const rule = new Rule();
108
- rule._type = this._type;
109
- rule._message = this._message;
110
- rule._required = this._required;
111
- rule._rules = cloneDeep(this._rules);
112
- rule._level = this._level;
113
- rule._fieldRules = this._fieldRules;
114
- rule._typeDef = this._typeDef;
115
- return rule;
116
- }
117
- cloneWithRules(rules) {
118
- const rule = this.clone();
119
- const newRules = new Set();
120
- rules.forEach((curr) => {
121
- if (curr.flag === 'type') {
122
- rule._type = curr.constraint;
123
- }
124
- newRules.add(curr.flag);
125
- });
126
- rule._rules = rule._rules
127
- .filter((curr) => {
128
- const disallowDuplicate = ['type', 'uri', 'email'].includes(curr.flag);
129
- const isDuplicate = newRules.has(curr.flag);
130
- return !(disallowDuplicate && isDuplicate);
131
- })
132
- .concat(rules);
133
- return rule;
134
- }
135
- merge(rule) {
136
- if (this._type && rule._type && this._type !== rule._type) {
137
- throw new Error('merge() failed: conflicting types');
138
- }
139
- const newRule = this.cloneWithRules(rule._rules);
140
- newRule._type = this._type || rule._type;
141
- newRule._message = this._message || rule._message;
142
- newRule._required = this._mergeRequired(rule);
143
- newRule._level = this._level === 'error' ? rule._level : this._level;
144
- return newRule;
145
- }
146
- // Validation flag setters
147
- type(targetType) {
148
- const type = `${targetType.slice(0, 1).toUpperCase()}${targetType.slice(1)}`;
149
- if (!ruleConstraintTypes.includes(type)) {
150
- throw new Error(`Unknown type "${targetType}"`);
151
- }
152
- const rule = this.cloneWithRules([{ flag: 'type', constraint: type }]);
153
- rule._type = type;
154
- return rule;
155
- }
156
- all(children) {
157
- return this.cloneWithRules([{ flag: 'all', constraint: children }]);
158
- }
159
- either(children) {
160
- return this.cloneWithRules([{ flag: 'either', constraint: children }]);
161
- }
162
- // Shared rules
163
- optional() {
164
- const rule = this.cloneWithRules([{ flag: 'presence', constraint: 'optional' }]);
165
- rule._required = 'optional';
166
- return rule;
167
- }
168
- required() {
169
- const rule = this.cloneWithRules([{ flag: 'presence', constraint: 'required' }]);
170
- rule._required = 'required';
171
- return rule;
172
- }
173
- custom(fn) {
174
- return this.cloneWithRules([{ flag: 'custom', constraint: fn }]);
175
- }
176
- /**
177
- * @deprecated use `Rule.custom` instead
178
- */
179
- block(fn) {
180
- return this.cloneWithRules([{ flag: 'custom', constraint: fn }]);
181
- }
182
- min(len) {
183
- return this.cloneWithRules([{ flag: 'min', constraint: len }]);
184
- }
185
- max(len) {
186
- return this.cloneWithRules([{ flag: 'max', constraint: len }]);
187
- }
188
- length(len) {
189
- return this.cloneWithRules([{ flag: 'length', constraint: len }]);
190
- }
191
- valid(value) {
192
- const values = Array.isArray(value) ? value : [value];
193
- return this.cloneWithRules([{ flag: 'valid', constraint: values }]);
194
- }
195
- // Numbers only
196
- integer() {
197
- return this.cloneWithRules([{ flag: 'integer' }]);
198
- }
199
- precision(limit) {
200
- return this.cloneWithRules([{ flag: 'precision', constraint: limit }]);
201
- }
202
- positive() {
203
- return this.cloneWithRules([{ flag: 'min', constraint: 0 }]);
204
- }
205
- negative() {
206
- return this.cloneWithRules([{ flag: 'lessThan', constraint: 0 }]);
207
- }
208
- greaterThan(num) {
209
- return this.cloneWithRules([{ flag: 'greaterThan', constraint: num }]);
210
- }
211
- lessThan(num) {
212
- return this.cloneWithRules([{ flag: 'lessThan', constraint: num }]);
213
- }
214
- // String only
215
- uppercase() {
216
- return this.cloneWithRules([{ flag: 'stringCasing', constraint: 'uppercase' }]);
217
- }
218
- lowercase() {
219
- return this.cloneWithRules([{ flag: 'stringCasing', constraint: 'lowercase' }]);
220
- }
221
- regex(pattern, a, b) {
222
- const name = typeof a === 'string' ? a : a?.name ?? b?.name;
223
- const invert = typeof a === 'string' ? false : a?.invert ?? b?.invert;
224
- const constraint = {
225
- pattern,
226
- name,
227
- invert: invert || false,
228
- };
229
- return this.cloneWithRules([{ flag: 'regex', constraint }]);
230
- }
231
- email() {
232
- return this.cloneWithRules([{ flag: 'email' }]);
233
- }
234
- uri(opts) {
235
- const optsScheme = opts?.scheme || ['http', 'https'];
236
- const schemes = Array.isArray(optsScheme) ? optsScheme : [optsScheme];
237
- if (!schemes.length) {
238
- throw new Error('scheme must have at least 1 scheme specified');
239
- }
240
- const constraint = {
241
- options: {
242
- scheme: schemes.map((scheme) => {
243
- if (!(scheme instanceof RegExp) && typeof scheme !== 'string') {
244
- throw new Error('scheme must be a RegExp or a String');
245
- }
246
- return typeof scheme === 'string' ? new RegExp(`^${escapeRegex(scheme)}$`) : scheme;
247
- }),
248
- allowRelative: opts?.allowRelative || false,
249
- relativeOnly: opts?.relativeOnly || false,
250
- allowCredentials: opts?.allowCredentials || false,
251
- },
252
- };
253
- return this.cloneWithRules([{ flag: 'uri', constraint }]);
254
- }
255
- // Array only
256
- unique() {
257
- return this.cloneWithRules([{ flag: 'unique' }]);
258
- }
259
- // Objects only
260
- reference() {
261
- return this.cloneWithRules([{ flag: 'reference' }]);
262
- }
263
- fields(rules) {
264
- if (this._type !== 'Object') {
265
- throw new Error('fields() can only be called on an object type');
266
- }
267
- const rule = this.cloneWithRules([]);
268
- rule._fieldRules = rules;
269
- return rule;
270
- }
271
- assetRequired() {
272
- const base = getBaseType(this._typeDef);
273
- let assetType;
274
- if (base && ['image', 'file'].includes(base.name)) {
275
- assetType = base.name === 'image' ? 'Image' : 'File';
276
- }
277
- else {
278
- assetType = 'Asset';
279
- }
280
- return this.cloneWithRules([{ flag: 'assetRequired', constraint: { assetType } }]);
281
- }
282
- async validate(value, context) {
283
- if (!context) {
284
- throw new Error('missing context');
285
- }
286
- const valueIsEmpty = value === null || value === undefined;
287
- // Short-circuit on optional, empty fields
288
- if (valueIsEmpty && this._required === 'optional') {
289
- return EMPTY_ARRAY;
290
- }
291
- const rules =
292
- // Run only the _custom_ functions if the rule is not set to required or optional
293
- this._required === undefined && valueIsEmpty
294
- ? this._rules.filter((curr) => curr.flag === 'custom')
295
- : this._rules;
296
- const validators = (this._type && typeValidators[this._type]) || genericValidator;
297
- const results = await Promise.all(rules.map(async (curr) => {
298
- if (curr.flag === undefined) {
299
- throw new Error('Invalid rule, did not contain "flag"-property');
300
- }
301
- const validator = validators[curr.flag];
302
- if (!validator) {
303
- const forType = this._type ? `type "${this._type}"` : 'rule without declared type';
304
- throw new Error(`Validator for flag "${curr.flag}" not found for ${forType}`);
305
- }
306
- let specConstraint = 'constraint' in curr ? curr.constraint : null;
307
- if (isFieldRef(specConstraint)) {
308
- specConstraint = get(context.parent, specConstraint.path);
309
- }
310
- let result;
311
- try {
312
- result = await validator(specConstraint, value, this._message, context);
313
- }
314
- catch (err) {
315
- const errorFromException = new ValidationErrorClass(`${pathToString(context.path)}: Exception occurred while validating value: ${err.message}`);
316
- return convertToValidationMarker(errorFromException, 'error', context);
317
- }
318
- return convertToValidationMarker(result, this._level, context);
319
- }));
320
- return results.flat();
321
- }
322
- },
323
- _a.FIELD_REF = FIELD_REF,
324
- _a.array = (def) => new _a(def).type('Array'),
325
- _a.object = (def) => new _a(def).type('Object'),
326
- _a.string = (def) => new _a(def).type('String'),
327
- _a.number = (def) => new _a(def).type('Number'),
328
- _a.boolean = (def) => new _a(def).type('Boolean'),
329
- _a.dateTime = (def) => new _a(def).type('Date'),
330
- _a.valueOfField = (path) => ({
331
- type: FIELD_REF,
332
- path,
333
- }),
334
- _a);
335
- export default Rule;
336
- //# sourceMappingURL=Rule.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Rule.js","sourceRoot":"","sources":["../../../src/Rule.ts"],"names":[],"mappings":";AAcA,OAAO,EAAC,SAAS,EAAE,GAAG,EAAC,MAAM,QAAQ,CAAA;AACrC,OAAO,oBAAoB,MAAM,mBAAmB,CAAA;AACpD,OAAO,WAAW,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAC,yBAAyB,EAAC,MAAM,kCAAkC,CAAA;AAC1E,OAAO,YAAY,MAAM,qBAAqB,CAAA;AAC9C,OAAO,gBAAgB,MAAM,+BAA+B,CAAA;AAC5D,OAAO,gBAAgB,MAAM,+BAA+B,CAAA;AAC5D,OAAO,eAAe,MAAM,8BAA8B,CAAA;AAC1D,OAAO,eAAe,MAAM,8BAA8B,CAAA;AAC1D,OAAO,cAAc,MAAM,6BAA6B,CAAA;AACxD,OAAO,eAAe,MAAM,8BAA8B,CAAA;AAC1D,OAAO,aAAa,MAAM,4BAA4B,CAAA;AAEtD,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,gBAAgB;IACzB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,eAAe;IACvB,KAAK,EAAE,cAAc;IACrB,MAAM,EAAE,eAAe;IACvB,IAAI,EAAE,aAAa;CACpB,CAAA;AAED,MAAM,WAAW,GAAG,CAAC,IAA4B,EAA0B,EAAE;IAC3E,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AAC1D,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CAAC,UAAmB,EAAyD,EAAE;IAChG,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAA;IAC/D,OAAQ,UAAsC,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAA;AACxE,CAAC,CAAA;AAED,MAAM,WAAW,GAAc,EAAE,CAAA;AACjC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AACrC,MAAM,mBAAmB,GAAyB;IAChD,OAAO;IACP,SAAS;IACT,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,QAAQ;CACT,CAAA;AAED,4EAA4E;AAC5E,gFAAgF;AAChF,yEAAyE;AACzE,cAAc;AACd,EAAE;AACF,qCAAqC;AACrC,oCAAoC;AACpC,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,iCAAiC;AACjC,EAAE;AACF,6EAA6E;AAC7E,+EAA+E;AAC/E,oCAAoC;AACpC,MAAM,IAAI,SAAc,MAAM,IAAI;QAqBhC,YAAY,OAAoB;YARhC,UAAK,GAAmC,SAAS,CAAA;YACjD,WAAM,GAA6C,SAAS,CAAA;YAC5D,cAAS,GAAwC,SAAS,CAAA;YAC1D,aAAQ,GAA2B,SAAS,CAAA;YAC5C,aAAQ,GAAuB,SAAS,CAAA;YACxC,WAAM,GAAe,EAAE,CAAA;YACvB,gBAAW,GAA2B,SAAS,CAAA;YAa/C,8GAA8G;YAC9G,iBAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAXzC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;YACvB,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC;QAEO,cAAc,CAAC,IAAU;YAC/B,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU;gBAAE,OAAO,UAAU,CAAA;YACrF,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU;gBAAE,OAAO,UAAU,CAAA;YACrF,OAAO,SAAS,CAAA;QAClB,CAAC;QAKD,KAAK,CAAC,OAAgB;YACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAA;YACrB,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAA;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,CAAC,OAAgB;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YACzB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAA;YACvB,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAA;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC,OAAgB;YACnB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YACzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;YACpB,IAAI,CAAC,QAAQ,GAAG,OAAO,IAAI,SAAS,CAAA;YACpC,OAAO,IAAI,CAAA;QACb,CAAC;QAED,KAAK;YACH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,CAAA;YACpC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;YACxE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAA;YACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;YAC1B,IAAI,CAAC,MAAM,GAAG,OAAO,CAAA;YACrB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAA;YAC5B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,UAAU;YACR,OAAO,IAAI,CAAC,SAAS,KAAK,UAAU,CAAA;QACtC,CAAC;QAED,KAAK;YACH,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAA;YACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;YACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;YAC/B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YACpC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;YACnC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;YAC7B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,cAAc,CAAC,KAAiB;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAA;YACzB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAA;YAC1B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;gBACrB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE;oBACxB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAA;iBAC7B;gBAED,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzB,CAAC,CAAC,CAAA;YAEF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;iBACtB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;gBACf,MAAM,iBAAiB,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACtE,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC3C,OAAO,CAAC,CAAC,iBAAiB,IAAI,WAAW,CAAC,CAAA;YAC5C,CAAC,CAAC;iBACD,MAAM,CAAC,KAAK,CAAC,CAAA;YAEhB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,KAAK,CAAC,IAAU;YACd,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE;gBACzD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;aACrD;YAED,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAChD,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAA;YACxC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAA;YACjD,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAA;YAC7C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;YACpE,OAAO,OAAO,CAAA;QAChB,CAAC;QAED,0BAA0B;QAC1B,IAAI,CAAC,UAA8D;YACjE,MAAM,IAAI,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAEzE,CAAA;YAED,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;gBACvC,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,GAAG,CAAC,CAAA;aAChD;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC,CAAA;YACpE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YACjB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,GAAG,CAAC,QAAgB;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAA;QACnE,CAAC;QAED,MAAM,CAAC,QAAgB;YACrB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAA;QACtE,CAAC;QAED,eAAe;QACf,QAAQ;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAC,CAAC,CAAC,CAAA;YAC9E,IAAI,CAAC,SAAS,GAAG,UAAU,CAAA;YAC3B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,QAAQ;YACN,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAC,CAAC,CAAC,CAAA;YAC9E,IAAI,CAAC,SAAS,GAAG,UAAU,CAAA;YAC3B,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,CAAc,EAAsB;YACxC,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAqB,EAAC,CAAC,CAAC,CAAA;QACnF,CAAC;QAED;;WAEG;QACH,KAAK,CAAC,EAA0B;YAC9B,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAqB,EAAC,CAAC,CAAC,CAAA;QACnF,CAAC;QAED,GAAG,CAAC,GAAW;YACb,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,GAAG,CAAC,GAAW;YACb,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QAC9D,CAAC;QAED,MAAM,CAAC,GAAW;YAChB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QACjE,CAAC;QAED,KAAK,CAAC,KAA0B;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YACrD,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAC,CAAC,CAAC,CAAA;QACnE,CAAC;QAED,eAAe;QACf,OAAO;YACL,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC,CAAC,CAAA;QACjD,CAAC;QAED,SAAS,CAAC,KAAa;YACrB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAC,CAAC,CAAC,CAAA;QACtE,CAAC;QAED,QAAQ;YACN,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAAC,CAAC,CAAC,CAAA;QAC5D,CAAC;QAED,QAAQ;YACN,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAC,CAAC,CAAC,CAAA;QACjE,CAAC;QAED,WAAW,CAAC,GAAW;YACrB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QACtE,CAAC;QAED,QAAQ,CAAC,GAAW;YAClB,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAC,CAAC,CAAC,CAAA;QACnE,CAAC;QAED,cAAc;QACd,SAAS;YACP,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAC,CAAC,CAAC,CAAA;QAC/E,CAAC;QAED,SAAS;YACP,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAC,CAAC,CAAC,CAAA;QAC/E,CAAC;QAMD,KAAK,CACH,OAAe,EACf,CAA8C,EAC9C,CAAqC;YAErC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,CAAA;YAC3D,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,CAAA;YAErE,MAAM,UAAU,GAAgC;gBAC9C,OAAO;gBACP,IAAI;gBACJ,MAAM,EAAE,MAAM,IAAI,KAAK;aACxB,CAAA;YAED,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,UAAU,EAAC,CAAC,CAAC,CAAA;QAC3D,CAAC;QAED,KAAK;YACH,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,OAAO,EAAC,CAAC,CAAC,CAAA;QAC/C,CAAC;QAED,GAAG,CAAC,IAKH;YACC,MAAM,UAAU,GAAG,IAAI,EAAE,MAAM,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YACpD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;YAErE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;gBACnB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;aAChE;YAED,MAAM,UAAU,GAA8B;gBAC5C,OAAO,EAAE;oBACP,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;wBAC7B,IAAI,CAAC,CAAC,MAAM,YAAY,MAAM,CAAC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;4BAC7D,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAA;yBACvD;wBAED,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAA;oBACrF,CAAC,CAAC;oBACF,aAAa,EAAE,IAAI,EAAE,aAAa,IAAI,KAAK;oBAC3C,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,KAAK;oBACzC,gBAAgB,EAAE,IAAI,EAAE,gBAAgB,IAAI,KAAK;iBAClD;aACF,CAAA;YAED,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,KAAK,EAAE,UAAU,EAAC,CAAC,CAAC,CAAA;QACzD,CAAC;QAED,aAAa;QACb,MAAM;YACJ,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAC,CAAA;QAChD,CAAC;QAED,eAAe;QACf,SAAS;YACP,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,CAAC,KAAiB;YACtB,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAC3B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;aACjE;YAED,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAA;YACpC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAA;YACxB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,aAAa;YACX,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACvC,IAAI,SAAqC,CAAA;YACzC,IAAI,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBACjD,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;aACrD;iBAAM;gBACL,SAAS,GAAG,OAAO,CAAA;aACpB;YAED,OAAO,IAAI,CAAC,cAAc,CAAC,CAAC,EAAC,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,EAAC,SAAS,EAAC,EAAC,CAAC,CAAC,CAAA;QAChF,CAAC;QAED,KAAK,CAAC,QAAQ,CAAC,KAAc,EAAE,OAA0B;YACvD,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;aACnC;YAED,MAAM,YAAY,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAA;YAE1D,0CAA0C;YAC1C,IAAI,YAAY,IAAI,IAAI,CAAC,SAAS,KAAK,UAAU,EAAE;gBACjD,OAAO,WAAiC,CAAA;aACzC;YAED,MAAM,KAAK;YACT,iFAAiF;YACjF,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,YAAY;gBAC1C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;gBACtD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;YAEjB,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,gBAAgB,CAAA;YAEjF,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;oBAC3B,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAA;iBACjE;gBAED,MAAM,SAAS,GAA0B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC9D,IAAI,CAAC,SAAS,EAAE;oBACd,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,4BAA4B,CAAA;oBAClF,MAAM,IAAI,KAAK,CAAC,uBAAuB,IAAI,CAAC,IAAI,mBAAmB,OAAO,EAAE,CAAC,CAAA;iBAC9E;gBAED,IAAI,cAAc,GAAG,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAA;gBAClE,IAAI,UAAU,CAAC,cAAc,CAAC,EAAE;oBAC9B,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,CAAA;iBAC1D;gBAED,IAAI,MAAM,CAAA;gBACV,IAAI;oBACF,MAAM,GAAG,MAAM,SAAS,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;iBACxE;gBAAC,OAAO,GAAG,EAAE;oBACZ,MAAM,kBAAkB,GAAG,IAAI,oBAAoB,CACjD,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,gDAC3B,GAAG,CAAC,OACN,EAAE,CACH,CAAA;oBACD,OAAO,yBAAyB,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;iBACvE;gBAED,OAAO,yBAAyB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAChE,CAAC,CAAC,CACH,CAAA;YAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAA;QACvB,CAAC;KACF;IArWiB,YAAS,GAAG,SAAS;IAC9B,QAAK,GAAG,CAAC,GAAgB,EAAQ,EAAE,CAAC,IAAI,EAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IAC/D,SAAM,GAAG,CAAC,GAAgB,EAAQ,EAAE,CAAC,IAAI,EAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjE,SAAM,GAAG,CAAC,GAAgB,EAAQ,EAAE,CAAC,IAAI,EAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjE,SAAM,GAAG,CAAC,GAAgB,EAAQ,EAAE,CAAC,IAAI,EAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACjE,UAAO,GAAG,CAAC,GAAgB,EAAQ,EAAE,CAAC,IAAI,EAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;IACnE,WAAQ,GAAG,CAAC,GAAgB,EAAQ,EAAE,CAAC,IAAI,EAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACjE,eAAY,GAAG,CAAC,IAAuB,EAA2C,EAAE,CAAC,CAAC;QAC3F,IAAI,EAAE,SAAS;QACf,IAAI;KACL,CAAC;OA2VH,CAAA;AAED,eAAe,IAAI,CAAA"}
@@ -1,4 +0,0 @@
1
- import { ValidationErrorClass } from '@sanity/types';
2
- declare const ValidationError: ValidationErrorClass;
3
- export default ValidationError;
4
- //# sourceMappingURL=ValidationError.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ValidationError.d.ts","sourceRoot":"","sources":["../../../src/ValidationError.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,oBAAoB,EACrB,MAAM,eAAe,CAAA;AAGtB,QAAA,MAAM,eAAe,EAAE,oBAoBtB,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -1,18 +0,0 @@
1
- // Follows the same pattern as Rule and RuleClass. @see Rule
2
- const ValidationError = class ValidationError {
3
- constructor(message, options = {}) {
4
- this.message = message;
5
- this.paths = options.paths || [];
6
- this.children = options.children;
7
- this.operation = options.operation;
8
- }
9
- cloneWithMessage(msg) {
10
- return new ValidationError(msg, {
11
- paths: this.paths,
12
- children: this.children,
13
- operation: this.operation,
14
- });
15
- }
16
- };
17
- export default ValidationError;
18
- //# sourceMappingURL=ValidationError.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ValidationError.js","sourceRoot":"","sources":["../../../src/ValidationError.ts"],"names":[],"mappings":"AAQA,4DAA4D;AAC5D,MAAM,eAAe,GAAyB,MAAM,eAAe;IAMjE,YAAY,OAAe,EAAE,UAAkC,EAAE;QAC/D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAA;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QAChC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IACpC,CAAC;IAED,gBAAgB,CAAC,GAAW;QAC1B,OAAO,IAAI,eAAe,CAAC,GAAG,EAAE;YAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,CAAA;IACJ,CAAC;CACF,CAAA;AAED,eAAe,eAAe,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,QAAQ,CAAA;AAC9B,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AACjD,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;;;;;;;AAEvD,wBAAwF;AACxF,OAAO,EAAC,SAAS,IAAI,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAC,CAAA"}
@@ -1,7 +0,0 @@
1
- import RuleClass from './Rule';
2
- import validateDocument from './validateDocument';
3
- import inferFromSchema from './inferFromSchema';
4
- import inferFromSchemaType from './inferFromSchemaType';
5
- export default { Rule: RuleClass, validateDocument, inferFromSchema, inferFromSchemaType };
6
- export { RuleClass as Rule, validateDocument, inferFromSchema, inferFromSchemaType };
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,QAAQ,CAAA;AAC9B,OAAO,gBAAgB,MAAM,oBAAoB,CAAA;AACjD,OAAO,eAAe,MAAM,mBAAmB,CAAA;AAC/C,OAAO,mBAAmB,MAAM,uBAAuB,CAAA;AAEvD,eAAe,EAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAC,CAAA;AACxF,OAAO,EAAC,SAAS,IAAI,IAAI,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,EAAC,CAAA"}
@@ -1,4 +0,0 @@
1
- import { Schema } from '@sanity/types';
2
- declare function inferFromSchema(schema: Schema): Schema;
3
- export default inferFromSchema;
4
- //# sourceMappingURL=inferFromSchema.d.ts.map