@fluidframework/tree 2.63.0-359461 → 2.63.0-359962
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/.mocharc.cjs +9 -1
- package/api-report/tree.alpha.api.md +126 -96
- package/api-report/tree.beta.api.md +37 -2
- package/api-report/tree.legacy.beta.api.md +37 -2
- package/api-report/tree.legacy.public.api.md +9 -2
- package/api-report/tree.public.api.md +9 -2
- package/dist/alpha.d.ts +18 -13
- package/dist/beta.d.ts +5 -0
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +67 -13
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +70 -35
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +5 -5
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +23 -0
- package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js +15 -0
- package/dist/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/index.d.ts +1 -0
- package/dist/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/index.js +3 -1
- package/dist/feature-libraries/chunked-forest/codec/index.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +3 -2
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.js +2 -1
- package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +3 -3
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -11
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -6
- package/dist/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +2 -1
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +17 -15
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts +5 -5
- package/dist/jsonDomainSchema.js +5 -5
- package/dist/jsonDomainSchema.js.map +1 -1
- package/dist/legacy.d.ts +5 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +1 -0
- package/dist/serializableDomainSchema.d.ts +6 -6
- package/dist/serializableDomainSchema.js +5 -5
- package/dist/serializableDomainSchema.js.map +1 -1
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +2 -2
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +5 -0
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +38 -8
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +6 -8
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +6 -8
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/tree.js +1 -1
- package/dist/shared-tree/tree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +20 -28
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +6 -31
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts +1 -1
- package/dist/simple-tree/api/conciseTree.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +0 -3
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +1 -4
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +7 -7
- package/dist/simple-tree/api/customTree.js +5 -5
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/discrepancies.js +2 -2
- package/dist/simple-tree/api/discrepancies.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -3
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +4 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +12 -4
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +3 -8
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +64 -28
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +42 -11
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.d.ts +13 -2
- package/dist/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryBeta.js +14 -0
- package/dist/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/dist/simple-tree/api/schemaStatics.d.ts +9 -14
- package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaStatics.js +12 -12
- package/dist/simple-tree/api/schemaStatics.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts +2 -2
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +3 -3
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts +52 -2
- package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js +37 -2
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +4 -4
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +60 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts +120 -62
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +162 -84
- package/dist/simple-tree/core/allowedTypes.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts +2 -2
- package/dist/simple-tree/core/context.d.ts.map +1 -1
- package/dist/simple-tree/core/context.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +3 -3
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +5 -4
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/toStored.d.ts +3 -3
- package/dist/simple-tree/core/toStored.d.ts.map +1 -1
- package/dist/simple-tree/core/toStored.js +2 -2
- package/dist/simple-tree/core/toStored.js.map +1 -1
- package/dist/simple-tree/core/treeNode.d.ts +1 -1
- package/dist/simple-tree/core/treeNode.js +1 -1
- package/dist/simple-tree/core/treeNode.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +7 -11
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +24 -47
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +3 -3
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts +2 -2
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +3 -3
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +1 -1
- package/dist/simple-tree/core/walkSchema.js.map +1 -1
- package/dist/simple-tree/createContext.js +2 -2
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +9 -32
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.js +12 -20
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/getTreeNodeForField.js +1 -1
- package/dist/simple-tree/getTreeNodeForField.js.map +1 -1
- package/dist/simple-tree/index.d.ts +4 -4
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +7 -3
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +2 -2
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +7 -8
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +3 -3
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/common.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/common.js +2 -2
- package/dist/simple-tree/node-kinds/common.js.map +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +5 -5
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts +3 -3
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +2 -2
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +5 -18
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +8 -18
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts +4 -11
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts +3 -3
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +9 -9
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts +5 -5
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +39 -7
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +43 -15
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +8 -8
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +5 -5
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/simple-tree/unsafeUnknownSchema.d.ts.map +1 -1
- package/dist/simple-tree/unsafeUnknownSchema.js.map +1 -1
- package/dist/simple-tree/walkFieldSchema.js +1 -1
- package/dist/simple-tree/walkFieldSchema.js.map +1 -1
- package/dist/tableSchema.d.ts +19 -19
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +2 -2
- package/dist/tableSchema.js.map +1 -1
- package/lib/alpha.d.ts +18 -13
- package/lib/beta.d.ts +5 -0
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +67 -13
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +68 -32
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +5 -5
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts +23 -0
- package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.d.ts.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js +11 -0
- package/lib/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/index.d.ts +1 -0
- package/lib/feature-libraries/chunked-forest/codec/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/index.js +1 -0
- package/lib/feature-libraries/chunked-forest/codec/index.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +3 -2
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.js +1 -1
- package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +3 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +3 -3
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts +4 -11
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js +2 -6
- package/lib/feature-libraries/forest-summary/incrementalSummaryBuilder.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +17 -15
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts +5 -5
- package/lib/jsonDomainSchema.js +5 -5
- package/lib/jsonDomainSchema.js.map +1 -1
- package/lib/legacy.d.ts +5 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +1 -0
- package/lib/serializableDomainSchema.d.ts +6 -6
- package/lib/serializableDomainSchema.js +5 -5
- package/lib/serializableDomainSchema.js.map +1 -1
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +3 -3
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +5 -0
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +41 -11
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +6 -8
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +7 -9
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/tree.js +2 -2
- package/lib/shared-tree/tree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +20 -28
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +5 -30
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts +1 -1
- package/lib/simple-tree/api/conciseTree.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +0 -3
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +2 -5
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +7 -7
- package/lib/simple-tree/api/customTree.js +5 -5
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/discrepancies.js +3 -3
- package/lib/simple-tree/api/discrepancies.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -3
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +12 -4
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +3 -8
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +64 -28
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +43 -12
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.d.ts +13 -2
- package/lib/simple-tree/api/schemaFactoryBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryBeta.js +16 -2
- package/lib/simple-tree/api/schemaFactoryBeta.js.map +1 -1
- package/lib/simple-tree/api/schemaStatics.d.ts +9 -14
- package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaStatics.js +12 -12
- package/lib/simple-tree/api/schemaStatics.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts +2 -2
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +1 -1
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +3 -3
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts +52 -2
- package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js +34 -2
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +5 -5
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +60 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts +120 -62
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +158 -80
- package/lib/simple-tree/core/allowedTypes.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts +2 -2
- package/lib/simple-tree/core/context.d.ts.map +1 -1
- package/lib/simple-tree/core/context.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +3 -3
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +2 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/toStored.d.ts +3 -3
- package/lib/simple-tree/core/toStored.d.ts.map +1 -1
- package/lib/simple-tree/core/toStored.js +3 -3
- package/lib/simple-tree/core/toStored.js.map +1 -1
- package/lib/simple-tree/core/treeNode.d.ts +1 -1
- package/lib/simple-tree/core/treeNode.js +1 -1
- package/lib/simple-tree/core/treeNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +7 -11
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +23 -46
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +3 -3
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts +2 -2
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +3 -3
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +2 -2
- package/lib/simple-tree/core/walkSchema.js.map +1 -1
- package/lib/simple-tree/createContext.js +3 -3
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +9 -32
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.js +13 -21
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/getTreeNodeForField.js +1 -1
- package/lib/simple-tree/getTreeNodeForField.js.map +1 -1
- package/lib/simple-tree/index.d.ts +4 -4
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +2 -2
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +2 -2
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +8 -9
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts +3 -3
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/common.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/common.js +3 -3
- package/lib/simple-tree/node-kinds/common.js.map +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts +2 -2
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +6 -6
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts +3 -3
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +2 -2
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +5 -18
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +9 -18
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts +4 -11
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts +3 -3
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +10 -10
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts +5 -5
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNodeTypes.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +39 -7
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +45 -17
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +8 -8
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +5 -5
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/simple-tree/unsafeUnknownSchema.d.ts.map +1 -1
- package/lib/simple-tree/unsafeUnknownSchema.js.map +1 -1
- package/lib/simple-tree/walkFieldSchema.js +1 -1
- package/lib/simple-tree/walkFieldSchema.js.map +1 -1
- package/lib/tableSchema.d.ts +19 -19
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +2 -2
- package/lib/tableSchema.js.map +1 -1
- package/package.json +23 -21
- package/src/feature-libraries/chunked-forest/chunkTree.ts +112 -45
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +4 -9
- package/src/feature-libraries/chunked-forest/codec/incrementalEncodingPolicy.ts +33 -0
- package/src/feature-libraries/chunked-forest/codec/index.ts +4 -0
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +4 -7
- package/src/feature-libraries/chunked-forest/index.ts +2 -0
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +1 -1
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +8 -12
- package/src/feature-libraries/forest-summary/incrementalSummaryBuilder.ts +3 -12
- package/src/feature-libraries/index.ts +2 -0
- package/src/feature-libraries/treeCursorUtils.ts +34 -19
- package/src/index.ts +14 -10
- package/src/jsonDomainSchema.ts +5 -5
- package/src/packageVersion.ts +1 -1
- package/src/serializableDomainSchema.ts +6 -6
- package/src/shared-tree/independentView.ts +3 -0
- package/src/shared-tree/schematizingTreeView.ts +58 -9
- package/src/shared-tree/sharedTree.ts +33 -20
- package/src/shared-tree/tree.ts +2 -2
- package/src/shared-tree/treeAlpha.ts +35 -84
- package/src/simple-tree/api/conciseTree.ts +1 -1
- package/src/simple-tree/api/configuration.ts +3 -7
- package/src/simple-tree/api/customTree.ts +7 -7
- package/src/simple-tree/api/discrepancies.ts +3 -3
- package/src/simple-tree/api/index.ts +17 -2
- package/src/simple-tree/api/schemaFactory.ts +18 -73
- package/src/simple-tree/api/schemaFactoryAlpha.ts +118 -25
- package/src/simple-tree/api/schemaFactoryBeta.ts +76 -1
- package/src/simple-tree/api/schemaStatics.ts +19 -61
- package/src/simple-tree/api/storedSchema.ts +2 -6
- package/src/simple-tree/api/tree.ts +3 -3
- package/src/simple-tree/api/treeBeta.ts +137 -4
- package/src/simple-tree/api/treeNodeApi.ts +5 -5
- package/src/simple-tree/api/typesUnsafe.ts +81 -0
- package/src/simple-tree/core/TreeNodeBinding.md +14 -70
- package/src/simple-tree/core/allowedTypes.ts +355 -159
- package/src/simple-tree/core/context.ts +2 -2
- package/src/simple-tree/core/index.ts +11 -9
- package/src/simple-tree/core/toStored.ts +7 -5
- package/src/simple-tree/core/treeNode.ts +1 -1
- package/src/simple-tree/core/treeNodeKernel.ts +25 -59
- package/src/simple-tree/core/treeNodeSchema.ts +3 -6
- package/src/simple-tree/core/treeNodeValid.ts +2 -2
- package/src/simple-tree/core/walkSchema.ts +9 -5
- package/src/simple-tree/createContext.ts +3 -3
- package/src/simple-tree/fieldSchema.ts +24 -98
- package/src/simple-tree/getTreeNodeForField.ts +1 -1
- package/src/simple-tree/index.ts +19 -11
- package/src/simple-tree/node-kinds/array/arrayNode.ts +12 -17
- package/src/simple-tree/node-kinds/array/arrayNodeTypes.ts +7 -8
- package/src/simple-tree/node-kinds/common.ts +5 -3
- package/src/simple-tree/node-kinds/index.ts +0 -2
- package/src/simple-tree/node-kinds/map/mapNode.ts +8 -16
- package/src/simple-tree/node-kinds/map/mapNodeTypes.ts +7 -8
- package/src/simple-tree/node-kinds/object/index.ts +0 -2
- package/src/simple-tree/node-kinds/object/objectNode.ts +17 -55
- package/src/simple-tree/node-kinds/object/objectNodeTypes.ts +5 -19
- package/src/simple-tree/node-kinds/record/recordNode.ts +16 -23
- package/src/simple-tree/node-kinds/record/recordNodeTypes.ts +7 -11
- package/src/simple-tree/prepareForInsertion.ts +92 -30
- package/src/simple-tree/toStoredSchema.ts +8 -9
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +2 -6
- package/src/simple-tree/unsafeUnknownSchema.ts +2 -3
- package/src/simple-tree/walkFieldSchema.ts +1 -1
- package/src/tableSchema.ts +24 -37
|
@@ -15,15 +15,12 @@ import {
|
|
|
15
15
|
typeNameSymbol,
|
|
16
16
|
typeSchemaSymbol,
|
|
17
17
|
type UnhydratedFlexTreeNode,
|
|
18
|
-
|
|
18
|
+
getInnerNode,
|
|
19
19
|
getKernel,
|
|
20
20
|
type InternalTreeNode,
|
|
21
21
|
type NodeSchemaMetadata,
|
|
22
|
-
type ImplicitAnnotatedAllowedTypes,
|
|
23
|
-
type UnannotateImplicitAllowedTypes,
|
|
24
22
|
type ImplicitAllowedTypes,
|
|
25
23
|
normalizeAllowedTypes,
|
|
26
|
-
unannotateImplicitAllowedTypes,
|
|
27
24
|
type TreeNodeFromImplicitAllowedTypes,
|
|
28
25
|
TreeNodeValid,
|
|
29
26
|
type MostDerivedData,
|
|
@@ -108,7 +105,7 @@ function createRecordNodeProxy(
|
|
|
108
105
|
}
|
|
109
106
|
|
|
110
107
|
if (typeof key === "string") {
|
|
111
|
-
const innerNode =
|
|
108
|
+
const innerNode = getInnerNode(receiver);
|
|
112
109
|
const field = innerNode.tryGetField(brand(key));
|
|
113
110
|
if (field !== undefined) {
|
|
114
111
|
return tryGetTreeNodeForField(field);
|
|
@@ -122,7 +119,7 @@ function createRecordNodeProxy(
|
|
|
122
119
|
return false;
|
|
123
120
|
}
|
|
124
121
|
|
|
125
|
-
const innerNode =
|
|
122
|
+
const innerNode = getInnerNode(receiver);
|
|
126
123
|
const field = innerNode.getBoxed(brand(key)) as FlexTreeOptionalField;
|
|
127
124
|
const kernel = getKernel(receiver);
|
|
128
125
|
const innerSchema = innerNode.context.schema.nodeSchema.get(brand(schema.identifier));
|
|
@@ -146,13 +143,13 @@ function createRecordNodeProxy(
|
|
|
146
143
|
return false;
|
|
147
144
|
}
|
|
148
145
|
|
|
149
|
-
const innerNode =
|
|
146
|
+
const innerNode = getInnerNode(proxy);
|
|
150
147
|
const childField = innerNode.tryGetField(brand(key));
|
|
151
148
|
|
|
152
149
|
return childField !== undefined;
|
|
153
150
|
},
|
|
154
151
|
ownKeys: (target) => {
|
|
155
|
-
const innerNode =
|
|
152
|
+
const innerNode = getInnerNode(proxy);
|
|
156
153
|
return [...innerNode.keys()];
|
|
157
154
|
},
|
|
158
155
|
getOwnPropertyDescriptor: (target, key) => {
|
|
@@ -160,7 +157,7 @@ function createRecordNodeProxy(
|
|
|
160
157
|
return undefined;
|
|
161
158
|
}
|
|
162
159
|
|
|
163
|
-
const innerNode =
|
|
160
|
+
const innerNode = getInnerNode(proxy);
|
|
164
161
|
const field = innerNode.tryGetField(brand(key));
|
|
165
162
|
|
|
166
163
|
if (field === undefined) {
|
|
@@ -182,7 +179,7 @@ function createRecordNodeProxy(
|
|
|
182
179
|
return false;
|
|
183
180
|
}
|
|
184
181
|
|
|
185
|
-
const innerNode =
|
|
182
|
+
const innerNode = getInnerNode(proxy);
|
|
186
183
|
const field = innerNode.tryGetField(brand(key)) as FlexTreeOptionalField | undefined;
|
|
187
184
|
if (field !== undefined) {
|
|
188
185
|
field.editor.set(undefined, field.length === 0);
|
|
@@ -212,7 +209,7 @@ abstract class CustomRecordNodeBase<
|
|
|
212
209
|
*/
|
|
213
210
|
export interface RecordSchemaOptions<
|
|
214
211
|
TName extends string,
|
|
215
|
-
TAllowedTypes extends
|
|
212
|
+
TAllowedTypes extends ImplicitAllowedTypes,
|
|
216
213
|
TImplicitlyConstructable extends boolean,
|
|
217
214
|
TCustomMetadata = unknown,
|
|
218
215
|
> {
|
|
@@ -250,7 +247,7 @@ export interface RecordSchemaOptions<
|
|
|
250
247
|
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
251
248
|
export function recordSchema<
|
|
252
249
|
TName extends string,
|
|
253
|
-
const TAllowedTypes extends
|
|
250
|
+
const TAllowedTypes extends ImplicitAllowedTypes,
|
|
254
251
|
const TImplicitlyConstructable extends boolean,
|
|
255
252
|
const TCustomMetadata = unknown,
|
|
256
253
|
>(
|
|
@@ -261,8 +258,6 @@ export function recordSchema<
|
|
|
261
258
|
TCustomMetadata
|
|
262
259
|
>,
|
|
263
260
|
) {
|
|
264
|
-
type TUnannotatedAllowedTypes = UnannotateImplicitAllowedTypes<TAllowedTypes>;
|
|
265
|
-
|
|
266
261
|
const {
|
|
267
262
|
identifier,
|
|
268
263
|
info,
|
|
@@ -272,23 +267,21 @@ export function recordSchema<
|
|
|
272
267
|
persistedMetadata,
|
|
273
268
|
} = options;
|
|
274
269
|
|
|
275
|
-
const
|
|
276
|
-
normalizeAllowedTypes(unannotateImplicitAllowedTypes(info)),
|
|
277
|
-
);
|
|
270
|
+
const normalizedTypes = normalizeAllowedTypes(info);
|
|
278
271
|
const lazyAllowedTypesIdentifiers = new Lazy(
|
|
279
|
-
() => new Set(
|
|
272
|
+
() => new Set(normalizedTypes.evaluate().map((type) => type.identifier)),
|
|
280
273
|
);
|
|
281
274
|
|
|
282
275
|
let privateData: TreeNodeSchemaPrivateData | undefined;
|
|
283
276
|
|
|
284
277
|
class Schema
|
|
285
|
-
extends CustomRecordNodeBase<
|
|
286
|
-
implements TreeRecordNode<
|
|
278
|
+
extends CustomRecordNodeBase<TAllowedTypes>
|
|
279
|
+
implements TreeRecordNode<TAllowedTypes>
|
|
287
280
|
{
|
|
288
281
|
/**
|
|
289
282
|
* Record-like index signature for the node.
|
|
290
283
|
*/
|
|
291
|
-
[key: string]: TreeNodeFromImplicitAllowedTypes<
|
|
284
|
+
[key: string]: TreeNodeFromImplicitAllowedTypes<TAllowedTypes>;
|
|
292
285
|
|
|
293
286
|
public static override prepareInstance<T2>(
|
|
294
287
|
this: typeof TreeNodeValid<T2>,
|
|
@@ -374,7 +367,7 @@ export function recordSchema<
|
|
|
374
367
|
public static readonly implicitlyConstructable: TImplicitlyConstructable =
|
|
375
368
|
implicitlyConstructable;
|
|
376
369
|
public static get childTypes(): ReadonlySet<TreeNodeSchema> {
|
|
377
|
-
return
|
|
370
|
+
return normalizedTypes.evaluateSet();
|
|
378
371
|
}
|
|
379
372
|
public static readonly metadata: NodeSchemaMetadata<TCustomMetadata> = metadata ?? {};
|
|
380
373
|
public static readonly persistedMetadata: JsonCompatibleReadOnlyObject | undefined =
|
|
@@ -389,7 +382,7 @@ export function recordSchema<
|
|
|
389
382
|
}
|
|
390
383
|
|
|
391
384
|
public [Symbol.iterator](): IterableIterator<
|
|
392
|
-
[string, TreeNodeFromImplicitAllowedTypes<
|
|
385
|
+
[string, TreeNodeFromImplicitAllowedTypes<TAllowedTypes>]
|
|
393
386
|
> {
|
|
394
387
|
return recordIterator(this);
|
|
395
388
|
}
|
|
@@ -11,10 +11,8 @@ import type {
|
|
|
11
11
|
WithType,
|
|
12
12
|
TreeNode,
|
|
13
13
|
ImplicitAllowedTypes,
|
|
14
|
-
ImplicitAnnotatedAllowedTypes,
|
|
15
14
|
InsertableTreeNodeFromImplicitAllowedTypes,
|
|
16
15
|
TreeNodeFromImplicitAllowedTypes,
|
|
17
|
-
UnannotateImplicitAllowedTypes,
|
|
18
16
|
} from "../../core/index.js";
|
|
19
17
|
|
|
20
18
|
import type { SimpleRecordNodeSchema } from "../../simpleSchema.js";
|
|
@@ -56,15 +54,14 @@ export type RecordNodeInsertableData<T extends ImplicitAllowedTypes> = Restricti
|
|
|
56
54
|
*/
|
|
57
55
|
export interface RecordNodeCustomizableSchema<
|
|
58
56
|
out TName extends string = string,
|
|
59
|
-
in out T extends
|
|
57
|
+
in out T extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
60
58
|
out ImplicitlyConstructable extends boolean = true,
|
|
61
59
|
out TCustomMetadata = unknown,
|
|
62
60
|
> extends TreeNodeSchemaClass<
|
|
63
61
|
/* Name */ TName,
|
|
64
62
|
/* Kind */ NodeKind.Record,
|
|
65
|
-
/* TNode */ TreeRecordNode<
|
|
66
|
-
|
|
67
|
-
/* TInsertable */ RecordNodeInsertableData<UnannotateImplicitAllowedTypes<T>>,
|
|
63
|
+
/* TNode */ TreeRecordNode<T> & WithType<TName, NodeKind.Record, T>,
|
|
64
|
+
/* TInsertable */ RecordNodeInsertableData<T>,
|
|
68
65
|
/* ImplicitlyConstructable */ ImplicitlyConstructable,
|
|
69
66
|
/* Info */ T,
|
|
70
67
|
/* TConstructorExtra */ never,
|
|
@@ -78,15 +75,14 @@ export interface RecordNodeCustomizableSchema<
|
|
|
78
75
|
*/
|
|
79
76
|
export interface RecordNodePojoEmulationSchema<
|
|
80
77
|
out TName extends string = string,
|
|
81
|
-
in out T extends
|
|
78
|
+
in out T extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
82
79
|
out ImplicitlyConstructable extends boolean = true,
|
|
83
80
|
out TCustomMetadata = unknown,
|
|
84
81
|
> extends TreeNodeSchemaNonClass<
|
|
85
82
|
/* Name */ TName,
|
|
86
83
|
/* Kind */ NodeKind.Record,
|
|
87
|
-
/* TNode */ TreeRecordNode<
|
|
88
|
-
|
|
89
|
-
/* TInsertable */ RecordNodeInsertableData<UnannotateImplicitAllowedTypes<T>>,
|
|
84
|
+
/* TNode */ TreeRecordNode<T> & WithType<TName, NodeKind.Record, T>,
|
|
85
|
+
/* TInsertable */ RecordNodeInsertableData<T>,
|
|
90
86
|
/* ImplicitlyConstructable */ ImplicitlyConstructable,
|
|
91
87
|
/* Info */ T,
|
|
92
88
|
/* TConstructorExtra */ never,
|
|
@@ -104,7 +100,7 @@ export interface RecordNodePojoEmulationSchema<
|
|
|
104
100
|
*/
|
|
105
101
|
export type RecordNodeSchema<
|
|
106
102
|
TName extends string = string,
|
|
107
|
-
T extends
|
|
103
|
+
T extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
108
104
|
ImplicitlyConstructable extends boolean = true,
|
|
109
105
|
TCustomMetadata = unknown,
|
|
110
106
|
> =
|
|
@@ -7,7 +7,6 @@ import type {
|
|
|
7
7
|
SchemaAndPolicy,
|
|
8
8
|
IForestSubscription,
|
|
9
9
|
UpPath,
|
|
10
|
-
NodeIndex,
|
|
11
10
|
FieldKey,
|
|
12
11
|
DetachedField,
|
|
13
12
|
TreeFieldStoredSchema,
|
|
@@ -21,21 +20,25 @@ import {
|
|
|
21
20
|
type FlexibleFieldContent,
|
|
22
21
|
type FlexibleNodeContent,
|
|
23
22
|
throwOutOfSchema,
|
|
23
|
+
flexTreeSlot,
|
|
24
|
+
ContextSlot,
|
|
25
|
+
getOrCreateHydratedFlexTreeNode,
|
|
26
|
+
assertFlexTreeEntityNotFreed,
|
|
24
27
|
} from "../feature-libraries/index.js";
|
|
25
|
-
import type {
|
|
28
|
+
import type { ImplicitFieldSchema } from "./fieldSchema.js";
|
|
26
29
|
import {
|
|
27
30
|
type InsertableContent,
|
|
28
31
|
unhydratedFlexTreeFromInsertable,
|
|
29
32
|
} from "./unhydratedFlexTreeFromInsertable.js";
|
|
30
33
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
31
|
-
import { brand } from "../util/index.js";
|
|
34
|
+
import { brand, type Mutable } from "../util/index.js";
|
|
32
35
|
import {
|
|
33
36
|
getKernel,
|
|
34
|
-
type
|
|
37
|
+
type ImplicitAllowedTypes,
|
|
35
38
|
type TreeNode,
|
|
36
39
|
type UnhydratedFlexTreeNode,
|
|
37
40
|
} from "./core/index.js";
|
|
38
|
-
import { debugAssert, oob } from "@fluidframework/core-utils/internal";
|
|
41
|
+
import { debugAssert, fail, oob } from "@fluidframework/core-utils/internal";
|
|
39
42
|
import { isFieldInSchema } from "../feature-libraries/index.js";
|
|
40
43
|
|
|
41
44
|
/**
|
|
@@ -56,7 +59,7 @@ const validateSchema = true;
|
|
|
56
59
|
*/
|
|
57
60
|
export function prepareForInsertion<TIn extends InsertableContent | undefined>(
|
|
58
61
|
data: TIn,
|
|
59
|
-
schema:
|
|
62
|
+
schema: ImplicitFieldSchema,
|
|
60
63
|
destinationContext: FlexTreeContext,
|
|
61
64
|
destinationSchema: TreeFieldStoredSchema,
|
|
62
65
|
): TIn extends undefined ? undefined : FlexibleNodeContent {
|
|
@@ -84,7 +87,7 @@ export function prepareForInsertion<TIn extends InsertableContent | undefined>(
|
|
|
84
87
|
*/
|
|
85
88
|
export function prepareArrayContentForInsertion(
|
|
86
89
|
data: readonly InsertableContent[],
|
|
87
|
-
schema:
|
|
90
|
+
schema: ImplicitAllowedTypes,
|
|
88
91
|
destinationContext: FlexTreeContext,
|
|
89
92
|
destinationSchema: TreeTypeSet,
|
|
90
93
|
): FlexibleFieldContent {
|
|
@@ -117,15 +120,22 @@ export function prepareArrayContentForInsertion(
|
|
|
117
120
|
*/
|
|
118
121
|
export function prepareForInsertionContextless<TIn extends InsertableContent | undefined>(
|
|
119
122
|
data: TIn,
|
|
120
|
-
schema:
|
|
123
|
+
schema: ImplicitFieldSchema,
|
|
121
124
|
schemaAndPolicy: SchemaAndPolicy,
|
|
122
125
|
hydratedData: FlexTreeHydratedContextMinimal | undefined,
|
|
123
126
|
destinationSchema: TreeFieldStoredSchema,
|
|
127
|
+
scheduleHydrationOverride?: HydrationScheduler,
|
|
124
128
|
): TIn extends undefined ? undefined : FlexibleNodeContent {
|
|
125
129
|
const mapTree = unhydratedFlexTreeFromInsertable(data, schema);
|
|
126
130
|
|
|
127
131
|
const contentArray = mapTree === undefined ? [] : [mapTree];
|
|
128
|
-
validateAndPrepare(
|
|
132
|
+
validateAndPrepare(
|
|
133
|
+
schemaAndPolicy,
|
|
134
|
+
hydratedData,
|
|
135
|
+
destinationSchema,
|
|
136
|
+
contentArray,
|
|
137
|
+
scheduleHydrationOverride,
|
|
138
|
+
);
|
|
129
139
|
|
|
130
140
|
return mapTree;
|
|
131
141
|
}
|
|
@@ -141,12 +151,19 @@ function validateAndPrepare(
|
|
|
141
151
|
hydratedData: FlexTreeHydratedContextMinimal | undefined,
|
|
142
152
|
fieldSchema: TreeFieldStoredSchema,
|
|
143
153
|
mapTrees: readonly UnhydratedFlexTreeNode[],
|
|
154
|
+
scheduleHydrationOverride?: HydrationScheduler,
|
|
144
155
|
): void {
|
|
145
156
|
if (hydratedData !== undefined) {
|
|
146
157
|
// Run `prepareContentForHydration` before walking the tree in `isFieldInSchema`.
|
|
147
158
|
// This ensures that when `isFieldInSchema` requests identifiers (or any other contextual defaults),
|
|
148
159
|
// they were already creating used the more specific context we have access to from `hydratedData`.
|
|
149
|
-
prepareContentForHydration(
|
|
160
|
+
prepareContentForHydration(
|
|
161
|
+
mapTrees,
|
|
162
|
+
scheduleHydrationOverride ??
|
|
163
|
+
((batch, doHydration) =>
|
|
164
|
+
scheduleHydration(batch, hydratedData.checkout.forest, doHydration)),
|
|
165
|
+
hydratedData,
|
|
166
|
+
);
|
|
150
167
|
// TODO: AB#45723
|
|
151
168
|
// Now that staged schema rely on this validation, its a bit odd we don't do it for insertion into unhydrated contexts.
|
|
152
169
|
// We can't simply enable it for them however due to contextual default fields which would not have been created yet (see comment above).
|
|
@@ -157,15 +174,6 @@ function validateAndPrepare(
|
|
|
157
174
|
}
|
|
158
175
|
}
|
|
159
176
|
|
|
160
|
-
/**
|
|
161
|
-
* An {@link UpPath} that is just index zero in a {@link DetachedField} which can be modified at a later time.
|
|
162
|
-
*/
|
|
163
|
-
interface Root extends UpPath {
|
|
164
|
-
readonly parent: undefined;
|
|
165
|
-
parentField: DetachedField & FieldKey;
|
|
166
|
-
readonly parentIndex: NodeIndex & 0;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
177
|
/**
|
|
170
178
|
* The path from the included node to the root of the content tree it was inserted as part of.
|
|
171
179
|
*/
|
|
@@ -181,7 +189,7 @@ interface LocatedNodesBatch {
|
|
|
181
189
|
/**
|
|
182
190
|
* UpPath shared by all {@link RelativeNodePath}s in this batch corresponding to the root of the inserted content.
|
|
183
191
|
*/
|
|
184
|
-
readonly rootPath:
|
|
192
|
+
readonly rootPath: Mutable<UpPath>;
|
|
185
193
|
readonly paths: RelativeNodePath[];
|
|
186
194
|
}
|
|
187
195
|
|
|
@@ -204,7 +212,7 @@ const placeholderKey: DetachedField & FieldKey = brand("placeholder" as const);
|
|
|
204
212
|
*/
|
|
205
213
|
export function prepareContentForHydration(
|
|
206
214
|
content: readonly UnhydratedFlexTreeNode[],
|
|
207
|
-
|
|
215
|
+
scheduler: HydrationScheduler,
|
|
208
216
|
context: FlexTreeHydratedContextMinimal,
|
|
209
217
|
): void {
|
|
210
218
|
const batches: LocatedNodesBatch[] = [];
|
|
@@ -228,7 +236,8 @@ export function prepareContentForHydration(
|
|
|
228
236
|
);
|
|
229
237
|
}
|
|
230
238
|
|
|
231
|
-
|
|
239
|
+
const doHydration = hydrator(batches, context.checkout.forest);
|
|
240
|
+
scheduler(batches, doHydration);
|
|
232
241
|
}
|
|
233
242
|
|
|
234
243
|
function walkMapTree(
|
|
@@ -270,6 +279,23 @@ function walkMapTree(
|
|
|
270
279
|
}
|
|
271
280
|
}
|
|
272
281
|
|
|
282
|
+
/**
|
|
283
|
+
* A function which can schedule hydration of batches of nodes to occur at a later time (which must be after they have been inserted into the tree).
|
|
284
|
+
*/
|
|
285
|
+
type HydrationScheduler = (
|
|
286
|
+
locatedNodes: readonly LocatedNodesBatch[],
|
|
287
|
+
/**
|
|
288
|
+
* Does the actual hydration. Should be called for each index in `locatedNodes` once the corresponding content has been inserted into the tree.
|
|
289
|
+
*/
|
|
290
|
+
doHydration: Hydrator,
|
|
291
|
+
) => void;
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* Does the actual hydration.
|
|
295
|
+
* The provided `attachPath` is the path the content is currently under (where it was attached in the tree).
|
|
296
|
+
*/
|
|
297
|
+
type Hydrator = (batch: LocatedNodesBatch, attachPath: UpPath) => void;
|
|
298
|
+
|
|
273
299
|
/**
|
|
274
300
|
* Register events which will hydrate batches of nodes when they are inserted.
|
|
275
301
|
* The next edits to forest must be their insertions, in order, or data corruption can occur.
|
|
@@ -280,22 +306,58 @@ function walkMapTree(
|
|
|
280
306
|
function scheduleHydration(
|
|
281
307
|
locatedNodes: readonly LocatedNodesBatch[],
|
|
282
308
|
forest: IForestSubscription,
|
|
309
|
+
doHydration: Hydrator,
|
|
283
310
|
): void {
|
|
284
311
|
// Only subscribe to the event if there is at least one TreeNode tree to hydrate - this is not the case when inserting an empty array [].
|
|
285
312
|
if (locatedNodes.length > 0) {
|
|
286
313
|
// Creating a new array emits one event per element in the array, so listen to the event once for each element
|
|
287
|
-
let
|
|
314
|
+
let index = 0;
|
|
288
315
|
const off = forest.events.on("afterRootFieldCreated", (fieldKey) => {
|
|
289
316
|
// Indexing is safe here because of the length check above. This assumes the array has not been modified which should be the case.
|
|
290
|
-
const batch = locatedNodes[
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
for (const { path, node } of batch.paths) {
|
|
294
|
-
getKernel(node).hydrate(forest.anchors, path);
|
|
295
|
-
}
|
|
296
|
-
if (++i === locatedNodes.length) {
|
|
317
|
+
const batch = locatedNodes[index] ?? oob();
|
|
318
|
+
doHydration(batch, { parent: undefined, parentField: fieldKey, parentIndex: 0 });
|
|
319
|
+
if (++index === locatedNodes.length) {
|
|
297
320
|
off();
|
|
298
321
|
}
|
|
299
322
|
});
|
|
300
323
|
}
|
|
301
324
|
}
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Implementation of {@link Hydrator}.
|
|
328
|
+
*/
|
|
329
|
+
function hydrator(
|
|
330
|
+
locatedNodes: readonly LocatedNodesBatch[],
|
|
331
|
+
forest: IForestSubscription,
|
|
332
|
+
): (batch: LocatedNodesBatch, attachedPath: UpPath) => void {
|
|
333
|
+
return (batch: LocatedNodesBatch, attachedPath: UpPath) => {
|
|
334
|
+
const context = forest.anchors.slots.get(ContextSlot) ?? fail(0xb41 /* missing context */);
|
|
335
|
+
|
|
336
|
+
// Modify paths in batch to point to correct location:
|
|
337
|
+
debugAssert(() => batch.rootPath.parentField === placeholderKey);
|
|
338
|
+
batch.rootPath.parentField = attachedPath.parentField;
|
|
339
|
+
batch.rootPath.parent = attachedPath.parent;
|
|
340
|
+
batch.rootPath.parentIndex = attachedPath.parentIndex;
|
|
341
|
+
|
|
342
|
+
// To hydrate a TreeNode, it must be associated with a HydratedFlexTreeNode.
|
|
343
|
+
// Find or create one as necessary.
|
|
344
|
+
for (const { path, node } of batch.paths) {
|
|
345
|
+
const anchor = forest.anchors.track(path);
|
|
346
|
+
const anchorNode = forest.anchors.locate(anchor) ?? fail("missing anchor");
|
|
347
|
+
|
|
348
|
+
let flexNode = anchorNode.slots.get(flexTreeSlot);
|
|
349
|
+
if (flexNode === undefined) {
|
|
350
|
+
// the flex node must be created
|
|
351
|
+
const cursor = forest.allocateCursor("getFlexNode");
|
|
352
|
+
forest.moveCursorToPath(anchorNode, cursor);
|
|
353
|
+
|
|
354
|
+
flexNode = getOrCreateHydratedFlexTreeNode(context, cursor);
|
|
355
|
+
cursor.free();
|
|
356
|
+
assertFlexTreeEntityNotFreed(flexNode);
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
getKernel(node).hydrate(flexNode);
|
|
360
|
+
forest.anchors.forget(anchor);
|
|
361
|
+
}
|
|
362
|
+
};
|
|
363
|
+
}
|
|
@@ -35,7 +35,6 @@ import {
|
|
|
35
35
|
FieldKind,
|
|
36
36
|
FieldSchemaAlpha,
|
|
37
37
|
normalizeFieldSchema,
|
|
38
|
-
type ImplicitAnnotatedFieldSchema,
|
|
39
38
|
type ImplicitFieldSchema,
|
|
40
39
|
} from "./fieldSchema.js";
|
|
41
40
|
import type { SimpleFieldSchema, SimpleNodeSchema } from "./simpleSchema.js";
|
|
@@ -55,23 +54,23 @@ export const permissiveStoredSchemaGenerationOptions: StoredSchemaGenerationOpti
|
|
|
55
54
|
};
|
|
56
55
|
|
|
57
56
|
/**
|
|
58
|
-
* Converts a {@link
|
|
57
|
+
* Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema} for use in schema upgrades.
|
|
59
58
|
*
|
|
60
59
|
* TODO: once upgrades are more flexible, this should take in more options, including the old schema and specific upgrades to enable.
|
|
61
60
|
*/
|
|
62
|
-
export function toUpgradeSchema(root:
|
|
61
|
+
export function toUpgradeSchema(root: ImplicitFieldSchema): TreeStoredSchema {
|
|
63
62
|
return toStoredSchema(root, restrictiveStoredSchemaGenerationOptions);
|
|
64
63
|
}
|
|
65
64
|
|
|
66
65
|
/**
|
|
67
|
-
* Converts a {@link
|
|
66
|
+
* Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema} for use as initial document schema.
|
|
68
67
|
*/
|
|
69
|
-
export function toInitialSchema(root:
|
|
68
|
+
export function toInitialSchema(root: ImplicitFieldSchema): TreeStoredSchema {
|
|
70
69
|
return toStoredSchema(root, restrictiveStoredSchemaGenerationOptions);
|
|
71
70
|
}
|
|
72
71
|
|
|
73
72
|
/**
|
|
74
|
-
* Converts a {@link
|
|
73
|
+
* Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema} to used for unhydrated nodes.
|
|
75
74
|
* @remarks
|
|
76
75
|
* This allows as much as possible, relying on further validation when inserting the content.
|
|
77
76
|
*
|
|
@@ -80,7 +79,7 @@ export function toInitialSchema(root: ImplicitAnnotatedFieldSchema): TreeStoredS
|
|
|
80
79
|
export const toUnhydratedSchema = permissiveStoredSchemaGenerationOptions;
|
|
81
80
|
|
|
82
81
|
/**
|
|
83
|
-
* Converts a {@link
|
|
82
|
+
* Converts a {@link ImplicitFieldSchema} into a {@link TreeStoredSchema}.
|
|
84
83
|
*
|
|
85
84
|
* @privateRemarks
|
|
86
85
|
* TODO:#38722 When runtime schema upgrades are implemented, this will need to be updated to check if
|
|
@@ -90,7 +89,7 @@ export const toUnhydratedSchema = permissiveStoredSchemaGenerationOptions;
|
|
|
90
89
|
* Throws a `UsageError` if multiple schemas are encountered with the same identifier.
|
|
91
90
|
*/
|
|
92
91
|
export function toStoredSchema(
|
|
93
|
-
root:
|
|
92
|
+
root: ImplicitFieldSchema,
|
|
94
93
|
options: StoredSchemaGenerationOptions,
|
|
95
94
|
): TreeStoredSchema {
|
|
96
95
|
const cache = getOrCreate(viewToStoredCache, options, () => new WeakMap());
|
|
@@ -138,7 +137,7 @@ export function convertField(
|
|
|
138
137
|
let types: TreeTypeSet;
|
|
139
138
|
// eslint-disable-next-line unicorn/prefer-ternary
|
|
140
139
|
if (schema instanceof FieldSchemaAlpha) {
|
|
141
|
-
types = convertAllowedTypes(schema.
|
|
140
|
+
types = convertAllowedTypes(schema.allowedTypes, options);
|
|
142
141
|
} else {
|
|
143
142
|
types = schema.allowedTypesIdentifiers as TreeTypeSet;
|
|
144
143
|
}
|
|
@@ -9,11 +9,7 @@ import { assert } from "@fluidframework/core-utils/internal";
|
|
|
9
9
|
|
|
10
10
|
import { hasSingle } from "../util/index.js";
|
|
11
11
|
|
|
12
|
-
import {
|
|
13
|
-
normalizeFieldSchema,
|
|
14
|
-
FieldKind,
|
|
15
|
-
type ImplicitAnnotatedFieldSchema,
|
|
16
|
-
} from "./fieldSchema.js";
|
|
12
|
+
import { normalizeFieldSchema, FieldKind, type ImplicitFieldSchema } from "./fieldSchema.js";
|
|
17
13
|
import {
|
|
18
14
|
CompatibilityLevel,
|
|
19
15
|
getKernel,
|
|
@@ -54,7 +50,7 @@ import { getUnhydratedContext } from "./createContext.js";
|
|
|
54
50
|
*/
|
|
55
51
|
export function unhydratedFlexTreeFromInsertable<TIn extends InsertableContent | undefined>(
|
|
56
52
|
data: TIn,
|
|
57
|
-
allowedTypes:
|
|
53
|
+
allowedTypes: ImplicitFieldSchema,
|
|
58
54
|
): TIn extends undefined ? undefined : UnhydratedFlexTreeNode {
|
|
59
55
|
const normalizedFieldSchema = normalizeFieldSchema(allowedTypes);
|
|
60
56
|
|
|
@@ -17,8 +17,8 @@ import type { InsertableContent } from "./unhydratedFlexTreeFromInsertable.js";
|
|
|
17
17
|
* {@inheritdoc (UnsafeUnknownSchema:type)}
|
|
18
18
|
* @alpha
|
|
19
19
|
*/
|
|
20
|
-
|
|
21
20
|
export const UnsafeUnknownSchema: unique symbol = Symbol("UnsafeUnknownSchema");
|
|
21
|
+
|
|
22
22
|
/**
|
|
23
23
|
* A special type which can be provided to some APIs as the schema type parameter when schema cannot easily be provided at compile time and an unsafe (instead of disabled) editing API is desired.
|
|
24
24
|
* @remarks
|
|
@@ -37,8 +37,8 @@ export const UnsafeUnknownSchema: unique symbol = Symbol("UnsafeUnknownSchema");
|
|
|
37
37
|
* This is currently only type exported from the package: the symbol is just used as a way to get a named type.
|
|
38
38
|
* @alpha
|
|
39
39
|
*/
|
|
40
|
-
|
|
41
40
|
export type UnsafeUnknownSchema = typeof UnsafeUnknownSchema;
|
|
41
|
+
|
|
42
42
|
/**
|
|
43
43
|
* Content which could be inserted into a tree.
|
|
44
44
|
*
|
|
@@ -47,7 +47,6 @@ export type UnsafeUnknownSchema = typeof UnsafeUnknownSchema;
|
|
|
47
47
|
* Extended version of {@link InsertableTreeNodeFromImplicitAllowedTypes} that also allows {@link (UnsafeUnknownSchema:type)}.
|
|
48
48
|
* @alpha
|
|
49
49
|
*/
|
|
50
|
-
|
|
51
50
|
export type Insertable<TSchema extends ImplicitAllowedTypes | UnsafeUnknownSchema> =
|
|
52
51
|
TSchema extends ImplicitAllowedTypes
|
|
53
52
|
? InsertableTreeNodeFromImplicitAllowedTypes<TSchema>
|
|
@@ -16,7 +16,7 @@ export function walkFieldSchema(
|
|
|
16
16
|
visitedSet: Set<TreeNodeSchema> = new Set(),
|
|
17
17
|
): void {
|
|
18
18
|
walkAllowedTypes(
|
|
19
|
-
normalizeFieldSchema(schema).
|
|
19
|
+
normalizeFieldSchema(schema).allowedTypesFull.evaluate(),
|
|
20
20
|
visitor,
|
|
21
21
|
visitedSet,
|
|
22
22
|
);
|