shinkansen-transmission 2.2.235 → 2.3.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 (38) hide show
  1. package/babel.config.cjs +1 -0
  2. package/eslint.config.mjs +28 -30
  3. package/index.d.mts +321 -16
  4. package/package.json +6 -6
  5. package/src/index.cjs +2 -0
  6. package/src/index.d.mts +10 -9
  7. package/src/transmission/common/index.d.mts +153 -87
  8. package/src/transmission/common/index.mjs +670 -175
  9. package/src/transmission/from-document-to-hash/array/index.mjs +20 -4
  10. package/src/transmission/from-document-to-hash/boolean/index.mjs +25 -9
  11. package/src/transmission/from-document-to-hash/index.d.mts +8 -19
  12. package/src/transmission/from-document-to-hash/index.mjs +102 -16
  13. package/src/transmission/from-document-to-hash/null/index.mjs +25 -9
  14. package/src/transmission/from-document-to-hash/number/index.mjs +25 -9
  15. package/src/transmission/from-document-to-hash/object/index.mjs +22 -6
  16. package/src/transmission/from-document-to-hash/string/index.mjs +25 -9
  17. package/src/transmission/from-hash-to-document/array/index.mjs +22 -5
  18. package/src/transmission/from-hash-to-document/boolean/index.mjs +21 -4
  19. package/src/transmission/from-hash-to-document/index.d.mts +24 -26
  20. package/src/transmission/from-hash-to-document/index.mjs +264 -142
  21. package/src/transmission/from-hash-to-document/null/index.mjs +21 -4
  22. package/src/transmission/from-hash-to-document/number/index.mjs +21 -4
  23. package/src/transmission/from-hash-to-document/object/index.mjs +22 -5
  24. package/src/transmission/from-hash-to-document/string/index.mjs +26 -4
  25. package/src/transmission/index.d.mts +4 -10
  26. package/src/transmission/to-zashiki/index.d.mts +5 -13
  27. package/src/transmission/to-zashiki/params/index.mjs +430 -0
  28. package/src/transmission/to-zashiki/render/array/index.mjs +737 -0
  29. package/src/transmission/to-zashiki/render/boolean/index.mjs +794 -0
  30. package/src/transmission/to-zashiki/render/index.mjs +157 -0
  31. package/src/transmission/to-zashiki/render/null/index.mjs +796 -0
  32. package/src/transmission/to-zashiki/render/number/index.mjs +940 -0
  33. package/src/transmission/to-zashiki/render/object/index.mjs +653 -0
  34. package/src/transmission/to-zashiki/render/string/index.mjs +910 -0
  35. package/src/transmission/to-zashiki/render-params/root-schema/index.mjs +212 -0
  36. package/src/transmission/to-zashiki/render-params/schema/index.mjs +731 -0
  37. package/src/transmission/to-zashiki/transform-root-schema.mjs +485 -421
  38. package/src/transmission/to-zashiki/transform-schema.mjs +1988 -4663
@@ -1,26 +1,22 @@
1
+ /**
2
+ * @typedef {TransmissionTypes.SchemaType} SchemaType
3
+ * @typedef {TransmissionTypes.ValuesType} ValuesType
4
+ * @typedef {TransmissionTypes.ParamsType} ParamsType
5
+ *
6
+ * @typedef {TransmissionTypes.Zashiki.ZashikiType} ZashikiType
7
+ */
8
+
1
9
  import debug from 'debug'
2
10
 
3
11
  import {
4
12
  isArray,
5
13
  isObject,
6
-
7
14
  getSelectedItems,
8
-
9
15
  hasEnum,
10
- getEnum,
11
16
  hasAnyOf,
12
17
  hasOneOf,
13
18
  hasAllOf,
14
-
15
- normaliseUri,
16
-
17
- getMetaProps,
18
-
19
- getElementsProps,
20
- getElementsFieldPropsForEnum,
21
- getElementsFieldPropsForAnyOf,
22
- getElementsFieldPropsForOneOf,
23
- getElementsFieldPropsForAllOf
19
+ getMetaProps
24
20
  } from '#transmission/transmission/common'
25
21
 
26
22
  import {
@@ -30,225 +26,93 @@ import {
30
26
  mapTransformNullByIndex,
31
27
  mapTransformArrayByIndex,
32
28
  mapTransformObjectByIndex,
33
-
34
29
  mapTransformByIndex,
35
30
  getTransformByIndex,
31
+ mapTransformByKey
32
+ } from './transform-schema.mjs'
36
33
 
37
- mapTransformByKey,
38
-
39
- renderNullForEnum,
40
- renderNullForAnyOf,
41
- renderNullForOneOf,
42
- renderNullForAllOf,
43
- renderNull,
44
-
45
- renderBooleanForEnum,
46
- renderBooleanForAnyOf,
47
- renderBooleanForOneOf,
48
- renderBooleanForAllOf,
49
- renderBoolean,
50
-
51
- renderObjectForEnum,
52
- renderObjectForAnyOf,
53
- renderObjectForOneOf,
54
- renderObjectForAllOf,
55
- renderObject,
56
-
57
- renderArrayForEnum,
58
- renderArrayForAnyOf,
59
- renderArrayForOneOf,
60
- renderArrayForAllOf,
61
- renderArray,
62
-
63
- renderNumberForEnum,
64
- renderNumberForAnyOf,
65
- renderNumberForOneOf,
66
- renderNumberForAllOf,
67
- renderNumber,
34
+ import {
35
+ getRenderParamsForEnum,
36
+ getRenderParamsForAnyOf,
37
+ getRenderParamsForOneOf,
38
+ getRenderParamsForAllOf,
39
+ getRenderParams
40
+ } from './render-params/root-schema/index.mjs'
68
41
 
42
+ import {
69
43
  renderStringForEnum,
70
44
  renderStringForAnyOf,
71
45
  renderStringForOneOf,
72
46
  renderStringForAllOf,
73
47
  renderString
74
- } from './transform-schema.mjs'
75
-
76
- const log = debug('shinkansen-transmission/to-zashiki/root-schema')
48
+ } from './render/string/index.mjs'
77
49
 
