@json-layout/core 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -2
- package/src/compile/index.js +3 -2
- package/src/compile/skeleton-node.js +15 -4
- package/src/compile/types.ts +1 -0
- package/src/state/index.js +19 -6
- package/src/state/state-node.js +66 -17
- package/src/state/state-tree.js +3 -0
- package/src/state/types.ts +10 -0
- package/src/state/utils/immutable.js +16 -0
- package/src/utils/build.js +10 -0
- package/types/compile/index.d.ts.map +1 -1
- package/types/compile/skeleton-node.d.ts.map +1 -1
- package/types/compile/types.d.ts +1 -0
- package/types/compile/types.d.ts.map +1 -1
- package/types/state/index.d.ts +5 -0
- package/types/state/index.d.ts.map +1 -1
- package/types/state/state-node.d.ts.map +1 -1
- package/types/state/state-tree.d.ts.map +1 -1
- package/types/state/types.d.ts +12 -1
- package/types/state/types.d.ts.map +1 -1
- package/types/state/utils/immutable.d.ts +6 -0
- package/types/state/utils/immutable.d.ts.map +1 -1
- package/types/utils/build.d.ts +2 -0
- package/types/utils/build.d.ts.map +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@json-layout/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Compilation and state management utilities for JSON Layout.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
"default": "./src/compile/serialize.js",
|
|
16
16
|
"types": "./types/compile/serialize.d.ts"
|
|
17
17
|
}
|
|
18
|
+
},
|
|
19
|
+
"./utils/build": {
|
|
20
|
+
"import": {
|
|
21
|
+
"default": "./src/utils/build.js",
|
|
22
|
+
"types": "./types/utils/build.d.ts"
|
|
23
|
+
}
|
|
18
24
|
}
|
|
19
25
|
},
|
|
20
26
|
"files": [
|
|
@@ -47,7 +53,7 @@
|
|
|
47
53
|
},
|
|
48
54
|
"homepage": "https://github.com/json-layout/json-layout#readme",
|
|
49
55
|
"dependencies": {
|
|
50
|
-
"@json-layout/vocabulary": "^0.
|
|
56
|
+
"@json-layout/vocabulary": "^0.8.0",
|
|
51
57
|
"@types/markdown-it": "^13.0.1",
|
|
52
58
|
"ajv": "^8.12.0",
|
|
53
59
|
"ajv-errors": "^3.0.0",
|
package/src/compile/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// compileStatic is meant to produce a serializable result
|
|
2
2
|
|
|
3
|
-
import ajvModule from 'ajv'
|
|
3
|
+
import ajvModule from 'ajv/dist/2019.js'
|
|
4
4
|
// import { Parser as ExprEvalParser } from 'expr-eval'
|
|
5
5
|
import addFormats from 'ajv-formats'
|
|
6
6
|
import ajvErrors from 'ajv-errors'
|
|
@@ -37,13 +37,14 @@ const fillOptions = (partialOptions) => {
|
|
|
37
37
|
let ajv = partialOptions.ajv
|
|
38
38
|
if (!ajv) {
|
|
39
39
|
/** @type {import('ajv').Options} */
|
|
40
|
-
const ajvOpts = {
|
|
40
|
+
const ajvOpts = { allErrors: true, strict: false }
|
|
41
41
|
if (partialOptions.code) ajvOpts.code = { source: true, esm: true, lines: true }
|
|
42
42
|
const newAjv = new Ajv(ajvOpts)
|
|
43
43
|
addFormats.default(newAjv)
|
|
44
44
|
ajvErrors.default(newAjv)
|
|
45
45
|
ajv = newAjv
|
|
46
46
|
}
|
|
47
|
+
ajv.addKeyword('layout')
|
|
47
48
|
|
|
48
49
|
let markdown = partialOptions.markdown
|
|
49
50
|
if (!markdown) {
|
|
@@ -89,11 +89,12 @@ export function makeSkeletonNode (
|
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
/** @type {import('./types.js').SkeletonNode} */
|
|
92
|
-
const node = { key: key ?? '', pointer, parentPointer, pure }
|
|
92
|
+
const node = { key: key ?? '', pointer, parentPointer, pure, propertyKeys: [] }
|
|
93
93
|
if (schema.type === 'object') {
|
|
94
94
|
if (schema.properties) {
|
|
95
95
|
node.children = node.children ?? []
|
|
96
96
|
for (const propertyKey of Object.keys(schema.properties)) {
|
|
97
|
+
node.propertyKeys.push(propertyKey)
|
|
97
98
|
node.children.push(makeSkeletonNode(
|
|
98
99
|
schema.properties[propertyKey],
|
|
99
100
|
options,
|
|
@@ -115,7 +116,7 @@ export function makeSkeletonNode (
|
|
|
115
116
|
if (schema.allOf) {
|
|
116
117
|
node.children = node.children ?? []
|
|
117
118
|
for (let i = 0; i < schema.allOf.length; i++) {
|
|
118
|
-
|
|
119
|
+
const allOfNode = makeSkeletonNode(
|
|
119
120
|
schema.allOf[i],
|
|
120
121
|
options,
|
|
121
122
|
validates,
|
|
@@ -126,7 +127,9 @@ export function makeSkeletonNode (
|
|
|
126
127
|
`${pointer}/allOf/${i}`,
|
|
127
128
|
pointer,
|
|
128
129
|
false
|
|
129
|
-
)
|
|
130
|
+
)
|
|
131
|
+
node.propertyKeys = node.propertyKeys.concat(allOfNode.propertyKeys)
|
|
132
|
+
node.children.push(allOfNode)
|
|
130
133
|
}
|
|
131
134
|
}
|
|
132
135
|
if (schema.oneOf) {
|
|
@@ -140,6 +143,7 @@ export function makeSkeletonNode (
|
|
|
140
143
|
}
|
|
141
144
|
/** @type {import('./types.js').SkeletonTree[]} */
|
|
142
145
|
const childrenTrees = []
|
|
146
|
+
/** @type {string[]} */
|
|
143
147
|
for (let i = 0; i < schema.oneOf.length; i++) {
|
|
144
148
|
if (!schema.oneOf[i].type) schema.oneOf[i].type = schema.type
|
|
145
149
|
const title = schema.oneOf[i].title ?? `option ${i}`
|
|
@@ -156,7 +160,14 @@ export function makeSkeletonNode (
|
|
|
156
160
|
))
|
|
157
161
|
}
|
|
158
162
|
node.children = node.children ?? []
|
|
159
|
-
node.children.push({
|
|
163
|
+
node.children.push({
|
|
164
|
+
key: '$oneOf',
|
|
165
|
+
pointer: `${pointer}/oneOf`,
|
|
166
|
+
parentPointer: pointer,
|
|
167
|
+
childrenTrees,
|
|
168
|
+
pure: childrenTrees[0].root.pure,
|
|
169
|
+
propertyKeys: []
|
|
170
|
+
})
|
|
160
171
|
|
|
161
172
|
schema.errorMessage.oneOf = options.messages.errorOneOf
|
|
162
173
|
}
|
package/src/compile/types.ts
CHANGED
|
@@ -45,6 +45,7 @@ export interface SkeletonNode {
|
|
|
45
45
|
pointer: string
|
|
46
46
|
parentPointer: string | null
|
|
47
47
|
pure: boolean
|
|
48
|
+
propertyKeys: string[]
|
|
48
49
|
children?: SkeletonNode[] // optional children in the case of arrays and object nodes
|
|
49
50
|
childrenTrees?: SkeletonTree[] // other trees that can be instantiated with separate validation (for example in the case of new array items of oneOfs, etc)
|
|
50
51
|
}
|
package/src/state/index.js
CHANGED
|
@@ -36,6 +36,8 @@ export { Display } from './utils/display.js'
|
|
|
36
36
|
* @typedef {import('./types.js').StepperNode} StepperNode
|
|
37
37
|
* @typedef {import('./types.js').OneOfSelectNode} OneOfSelectNode
|
|
38
38
|
* @typedef {import('./types.js').ListNode} ListNode
|
|
39
|
+
* @typedef {import('./types.js').FileInputNode} FileInputNode
|
|
40
|
+
* @typedef {import('./types.js').MarkdownNode} MarkdownNode
|
|
39
41
|
* @typedef {import('./types.js').FileRef} FileRef
|
|
40
42
|
*/
|
|
41
43
|
|
|
@@ -68,6 +70,7 @@ function fillOptions (partialOptions, compiledLayout) {
|
|
|
68
70
|
validateOn: 'input',
|
|
69
71
|
initialValidation: 'withData',
|
|
70
72
|
defaultOn: 'empty',
|
|
73
|
+
removeAdditional: 'error',
|
|
71
74
|
autofocus: false,
|
|
72
75
|
...partialOptions,
|
|
73
76
|
messages
|
|
@@ -237,12 +240,18 @@ export class StatefulLayout {
|
|
|
237
240
|
*/
|
|
238
241
|
updateState () {
|
|
239
242
|
this.createStateTree()
|
|
240
|
-
|
|
243
|
+
let nbIter = 0
|
|
244
|
+
while (this._data !== this._stateTree.root.data || this._autofocusTarget !== this._lastCreateStateTreeContext.autofocusTarget) {
|
|
245
|
+
nbIter += 1
|
|
246
|
+
if (nbIter > 100) {
|
|
247
|
+
console.error('too many iterations in updateState, the data is probably not stable', this._data, this._stateTree.root.data)
|
|
248
|
+
throw new Error('too many iterations in updateState, the data is probably not stable')
|
|
249
|
+
}
|
|
241
250
|
logDataBinding('hydrating state tree changed the data, do it again', this._data, this._stateTree.root.data)
|
|
242
251
|
// this is necessary because a first hydration can add default values and change validity, etc
|
|
243
252
|
this._data = this._stateTree.root.data
|
|
244
253
|
this._autofocusTarget = this._lastCreateStateTreeContext.autofocusTarget
|
|
245
|
-
this.createStateTree()
|
|
254
|
+
this.createStateTree(true)
|
|
246
255
|
}
|
|
247
256
|
logDataBinding('emit update event', this._data, this._stateTree)
|
|
248
257
|
this.events.emit('update', this)
|
|
@@ -250,13 +259,15 @@ export class StatefulLayout {
|
|
|
250
259
|
|
|
251
260
|
/**
|
|
252
261
|
* @private
|
|
262
|
+
* @param {boolean} rehydrate
|
|
253
263
|
*/
|
|
254
|
-
createStateTree () {
|
|
264
|
+
createStateTree (rehydrate = false) {
|
|
255
265
|
/** @type {CreateStateTreeContext} */
|
|
256
266
|
const createStateTreeContext = {
|
|
257
267
|
activeItems: this.activeItems,
|
|
258
268
|
autofocusTarget: this._autofocusTarget,
|
|
259
269
|
initial: !this._lastCreateStateTreeContext,
|
|
270
|
+
rehydrate,
|
|
260
271
|
cacheKeys: this._lastCreateStateTreeContext?.cacheKeys ?? {},
|
|
261
272
|
rootData: this._data,
|
|
262
273
|
files: [],
|
|
@@ -371,7 +382,7 @@ export class StatefulLayout {
|
|
|
371
382
|
}
|
|
372
383
|
const parentNode = this._lastCreateStateTreeContext.nodes.find(p => p.fullKey === node.parentFullKey)
|
|
373
384
|
if (!parentNode) throw new Error(`parent with key "${node.parentFullKey}" not found`)
|
|
374
|
-
const newParentValue = producePatchedData(parentNode.data ?? {}, node, data)
|
|
385
|
+
const newParentValue = producePatchedData(parentNode.data ?? (typeof node.key === 'number' ? [] : {}), node, data)
|
|
375
386
|
this.input(parentNode, newParentValue)
|
|
376
387
|
|
|
377
388
|
if (activateKey !== undefined) {
|
|
@@ -419,7 +430,6 @@ export class StatefulLayout {
|
|
|
419
430
|
let appliedQ = false
|
|
420
431
|
if (node.layout.getItems && isGetItemsExpression(node.layout.getItems)) {
|
|
421
432
|
rawItems = this.evalNodeExpression(node, node.layout.getItems, null)
|
|
422
|
-
if (!Array.isArray(rawItems)) throw new Error('getItems expression didn\'t return an array')
|
|
423
433
|
}
|
|
424
434
|
if (node.layout.getItems && isGetItemsFetch(node.layout.getItems)) {
|
|
425
435
|
const url = new URL(this.evalNodeExpression(node, node.layout.getItems.url, null))
|
|
@@ -441,6 +451,9 @@ export class StatefulLayout {
|
|
|
441
451
|
if (node.layout.getItems?.itemsResults) {
|
|
442
452
|
rawItems = this.evalNodeExpression(node, node.layout.getItems.itemsResults, rawItems)
|
|
443
453
|
}
|
|
454
|
+
|
|
455
|
+
if (!Array.isArray(rawItems)) throw new Error(`getItems didn't return an array for node ${node.fullKey}, you can define itemsResults to extract the array`)
|
|
456
|
+
|
|
444
457
|
/** @type {import('@json-layout/vocabulary').SelectItems} */
|
|
445
458
|
const items = rawItems.map((/** @type {any} */ rawItem) => {
|
|
446
459
|
/** @type {Partial<import('@json-layout/vocabulary').SelectItem>} */
|
|
@@ -459,7 +472,7 @@ export class StatefulLayout {
|
|
|
459
472
|
item.title = node.layout.getItems?.itemTitle ? this.evalNodeExpression(node, node.layout.getItems.itemTitle, rawItem) : item.value
|
|
460
473
|
}
|
|
461
474
|
if (node.layout.getItems?.itemIcon) item.icon = this.evalNodeExpression(node, node.layout.getItems?.itemIcon, rawItem)
|
|
462
|
-
return item
|
|
475
|
+
return /** @type {import('@json-layout/vocabulary').SelectItem} */(item)
|
|
463
476
|
})
|
|
464
477
|
return [items, appliedQ]
|
|
465
478
|
}
|
package/src/state/state-node.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isSwitchStruct, childIsCompObject, isCompositeLayout, isFocusableLayout } from '@json-layout/vocabulary'
|
|
2
2
|
import { produce } from 'immer'
|
|
3
3
|
import { getChildDisplay } from './utils/display.js'
|
|
4
|
-
import { shallowEqualArray, shallowProduceArray } from './utils/immutable.js'
|
|
4
|
+
import { shallowEqualArray, shallowProduceArray, shallowProduceObject } from './utils/immutable.js'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @param {unknown} data
|
|
@@ -63,16 +63,42 @@ const produceStateNodeMessages = produce((draft, layoutMessages, options) => {
|
|
|
63
63
|
Object.assign(draft, options.messages, layoutMessages)
|
|
64
64
|
})
|
|
65
65
|
|
|
66
|
-
/** @type {(draft: Record<string, unknown>, parentDataPath: string, children
|
|
67
|
-
const produceStateNodeData = produce((draft, parentDataPath, children) => {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
66
|
+
/** @type {(draft: Record<string, unknown>, parentDataPath: string, children?: import('../index.js').StateNode[], additionalPropertiesErrors?: import('ajv').ErrorObject[], propertyKeys?: string[]) => Record<string, unknown>} */
|
|
67
|
+
const produceStateNodeData = produce((draft, parentDataPath, children, additionalPropertiesErrors, propertyKeys) => {
|
|
68
|
+
if (propertyKeys) {
|
|
69
|
+
for (const key of Object.keys(draft)) {
|
|
70
|
+
if (!propertyKeys.includes(key)) delete draft[key]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (children) {
|
|
74
|
+
for (const child of children) {
|
|
75
|
+
if (parentDataPath === child.dataPath) {
|
|
76
|
+
if (child.data === undefined) continue
|
|
77
|
+
Object.assign(draft, child.data)
|
|
78
|
+
} else {
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-dynamic-delete
|
|
80
|
+
if (child.data === undefined) delete draft[child.key]
|
|
81
|
+
else draft[child.key] = child.data
|
|
82
|
+
|
|
83
|
+
if (Array.isArray(draft)) {
|
|
84
|
+
// remove trailing undefined values from tuples
|
|
85
|
+
while (draft.length && draft[draft.length - 1] === undefined) {
|
|
86
|
+
draft.pop()
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (additionalPropertiesErrors) {
|
|
94
|
+
for (const error of additionalPropertiesErrors) {
|
|
95
|
+
if (error.instancePath !== parentDataPath) continue
|
|
96
|
+
if (error.keyword === 'additionalProperties') {
|
|
97
|
+
delete draft[error.params.additionalProperty]
|
|
98
|
+
}
|
|
99
|
+
if (error.keyword === 'unevaluatedProperties') {
|
|
100
|
+
delete draft[error.params.unevaluatedProperty]
|
|
101
|
+
}
|
|
76
102
|
}
|
|
77
103
|
}
|
|
78
104
|
})
|
|
@@ -123,9 +149,10 @@ const matchError = (error, skeleton, dataPath, parentDataPath) => {
|
|
|
123
149
|
* @param {import('ajv').ErrorObject} error
|
|
124
150
|
* @param {import('../index.js').SkeletonNode} skeleton
|
|
125
151
|
* @param {string} dataPath
|
|
152
|
+
* @param {string | null} parentDataPath
|
|
126
153
|
* @returns {boolean}
|
|
127
154
|
*/
|
|
128
|
-
const matchChildError = (error, skeleton, dataPath) => {
|
|
155
|
+
const matchChildError = (error, skeleton, dataPath, parentDataPath) => {
|
|
129
156
|
if (error.instancePath.startsWith(dataPath) && !(typeof skeleton.key === 'string' && skeleton.key.startsWith('$allOf'))) return true
|
|
130
157
|
return false
|
|
131
158
|
}
|
|
@@ -335,22 +362,44 @@ export function createStateNode (
|
|
|
335
362
|
}
|
|
336
363
|
}
|
|
337
364
|
|
|
338
|
-
const error = context.errors?.find(error => matchError(error, skeleton, dataPath, parentDataPath)) ?? context.errors?.find(error => matchChildError(error, skeleton, dataPath))
|
|
365
|
+
const error = context.errors?.find(error => matchError(error, skeleton, dataPath, parentDataPath)) ?? context.errors?.find(error => matchChildError(error, skeleton, dataPath, parentDataPath))
|
|
366
|
+
|
|
339
367
|
// capture errors so that they are not repeated in parent nodes
|
|
340
368
|
if (layout.comp !== 'none') {
|
|
341
|
-
if (error) context.errors = context.errors?.filter(error => !matchError(error, skeleton, dataPath, parentDataPath) && !matchChildError(error, skeleton, dataPath))
|
|
369
|
+
if (error) context.errors = context.errors?.filter(error => !matchError(error, skeleton, dataPath, parentDataPath) && !matchChildError(error, skeleton, dataPath, parentDataPath))
|
|
342
370
|
}
|
|
343
371
|
const validated = validationState.validatedForm ||
|
|
344
372
|
validationState.validatedChildren.includes(fullKey) ||
|
|
345
373
|
(validationState.initialized === false && options.initialValidation === 'always') ||
|
|
346
374
|
(validationState.initialized === false && options.initialValidation === 'withData' && !isDataEmpty(data))
|
|
347
375
|
|
|
348
|
-
let nodeData = children
|
|
376
|
+
let nodeData = children
|
|
377
|
+
? produceStateNodeData(
|
|
378
|
+
/** @type {Record<string, unknown>} */(data ?? {}),
|
|
379
|
+
dataPath,
|
|
380
|
+
children,
|
|
381
|
+
context.additionalPropertiesErrors,
|
|
382
|
+
[true, 'unknown'].includes(options.removeAdditional) ? skeleton.propertyKeys : undefined
|
|
383
|
+
)
|
|
384
|
+
: data
|
|
385
|
+
|
|
386
|
+
// the producer is not perfect, sometimes data is considered mutated but it is actually the same
|
|
387
|
+
// we double check here to avoid unnecessary re-renders
|
|
388
|
+
if (nodeData !== data) {
|
|
389
|
+
if (Array.isArray(data) && Array.isArray(nodeData)) nodeData = shallowProduceArray(data, nodeData)
|
|
390
|
+
// @ts-ignore
|
|
391
|
+
else if (typeof data === 'object' && typeof nodeData === 'object') nodeData = shallowProduceObject(data, nodeData)
|
|
392
|
+
}
|
|
393
|
+
|
|
349
394
|
if (layout.constData) {
|
|
350
|
-
|
|
395
|
+
if (!context.rehydrate) {
|
|
396
|
+
nodeData = evalExpression(compiledLayout.expressions, layout.constData, nodeData, options, display, context.rootData, parentData)
|
|
397
|
+
}
|
|
351
398
|
} else {
|
|
352
399
|
if (layout.defaultData && useDefaultData(nodeData, layout, options)) {
|
|
353
|
-
|
|
400
|
+
if (!context.rehydrate) {
|
|
401
|
+
nodeData = evalExpression(compiledLayout.expressions, layout.defaultData, nodeData, options, display, context.rootData, parentData)
|
|
402
|
+
}
|
|
354
403
|
} else {
|
|
355
404
|
if (isDataEmpty(nodeData)) {
|
|
356
405
|
if (layout.nullable) {
|
package/src/state/state-tree.js
CHANGED
|
@@ -52,6 +52,9 @@ export function createStateTree (
|
|
|
52
52
|
if (error.keyword !== 'errorMessage') compiledLayout.localizeErrors([error])
|
|
53
53
|
}
|
|
54
54
|
context.errors = validate.errors
|
|
55
|
+
if ([true, 'error'].includes(options.removeAdditional)) {
|
|
56
|
+
context.additionalPropertiesErrors = validate.errors.filter(error => error.keyword === 'additionalProperties' || error.keyword === 'unevaluatedProperties')
|
|
57
|
+
}
|
|
55
58
|
}
|
|
56
59
|
const root = createStateNode(
|
|
57
60
|
context,
|
package/src/state/types.ts
CHANGED
|
@@ -23,6 +23,8 @@ import {
|
|
|
23
23
|
type Stepper,
|
|
24
24
|
type List,
|
|
25
25
|
type Combobox,
|
|
26
|
+
type Markdown,
|
|
27
|
+
type FileInput,
|
|
26
28
|
type Child
|
|
27
29
|
} from '@json-layout/vocabulary'
|
|
28
30
|
import { type SkeletonTree, type SkeletonNode, type StatefulLayout, type CompiledLayout } from '../index.js'
|
|
@@ -56,10 +58,12 @@ export interface StateTree {
|
|
|
56
58
|
|
|
57
59
|
export interface CreateStateTreeContext {
|
|
58
60
|
errors?: ErrorObject[]
|
|
61
|
+
additionalPropertiesErrors?: ErrorObject[]
|
|
59
62
|
files: FileRef[]
|
|
60
63
|
activeItems: Record<string, number>
|
|
61
64
|
autofocusTarget: string | null
|
|
62
65
|
initial: boolean
|
|
66
|
+
rehydrate: boolean
|
|
63
67
|
cacheKeys: Record<string, StateNodeCacheKey>
|
|
64
68
|
rootData: unknown
|
|
65
69
|
nodes: StateNode[]
|
|
@@ -103,6 +107,8 @@ export type StateNodeOptions = Required<StateNodeOptionsBase & {
|
|
|
103
107
|
validateOn: 'input' | 'blur' | 'submit'
|
|
104
108
|
initialValidation: 'never' | 'always' | 'withData'
|
|
105
109
|
defaultOn: 'missing' | 'empty' | 'never'
|
|
110
|
+
// true is the same as 'unknown', false is the same as 'none'
|
|
111
|
+
removeAdditional: true | 'unknown' | 'error' | 'none' | false
|
|
106
112
|
messages: LocaleMessages
|
|
107
113
|
autofocus: boolean
|
|
108
114
|
}>
|
|
@@ -150,3 +156,7 @@ export type StepperNode = StateNode & { layout: Stepper, children: StateNode[] }
|
|
|
150
156
|
export type ListNode = StateNode & { layout: List, data: any[], children: StateNode[], childrenTrees: SkeletonTree[] }
|
|
151
157
|
|
|
152
158
|
export type ComboboxNode = Omit<StateNode, 'children'> & { layout: Combobox, data: any[] }
|
|
159
|
+
|
|
160
|
+
export type FileInputNode = Omit<StateNode, 'children'> & { layout: FileInput, data: object | undefined | null }
|
|
161
|
+
|
|
162
|
+
export type MarkdownNode = Omit<StateNode, 'children'> & { layout: Markdown, data: string | undefined | null }
|
|
@@ -10,6 +10,22 @@ export function shallowProduceArray (previousArray = [], newArray = []) {
|
|
|
10
10
|
return previousArray
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* @param {Record<string, any>} previousObj
|
|
15
|
+
* @param {Record<string, any>} newObj
|
|
16
|
+
* @returns {Record<string, any>}
|
|
17
|
+
*/
|
|
18
|
+
export function shallowProduceObject (previousObj = {}, newObj = {}) {
|
|
19
|
+
if (!previousObj || !newObj) return newObj
|
|
20
|
+
const previousKeys = Object.keys(previousObj)
|
|
21
|
+
const newKeys = Object.keys(newObj)
|
|
22
|
+
if (previousKeys.length !== newKeys.length) return newObj
|
|
23
|
+
for (const key of previousKeys) {
|
|
24
|
+
if (previousObj[key] !== newObj[key]) return newObj
|
|
25
|
+
}
|
|
26
|
+
return previousObj
|
|
27
|
+
}
|
|
28
|
+
|
|
13
29
|
/**
|
|
14
30
|
* @template ItemType
|
|
15
31
|
* @param {any[]} a1
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// these dependencies are not pure ESM, users will probably need to inform their bundler to treat them as commonjs
|
|
2
|
+
export const commonjsDeps = [
|
|
3
|
+
'ajv',
|
|
4
|
+
'ajv-formats',
|
|
5
|
+
'ajv-formats/dist/formats.js',
|
|
6
|
+
'ajv-i18n',
|
|
7
|
+
'ajv-errors',
|
|
8
|
+
'markdown-it',
|
|
9
|
+
'debug'
|
|
10
|
+
]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compile/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compile/index.js"],"names":[],"mappings":"AAoEA;;;;GAIG;AACH,iCAJW,MAAM,4EAEJ,cAAc,CA6E1B;;2BApIY,OAAO,YAAY,EAAE,YAAY;2BACjC,OAAO,YAAY,EAAE,YAAY;6BACjC,OAAO,YAAY,EAAE,cAAc;6BACnC,OAAO,YAAY,EAAE,cAAc;oCACnC,OAAO,YAAY,EAAE,qBAAqB;iCAC1C,OAAO,YAAY,EAAE,kBAAkB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton-node.d.ts","sourceRoot":"","sources":["../../src/compile/skeleton-node.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,yCAZW,GAAG,WACH,OAAO,YAAY,EAAE,cAAc,aACnC,MAAM,EAAE,oBACR,OAAO,MAAM,EAAE,MAAM,EAAE,CAAC,qBACxB,OAAO,MAAM,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAC,eAClE,OAAO,yBAAyB,EAAE,UAAU,EAAE,OAC9C,MAAM,GAAG,MAAM,WACf,MAAM,iBACN,MAAM,GAAG,IAAI,YACb,OAAO,GACL,OAAO,YAAY,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"skeleton-node.d.ts","sourceRoot":"","sources":["../../src/compile/skeleton-node.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,yCAZW,GAAG,WACH,OAAO,YAAY,EAAE,cAAc,aACnC,MAAM,EAAE,oBACR,OAAO,MAAM,EAAE,MAAM,EAAE,CAAC,qBACxB,OAAO,MAAM,EAAE,OAAO,yBAAyB,EAAE,gBAAgB,CAAC,eAClE,OAAO,yBAAyB,EAAE,UAAU,EAAE,OAC9C,MAAM,GAAG,MAAM,WACf,MAAM,iBACN,MAAM,GAAG,IAAI,YACb,OAAO,GACL,OAAO,YAAY,EAAE,YAAY,CAoM7C"}
|
package/types/compile/types.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/compile/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,KAAK,CAAA;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAoB,MAAM,KAAK,CAAA;AAChF,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,GAAG,CAAA;AAE/J,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,SAAS,CAAC,OAAO,CAAA;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,CAAA;AAEtH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC3C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACnD,WAAW,EAAE,kBAAkB,EAAE,CAAA;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,cAAc,CAAA;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK,IAAI,CAAA;CAC1D;AAID,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,YAAY,CAAA;CACnB;AAID,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/compile/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,KAAK,CAAA;AAChC,OAAO,KAAK,UAAU,MAAM,aAAa,CAAA;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC1F,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAoB,MAAM,KAAK,CAAA;AAChF,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEtD,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,OAAO,KAAK,GAAG,CAAA;AAE/J,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,SAAS,CAAC,OAAO,CAAA;IACtB,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,CAAA;CAAE,CAAA;AAEtH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,YAAY,EAAE,YAAY,CAAA;IAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IAC3C,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAC1C,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;IACnD,WAAW,EAAE,kBAAkB,EAAE,CAAA;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,cAAc,CAAA;IACxB,cAAc,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,WAAW,EAAE,KAAK,IAAI,CAAA;CAC1D;AAID,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,YAAY,CAAA;CACnB;AAID,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,IAAI,EAAE,OAAO,CAAA;IACb,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B"}
|
package/types/state/index.d.ts
CHANGED
|
@@ -25,6 +25,8 @@ export { Display } from "./utils/display.js";
|
|
|
25
25
|
* @typedef {import('./types.js').StepperNode} StepperNode
|
|
26
26
|
* @typedef {import('./types.js').OneOfSelectNode} OneOfSelectNode
|
|
27
27
|
* @typedef {import('./types.js').ListNode} ListNode
|
|
28
|
+
* @typedef {import('./types.js').FileInputNode} FileInputNode
|
|
29
|
+
* @typedef {import('./types.js').MarkdownNode} MarkdownNode
|
|
28
30
|
* @typedef {import('./types.js').FileRef} FileRef
|
|
29
31
|
*/
|
|
30
32
|
/** @type {(node: StateNode | undefined) => node is SectionNode} */
|
|
@@ -140,6 +142,7 @@ export class StatefulLayout {
|
|
|
140
142
|
private updateState;
|
|
141
143
|
/**
|
|
142
144
|
* @private
|
|
145
|
+
* @param {boolean} rehydrate
|
|
143
146
|
*/
|
|
144
147
|
private createStateTree;
|
|
145
148
|
validate(): void;
|
|
@@ -227,6 +230,8 @@ export type VerticalTabsNode = import('./types.js').VerticalTabsNode;
|
|
|
227
230
|
export type StepperNode = import('./types.js').StepperNode;
|
|
228
231
|
export type OneOfSelectNode = import('./types.js').OneOfSelectNode;
|
|
229
232
|
export type ListNode = import('./types.js').ListNode;
|
|
233
|
+
export type FileInputNode = import('./types.js').FileInputNode;
|
|
234
|
+
export type MarkdownNode = import('./types.js').MarkdownNode;
|
|
230
235
|
export type FileRef = import('./types.js').FileRef;
|
|
231
236
|
import { Display } from './utils/display.js';
|
|
232
237
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.js"],"names":[],"mappings":";AAYA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/state/index.js"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-node.d.ts","sourceRoot":"","sources":["../../src/state/state-node.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"state-node.d.ts","sourceRoot":"","sources":["../../src/state/state-node.js"],"names":[],"mappings":"AA+JA;;;;;;;;;GASG;AACH,4CATW,OAAO,aAAa,EAAE,kBAAkB,EAAE,cAC1C,OAAO,yBAAyB,EAAE,UAAU,QAC5C,GAAG,WACH,OAAO,YAAY,EAAE,gBAAgB,WACrC,OAAO,oBAAoB,EAAE,OAAO,YACpC,OAAO,cACP,OAAO,GACL,GAAG,CAMf;AA+BD;;;;;;;;;;;;;;;;;;GAkBG;AACH,yCAjBW,OAAO,YAAY,EAAE,sBAAsB,iBAC3C,OAAO,YAAY,EAAE,gBAAgB,kBACrC,OAAO,aAAa,EAAE,cAAc,OACpC,MAAM,GAAG,MAAM,WACf,MAAM,iBACN,MAAM,GAAG,IAAI,YACb,MAAM,kBACN,MAAM,GAAG,IAAI,YACb,OAAO,aAAa,EAAE,YAAY,mBAClC,OAAO,yBAAyB,EAAE,KAAK,GAAG,IAAI,iBAC9C,OAAO,oBAAoB,EAAE,OAAO,QACpC,OAAO,cACP,OAAO,mBACP,OAAO,YAAY,EAAE,eAAe,4DAElC,OAAO,YAAY,EAAE,SAAS,CA4N1C;AAED,uFAAuF;AACvF,yCADmB,GAAG,QAAQ,OAAO,YAAY,EAAE,SAAS,QAAQ,OAAO,KAAK,GAAG,CAOjF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state-tree.d.ts","sourceRoot":"","sources":["../../src/state/state-tree.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;GAUG;AACH,yCAVW,OAAO,YAAY,EAAE,sBAAsB,WAC3C,OAAO,YAAY,EAAE,qBAAqB,kBAC1C,OAAO,aAAa,EAAE,cAAc,YACpC,OAAO,aAAa,EAAE,YAAY,WAClC,OAAO,oBAAoB,EAAE,OAAO,QACpC,OAAO,mBACP,OAAO,YAAY,EAAE,eAAe,iEAElC,OAAO,YAAY,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"state-tree.d.ts","sourceRoot":"","sources":["../../src/state/state-tree.js"],"names":[],"mappings":"AA0BA;;;;;;;;;;GAUG;AACH,yCAVW,OAAO,YAAY,EAAE,sBAAsB,WAC3C,OAAO,YAAY,EAAE,qBAAqB,kBAC1C,OAAO,aAAa,EAAE,cAAc,YACpC,OAAO,aAAa,EAAE,YAAY,WAClC,OAAO,oBAAoB,EAAE,OAAO,QACpC,OAAO,mBACP,OAAO,YAAY,EAAE,eAAe,iEAElC,OAAO,YAAY,EAAE,SAAS,CAmD1C"}
|
package/types/state/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ErrorObject } from 'ajv';
|
|
2
|
-
import { type CompObject, type Cols, type StateNodeOptionsBase, type TextField, type Textarea, type NumberField, type Slider, type Checkbox, type Switch, type DatePicker, type DateTimePicker, type TimePicker, type ColorPicker, type Section, type OneOfSelect, type Select, type Autocomplete, type Tabs, type VerticalTabs, type ExpansionPanels, type Stepper, type List, type Combobox, type Child } from '@json-layout/vocabulary';
|
|
2
|
+
import { type CompObject, type Cols, type StateNodeOptionsBase, type TextField, type Textarea, type NumberField, type Slider, type Checkbox, type Switch, type DatePicker, type DateTimePicker, type TimePicker, type ColorPicker, type Section, type OneOfSelect, type Select, type Autocomplete, type Tabs, type VerticalTabs, type ExpansionPanels, type Stepper, type List, type Combobox, type Markdown, type FileInput, type Child } from '@json-layout/vocabulary';
|
|
3
3
|
import { type SkeletonTree, type SkeletonNode, type StatefulLayout, type CompiledLayout } from '../index.js';
|
|
4
4
|
import { type LocaleMessages } from '../i18n/types.js';
|
|
5
5
|
export interface StateNode {
|
|
@@ -28,10 +28,12 @@ export interface StateTree {
|
|
|
28
28
|
}
|
|
29
29
|
export interface CreateStateTreeContext {
|
|
30
30
|
errors?: ErrorObject[];
|
|
31
|
+
additionalPropertiesErrors?: ErrorObject[];
|
|
31
32
|
files: FileRef[];
|
|
32
33
|
activeItems: Record<string, number>;
|
|
33
34
|
autofocusTarget: string | null;
|
|
34
35
|
initial: boolean;
|
|
36
|
+
rehydrate: boolean;
|
|
35
37
|
cacheKeys: Record<string, StateNodeCacheKey>;
|
|
36
38
|
rootData: unknown;
|
|
37
39
|
nodes: StateNode[];
|
|
@@ -67,6 +69,7 @@ export type StateNodeOptions = Required<StateNodeOptionsBase & {
|
|
|
67
69
|
validateOn: 'input' | 'blur' | 'submit';
|
|
68
70
|
initialValidation: 'never' | 'always' | 'withData';
|
|
69
71
|
defaultOn: 'missing' | 'empty' | 'never';
|
|
72
|
+
removeAdditional: true | 'unknown' | 'error' | 'none' | false;
|
|
70
73
|
messages: LocaleMessages;
|
|
71
74
|
autofocus: boolean;
|
|
72
75
|
}>;
|
|
@@ -156,4 +159,12 @@ export type ComboboxNode = Omit<StateNode, 'children'> & {
|
|
|
156
159
|
layout: Combobox;
|
|
157
160
|
data: any[];
|
|
158
161
|
};
|
|
162
|
+
export type FileInputNode = Omit<StateNode, 'children'> & {
|
|
163
|
+
layout: FileInput;
|
|
164
|
+
data: object | undefined | null;
|
|
165
|
+
};
|
|
166
|
+
export type MarkdownNode = Omit<StateNode, 'children'> & {
|
|
167
|
+
layout: Markdown;
|
|
168
|
+
data: string | undefined | null;
|
|
169
|
+
};
|
|
159
170
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,12 @@
|
|
|
5
5
|
* @returns {ItemType[]}
|
|
6
6
|
*/
|
|
7
7
|
export function shallowProduceArray<ItemType>(previousArray?: ItemType[], newArray?: ItemType[]): ItemType[];
|
|
8
|
+
/**
|
|
9
|
+
* @param {Record<string, any>} previousObj
|
|
10
|
+
* @param {Record<string, any>} newObj
|
|
11
|
+
* @returns {Record<string, any>}
|
|
12
|
+
*/
|
|
13
|
+
export function shallowProduceObject(previousObj?: Record<string, any>, newObj?: Record<string, any>): Record<string, any>;
|
|
8
14
|
/**
|
|
9
15
|
* @template ItemType
|
|
10
16
|
* @param {any[]} a1
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../../../src/state/utils/immutable.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,6GAIC;AAED;;;;;GAKG;AACH,iDAJW,GAAG,EAAE,OACL,GAAG,EAAE,GACH,OAAO,CAMnB"}
|
|
1
|
+
{"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../../../src/state/utils/immutable.js"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,6GAIC;AAED;;;;GAIG;AACH,mDAJW,OAAO,MAAM,EAAE,GAAG,CAAC,WACnB,OAAO,MAAM,EAAE,GAAG,CAAC,GACjB,OAAO,MAAM,EAAE,GAAG,CAAC,CAW/B;AAED;;;;;GAKG;AACH,iDAJW,GAAG,EAAE,OACL,GAAG,EAAE,GACH,OAAO,CAMnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/utils/build.js"],"names":[],"mappings":"AACA,oCAQC"}
|