@based/schema 0.0.16 → 1.0.1

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 (112) hide show
  1. package/dist/{set/error.d.ts → error.d.ts} +4 -2
  2. package/dist/{set/error.js → error.js} +2 -0
  3. package/dist/error.js.map +1 -0
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/set/fields/array.d.ts +2 -0
  8. package/dist/set/fields/array.js +96 -0
  9. package/dist/set/fields/array.js.map +1 -0
  10. package/dist/set/fields/index.d.ts +3 -0
  11. package/dist/set/fields/index.js +72 -0
  12. package/dist/set/fields/index.js.map +1 -0
  13. package/dist/set/fields/number.d.ts +4 -0
  14. package/dist/set/fields/number.js +121 -0
  15. package/dist/set/fields/number.js.map +1 -0
  16. package/dist/set/fields/object.d.ts +3 -0
  17. package/dist/set/fields/object.js +33 -0
  18. package/dist/set/fields/object.js.map +1 -0
  19. package/dist/set/fields/references.d.ts +3 -0
  20. package/dist/set/fields/references.js +106 -0
  21. package/dist/set/fields/references.js.map +1 -0
  22. package/dist/set/fields/set.d.ts +2 -0
  23. package/dist/set/fields/set.js +63 -0
  24. package/dist/set/fields/set.js.map +1 -0
  25. package/dist/set/fields/string.d.ts +3 -0
  26. package/dist/set/fields/string.js +190 -0
  27. package/dist/set/fields/string.js.map +1 -0
  28. package/dist/set/index.d.ts +2 -5
  29. package/dist/set/index.js +98 -126
  30. package/dist/set/index.js.map +1 -1
  31. package/dist/set/isValidId.d.ts +2 -0
  32. package/dist/set/isValidId.js +21 -0
  33. package/dist/set/isValidId.js.map +1 -0
  34. package/dist/set/types.d.ts +0 -5
  35. package/dist/set/types.js +0 -2
  36. package/dist/types.d.ts +7 -1
  37. package/dist/types.js.map +1 -1
  38. package/dist/walker/args.d.ts +31 -0
  39. package/dist/walker/args.js +120 -0
  40. package/dist/walker/args.js.map +1 -0
  41. package/dist/walker/index.d.ts +6 -0
  42. package/dist/walker/index.js +40 -0
  43. package/dist/walker/index.js.map +1 -0
  44. package/dist/walker/parse.d.ts +2 -0
  45. package/dist/walker/parse.js +157 -0
  46. package/dist/walker/parse.js.map +1 -0
  47. package/dist/walker/types.d.ts +44 -0
  48. package/dist/walker/types.js +9 -0
  49. package/dist/walker/types.js.map +1 -0
  50. package/package.json +2 -2
  51. package/src/{set/error.ts → error.ts} +3 -1
  52. package/src/index.ts +2 -2
  53. package/src/set/fields/array.ts +111 -0
  54. package/src/set/fields/index.ts +69 -0
  55. package/src/set/fields/number.ts +134 -0
  56. package/src/set/fields/object.ts +30 -0
  57. package/src/set/fields/references.ts +114 -0
  58. package/src/set/fields/set.ts +63 -0
  59. package/src/set/fields/string.ts +199 -0
  60. package/src/set/index.ts +103 -188
  61. package/src/set/isValidId.ts +23 -0
  62. package/src/set/types.ts +0 -20
  63. package/src/types.ts +4 -2
  64. package/src/walker/args.ts +159 -0
  65. package/src/walker/index.ts +35 -0
  66. package/src/walker/parse.ts +193 -0
  67. package/src/walker/types.ts +75 -0
  68. package/test/number.ts +289 -543
  69. package/test/reference.ts +150 -198
  70. package/test/rest.ts +227 -0
  71. package/test/string.ts +139 -183
  72. package/test/utils/index.ts +23 -0
  73. package/test/walker.ts +558 -3
  74. package/dist/set/collections.d.ts +0 -5
  75. package/dist/set/collections.js +0 -229
  76. package/dist/set/collections.js.map +0 -1
  77. package/dist/set/error.js.map +0 -1
  78. package/dist/set/number.d.ts +0 -4
  79. package/dist/set/number.js +0 -124
  80. package/dist/set/number.js.map +0 -1
  81. package/dist/set/parseDefaultAndValue.d.ts +0 -3
  82. package/dist/set/parseDefaultAndValue.js +0 -35
  83. package/dist/set/parseDefaultAndValue.js.map +0 -1
  84. package/dist/set/parsers.d.ts +0 -3
  85. package/dist/set/parsers.js +0 -42
  86. package/dist/set/parsers.js.map +0 -1
  87. package/dist/set/references.d.ts +0 -3
  88. package/dist/set/references.js +0 -84
  89. package/dist/set/references.js.map +0 -1
  90. package/dist/set/rest.d.ts +0 -5
  91. package/dist/set/rest.js +0 -76
  92. package/dist/set/rest.js.map +0 -1
  93. package/dist/set/string.d.ts +0 -3
  94. package/dist/set/string.js +0 -173
  95. package/dist/set/string.js.map +0 -1
  96. package/dist/set2/index.d.ts +0 -0
  97. package/dist/set2/index.js +0 -71
  98. package/dist/set2/index.js.map +0 -1
  99. package/dist/walker.d.ts +0 -51
  100. package/dist/walker.js +0 -120
  101. package/dist/walker.js.map +0 -1
  102. package/src/set/collections.ts +0 -338
  103. package/src/set/number.ts +0 -167
  104. package/src/set/parseDefaultAndValue.ts +0 -54
  105. package/src/set/parsers.ts +0 -20
  106. package/src/set/references.ts +0 -113
  107. package/src/set/rest.ts +0 -135
  108. package/src/set/string.ts +0 -254
  109. package/src/set2/index.ts +0 -71
  110. package/src/walker.ts +0 -201
  111. package/test/setWalker.ts +0 -494
  112. package/test/text.ts +0 -171