78
- log('`shinkansen` is awake')
79
-
80
- export function getRenderParamsForEnum (rootSchema, values, params) {
81
- /*
82
- * log('getRenderParamsForEnum')
83
- */
84
-
85
- const {
86
- parentUri = '#',
87
- uri = '#/',
88
- selectedItems = [],
89
- items = []
90
- } = params
91
-
92
- const meta = Object.assign(getMetaProps(params, uri), {
93
- schema: rootSchema,
94
- selectedItems,
95
- items
96
- })
97
-
98
- const elements = {
99
- enum: Object.assign(getElementsFieldPropsForEnum(params, uri), {
100
- selectedItems,
101
- items
102
- })
103
- }
104
-
105
- return Object.assign(params, {
106
- parentUri,
107
- uri,
108
- [uri]: {
109
- meta,
110
- elements
111
- }
112
- })
113
- }
114
-
115
- export function getRenderParamsForAnyOf (rootSchema, values, params) {
116
- /*
117
- * log('getRenderParamsForAnyOf')
118
- */
119
-
120
- const {
121
- parentUri = '#',
122
- uri = '#/',
123
- selectedItems = [],
124
- items = []
125
- } = params
126
-
127
- const meta = Object.assign(getMetaProps(params, uri), {
128
- schema: rootSchema,
129
- selectedItems,
130
- items
131
- })
132
-
133
- const elements = {
134
- anyOf: Object.assign(getElementsFieldPropsForAnyOf(params, uri), {
135
- selectedItems,
136
- items
137
- })
138
- }
139
-
140
- return Object.assign(params, {
141
- parentUri,
142
- uri,
143
- [uri]: {
144
- meta,
145
- elements
146
- }
147
- })
148
- }
149
-
150
- export function getRenderParamsForOneOf (rootSchema, values, params) {
151
- /*
152
- * log('getRenderParamsForOneOf')
153
- */
154
-
155
- const {
156
- parentUri = '#',
157
- uri = '#/',
158
- selectedItems = [],
159
- items = []
160
- } = params
161
-
162
- const meta = Object.assign(getMetaProps(params, uri), {
163
- schema: rootSchema,
164
- selectedItems,
165
- items
166
- })
167
-
168
- const elements = {
169
- oneOf: Object.assign(getElementsFieldPropsForOneOf(params, uri), {
170
- selectedItems,
171
- items
172
- })
173
- }
174
-
175
- return Object.assign(params, {
176
- parentUri,
177
- uri,
178
- [uri]: {
179
- meta,
180
- elements
181
- }
182
- })
183
- }
184
-
185
- export function getRenderParamsForAllOf (rootSchema, values, params) {
186
- /*
187
- * log('getRenderParamsForAllOf')
188
- */
50
+ import {
51
+ renderNumberForEnum,
52
+ renderNumberForAnyOf,
53
+ renderNumberForOneOf,
54
+ renderNumberForAllOf,
55
+ renderNumber
56
+ } from './render/number/index.mjs'
189
57
 
190
- const {
191
- parentUri = '#',
192
- uri = '#/'
193
- } = params
58
+ import {
59
+ renderArrayForEnum,
60
+ renderArrayForAnyOf,
61
+ renderArrayForOneOf,
62
+ renderArrayForAllOf,
63
+ renderArray
64
+ } from './render/array/index.mjs'
194
65
 
195
- const meta = Object.assign(getMetaProps(params, uri), {
196
- schema: rootSchema
197
- })
66
+ import {
67
+ renderObjectForEnum,
68
+ renderObjectForAnyOf,
69
+ renderObjectForOneOf,
70
+ renderObjectForAllOf,
71
+ renderObject
72
+ } from './render/object/index.mjs'
198
73
 
199
- const elements = {
200
- field: getElementsFieldPropsForAllOf(params, uri)
201
- }
74
+ import {
75
+ renderBooleanForEnum,
76
+ renderBooleanForAnyOf,
77
+ renderBooleanForOneOf,
78
+ renderBooleanForAllOf,
79
+ renderBoolean
80
+ } from './render/boolean/index.mjs'
202
81
 
203
- return Object.assign(params, {
204
- parentUri,
205
- uri,
206
- [uri]: {
207
- meta,
208
- elements
209
- }
210
- })
211
- }
82
+ import {
83
+ renderNullForEnum,
84
+ renderNullForAnyOf,
85
+ renderNullForOneOf,
86
+ renderNullForAllOf,
87
+ renderNull
88
+ } from './render/null/index.mjs'
212
89
 
213
- export function getRenderParams (rootSchema, values, params) {
214
- /*
215
- * log('getRenderParams')
216
- */
90
+ const log = debug('shinkansen-transmission/to-zashiki/transform-schema')
217
91
 
218
- const {
219
- parentUri = '#',
220
- uri = '#/',
221
- fields = []
222
- } = params
92
+ log('`shinkansen` is awake')
223
93
 
224
- const meta = Object.assign(getMetaProps(params, uri), {
225
- schema: rootSchema,
226
- parentUri: normaliseUri(parentUri),
227
- uri
228
- })
229
-
230
- const elements = Object.assign(getElementsProps(params, uri), {
231
- fields
232
- })
233
-
234
- return Object.assign(params, {
235
- parentUri,
236
- uri,
237
- [uri]: {
238
- meta,
239
- elements
240
- }
241
- })
94
+ /**
95
+ * @param {SchemaType} schemaProps
96
+ * @param {SchemaType} item
97
+ * @returns {SchemaType}
98
+ */
99
+ function toSchema (schemaProps, item) {
100
+ return Object.assign(schemaProps, item)
242
101
  }
243
102
 
244
- /*
103
+ /**
245
104
  * Root schema
246
105
  *
247
106
  * "enum"
107
+ *
108
+ * @param {SchemaType} rootSchema
109
+ * @param {ValuesType} values
110
+ * @param {ParamsType} params
111
+ * @returns {ZashikiType}
248
112
  */
249
- export function transformNullForEnum (rootSchema, values, params) {
113
+ export function transformStringForEnum (rootSchema, values, params) {
250
114
  /*
251
- * log('transformNullForEnum')
115
+ * log('transformStringForEnum')
252
116
  */
253
117
 
254
118
  const {
@@ -259,19 +123,24 @@ export function transformNullForEnum (rootSchema, values, params) {
259
123
  selectedItems = getSelectedItems(values, uri) // uri
260
124
  } = getMetaProps(params, uri)
261
125
 
262
- const items = getEnum(rootSchema)
126
+ const { enum: items = [] } = rootSchema // const items = getEnum(rootSchema)
263
127
 
264
- return renderNullForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, values, Object.assign(params, { selectedItems, items })))
128
+ return renderStringForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, Object.assign(params, { selectedItems, items })))
265
129
  }
266
130
 
267
- /*
131
+ /**
268
132
  * Root schema
269
133
  *
270
134
  * "anyOf"
135
+ *
136
+ * @param {SchemaType} rootSchema
137
+ * @param {ValuesType} values
138
+ * @param {ParamsType} params
139
+ * @returns {ZashikiType}
271
140
  */
272
- export function transformNullForAnyOf (rootSchema, values, params) {
141
+ export function transformStringForAnyOf (rootSchema, values, params) {
273
142
  /*
274
- * log('transformNullForAnyOf')
143
+ * log('transformStringForAnyOf')
275
144
  */
276
145
 
277
146
  const {
@@ -283,19 +152,24 @@ export function transformNullForAnyOf (rootSchema, values, params) {
283
152
  } = getMetaProps(params, uri)
284
153
 
285
154
  const { anyOf = [] } = rootSchema
286
- const items = anyOf.map(mapTransformNullByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
155
+ const items = anyOf.filter(isObject).map(mapTransformStringByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
287
156
 
288
- return renderNullForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
157
+ return renderStringForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, Object.assign(params, { selectedItems, items })))
289
158
  }
290
159
 
291
- /*
160
+ /**
292
161
  * Root schema
293
162
  *
294
163
  * "oneOf"
164
+ *
165
+ * @param {SchemaType} rootSchema
166
+ * @param {ValuesType} values
167
+ * @param {ParamsType} params
168
+ * @returns {ZashikiType}
295
169
  */
296
- export function transformNullForOneOf (rootSchema, values, params) {
170
+ export function transformStringForOneOf (rootSchema, values, params) {
297
171
  /*
298
- * log('transformNullForOneOf')
172
+ * log('transformStringForOneOf')
299
173
  */
300
174
 
301
175
  const {
@@ -307,63 +181,86 @@ export function transformNullForOneOf (rootSchema, values, params) {
307
181
  } = getMetaProps(params, uri)
308
182
 
309
183
  const { oneOf = [] } = rootSchema
310
- const items = oneOf.map(mapTransformNullByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
184
+ const items = oneOf.filter(isObject).map(mapTransformStringByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
311
185
 
312
- return renderNullForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
186
+ return renderStringForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, Object.assign(params, { selectedItems, items })))
313
187
  }
314
188
 
315
- /*
189
+ /**
316
190
  * Root schema
317
191
  *
318
192
  * "allOf"
193
+ *
194
+ * @param {SchemaType} rootSchema
195
+ * @param {ValuesType} values
196
+ * @param {ParamsType} params
197
+ * @returns {ZashikiType}
319
198
  */
320
- export function transformNullForAllOf (rootSchema, values, params) {
199
+ export function transformStringForAllOf (rootSchema, values, params) {
321
200
  /*
322
- * log('transformNullForAllOf')
201
+ * log('transformStringForAllOf')
323
202
  */
324
203
 
325
- const { allOf = [], ...rest } = rootSchema
326
- const itemSchema = allOf.reduce((accumulator, schema) => Object.assign(accumulator, schema), rest) // initialise with `rest`
204
+ const {
205
+ allOf = [],
206
+ ...schemaProps
207
+ } = rootSchema
208
+
209
+ /**
210
+ * @type {SchemaType}
211
+ */
212
+ const itemSchema = allOf.filter(isObject).reduce(toSchema, structuredClone(schemaProps)) // initialise with `rest`
327
213
 
328
- return renderNullForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, values, params))
214
+ return renderStringForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, params))
329
215
  }
330
216
 
331
- /*
217
+ /**
332
218
  * Root schema
219
+ *
220
+ * @link https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6.3
221
+ *
222
+ * @param {SchemaType} rootSchema
223
+ * @param {ValuesType} values
224
+ * @param {ParamsType} params
225
+ * @returns {ZashikiType}
333
226
  */
334
- // https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6
335
- export function transformNull (rootSchema, values, params) {
227
+ export function transformString (rootSchema, values, params) {
336
228
  /*
337
- * log('transformNull')
229
+ * log('transformString')
338
230
  */
339
231
 
340
232
  if (hasEnum(rootSchema)) {
341
- return transformNullForEnum(rootSchema, values, params)
233
+ return transformStringForEnum(rootSchema, values, params)
342
234
  } else {
343
235
  if (hasAnyOf(rootSchema)) {
344
- return transformNullForAnyOf(rootSchema, values, params)
236
+ return transformStringForAnyOf(rootSchema, values, params)
345
237
  } else {
346
238
  if (hasOneOf(rootSchema)) {
347
- return transformNullForOneOf(rootSchema, values, params)
239
+ return transformStringForOneOf(rootSchema, values, params)
348
240
  } else {
349
241
  if (hasAllOf(rootSchema)) {
350
- return transformNullForAllOf(rootSchema, values, params)
242
+ return transformStringForAllOf(rootSchema, values, params)
351
243
  }
352
244
  }
353
245
  }
354
246
  }
355
247
 
356
- return renderNull(rootSchema, values, getRenderParams(rootSchema, values, params))
248
+ return renderString(rootSchema, values, getRenderParams(rootSchema, params))
357
249
  }
358
250
 
359
- /*
251
+ /**
360
252
  * Root schema
361
253
  *
362
254
  * "enum"
255
+ *
256
+ * @param {SchemaType} rootSchema
257
+ * @param {ValuesType} values
258
+ * @param {ParamsType} params
259
+ * @returns {ZashikiType}
363
260
  */
364
- export function transformBooleanForEnum (rootSchema, values, params) {
261
+ export function transformNumberForEnum (rootSchema, values, params) {
365
262
  /*
366
- * log('transformBooleanForEnum')
263
+ * log('transformNumberForEnum')
367
264
  */
368
265
 
369
266
  const {
@@ -374,19 +271,24 @@ export function transformBooleanForEnum (rootSchema, values, params) {
374
271
  selectedItems = getSelectedItems(values, uri) // uri
375
272
  } = getMetaProps(params, uri)
376
273
 
377
- const items = getEnum(rootSchema)
274
+ const { enum: items = [] } = rootSchema // const items = getEnum(rootSchema)
378
275
 
379
- return renderBooleanForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, values, Object.assign(params, { selectedItems, items })))
276
+ return renderNumberForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, Object.assign(params, { selectedItems, items })))
380
277
  }
381
278
 
382
- /*
279
+ /**
383
280
  * Root schema
384
281
  *
385
282
  * "anyOf"
283
+ *
284
+ * @param {SchemaType} rootSchema
285
+ * @param {ValuesType} values
286
+ * @param {ParamsType} params
287
+ * @returns {ZashikiType}
386
288
  */