@@ -1,338 +0,0 @@
1
- import { Parser } from './types'
2
- import { error, ParseError } from './error'
3
- import { fieldWalker } from '.'
4
-
5
- // what about making errors return signature
6
-
7
- export const set: Parser<'set'> = async (
8
- path,
9
- value,
10
- fieldSchema,
11
- typeSchema,
12
- target,
13
- handlers,
14
- noCollect
15
- ) => {
16
- if (value && typeof value === 'object') {
17
- if (value.$default) {
18
- error(handlers, ParseError.defaultNotSupported, path)
19
- }
20
-
21
- if (value.$value) {
22
- value = value.$value
23
- }
24
- }
25
-
26
- const q: Promise<void>[] = []
27
- const fieldDef = fieldSchema.items
28
-
29
- if (Array.isArray(value)) {
30
- const parsedArray = []
31
- for (let i = 0; i < value.length; i++) {
32
- q.push(
33
- fieldWalker([...path, i], value[i], fieldDef, typeSchema, target, {
34
- ...handlers,
35
- collect: ({ value }) => {
36
- parsedArray.push(value)
37
- },
38
- })
39
- )
40
- }
41
- await Promise.all(q)
42
- if (!noCollect) {
43
- handlers.collect({
44
- path,
45
- value: { $value: parsedArray },
46
- typeSchema,
47
- fieldSchema,
48
- target,
49
- })
50
- }
51
- } else {
52
- if (value.$add) {
53
- for (let i = 0; i < value.$add.length; i++) {
54
- q.push(
55
- fieldWalker(
56
- path,
57
- value.$add[i],
58
- fieldDef,
59
- typeSchema,
60
- target,
61
- handlers,
62
- true
63
- )
64
- )
65
- }
66
- }
67
- if (value.$remove) {
68
- for (let i = 0; i < value.$remove.length; i++) {
69
- q.push(
70
- fieldWalker(
71
- path,
72
- value.$remove[i],
73
- fieldDef,
74
- typeSchema,
75
- target,
76
- handlers,
77
- true
78
- )
79
- )
80
- }
81
- }
82
- await Promise.all(q)
83
- if (!noCollect) {
84
- handlers.collect({ path, value, typeSchema, fieldSchema, target })
85
- }
86
- }
87
- }
88
-
89
- export const object: Parser<'object'> = async (
90
- path,
91
- value,
92
- fieldSchema,
93
- typeSchema,
94
- target,
95
- handlers,
96
- noCollect
97
- ) => {
98
- if (typeof value !== 'object') {
99
- error(handlers, ParseError.incorrectFormat, path)
100
- return
101
- }
102
- const isArray = Array.isArray(value)
103
- if (isArray) {
104
- error(handlers, ParseError.incorrectFormat, path)
105
- return
106
- }
107
- const q: Promise<void>[] = []
108
- for (const key in value) {
109
- const propDef = fieldSchema.properties[key]
110
- if (!propDef) {
111
- error(handlers, ParseError.fieldDoesNotExist, [...path, key])
112
- continue
113
- }
114
- q.push(
115
- fieldWalker(
116
- [...path, key],
117
- value[key],
118
- propDef,
119
- typeSchema,
120
- target,
121
- handlers,
122
- noCollect
123
- )
124
- )
125
- }
126
- await Promise.all(q)
127
- if (fieldSchema.required) {
128
- for (const req of fieldSchema.required) {
129
- if (!(req in value)) {
130
- target.required.push([...path, req])
131
- }
132
- }
133
- }
134
- }
135
-
136
- // IF REQUIRED AND PUSH OR UNSHIFT just throw here scince we dont need to parse at all...
137
- export const array: Parser<'array'> = async (
138
- path,
139
- value,
140
- fieldSchema,
141
- typeSchema,
142
- target,
143
- handlers,
144
- noCollect
145
- ) => {
146
- let isArray = Array.isArray(value)
147
- let parsedValue = value
148
- let opCount = 0
149
- let has$Value = false
150
- if (typeof parsedValue === 'object' && !isArray) {
151
- if (value.$value) {
152
- opCount++
153
- has$Value = true
154
- parsedValue = value.$value
155
- isArray = Array.isArray(parsedValue)
156
- }
157
- if (value.$insert) {
158
- opCount++
159
- if (opCount > 1) {
160
- error(handlers, ParseError.multipleOperationsNotAllowed, path)
161
- return
162
- }
163
- if (
164
- typeof value.$insert !== 'object' ||
165
- value.$insert.$idx === undefined
166
- ) {
167
- error(handlers, ParseError.incorrectFormat, path)
168
- return
169
- } else {
170
- const insert = Array.isArray(value.$insert.$value)
171
- ? value.$insert.$value
172
- : [value.$insert.$value]
173
- const q: Promise<void>[] = []
174
- for (let i = 0; i < insert.length; i++) {
175
- q.push(
176
- fieldWalker(
177
- path,
178
- insert[i],
179
- fieldSchema.values,
180
- typeSchema,
181
- target,
182
- handlers,
183
- true
184
- )
185
- )
186
- }
187
- await Promise.all(q)
188
- }
189
- }
190
- if (value.$remove) {
191
- opCount++
192
- if (opCount > 1) {
193
- error(handlers, ParseError.multipleOperationsNotAllowed, path)
194
- return
195
- }
196
- if (value.$remove.$idx === undefined) {
197
- error(handlers, ParseError.incorrectFormat, path)
198
- return
199
- }
200
- }
201
- if (value.$push) {
202
- opCount++
203
- if (opCount > 1) {
204
- error(handlers, ParseError.multipleOperationsNotAllowed, path)
205
- return
206
- }
207
-
208
- // TODO: FIX PUSH PARSING
209
- const q: Promise<void>[] = []
210
- const push = Array.isArray(value.$push) ? value.$push : [value.$push]
211
- for (let i = 0; i < push.length; i++) {
212
- q.push(
213
- fieldWalker(
214
- // exception
215
- [...path, '$push', i],
216
- push[i],
217
- fieldSchema.values,
218
- typeSchema,
219
- target,
220
- handlers,
221
- true
222
- )
223
- )
224
- }
225
- await Promise.all(q)
226
- parsedValue = { $push: push }
227
- }
228
- if (value.$unshift) {
229
- opCount++
230
- if (opCount > 1) {
231
- error(handlers, ParseError.multipleOperationsNotAllowed, path)
232
- return
233
- }
234
- const q: Promise<void>[] = []
235
- const unshift = Array.isArray(value.$unshift)
236
- ? value.$unshift
237
- : [value.$unshift]
238
-
239
- // TODO: FIX UNSHIFT PARSING
240
- for (let i = 0; i < unshift.length; i++) {
241
- q.push(
242
- fieldWalker(
243
- // exception
244
- [...path, '$unshift', i],
245
- unshift[i],
246
- fieldSchema.values,
247
- typeSchema,
248
- target,
249
- handlers,
250
- true
251
- )
252
- )
253
- }
254
- await Promise.all(q)
255
- parsedValue = { $unshift: unshift }
256
- }
257
- if (value.$assign) {
258
- opCount++
259
- if (opCount > 1) {
260
- error(handlers, ParseError.multipleOperationsNotAllowed, path)
261
- return
262
- }
263
- if (
264
- typeof value.$assign !== 'object' ||
265
- typeof value.$assign.$idx !== 'number'
266
- ) {
267
- error(handlers, ParseError.incorrectFormat, path)
268
- return
269
- }
270
- await fieldWalker(
271
- [...path, value.$assign.$idx],
272
- value.$assign.$value,
273
- fieldSchema.values,
274
- typeSchema,
275
- target,
276
- handlers,
277
- noCollect
278
- )
279
- return
280
- }
281
- if (!has$Value && !noCollect) {
282
- handlers.collect({
283
- path,
284
- value: parsedValue,
285
- typeSchema,
286
- fieldSchema,
287
- target,
288
- })
289
- }
290
- if (!has$Value) {
291
- return
292
- }
293
- }
294
- if (!isArray) {
295
- error(handlers, ParseError.incorrectFieldType, path)
296
- return
297
- }
298
- const q: Promise<void>[] = []
299
- const collector: any[] = []
300
- const nHandler = noCollect
301
- ? handlers
302
- : {
303
- ...handlers,
304
- collect: (collect) => {
305
- collector.push(collect)
306
- },
307
- }
308
- for (let i = 0; i < parsedValue.length; i++) {
309
- q.push(
310
- fieldWalker(
311
- [...path, i],
312
- parsedValue[i],
313
- fieldSchema.values,
314
- typeSchema,
315
- target,
316
- nHandler,
317
- noCollect
318
- )
319
- )
320
- }
321
-
322
- await Promise.all(q)
323
-
324
- if (!noCollect) {
325
- handlers.collect({
326
- path,
327
- typeSchema,
328
- fieldSchema,
329
- target,
330
- value: { $delete: true },
331
- })
332
- for (const c of collector) {
333
- handlers.collect(c)
334
- }
335
- }
336
- }
337
-
338
- export const record: Parser<'record'> = async (path, value, fieldSchema) => {}
package/src/set/number.ts DELETED
@@ -1,167 +0,0 @@
1
- import { Parser } from './types'
2
- import { error, ParseError } from './error'
3
- import {
4
- BasedSchemaFieldInteger,
5
- BasedSchemaFieldNumber,
6
- BasedSchemaFieldTimeStamp,
7
- BasedSetHandlers,
8
- } from '../types'
9
-
10
- const validate = (
11
- handlers: BasedSetHandlers,
12
- path: (number | string)[],
13
- value: any,
14
- fieldSchema:
15
- | BasedSchemaFieldInteger
16
- | BasedSchemaFieldNumber
17
- | BasedSchemaFieldTimeStamp
18
- ): number | false => {
19
- if (typeof value !== 'number') {
20
- error(handlers, ParseError.incorrectFormat, path)
21
- return false
22
- }
23
- if (fieldSchema.type === 'integer' && value - Math.floor(value) !== 0) {
24
- error(handlers, ParseError.incorrectFormat, path)
25
- return false
26
- }
27
- if (
28
- fieldSchema.multipleOf &&
29
- value / fieldSchema.multipleOf -
30
- Math.floor(value / fieldSchema.multipleOf) !==
31
- 0
32
- ) {
33
- error(handlers, ParseError.incorrectFormat, path)
34
- return false
35
- }
36
- if (fieldSchema.maximum) {
37
- if (fieldSchema.exclusiveMaximum) {
38
- if (value >= fieldSchema.maximum) {
39
- error(handlers, ParseError.exceedsMaximum, path)
40
- return false
41
- }
42
- } else if (value > fieldSchema.maximum) {
43
- error(handlers, ParseError.exceedsMaximum, path)
44
- return false
45
- }
46
- }
47
- if (fieldSchema.minimum) {
48
- if (fieldSchema.exclusiveMinimum) {
49
- if (value <= fieldSchema.minimum) {
50
- error(handlers, ParseError.subceedsMinimum, path)
51
- return false
52
- }
53
- } else if (value < fieldSchema.minimum) {
54
- error(handlers, ParseError.subceedsMinimum, path)
55
- return false
56
- }
57
- }
58
- return value
59
- }
60
-
61
- const shared = (
62
- handlers: BasedSetHandlers,
63
- path: (number | string)[],
64
- value: any,
65
- fieldSchema:
66
- | BasedSchemaFieldInteger
67
- | BasedSchemaFieldNumber
68
- | BasedSchemaFieldTimeStamp
69
- ): any => {
70
- if (typeof value === 'object') {
71
- if (value.$increment) {
72
- validate(handlers, [...path, '$increment'], value.$increment, fieldSchema)
73
- }
74
- if (value.$decrement) {
75
- validate(handlers, [...path, '$decrement'], value.$decrement, fieldSchema)
76
- }
77
- if (value.$value !== undefined) {
78
- validate(handlers, path, value.$value, fieldSchema)
79
- }
80
- if (value.$default !== undefined) {
81
- if (value.$value !== undefined) {
82
- error(handlers, ParseError.valueAndDefault, path)
83
- return
84
- }
85
- validate(handlers, path, value.$default, fieldSchema)
86
- }
87
- } else {
88
- validate(handlers, path, value, fieldSchema)
89
- }
90
- return value
91
- }
92
-
93
- export const timestamp: Parser<'timestamp'> = async (
94
- path,
95
- value,
96
- fieldSchema,
97
- typeSchema,
98
- target,
99
- handlers,
100
- noCollect
101
- ) => {
102
- if (typeof value === 'string') {
103
- // TODO: now + 10 and stuff
104
- if (value === 'now') {
105
- value = Date.now()
106
- } else {
107
- const d = new Date(value)
108
- value = d.valueOf()
109
- if (isNaN(value)) {
110
- error(handlers, ParseError.incorrectFormat, path)
111
- return
112
- }
113
- }
114
- }
115
- const parsedValue = shared(handlers, path, value, fieldSchema)
116
- if (!noCollect) {
117
- handlers.collect({
118
- path,
119
- value: parsedValue,
120
- typeSchema,
121
- fieldSchema,
122
- target,
123
- })
124
- }
125
- }
126
-
127
- export const number: Parser<'number'> = async (
128
- path,
129
- value,
130
- fieldSchema,
131
- typeSchema,
132
- target,
133
- handlers,
134
- noCollect
135
- ) => {
136
- const parsedValue = shared(handlers, path, value, fieldSchema)
137
- if (!noCollect) {
138
- handlers.collect({
139
- path,
140
- value: parsedValue,
141
- typeSchema,
142
- fieldSchema,
143
- target,
144
- })
145
- }
146
- }
147
-
148
- export const integer: Parser<'integer'> = async (
149
- path,
150
- value,
151
- fieldSchema,
152
- typeSchema,
153
- target,
154
- handlers,
155
- noCollect
156
- ) => {
157
- const parsedValue = shared(handlers, path, value, fieldSchema)
158
- if (!noCollect) {
159
- handlers.collect({
160
- path,
161
- value: parsedValue,
162
- typeSchema,
163
- fieldSchema,
164
- target,
165
- })
166
- }
167
- }
@@ -1,54 +0,0 @@
1
- import { BasedSchemaFields } from '../types'
2
- import { Parser } from './types'
3
- import { error, ParseError } from './error'
4
- import parsers from './parsers'
5
-
6
- export const parseValueAndDefault: Parser<keyof BasedSchemaFields> = async (
7
- path,
8
- value,
9
- fieldSchema,
10
- typeSchema,
11
- target,
12
- handlers,
13
- noCollect
14
- ): Promise<boolean> => {
15
- let handled = false
16
- if (typeof value === 'object') {
17
- const typeDef = fieldSchema.type ?? ('enum' in fieldSchema ? 'enum' : '')
18
- const parse = parsers[typeDef]
19
- if (value.$value !== undefined) {
20
- // TODO: for errors handle path a bit smarter...
21
- await parse(
22
- path,
23
- value.$value,
24
- fieldSchema,
25
- typeSchema,
26
- target,
27
- handlers,
28
- true
29
- )
30
- handled = true
31
- }
32
- if (value.$default !== undefined) {
33
- if (value.$value !== undefined) {
34
- error(handlers, ParseError.valueAndDefault, path)
35
- }
36
- console.info('->', path, 'go')
37
- await parse(
38
- path,
39
- value.$default,
40
- fieldSchema,
41
- typeSchema,
42
- target,
43
- handlers,
44
- true
45
- )
46
- handled = true
47
- }
48
- }
49
- if (handled && !noCollect) {
50
- console.log('collect?')
51
- handlers.collect({ path, value, typeSchema, fieldSchema, target })
52
- }
53
- return handled
54
- }
@@ -1,20 +0,0 @@
1
- import { Parsers } from './types'
2
- import * as references from './references'
3
- import * as collections from './collections'
4
- import * as number from './number'
5
- import * as string from './string'
6
-
7
- import { enumParser, boolean, cardinality, json } from './rest'
8
-
9
- const parsers: Parsers = {
10
- ...string,
11
- ...references,
12
- ...collections,
13
- ...number,
14
- enum: enumParser,
15
- boolean,
16
- cardinality,
17
- json,
18
- }
19
-
20
- export default parsers
@@ -1,113 +0,0 @@
1
- import { Parser } from './types'
2
- import { error, ParseError } from './error'
3
-
4
- export const reference: Parser<'reference'> = async (
5
- path,
6
- value,
7
- fieldSchema,
8
- typeSchema,
9
- target,
10
- handlers,
11
- noCollect
12
- ) => {
13
- // $no root
14
- // prob pass these as options
15
- // value .default
16
- // $value
17
-
18
- if (typeof value !== 'string') {
19
- error(handlers, ParseError.incorrectFormat, path)
20
- }
21
-
22
- if ('allowedTypes' in fieldSchema) {
23
- const prefix = value.slice(0, 2)
24
- const targetType = target.schema.prefixToTypeMapping[prefix]
25
- if (!targetType) {
26
- error(handlers, ParseError.referenceIsIncorrectType, path)
27
- return
28
- }
29
- let typeMatches = false
30
- for (const t of fieldSchema.allowedTypes) {
31
- if (typeof t === 'string') {
32
- if (t === targetType) {
33
- typeMatches = true
34
- break
35
- }
36
- } else {
37
- if (t.type && t.type === targetType) {
38
- typeMatches = true
39
- if (t.$filter) {
40
- if (!(await handlers.referenceFilterCondition(value, t.$filter))) {
41
- error(handlers, ParseError.referenceIsIncorrectType, path)
42
- return
43
- }
44
- }
45
- } else if (!t.type && t.$filter) {
46
- if (!(await handlers.referenceFilterCondition(value, t.$filter))) {
47
- error(handlers, ParseError.referenceIsIncorrectType, path)
48
- return
49
- }
50
- }
51
- }
52
- }
53
- if (typeMatches === false) {
54
- error(handlers, ParseError.referenceIsIncorrectType, path)
55
- return
56
- }
57
- }
58
- if (!noCollect) {
59
- handlers.collect({ path, value, typeSchema, fieldSchema, target })
60
- }
61
- }
62
-
63
- export const references: Parser<'references'> = async (
64
- path,
65
- value,
66
- fieldSchema,
67
- typeSchema,
68
- target,
69
- handlers,
70
- noCollect
71
- ) => {
72
- // default
73
- // $no root
74
- if (Array.isArray(value)) {
75
- await Promise.all(
76
- value.map((v, i) => {
77
- return reference(
78
- [...path, i],
79
- v,
80
- // not nice slow
81
- { ...fieldSchema, type: 'reference' },
82
- typeSchema,
83
- target,
84
- handlers,
85
- true
86
- )
87
- })
88
- )
89
- value = { $value: value }
90
- } else if (typeof value === 'object') {
91
- if (value.$add) {
92
- await Promise.all(
93
- value.$add.map((v, i) => {
94
- return reference(
95
- [...path, '$add', i],
96
- v,
97
- // not nice slow
98
- { ...fieldSchema, type: 'reference' },
99
- typeSchema,
100
- target,
101
- handlers,
102
- true
103
- )
104
- })
105
- )
106
- }
107
- } else {
108
- error(handlers, ParseError.incorrectFormat, path)
109
- }
110
- if (!noCollect) {
111
- handlers.collect({ path, value, typeSchema, fieldSchema, target })
112
- }
113
- }