387
- export function transformBooleanForAnyOf (rootSchema, values, params) {
289
+ export function transformNumberForAnyOf (rootSchema, values, params) {
388
290
  /*
389
- * log('transformBooleanForAnyOf')
291
+ * log('transformNumberForAnyOf')
390
292
  */
391
293
 
392
294
  const {
@@ -398,19 +300,24 @@ export function transformBooleanForAnyOf (rootSchema, values, params) {
398
300
  } = getMetaProps(params, uri)
399
301
 
400
302
  const { anyOf = [] } = rootSchema
401
- const items = anyOf.map(mapTransformBooleanByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
303
+ const items = anyOf.filter(isObject).map(mapTransformNumberByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
402
304
 
403
- return renderBooleanForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
305
+ return renderNumberForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, Object.assign(params, { selectedItems, items })))
404
306
  }
405
307
 
406
- /*
308
+ /**
407
309
  * Root schema
408
310
  *
409
311
  * "oneOf"
312
+ *
313
+ * @param {SchemaType} rootSchema
314
+ * @param {ValuesType} values
315
+ * @param {ParamsType} params
316
+ * @returns {ZashikiType}
410
317
  */
411
- export function transformBooleanForOneOf (rootSchema, values, params) {
318
+ export function transformNumberForOneOf (rootSchema, values, params) {
412
319
  /*
413
- * log('transformBooleanForOneOf')
320
+ * log('transformNumberForOneOf')
414
321
  */
415
322
 
416
323
  const {
@@ -422,63 +329,86 @@ export function transformBooleanForOneOf (rootSchema, values, params) {
422
329
  } = getMetaProps(params, uri)
423
330
 
424
331
  const { oneOf = [] } = rootSchema
425
- const items = oneOf.map(mapTransformBooleanByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
332
+ const items = oneOf.filter(isObject).map(mapTransformNumberByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
426
333
 
427
- return renderBooleanForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
334
+ return renderNumberForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, Object.assign(params, { selectedItems, items })))
428
335
  }
429
336
 
430
- /*
337
+ /**
431
338
  * Root schema
432
339
  *
433
340
  * "allOf"
341
+ *
342
+ * @param {SchemaType} rootSchema
343
+ * @param {ValuesType} values
344
+ * @param {ParamsType} params
345
+ * @returns {ZashikiType}
434
346
  */
435
- export function transformBooleanForAllOf (rootSchema, values, params) {
347
+ export function transformNumberForAllOf (rootSchema, values, params) {
436
348
  /*
437
- * log('transformBooleanForAllOf')
349
+ * log('transformNumberForAllOf')
438
350
  */
439
351
 
440
- const { allOf = [], ...rest } = rootSchema
441
- const itemSchema = allOf.reduce((accumulator, schema) => Object.assign(accumulator, schema), rest) // initialise with `rest`
352
+ const {
353
+ allOf = [],
354
+ ...schemaProps
355
+ } = rootSchema
356
+
357
+ /**
358
+ * @type {SchemaType}
359
+ */
360
+ const itemSchema = allOf.filter(isObject).reduce(toSchema, structuredClone(schemaProps)) // initialise with `rest`
442
361
 
443
- return renderBooleanForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, values, params))
362
+ return renderNumberForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, params))
444
363
  }
445
364
 
446
- /*
365
+ /**
447
366
  * Root schema
367
+ *
368
+ * @link https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6.1
369
+ *
370
+ * @param {SchemaType} rootSchema
371
+ * @param {ValuesType} values
372
+ * @param {ParamsType} params
373
+ * @returns {ZashikiType}
448
374
  */
449
- // https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6
450
- export function transformBoolean (rootSchema, values, params) {
375
+ export function transformNumber (rootSchema, values, params) {
451
376
  /*
452
- * log('transformBoolean')
377
+ * log('transformNumber')
453
378
  */
454
379
 
455
380
  if (hasEnum(rootSchema)) {
456
- return transformBooleanForEnum(rootSchema, values, params)
381
+ return transformNumberForEnum(rootSchema, values, params)
457
382
  } else {
458
383
  if (hasAnyOf(rootSchema)) {
459
- return transformBooleanForAnyOf(rootSchema, values, params)
384
+ return transformNumberForAnyOf(rootSchema, values, params)
460
385
  } else {
461
386
  if (hasOneOf(rootSchema)) {
462
- return transformBooleanForOneOf(rootSchema, values, params)
387
+ return transformNumberForOneOf(rootSchema, values, params)
463
388
  } else {
464
389
  if (hasAllOf(rootSchema)) {
465
- return transformBooleanForAllOf(rootSchema, values, params)
390
+ return transformNumberForAllOf(rootSchema, values, params)
466
391
  }
467
392
  }
468
393
  }
469
394
  }
470
395
 
471
- return renderBoolean(rootSchema, values, getRenderParams(rootSchema, values, params))
396
+ return renderNumber(rootSchema, values, getRenderParams(rootSchema, params))
472
397
  }
473
398
 
474
- /*
399
+ /**
475
400
  * Root schema
476
401
  *
477
402
  * "enum"
403
+ *
404
+ * @param {SchemaType} rootSchema
405
+ * @param {ValuesType} values
406
+ * @param {ParamsType} params
407
+ * @returns {ZashikiType}
478
408
  */
479
- export function transformObjectForEnum (rootSchema, values, params) {
409
+ export function transformArrayForEnum (rootSchema, values, params) {
480
410
  /*
481
- * log('renderObjectForEnum')
411
+ * log('renderArrayForEnum')
482
412
  */
483
413
 
484
414
  const {
@@ -489,19 +419,24 @@ export function transformObjectForEnum (rootSchema, values, params) {
489
419
  selectedItems = getSelectedItems(values, uri) // uri
490
420
  } = getMetaProps(params, uri)
491
421
 
492
- const items = getEnum(rootSchema)
422
+ const { enum: items = [] } = rootSchema // const items = getEnum(rootSchema)
493
423
 
494
- return renderObjectForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, values, Object.assign(params, { selectedItems, items })))
424
+ return renderArrayForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, Object.assign(params, { selectedItems, items })))
495
425
  }
496
426
 
497
- /*
427
+ /**
498
428
  * Root schema
499
429
  *
500
430
  * "anyOf"
431
+ *
432
+ * @param {SchemaType} rootSchema
433
+ * @param {ValuesType} values
434
+ * @param {ParamsType} params
435
+ * @returns {ZashikiType}
501
436
  */
502
- export function transformObjectForAnyOf (rootSchema, values, params) {
437
+ export function transformArrayForAnyOf (rootSchema, values, params) {
503
438
  /*
504
- * log('transformObjectForAnyOf')
439
+ * log('transformArrayForAnyOf')
505
440
  */
506
441
 
507
442
  const {
@@ -513,19 +448,24 @@ export function transformObjectForAnyOf (rootSchema, values, params) {
513
448
  } = getMetaProps(params, uri)
514
449
 
515
450
  const { anyOf = [] } = rootSchema
516
- const items = anyOf.map(mapTransformObjectByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
451
+ const items = anyOf.filter(isObject).map(mapTransformArrayByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
517
452
 
518
- return renderObjectForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
453
+ return renderArrayForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, Object.assign(params, { selectedItems, items })))
519
454
  }
520
455
 
521
- /*
456
+ /**
522
457
  * Root schema
523
458
  *
524
459
  * "oneOf"
460
+ *
461
+ * @param {SchemaType} rootSchema
462
+ * @param {ValuesType} values
463
+ * @param {ParamsType} params
464
+ * @returns {ZashikiType}
525
465
  */
526
- export function transformObjectForOneOf (rootSchema, values, params) {
466
+ export function transformArrayForOneOf (rootSchema, values, params) {
527
467
  /*
528
- * log('transformObjectForOneOf')
468
+ * log('transformArrayForOneOf')
529
469
  */
530
470
 
531
471
  const {
@@ -537,78 +477,106 @@ export function transformObjectForOneOf (rootSchema, values, params) {
537
477
  } = getMetaProps(params, uri)
538
478
 
539
479
  const { oneOf = [] } = rootSchema
540
- const items = oneOf.map(mapTransformObjectByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
480
+ const items = oneOf.filter(isObject).map(mapTransformArrayByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
541
481
 
542
- return renderObjectForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
482
+ return renderArrayForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, Object.assign(params, { selectedItems, items })))
543
483
  }
544
484
 
545
- /*
485
+ /**
546
486
  * Root schema
547
487
  *
548
488
  * "allOf"
489
+ *
490
+ * @param {SchemaType} rootSchema
491
+ * @param {ValuesType} values
492
+ * @param {ParamsType} params
493
+ * @returns {ZashikiType}
549
494
  */
550
- export function transformObjectForAllOf (rootSchema, values, params) {
495
+ export function transformArrayForAllOf (rootSchema, values, params) {
551
496
  /*
552
- * log('transformObjectForAllOf')
497
+ * log('transformArrayForAllOf')
553
498
  */
554
499
 
555
- const { allOf = [], ...rest } = rootSchema
556
- const itemSchema = allOf.reduce((accumulator, schema) => Object.assign(accumulator, schema), rest) // initialise with `rest`
500
+ const {
501
+ allOf = [],
502
+ ...schemaProps
503
+ } = rootSchema
504
+
505
+ /**
506
+ * @type {SchemaType}
507
+ */
508
+ const itemSchema = allOf.filter(isObject).reduce(toSchema, structuredClone(schemaProps)) // initialise with `rest`
557
509
 
558
- return renderObjectForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, values, params))
510
+ return renderArrayForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, params))
559
511
  }
560
512
 
561
- /*
513
+ /**
562
514
  * Root schema
515
+ *
516
+ * @link https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6.4
517
+ *
518
+ * @param {SchemaType} rootSchema
519
+ * @param {ValuesType} values
520
+ * @param {ParamsType} params
521
+ * @returns {ZashikiType}
563
522
  */
564
- // https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6.5
565
- export function transformObject (rootSchema, values, params) {
523
+ export function transformArray (rootSchema, values, params) {
566
524
  /*
567
- * log('transformObject')
525
+ * log('transformArray')
568
526
  */
569
527
 
570
528
  if (hasEnum(rootSchema)) {
571
- return transformObjectForEnum(rootSchema, values, params)
529
+ return transformArrayForEnum(rootSchema, values, params)
572
530
  } else {
573
531
  if (hasAnyOf(rootSchema)) {
574
- return transformObjectForAnyOf(rootSchema, values, params)
532
+ return transformArrayForAnyOf(rootSchema, values, params)
575
533
  } else {
576
534
  if (hasOneOf(rootSchema)) {
577
- return transformObjectForOneOf(rootSchema, values, params)
535
+ return transformArrayForOneOf(rootSchema, values, params)
578
536
  } else {
579
537
  if (hasAllOf(rootSchema)) {
580
- return transformObjectForAllOf(rootSchema, values, params)
538
+ return transformArrayForAllOf(rootSchema, values, params)
581
539
  }
582
540
  }
583
541
  }
584
542
  }
585
543
 
586
544
  const {
587
- properties = {},
588
- required = []
545
+ items = [] // array or object
589
546
  } = rootSchema
590
547
 
591
- const {
592
- uri = '#/'
593
- } = params
548
+ if (isArray(items)) {
549
+ const fields = (
550
+ items.map(mapTransformByIndex(rootSchema, values, Object.assign(structuredClone(params), { parentUri: '#/' })))
551
+ )
594
552
 
595
- const fields = (
596
- Object
597
- .entries(properties)
598
- .map(mapTransformByKey(rootSchema, values, Object.assign(params, { parentUri: uri, required })))
599
- )
553
+ return renderArray(rootSchema, values, getRenderParams(rootSchema, Object.assign(params, { fields })))
554
+ } else {
555
+ if (isObject(items)) {
556
+ const fields = [
557
+ getTransformByIndex(items, rootSchema, values, Object.assign(structuredClone(params), { parentUri: '#/' }))
558
+ ]
559
+
560
+ return renderArray(rootSchema, values, getRenderParams(rootSchema, Object.assign(params, { fields })))
561
+ }
562
+ }
600
563
 
601
- return renderObject(rootSchema, values, getRenderParams(rootSchema, values, Object.assign(params, { fields })))
564
+ throw new Error('Invalid `array`')
602
565
  }
603
566
 
604
- /*
567
+ /**
605
568
  * Root schema
606
569
  *
607
570
  * "enum"
571
+ *
572
+ * @param {SchemaType} rootSchema
573
+ * @param {ValuesType} values
574
+ * @param {ParamsType} params
575
+ * @returns {ZashikiType}
608
576
  */
609
- export function transformArrayForEnum (rootSchema, values, params) {
577
+ export function transformObjectForEnum (rootSchema, values, params) {
610
578
  /*
611
- * log('renderArrayForEnum')
579
+ * log('renderObjectForEnum')
612
580
  */
613
581
 
614
582
  const {
@@ -619,19 +587,24 @@ export function transformArrayForEnum (rootSchema, values, params) {
619
587
  selectedItems = getSelectedItems(values, uri) // uri
620
588
  } = getMetaProps(params, uri)
621
589
 
622
- const items = getEnum(rootSchema)
590
+ const { enum: items = [] } = rootSchema // const items = getEnum(rootSchema)
623
591
 
624
- return renderArrayForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, values, Object.assign(params, { selectedItems, items })))
592
+ return renderObjectForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, Object.assign(params, { selectedItems, items })))
625
593
  }
626
594
 
627
- /*
595
+ /**
628
596
  * Root schema
629
597
  *
630
598
  * "anyOf"
599
+ *
600
+ * @param {SchemaType} rootSchema
601
+ * @param {ValuesType} values
602
+ * @param {ParamsType} params
603
+ * @returns {ZashikiType}
631
604
  */
632
- export function transformArrayForAnyOf (rootSchema, values, params) {
605
+ export function transformObjectForAnyOf (rootSchema, values, params) {
633
606
  /*
634
- * log('transformArrayForAnyOf')
607
+ * log('transformObjectForAnyOf')
635
608
  */
636
609
 
637
610
  const {
@@ -643,19 +616,24 @@ export function transformArrayForAnyOf (rootSchema, values, params) {
643
616
  } = getMetaProps(params, uri)
644
617
 
645
618
  const { anyOf = [] } = rootSchema
646
- const items = anyOf.map(mapTransformArrayByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
619
+ const items = anyOf.filter(isObject).map(mapTransformObjectByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
647
620
 
648
- return renderArrayForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
621
+ return renderObjectForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, Object.assign(params, { selectedItems, items })))
649
622
  }
650
623
 
651
- /*
624
+ /**
652
625
  * Root schema
653
626
  *
654
627
  * "oneOf"
628
+ *
629
+ * @param {SchemaType} rootSchema
630
+ * @param {ValuesType} values
631
+ * @param {ParamsType} params
632
+ * @returns {ZashikiType}
655
633
  */
656
- export function transformArrayForOneOf (rootSchema, values, params) {
634
+ export function transformObjectForOneOf (rootSchema, values, params) {
657
635
  /*
658
- * log('transformArrayForOneOf')
636
+ * log('transformObjectForOneOf')
659
637
  */
660
638
 
661
639
  const {
@@ -667,81 +645,101 @@ export function transformArrayForOneOf (rootSchema, values, params) {
667
645
  } = getMetaProps(params, uri)
668
646
 
669
647
  const { oneOf = [] } = rootSchema
670
- const items = oneOf.map(mapTransformArrayByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
648
+ const items = oneOf.filter(isObject).map(mapTransformObjectByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
671
649
 
672
- return renderArrayForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
650
+ return renderObjectForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, Object.assign(params, { selectedItems, items })))
673
651
  }
674
652
 
675
- /*
653
+ /**
676
654
  * Root schema
677
655
  *
678
656
  * "allOf"
657
+ *
658
+ * @param {SchemaType} rootSchema
659
+ * @param {ValuesType} values
660
+ * @param {ParamsType} params
661
+ * @returns {ZashikiType}
679
662
  */
680
- export function transformArrayForAllOf (rootSchema, values, params) {
663
+ export function transformObjectForAllOf (rootSchema, values, params) {
681
664
  /*
682
- * log('transformArrayForAllOf')
665
+ * log('transformObjectForAllOf')
683
666
  */
684
667
 
685
- const { allOf = [], ...rest } = rootSchema
686
- const itemSchema = allOf.reduce((accumulator, schema) => Object.assign(accumulator, schema), rest) // initialise with `rest`
668
+ const {
669
+ allOf = [],
670
+ ...schemaProps
671
+ } = rootSchema
672
+
673
+ /**
674
+ * @type {SchemaType}
675
+ */
676
+ const itemSchema = allOf.filter(isObject).reduce(toSchema, structuredClone(schemaProps)) // initialise with `rest`
687
677
 
688
- return renderArrayForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, values, params))
678
+ return renderObjectForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, params))
689
679
  }
690
680
 
691
- /*
681
+ /**
692
682
  * Root schema
683
+ *
684
+ * @link https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6.5
685
+ *
686
+ * @param {SchemaType} rootSchema
687
+ * @param {ValuesType} values
688
+ * @param {ParamsType} params
689
+ * @returns {ZashikiType}
693
690
  */
694
- // https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6.4
695
- export function transformArray (rootSchema, values, params) {
691
+ export function transformObject (rootSchema, values, params) {
696
692
  /*
697
- * log('transformArray')
693
+ * log('transformObject')
698
694
  */
699
695
 
700
696
  if (hasEnum(rootSchema)) {
701
- return transformArrayForEnum(rootSchema, values, params)
697
+ return transformObjectForEnum(rootSchema, values, params)
702
698
  } else {
703
699
  if (hasAnyOf(rootSchema)) {
704
- return transformArrayForAnyOf(rootSchema, values, params)
700
+ return transformObjectForAnyOf(rootSchema, values, params)
705
701
  } else {
706
702
  if (hasOneOf(rootSchema)) {
707
- return transformArrayForOneOf(rootSchema, values, params)
703
+ return transformObjectForOneOf(rootSchema, values, params)
708
704
  } else {
709
705
  if (hasAllOf(rootSchema)) {
710
- return transformArrayForAllOf(rootSchema, values, params)
706
+ return transformObjectForAllOf(rootSchema, values, params)
711
707
  }
712
708
  }
713
709
  }
714
710
  }
715
711
 
716
712
  const {
717
- items = [] // array or object
713
+ properties = {},
714
+ required = []
718
715
  } = rootSchema
719
716
 
720
- if (isArray(items)) {
721
- const fields = (
722
- items.map(mapTransformByIndex(rootSchema, values, Object.assign(params, { parentUri: '#/' })))
723
- )
717
+ const {
718
+ uri = '#/'
719
+ } = params
724
720
 
725
- return renderArray(rootSchema, values, getRenderParams(rootSchema, values, Object.assign(params, { fields })))
726
- } else {
727
- if (isObject(items)) {
728
- const fields = [
729
- getTransformByIndex(items, rootSchema, values, Object.assign(params, { parentUri: '#/' }))
730
- ]
721
+ const fields = (
722
+ Object
723
+ .entries(properties)
724
+ .map(mapTransformByKey(rootSchema, values, Object.assign(structuredClone(params), { parentUri: uri, required })))
725
+ )
731
726
 
732
- return renderArray(rootSchema, values, getRenderParams(rootSchema, values, Object.assign(params, { fields })))
733
- }
734
- }
727
+ return renderObject(rootSchema, values, getRenderParams(rootSchema, Object.assign(params, { fields })))
735
728
  }
736
729
 
737
- /*
730
+ /**
738
731
  * Root schema
739
732
  *
740
733
  * "enum"
734
+ *
735
+ * @param {SchemaType} rootSchema
736
+ * @param {ValuesType} values
737
+ * @param {ParamsType} params
738
+ * @returns {ZashikiType}
741
739
  */
742
- export function transformNumberForEnum (rootSchema, values, params) {
740
+ export function transformBooleanForEnum (rootSchema, values, params) {
743
741
  /*
744
- * log('transformNumberForEnum')
742
+ * log('transformBooleanForEnum')
745
743
  */
746
744
 
747
745
  const {
@@ -752,19 +750,24 @@ export function transformNumberForEnum (rootSchema, values, params) {
752
750
  selectedItems = getSelectedItems(values, uri) // uri
753
751
  } = getMetaProps(params, uri)
754
752
 
755
- const items = getEnum(rootSchema)
753
+ const { enum: items = [] } = rootSchema // const items = getEnum(rootSchema)
756
754
 
757
- return renderNumberForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, values, Object.assign(params, { selectedItems, items })))
755
+ return renderBooleanForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, Object.assign(params, { selectedItems, items })))
758
756
  }
759
757
 
760
- /*
758
+ /**
761
759
  * Root schema
762
760
  *
763
761
  * "anyOf"
762
+ *
763
+ * @param {SchemaType} rootSchema
764
+ * @param {ValuesType} values
765
+ * @param {ParamsType} params
766
+ * @returns {ZashikiType}
764
767
  */
765
- export function transformNumberForAnyOf (rootSchema, values, params) {
768
+ export function transformBooleanForAnyOf (rootSchema, values, params) {
766
769
  /*
767
- * log('transformNumberForAnyOf')
770
+ * log('transformBooleanForAnyOf')
768
771
  */
769
772
 
770
773
  const {
@@ -776,19 +779,24 @@ export function transformNumberForAnyOf (rootSchema, values, params) {
776
779
  } = getMetaProps(params, uri)
777
780
 
778
781
  const { anyOf = [] } = rootSchema
779
- const items = anyOf.map(mapTransformNumberByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
782
+ const items = anyOf.filter(isObject).map(mapTransformBooleanByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
780
783
 
781
- return renderNumberForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
784
+ return renderBooleanForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, Object.assign(params, { selectedItems, items })))
782
785
  }
783
786
 
784
- /*
787
+ /**
785
788
  * Root schema
786
789
  *
787
790
  * "oneOf"
791
+ *
792
+ * @param {SchemaType} rootSchema
793
+ * @param {ValuesType} values
794
+ * @param {ParamsType} params
795
+ * @returns {ZashikiType}
788
796
  */
789
- export function transformNumberForOneOf (rootSchema, values, params) {
797
+ export function transformBooleanForOneOf (rootSchema, values, params) {
790
798
  /*
791
- * log('transformNumberForOneOf')
799
+ * log('transformBooleanForOneOf')
792
800
  */
793
801
 
794
802
  const {
@@ -800,63 +808,86 @@ export function transformNumberForOneOf (rootSchema, values, params) {
800
808
  } = getMetaProps(params, uri)
801
809
 
802
810
  const { oneOf = [] } = rootSchema
803
- const items = oneOf.map(mapTransformNumberByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
811
+ const items = oneOf.filter(isObject).map(mapTransformBooleanByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
804
812
 
805
- return renderNumberForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
813
+ return renderBooleanForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, Object.assign(params, { selectedItems, items })))
806
814
  }
807
815
 
808
- /*
816
+ /**
809
817
  * Root schema
810
818
  *
811
819
  * "allOf"
820
+ *
821
+ * @param {SchemaType} rootSchema
822
+ * @param {ValuesType} values
823
+ * @param {ParamsType} params
824
+ * @returns {ZashikiType}
812
825
  */
813
- export function transformNumberForAllOf (rootSchema, values, params) {
826
+ export function transformBooleanForAllOf (rootSchema, values, params) {
814
827
  /*
815
- * log('transformNumberForAllOf')
828
+ * log('transformBooleanForAllOf')
816
829
  */
817
830
 
818
- const { allOf = [], ...rest } = rootSchema
819
- const itemSchema = allOf.reduce((accumulator, schema) => Object.assign(accumulator, schema), rest) // initialise with `rest`
831
+ const {
832
+ allOf = [],
833
+ ...schemaProps
834
+ } = rootSchema
835
+
836
+ /**
837
+ * @type {SchemaType}
838
+ */
839
+ const itemSchema = allOf.filter(isObject).reduce(toSchema, structuredClone(schemaProps)) // initialise with `rest`
820
840
 
821
- return renderNumberForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, values, params))
841
+ return renderBooleanForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, params))
822
842
  }
823
843
 
824
- /*
844
+ /**
825
845
  * Root schema
846
+ *
847
+ * @link https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6
848
+ *
849
+ * @param {SchemaType} rootSchema
850
+ * @param {ValuesType} values
851
+ * @param {ParamsType} params
852
+ * @returns {ZashikiType}
826
853
  */
827
- // https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6.1
828
- export function transformNumber (rootSchema, values, params) {
854
+ export function transformBoolean (rootSchema, values, params) {
829
855
  /*
830
- * log('transformNumber')
856
+ * log('transformBoolean')
831
857
  */
832
858
 
833
859
  if (hasEnum(rootSchema)) {
834
- return transformNumberForEnum(rootSchema, values, params)
860
+ return transformBooleanForEnum(rootSchema, values, params)
835
861
  } else {
836
862
  if (hasAnyOf(rootSchema)) {
837
- return transformNumberForAnyOf(rootSchema, values, params)
863
+ return transformBooleanForAnyOf(rootSchema, values, params)
838
864
  } else {
839
865
  if (hasOneOf(rootSchema)) {
840
- return transformNumberForOneOf(rootSchema, values, params)
866
+ return transformBooleanForOneOf(rootSchema, values, params)
841
867
  } else {
842
868
  if (hasAllOf(rootSchema)) {
843
- return transformNumberForAllOf(rootSchema, values, params)
869
+ return transformBooleanForAllOf(rootSchema, values, params)
844
870
  }
845
871
  }
846
872
  }
847
873
  }
848
874
 
849
- return renderNumber(rootSchema, values, getRenderParams(rootSchema, values, params))
875
+ return renderBoolean(rootSchema, values, getRenderParams(rootSchema, params))
850
876
  }
851
877
 
852
- /*
878
+ /**
853
879
  * Root schema
854
880
  *
855
881
  * "enum"
882
+ *
883
+ * @param {SchemaType} rootSchema
884
+ * @param {ValuesType} values
885
+ * @param {ParamsType} params
886
+ * @returns {ZashikiType}
856
887
  */
857
- export function transformStringForEnum (rootSchema, values, params) {
888
+ export function transformNullForEnum (rootSchema, values, params) {
858
889
  /*
859
- * log('transformStringForEnum')
890
+ * log('transformNullForEnum')
860
891
  */
861
892
 
862
893
  const {
@@ -867,19 +898,24 @@ export function transformStringForEnum (rootSchema, values, params) {
867
898
  selectedItems = getSelectedItems(values, uri) // uri
868
899
  } = getMetaProps(params, uri)
869
900
 
870
- const items = getEnum(rootSchema)
901
+ const { enum: items = [] } = rootSchema // const items = getEnum(rootSchema)
871
902
 
872
- return renderStringForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, values, Object.assign(params, { selectedItems, items })))
903
+ return renderNullForEnum(rootSchema, values, getRenderParamsForEnum(rootSchema, Object.assign(params, { selectedItems, items })))
873
904
  }
874
905
 
875
- /*
906
+ /**
876
907
  * Root schema
877
908
  *
878
909
  * "anyOf"
910
+ *
911
+ * @param {SchemaType} rootSchema
912
+ * @param {ValuesType} values
913
+ * @param {ParamsType} params
914
+ * @returns {ZashikiType}
879
915
  */
880
- export function transformStringForAnyOf (rootSchema, values, params) {
916
+ export function transformNullForAnyOf (rootSchema, values, params) {
881
917
  /*
882
- * log('transformStringForAnyOf')
918
+ * log('transformNullForAnyOf')
883
919
  */
884
920
 
885
921
  const {
@@ -891,19 +927,24 @@ export function transformStringForAnyOf (rootSchema, values, params) {
891
927
  } = getMetaProps(params, uri)
892
928
 
893
929
  const { anyOf = [] } = rootSchema
894
- const items = anyOf.map(mapTransformStringByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
930
+ const items = anyOf.filter(isObject).map(mapTransformNullByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
895
931
 
896
- return renderStringForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
932
+ return renderNullForAnyOf(rootSchema, values, getRenderParamsForAnyOf(rootSchema, Object.assign(params, { selectedItems, items })))
897
933
  }
898
934
 
899
- /*
935
+ /**
900
936
  * Root schema
901
937
  *
902
938
  * "oneOf"
939
+ *
940
+ * @param {SchemaType} rootSchema
941
+ * @param {ValuesType} values
942
+ * @param {ParamsType} params
943
+ * @returns {ZashikiType}
903
944
  */
904
- export function transformStringForOneOf (rootSchema, values, params) {
945
+ export function transformNullForOneOf (rootSchema, values, params) {
905
946
  /*
906
- * log('transformStringForOneOf')
947
+ * log('transformNullForOneOf')
907
948
  */
908
949
 
909
950
  const {
@@ -915,55 +956,79 @@ export function transformStringForOneOf (rootSchema, values, params) {
915
956
  } = getMetaProps(params, uri)
916
957
 
917
958
  const { oneOf = [] } = rootSchema
918
- const items = oneOf.map(mapTransformStringByIndex(rootSchema, values, Object.assign(params, { selectedItems, parentUri: uri })))
959
+ const items = oneOf.filter(isObject).map(mapTransformNullByIndex(rootSchema, values, Object.assign(structuredClone(params), { selectedItems, parentUri: uri })))
919
960
 
920
- return renderStringForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, values, Object.assign(params, { selectedItems, items })))
961
+ return renderNullForOneOf(rootSchema, values, getRenderParamsForOneOf(rootSchema, Object.assign(params, { selectedItems, items })))
921
962
  }
922
963
 
923
- /*
964
+ /**
924
965
  * Root schema
925
966
  *
926
967
  * "allOf"
968
+ *
969
+ * @param {SchemaType} rootSchema
970
+ * @param {ValuesType} values
971
+ * @param {ParamsType} params
972
+ * @returns {ZashikiType}
927
973
  */
928
- export function transformStringForAllOf (rootSchema, values, params) {
974
+ export function transformNullForAllOf (rootSchema, values, params) {
929
975
  /*
930
- * log('transformStringForAllOf')
976
+ * log('transformNullForAllOf')
931
977
  */
932
978
 
933
- const { allOf = [], ...rest } = rootSchema
934
- const itemSchema = allOf.reduce((accumulator, schema) => Object.assign(accumulator, schema), rest) // initialise with `rest`
979
+ const {
980
+ allOf = [],
981
+ ...schemaProps
982
+ } = rootSchema
983
+
984
+ /**
985
+ * @type {SchemaType}
986
+ */
987
+ const itemSchema = allOf.filter(isObject).reduce(toSchema, structuredClone(schemaProps)) // initialise with `rest`
935
988
 
936
- return renderStringForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, values, params))
989
+ return renderNullForAllOf(itemSchema, values, getRenderParamsForAllOf(rootSchema, params))
937
990
  }
938
991
 
939
- /*
992
+ /**
940
993
  * Root schema
994
+ *
995
+ * @link https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6
996
+ *
997
+ * @param {SchemaType} rootSchema
998
+ * @param {ValuesType} values
999
+ * @param {ParamsType} params
1000
+ * @returns {ZashikiType}
941
1001
  */
942
- // https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.6.3
943
- export function transformString (rootSchema, values, params) {
1002
+ export function transformNull (rootSchema, values, params) {
944
1003
  /*
945
- * log('transformString')
1004
+ * log('transformNull')
946
1005
  */
947
1006
 
948
1007
  if (hasEnum(rootSchema)) {
949
- return transformStringForEnum(rootSchema, values, params)
1008
+ return transformNullForEnum(rootSchema, values, params)
950
1009
  } else {
951
1010
  if (hasAnyOf(rootSchema)) {
952
- return transformStringForAnyOf(rootSchema, values, params)
1011
+ return transformNullForAnyOf(rootSchema, values, params)
953
1012
  } else {
954
1013
  if (hasOneOf(rootSchema)) {
955
- return transformStringForOneOf(rootSchema, values, params)
1014
+ return transformNullForOneOf(rootSchema, values, params)
956
1015
  } else {
957
1016
  if (hasAllOf(rootSchema)) {
958
- return transformStringForAllOf(rootSchema, values, params)
1017
+ return transformNullForAllOf(rootSchema, values, params)
959
1018
  }
960
1019
  }
961
1020
  }
962
1021
  }
963
1022
 
964
- return renderString(rootSchema, values, getRenderParams(rootSchema, values, params))
1023
+ return renderNull(rootSchema, values, getRenderParams(rootSchema, params))
965
1024
  }
966
1025
 
1026
+ /**
1027
+ * @param {SchemaType} [rootSchema]
1028
+ * @param {ValuesType} [values]
1029
+ * @param {ParamsType} [params]
1030
+ * @returns {ZashikiType}
1031
+ */
967
1032
  export default function toZashiki (rootSchema = {}, values = {}, params = {}) {
968
1033
  log('toZashiki')
969
1034
 
@@ -971,25 +1036,24 @@ export default function toZashiki (rootSchema = {}, values = {}, params = {}) {
971
1036
 
972
1037
  // https://json-schema.org/draft/2019-09/json-schema-core.html#rfc.section.4.2.1
973
1038
  switch (type) {
974
- case 'null':
975
- return transformNull(rootSchema, values, params)
976
-
977
- case 'boolean':
978
- return transformBoolean(rootSchema, values, params)
1039
+ case 'string':
1040
+ return transformString(rootSchema, values, params)
979
1041
 
980
- case 'object':
981
- return transformObject(rootSchema, values, params)
1042
+ case 'number':
1043
+ return transformNumber(rootSchema, values, params)
982
1044
 
983
1045
  case 'array':
984
1046
  return transformArray(rootSchema, values, params)
985
1047
 
986
- case 'number':
987
- return transformNumber(rootSchema, values, params)
1048
+ case 'object':
1049
+ return transformObject(rootSchema, values, params)
988
1050
 
989
- case 'string':
990
- return transformString(rootSchema, values, params)
1051
+ case 'boolean':
1052
+ return transformBoolean(rootSchema, values, params)
991
1053
 
992
- default:
993
- throw new Error('Schema does not conform to Instance Data Model, https://json-schema.org/draft/2019-09/json-schema-core.html#rfc.section.4.2.1')
1054
+ case 'null':
1055
+ return transformNull(rootSchema, values, params)
994
1056
  }
1057
+
1058
+ throw new Error('Schema does not conform to Instance Data Model, https://json-schema.org/draft/2019-09/json-schema-core.html#rfc.section.4.2.1')
995
1059
  }