@fluidframework/tree 2.41.0 → 2.43.0-343119
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/.vscode/settings.json +1 -0
- package/CHANGELOG.md +33 -0
- package/api-report/tree.alpha.api.md +70 -28
- package/api-report/tree.beta.api.md +33 -0
- package/dist/alpha.d.ts +12 -6
- package/dist/beta.d.ts +6 -1
- package/dist/codec/codec.d.ts +23 -3
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/index.d.ts +1 -1
- package/dist/codec/index.d.ts.map +1 -1
- package/dist/codec/index.js.map +1 -1
- package/dist/codec/versioned/codec.d.ts +35 -2
- package/dist/codec/versioned/codec.d.ts.map +1 -1
- package/dist/codec/versioned/codec.js +38 -3
- package/dist/codec/versioned/codec.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +5 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/schema-stored/formatV2.d.ts +80 -0
- package/dist/core/schema-stored/formatV2.d.ts.map +1 -0
- package/dist/core/schema-stored/formatV2.js +55 -0
- package/dist/core/schema-stored/formatV2.js.map +1 -0
- package/dist/core/schema-stored/index.d.ts +3 -1
- package/dist/core/schema-stored/index.d.ts.map +1 -1
- package/dist/core/schema-stored/index.js +5 -2
- package/dist/core/schema-stored/index.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +49 -17
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +65 -22
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +2 -2
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +5 -1
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/mapTree.d.ts +2 -1
- package/dist/core/tree/mapTree.d.ts.map +1 -1
- package/dist/core/tree/mapTree.js +11 -5
- package/dist/core/tree/mapTree.js.map +1 -1
- package/dist/core/tree/visitorUtils.d.ts +2 -2
- package/dist/core/tree/visitorUtils.d.ts.map +1 -1
- package/dist/core/tree/visitorUtils.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +9 -7
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +13 -9
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +3 -3
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +6 -6
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +3 -3
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -2
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts +4 -3
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +4 -3
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts +8 -3
- package/dist/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/detachedFieldIndexSummarizer.js +2 -5
- package/dist/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +14 -6
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +48 -29
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +4 -0
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +2 -3
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js +1 -7
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +2 -2
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.js +3 -0
- package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +6 -7
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +2 -5
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +8 -7
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +17 -6
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +10 -5
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +9 -12
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +2 -2
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +4 -3
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/mapTreeCursor.d.ts +53 -3
- package/dist/feature-libraries/mapTreeCursor.d.ts.map +1 -1
- package/dist/feature-libraries/mapTreeCursor.js +45 -7
- package/dist/feature-libraries/mapTreeCursor.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js +2 -0
- package/dist/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +5 -5
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +2 -0
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -4
- package/dist/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -36
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +3 -3
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/dist/feature-libraries/schema-index/codec.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/codec.js +59 -9
- package/dist/feature-libraries/schema-index/codec.js.map +1 -1
- package/dist/feature-libraries/schema-index/formatV1.d.ts +1 -1
- package/dist/feature-libraries/schema-index/formatV2.d.ts +42 -0
- package/dist/feature-libraries/schema-index/formatV2.d.ts.map +1 -0
- package/dist/feature-libraries/schema-index/formatV2.js +26 -0
- package/dist/feature-libraries/schema-index/formatV2.js.map +1 -0
- package/dist/feature-libraries/schema-index/index.d.ts +2 -1
- package/dist/feature-libraries/schema-index/index.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/index.js +4 -2
- package/dist/feature-libraries/schema-index/index.js.map +1 -1
- package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts +7 -2
- package/dist/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/schemaSummarizer.js +6 -6
- package/dist/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts +5 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +8 -2
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +1 -0
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +11 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +36 -22
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +8 -4
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +35 -5
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/tree.d.ts.map +1 -1
- package/dist/shared-tree/tree.js +8 -24
- package/dist/shared-tree/tree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +2 -3
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +4 -5
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +5 -2
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/editManagerSummarizer.d.ts +8 -3
- package/dist/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerSummarizer.js +2 -5
- package/dist/shared-tree-core/editManagerSummarizer.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +18 -7
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +15 -2
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +2 -2
- package/dist/simple-tree/api/configuration.js +1 -1
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +9 -4
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +29 -16
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +4 -0
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +9 -1
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +1 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
- package/dist/simple-tree/api/schemaCreationUtilities.js +3 -3
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +25 -13
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +42 -9
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +41 -11
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +31 -4
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +2 -2
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/treeChangeEvents.d.ts +8 -3
- package/dist/simple-tree/api/treeChangeEvents.d.ts.map +1 -1
- package/dist/simple-tree/api/treeChangeEvents.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts +14 -3
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +32 -17
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +12 -9
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +5 -0
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js +2 -1
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +2 -2
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +3 -4
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +15 -25
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +27 -34
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +129 -64
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +175 -207
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/index.d.ts +5 -5
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +5 -5
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +2 -0
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +3 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +8 -7
- package/dist/simple-tree/node-kinds/array/arrayNode.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 +1 -2
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts +3 -2
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +6 -4
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js +1 -2
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +5 -15
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +15 -44
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +20 -6
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +31 -20
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +56 -9
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +28 -1
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/simpleSchema.d.ts +22 -4
- package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/simpleSchema.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +8 -1
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +19 -7
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/{lib/simple-tree/toMapTree.d.ts → dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts} +12 -23
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -0
- package/dist/simple-tree/{toMapTree.js → unhydratedFlexTreeFromInsertable.js} +103 -185
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -0
- package/dist/tableSchema.d.ts +1 -1
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +6 -1
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/index.d.ts +1 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +2 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeUtils.d.ts +2 -2
- package/dist/util/typeUtils.js.map +1 -1
- package/dist/util/utils.d.ts +6 -0
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +8 -1
- package/dist/util/utils.js.map +1 -1
- package/docs/user-facing/schema-evolution.md +1 -1
- package/lib/alpha.d.ts +12 -6
- package/lib/beta.d.ts +6 -1
- package/lib/codec/codec.d.ts +23 -3
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/index.d.ts +1 -1
- package/lib/codec/index.d.ts.map +1 -1
- package/lib/codec/index.js.map +1 -1
- package/lib/codec/versioned/codec.d.ts +35 -2
- package/lib/codec/versioned/codec.d.ts.map +1 -1
- package/lib/codec/versioned/codec.js +36 -2
- package/lib/codec/versioned/codec.js.map +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/schema-stored/formatV2.d.ts +80 -0
- package/lib/core/schema-stored/formatV2.d.ts.map +1 -0
- package/lib/core/schema-stored/formatV2.js +52 -0
- package/lib/core/schema-stored/formatV2.js.map +1 -0
- package/lib/core/schema-stored/index.d.ts +3 -1
- package/lib/core/schema-stored/index.d.ts.map +1 -1
- package/lib/core/schema-stored/index.js +3 -1
- package/lib/core/schema-stored/index.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +49 -17
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +63 -21
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +2 -2
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +6 -2
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/mapTree.d.ts +2 -1
- package/lib/core/tree/mapTree.d.ts.map +1 -1
- package/lib/core/tree/mapTree.js +11 -5
- package/lib/core/tree/mapTree.js.map +1 -1
- package/lib/core/tree/visitorUtils.d.ts +2 -2
- package/lib/core/tree/visitorUtils.d.ts.map +1 -1
- package/lib/core/tree/visitorUtils.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts +9 -7
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +11 -7
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +3 -3
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +7 -7
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +3 -3
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -2
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts +4 -3
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +4 -3
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts +8 -3
- package/lib/feature-libraries/detachedFieldIndexSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/detachedFieldIndexSummarizer.js +2 -5
- package/lib/feature-libraries/detachedFieldIndexSummarizer.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +14 -6
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +48 -29
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +4 -0
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +2 -3
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js +0 -1
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +2 -2
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.js +3 -0
- package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +6 -7
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +3 -6
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +8 -7
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +17 -6
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +10 -5
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +4 -7
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +2 -2
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +2 -2
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/mapTreeCursor.d.ts +53 -3
- package/lib/feature-libraries/mapTreeCursor.d.ts.map +1 -1
- package/lib/feature-libraries/mapTreeCursor.js +43 -7
- package/lib/feature-libraries/mapTreeCursor.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldKindWithEditor.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js +2 -0
- package/lib/feature-libraries/modular-schema/fieldKindWithEditor.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +5 -5
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +2 -0
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js +8 -4
- package/lib/feature-libraries/schema-edits/schemaChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +2 -36
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.js +3 -3
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/lib/feature-libraries/schema-index/codec.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/codec.js +60 -10
- package/lib/feature-libraries/schema-index/codec.js.map +1 -1
- package/lib/feature-libraries/schema-index/formatV1.d.ts +1 -1
- package/lib/feature-libraries/schema-index/formatV2.d.ts +42 -0
- package/lib/feature-libraries/schema-index/formatV2.d.ts.map +1 -0
- package/lib/feature-libraries/schema-index/formatV2.js +23 -0
- package/lib/feature-libraries/schema-index/formatV2.js.map +1 -0
- package/lib/feature-libraries/schema-index/index.d.ts +2 -1
- package/lib/feature-libraries/schema-index/index.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/index.js +2 -1
- package/lib/feature-libraries/schema-index/index.js.map +1 -1
- package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts +7 -2
- package/lib/feature-libraries/schema-index/schemaSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/schemaSummarizer.js +6 -6
- package/lib/feature-libraries/schema-index/schemaSummarizer.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts +5 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +8 -2
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +1 -0
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +11 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +34 -21
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +8 -4
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +36 -6
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/tree.d.ts.map +1 -1
- package/lib/shared-tree/tree.js +2 -18
- package/lib/shared-tree/tree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +2 -3
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +6 -7
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +6 -3
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/editManagerSummarizer.d.ts +8 -3
- package/lib/shared-tree-core/editManagerSummarizer.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerSummarizer.js +2 -5
- package/lib/shared-tree-core/editManagerSummarizer.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +18 -7
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +15 -2
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +2 -2
- package/lib/simple-tree/api/configuration.js +1 -1
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +9 -4
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +22 -9
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +4 -0
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +7 -0
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -1
- 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/schemaCompatibilityTester.js +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts +3 -3
- package/lib/simple-tree/api/schemaCreationUtilities.js +3 -3
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +25 -13
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +44 -11
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +41 -11
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +31 -4
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +2 -2
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/treeChangeEvents.d.ts +8 -3
- package/lib/simple-tree/api/treeChangeEvents.d.ts.map +1 -1
- package/lib/simple-tree/api/treeChangeEvents.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts +14 -3
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +35 -20
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +13 -10
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +5 -0
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js +3 -2
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +2 -2
- 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/treeNodeKernel.d.ts +15 -25
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +25 -33
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +129 -64
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +174 -208
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/index.d.ts +5 -5
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +3 -3
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +2 -0
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +3 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +7 -6
- package/lib/simple-tree/node-kinds/array/arrayNode.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 +1 -1
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts +3 -2
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +8 -6
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js +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 -15
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +6 -34
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +20 -6
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +30 -20
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +56 -9
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +28 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/simpleSchema.d.ts +22 -4
- package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/simpleSchema.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +8 -1
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +17 -5
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/{dist/simple-tree/toMapTree.d.ts → lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts} +12 -23
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -0
- package/lib/simple-tree/{toMapTree.js → unhydratedFlexTreeFromInsertable.js} +105 -186
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -0
- package/lib/tableSchema.d.ts +1 -1
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +6 -1
- package/lib/treeFactory.js.map +1 -1
- package/lib/util/index.d.ts +1 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/typeUtils.d.ts +2 -2
- package/lib/util/typeUtils.js.map +1 -1
- package/lib/util/utils.d.ts +6 -0
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +6 -0
- package/lib/util/utils.js.map +1 -1
- package/package.json +21 -21
- package/src/codec/codec.ts +24 -3
- package/src/codec/index.ts +1 -0
- package/src/codec/versioned/codec.ts +42 -5
- package/src/core/index.ts +3 -1
- package/src/core/schema-stored/formatV2.ts +78 -0
- package/src/core/schema-stored/index.ts +4 -1
- package/src/core/schema-stored/schema.ts +123 -33
- package/src/core/tree/detachedFieldIndex.ts +13 -4
- package/src/core/tree/mapTree.ts +22 -7
- package/src/core/tree/visitorUtils.ts +2 -2
- package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +16 -11
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +16 -7
- package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +4 -4
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +3 -2
- package/src/feature-libraries/default-schema/schemaChecker.ts +7 -6
- package/src/feature-libraries/detachedFieldIndexSummarizer.ts +9 -16
- package/src/feature-libraries/flex-tree/context.ts +17 -7
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +57 -33
- package/src/feature-libraries/flex-tree/index.ts +4 -8
- package/src/feature-libraries/flex-tree/lazyEntity.ts +5 -1
- package/src/feature-libraries/flex-tree/lazyField.ts +12 -13
- package/src/feature-libraries/flex-tree/lazyNode.ts +21 -8
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +12 -18
- package/src/feature-libraries/index.ts +10 -1
- package/src/feature-libraries/mapTreeCursor.ts +112 -16
- package/src/feature-libraries/modular-schema/fieldKindWithEditor.ts +2 -0
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +9 -5
- package/src/feature-libraries/object-forest/objectForest.ts +3 -0
- package/src/feature-libraries/schema-edits/schemaChangeCodecs.ts +11 -6
- package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +3 -3
- package/src/feature-libraries/schema-index/codec.ts +73 -14
- package/src/feature-libraries/schema-index/formatV2.ts +30 -0
- package/src/feature-libraries/schema-index/index.ts +2 -1
- package/src/feature-libraries/schema-index/schemaSummarizer.ts +11 -18
- package/src/feature-libraries/treeCursorUtils.ts +21 -10
- package/src/index.ts +6 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/schematizeTree.ts +1 -0
- package/src/shared-tree/schematizingTreeView.ts +40 -22
- package/src/shared-tree/sharedTree.ts +51 -15
- package/src/shared-tree/tree.ts +5 -20
- package/src/shared-tree/treeAlpha.ts +23 -12
- package/src/shared-tree/treeCheckout.ts +6 -3
- package/src/shared-tree-core/editManagerSummarizer.ts +9 -16
- package/src/shared-tree-core/sharedTreeCore.ts +33 -24
- package/src/simple-tree/api/configuration.ts +3 -3
- package/src/simple-tree/api/create.ts +49 -19
- package/src/simple-tree/api/customTree.ts +10 -0
- package/src/simple-tree/api/index.ts +1 -4
- package/src/simple-tree/api/schemaCompatibilityTester.ts +1 -1
- package/src/simple-tree/api/schemaCreationUtilities.ts +3 -3
- package/src/simple-tree/api/schemaFactory.ts +78 -24
- package/src/simple-tree/api/schemaFactoryAlpha.ts +53 -8
- package/src/simple-tree/api/storedSchema.ts +4 -4
- package/src/simple-tree/api/treeChangeEvents.ts +8 -3
- package/src/simple-tree/api/treeNodeApi.ts +48 -27
- package/src/simple-tree/api/verboseTree.ts +15 -12
- package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +5 -0
- package/src/simple-tree/core/getOrCreateNode.ts +4 -2
- package/src/simple-tree/core/index.ts +2 -3
- package/src/simple-tree/core/treeNodeKernel.ts +38 -55
- package/src/simple-tree/core/unhydratedFlexTree.ts +231 -292
- package/src/simple-tree/index.ts +6 -3
- package/src/simple-tree/leafNodeSchema.ts +2 -0
- package/src/simple-tree/node-kinds/array/arrayNode.ts +17 -13
- package/src/simple-tree/node-kinds/index.ts +0 -1
- package/src/simple-tree/node-kinds/map/mapNode.ts +17 -11
- package/src/simple-tree/node-kinds/object/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +15 -49
- package/src/simple-tree/prepareForInsertion.ts +54 -43
- package/src/simple-tree/schemaTypes.ts +103 -13
- package/src/simple-tree/simpleSchema.ts +27 -5
- package/src/simple-tree/toStoredSchema.ts +22 -5
- package/src/simple-tree/{toMapTree.ts → unhydratedFlexTreeFromInsertable.ts} +134 -226
- package/src/treeFactory.ts +6 -1
- package/src/util/index.ts +1 -0
- package/src/util/typeUtils.ts +2 -2
- package/src/util/utils.ts +9 -0
- package/dist/feature-libraries/flex-tree/navigation.d.ts +0 -46
- package/dist/feature-libraries/flex-tree/navigation.d.ts.map +0 -1
- package/dist/feature-libraries/flex-tree/navigation.js +0 -104
- package/dist/feature-libraries/flex-tree/navigation.js.map +0 -1
- package/dist/simple-tree/toMapTree.d.ts.map +0 -1
- package/dist/simple-tree/toMapTree.js.map +0 -1
- package/lib/feature-libraries/flex-tree/navigation.d.ts +0 -46
- package/lib/feature-libraries/flex-tree/navigation.d.ts.map +0 -1
- package/lib/feature-libraries/flex-tree/navigation.js +0 -97
- package/lib/feature-libraries/flex-tree/navigation.js.map +0 -1
- package/lib/simple-tree/toMapTree.d.ts.map +0 -1
- package/lib/simple-tree/toMapTree.js.map +0 -1
- package/src/feature-libraries/flex-tree/navigation.ts +0 -121
|
@@ -10,19 +10,17 @@ import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
|
10
10
|
|
|
11
11
|
import {
|
|
12
12
|
type AnchorEvents,
|
|
13
|
-
|
|
14
|
-
EmptyKey,
|
|
15
|
-
type ExclusiveMapTree,
|
|
13
|
+
dummyRoot,
|
|
16
14
|
type FieldKey,
|
|
17
15
|
type FieldKindIdentifier,
|
|
18
|
-
forbiddenFieldKindIdentifier,
|
|
19
16
|
type ITreeCursorSynchronous,
|
|
20
|
-
type
|
|
17
|
+
type NodeData,
|
|
21
18
|
type NormalizedFieldUpPath,
|
|
22
19
|
type SchemaPolicy,
|
|
23
20
|
type TreeNodeSchemaIdentifier,
|
|
24
21
|
type TreeNodeStoredSchema,
|
|
25
22
|
type TreeStoredSchema,
|
|
23
|
+
type TreeValue,
|
|
26
24
|
type Value,
|
|
27
25
|
} from "../../core/index.js";
|
|
28
26
|
import {
|
|
@@ -42,49 +40,59 @@ import {
|
|
|
42
40
|
FieldKinds,
|
|
43
41
|
type SequenceFieldEditBuilder,
|
|
44
42
|
cursorForMapTreeNode,
|
|
43
|
+
type OptionalFieldEditBuilder,
|
|
44
|
+
type ValueFieldEditBuilder,
|
|
45
|
+
type FlexibleNodeContent,
|
|
46
|
+
type FlexTreeHydratedContextMinimal,
|
|
47
|
+
type FlexibleFieldContent,
|
|
48
|
+
type MapTreeFieldViewGeneric,
|
|
49
|
+
type MapTreeNodeViewGeneric,
|
|
50
|
+
type HydratedFlexTreeNode,
|
|
51
|
+
cursorForMapTreeField,
|
|
52
|
+
type MinimalFieldMap,
|
|
45
53
|
} from "../../feature-libraries/index.js";
|
|
46
|
-
import { brand, getOrCreate, mapIterable } from "../../util/index.js";
|
|
54
|
+
import { brand, filterIterable, getOrCreate, mapIterable } from "../../util/index.js";
|
|
47
55
|
|
|
48
56
|
import type { Context } from "./context.js";
|
|
57
|
+
import type { ContextualFieldProvider } from "../schemaTypes.js";
|
|
58
|
+
import type { TreeNode } from "./treeNode.js";
|
|
49
59
|
|
|
50
60
|
interface UnhydratedTreeSequenceFieldEditBuilder
|
|
51
|
-
extends SequenceFieldEditBuilder<
|
|
52
|
-
/**
|
|
53
|
-
* Issues a change which removes `count` elements starting at the given `index`.
|
|
54
|
-
* @param index - The index of the first removed element.
|
|
55
|
-
* @param count - The number of elements to remove.
|
|
56
|
-
* @returns the MapTrees that were removed
|
|
57
|
-
*/
|
|
58
|
-
remove(index: number, count: number): ExclusiveMapTree[];
|
|
59
|
-
}
|
|
61
|
+
extends SequenceFieldEditBuilder<FlexibleFieldContent, UnhydratedFlexTreeNode[]> {}
|
|
60
62
|
|
|
61
63
|
type UnhydratedFlexTreeNodeEvents = Pick<AnchorEvents, "childrenChangedAfterBatch">;
|
|
62
64
|
|
|
63
65
|
/** A node's parent field and its index in that field */
|
|
64
|
-
|
|
65
|
-
readonly parent: FlexTreeField;
|
|
66
|
-
readonly index: number;
|
|
67
|
-
}
|
|
66
|
+
type LocationInField = FlexTreeNode["parentField"];
|
|
68
67
|
|
|
69
68
|
/**
|
|
70
|
-
*
|
|
71
|
-
* @remarks
|
|
72
|
-
* MapTreeNodes are unconditionally cached -
|
|
73
|
-
* when retrieved via {@link getOrCreateNodeFromInnerNode}, the same {@link MapTree} object will always produce the same `UnhydratedFlexTreeNode` object.
|
|
74
|
-
*
|
|
75
|
-
* Create a `UnhydratedFlexTreeNode` by calling {@link getOrCreate}.
|
|
69
|
+
* The {@link Unhydrated} implementation of {@link FlexTreeNode}.
|
|
76
70
|
*/
|
|
77
|
-
export class UnhydratedFlexTreeNode
|
|
78
|
-
|
|
79
|
-
|
|
71
|
+
export class UnhydratedFlexTreeNode
|
|
72
|
+
implements FlexTreeNode, MapTreeNodeViewGeneric<UnhydratedFlexTreeNode>
|
|
73
|
+
{
|
|
74
|
+
public isHydrated(): this is HydratedFlexTreeNode {
|
|
75
|
+
return false;
|
|
80
76
|
}
|
|
81
77
|
|
|
78
|
+
private location = unparentedLocation;
|
|
79
|
+
|
|
82
80
|
public get storedSchema(): TreeNodeStoredSchema {
|
|
83
81
|
return (
|
|
84
|
-
this.context.schema.nodeSchema.get(this.
|
|
82
|
+
this.context.schema.nodeSchema.get(this.data.type) ?? fail(0xb46 /* missing schema */)
|
|
85
83
|
);
|
|
86
84
|
}
|
|
87
85
|
|
|
86
|
+
/**
|
|
87
|
+
* Cache storing the {@link TreeNode} for this inner node.
|
|
88
|
+
* @remarks
|
|
89
|
+
* When creating a `TreeNode` for this `UnhydratedFlexTreeNode`, cache the `TreeNode` in this property.
|
|
90
|
+
* Currently this is done by {@link TreeNodeKernel}.
|
|
91
|
+
*
|
|
92
|
+
* See {@link getOrCreateNodeFromInnerNode} how to get the `TreeNode`, even if not already created, regardless of hydration status.
|
|
93
|
+
*/
|
|
94
|
+
public treeNode: TreeNode | undefined;
|
|
95
|
+
|
|
88
96
|
public readonly [flexTreeMarker] = FlexTreeEntityKind.Node as const;
|
|
89
97
|
|
|
90
98
|
private readonly _events = createEmitter<UnhydratedFlexTreeNodeEvents>();
|
|
@@ -92,52 +100,74 @@ export class UnhydratedFlexTreeNode implements FlexTreeNode {
|
|
|
92
100
|
return this._events;
|
|
93
101
|
}
|
|
94
102
|
|
|
95
|
-
/**
|
|
96
|
-
* Create a {@link UnhydratedFlexTreeNode} that wraps the given {@link MapTree}, or get the node that already exists for that {@link MapTree} if there is one.
|
|
97
|
-
* @param nodeSchema - the {@link FlexTreeNodeSchema | schema} that the node conforms to
|
|
98
|
-
* @param mapTree - the {@link MapTree} containing the data for this node.
|
|
99
|
-
* @remarks It must conform to the `nodeSchema`.
|
|
100
|
-
*/
|
|
101
|
-
public static getOrCreate(
|
|
102
|
-
context: Context,
|
|
103
|
-
mapTree: ExclusiveMapTree,
|
|
104
|
-
): UnhydratedFlexTreeNode {
|
|
105
|
-
return nodeCache.get(mapTree) ?? new UnhydratedFlexTreeNode(context, mapTree, undefined);
|
|
106
|
-
}
|
|
107
|
-
|
|
108
103
|
public get context(): FlexTreeContext {
|
|
109
104
|
return this.simpleContext.flexContext;
|
|
110
105
|
}
|
|
111
106
|
|
|
112
107
|
/**
|
|
113
108
|
* Create a new UnhydratedFlexTreeNode.
|
|
114
|
-
* @param location - the parentage of this node, if it is being created underneath an existing node and field, or undefined if not
|
|
115
|
-
* @remarks This class (and its subclasses) should not be directly constructed outside of this module.
|
|
116
|
-
* Instead, use {@link getOrCreateNodeFromInnerNode} to create a UnhydratedFlexTreeNode from a {@link MapTree}.
|
|
117
|
-
* A `UnhydratedFlexTreeNode` may never be constructed more than once for the same {@link MapTree} object.
|
|
118
|
-
* Instead, it should always be acquired via {@link getOrCreateNodeFromInnerNode}.
|
|
119
109
|
*/
|
|
120
110
|
public constructor(
|
|
111
|
+
/**
|
|
112
|
+
* The {@link NodeData} for this node.
|
|
113
|
+
*/
|
|
114
|
+
public readonly data: NodeData,
|
|
115
|
+
/**
|
|
116
|
+
* All {@link UnhydratedFlexTreeField} for this node that have been created so far.
|
|
117
|
+
* @remarks
|
|
118
|
+
* This includes all non-empty fields, but also any empty fields which have been previously requested.
|
|
119
|
+
*/
|
|
120
|
+
private readonly fieldsAll: Map<FieldKey, UnhydratedFlexTreeField>,
|
|
121
|
+
/**
|
|
122
|
+
* The {@link Context} for this node.
|
|
123
|
+
* @remarks
|
|
124
|
+
* Provides access to all schema reachable from this node.
|
|
125
|
+
* See {@link getUnhydratedContext}.
|
|
126
|
+
*/
|
|
121
127
|
public readonly simpleContext: Context,
|
|
122
|
-
/** The underlying {@link MapTree} that this `UnhydratedFlexTreeNode` reads its data from */
|
|
123
|
-
public readonly mapTree: ExclusiveMapTree,
|
|
124
|
-
private location = unparentedLocation,
|
|
125
128
|
) {
|
|
126
|
-
|
|
127
|
-
|
|
129
|
+
for (const [_key, field] of this.fieldsAll) {
|
|
130
|
+
field.parent = this;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* The non-empty fields on this node.
|
|
136
|
+
* @remarks
|
|
137
|
+
* This is needed to implement {@link MapTreeNodeViewGeneric.fields}, which must omit empty fields.
|
|
138
|
+
* Due to having to detect if a field is empty, this forces the evaluation of any pending defaults in the fields.
|
|
139
|
+
* Use {@link allFieldsLazy} to avoid evaluating pending defaults.
|
|
140
|
+
*/
|
|
141
|
+
public readonly fields: MinimalFieldMap<UnhydratedFlexTreeField> = {
|
|
142
|
+
get: (key: FieldKey): UnhydratedFlexTreeField | undefined => this.tryGetField(key),
|
|
143
|
+
[Symbol.iterator]: (): IterableIterator<[FieldKey, UnhydratedFlexTreeField]> =>
|
|
144
|
+
filterIterable(this.fieldsAll, ([, field]) => field.length > 0),
|
|
145
|
+
};
|
|
128
146
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
147
|
+
public [Symbol.iterator](): IterableIterator<UnhydratedFlexTreeField> {
|
|
148
|
+
return mapIterable(this.fields, ([, field]) => field)[Symbol.iterator]();
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Gets all fields, without filtering out empty ones.
|
|
153
|
+
* @remarks
|
|
154
|
+
* This avoids forcing the evaluating of pending defaults in the fields, and also saves a copy on access.
|
|
155
|
+
*/
|
|
156
|
+
public get allFieldsLazy(): ReadonlyMap<FieldKey, UnhydratedFlexTreeField> {
|
|
157
|
+
return this.fieldsAll;
|
|
137
158
|
}
|
|
138
159
|
|
|
139
160
|
public get type(): TreeNodeSchemaIdentifier {
|
|
140
|
-
return this.
|
|
161
|
+
return this.data.type;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private getOrCreateField(key: FieldKey): UnhydratedFlexTreeField {
|
|
165
|
+
return getOrCreate(this.fieldsAll, key, () => {
|
|
166
|
+
const stored = this.storedSchema.getFieldSchema(key).kind;
|
|
167
|
+
const field = createField(this.context, stored, key, []);
|
|
168
|
+
field.parent = this;
|
|
169
|
+
return field;
|
|
170
|
+
});
|
|
141
171
|
}
|
|
142
172
|
|
|
143
173
|
/**
|
|
@@ -153,7 +183,7 @@ export class UnhydratedFlexTreeNode implements FlexTreeNode {
|
|
|
153
183
|
if (parent !== undefined) {
|
|
154
184
|
assert(index !== undefined, 0xa08 /* Expected index */);
|
|
155
185
|
if (this.location !== unparentedLocation) {
|
|
156
|
-
throw new UsageError("A node may not be
|
|
186
|
+
throw new UsageError("A node may not be in more than one place in the tree");
|
|
157
187
|
}
|
|
158
188
|
let unhydratedNode: UnhydratedFlexTreeNode | undefined = parent.parent;
|
|
159
189
|
while (unhydratedNode !== undefined) {
|
|
@@ -188,78 +218,31 @@ export class UnhydratedFlexTreeNode implements FlexTreeNode {
|
|
|
188
218
|
}
|
|
189
219
|
|
|
190
220
|
public borrowCursor(): ITreeCursorSynchronous {
|
|
191
|
-
return cursorForMapTreeNode(this
|
|
221
|
+
return cursorForMapTreeNode<MapTreeNodeViewGeneric<UnhydratedFlexTreeNode>>(this);
|
|
192
222
|
}
|
|
193
223
|
|
|
194
224
|
public tryGetField(key: FieldKey): UnhydratedFlexTreeField | undefined {
|
|
195
|
-
const field = this.
|
|
225
|
+
const field = this.fieldsAll.get(key);
|
|
196
226
|
// Only return the field if it is not empty, in order to fulfill the contract of `tryGetField`.
|
|
197
227
|
if (field !== undefined && field.length > 0) {
|
|
198
|
-
return
|
|
199
|
-
this.emitChangedEvent(key),
|
|
200
|
-
);
|
|
228
|
+
return field;
|
|
201
229
|
}
|
|
202
230
|
}
|
|
203
231
|
|
|
204
|
-
public getBoxed(key: string):
|
|
232
|
+
public getBoxed(key: string): UnhydratedFlexTreeField {
|
|
205
233
|
const fieldKey: FieldKey = brand(key);
|
|
206
|
-
return getOrCreateField(
|
|
207
|
-
this,
|
|
208
|
-
fieldKey,
|
|
209
|
-
this.storedSchema.getFieldSchema(fieldKey).kind,
|
|
210
|
-
() => this.emitChangedEvent(fieldKey),
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
public boxedIterator(): IterableIterator<FlexTreeField> {
|
|
215
|
-
return mapIterable(this.mapTree.fields.entries(), ([key]) =>
|
|
216
|
-
getOrCreateField(this, key, this.storedSchema.getFieldSchema(key).kind, () =>
|
|
217
|
-
this.emitChangedEvent(key),
|
|
218
|
-
),
|
|
219
|
-
);
|
|
234
|
+
return this.getOrCreateField(fieldKey);
|
|
220
235
|
}
|
|
221
236
|
|
|
222
237
|
public keys(): IterableIterator<FieldKey> {
|
|
223
|
-
|
|
224
|
-
return this.mapTree.fields.keys();
|
|
238
|
+
return Array.from(this.fields, ([key]) => key)[Symbol.iterator]();
|
|
225
239
|
}
|
|
226
240
|
|
|
227
241
|
public get value(): Value {
|
|
228
|
-
return this.
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
public get anchorNode(): AnchorNode {
|
|
232
|
-
// This API is relevant to `LazyTreeNode`s, but not `UnhydratedFlexTreeNode`s.
|
|
233
|
-
// TODO: Refactor the FlexTreeNode interface so that stubbing this out isn't necessary.
|
|
234
|
-
return fail(0xb47 /* UnhydratedFlexTreeNode does not implement anchorNode */);
|
|
242
|
+
return this.data.value;
|
|
235
243
|
}
|
|
236
244
|
|
|
237
|
-
|
|
238
|
-
for (const [key, mapTrees] of this.mapTree.fields) {
|
|
239
|
-
const field = getOrCreateField(
|
|
240
|
-
this,
|
|
241
|
-
key,
|
|
242
|
-
this.storedSchema.getFieldSchema(key).kind,
|
|
243
|
-
() => this.emitChangedEvent(key),
|
|
244
|
-
);
|
|
245
|
-
for (let index = 0; index < field.length; index++) {
|
|
246
|
-
const child = getOrCreateChild(this.simpleContext, mapTrees[index] ?? oob(), {
|
|
247
|
-
parent: field,
|
|
248
|
-
index,
|
|
249
|
-
});
|
|
250
|
-
// These next asserts detect the case where `getOrCreateChild` gets a cache hit of a different node than the one we're trying to create
|
|
251
|
-
assert(child.location !== undefined, 0x98d /* Expected node to have parent */);
|
|
252
|
-
assert(
|
|
253
|
-
child.location.parent.parent === this,
|
|
254
|
-
0x98e /* Node may not be multi-parented */,
|
|
255
|
-
);
|
|
256
|
-
assert(child.location.index === index, 0x98f /* Node may not be multi-parented */);
|
|
257
|
-
child.walkTree();
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
private emitChangedEvent(key: FieldKey): void {
|
|
245
|
+
public emitChangedEvent(key: FieldKey): void {
|
|
263
246
|
this._events.emit("childrenChangedAfterBatch", { changedFields: new Set([key]) });
|
|
264
247
|
}
|
|
265
248
|
}
|
|
@@ -296,100 +279,109 @@ export class UnhydratedContext implements FlexTreeContext {
|
|
|
296
279
|
* However, this field cannot be used in any practical way because it is empty, i.e. it does not actually contain the children that claim to be parented under it.
|
|
297
280
|
* It has the "empty" schema and it will always contain zero children if queried.
|
|
298
281
|
* Any nodes with this location will have a dummy parent index of `-1`.
|
|
282
|
+
*
|
|
283
|
+
* TODO: make this make sense.
|
|
299
284
|
*/
|
|
300
285
|
const unparentedLocation: LocationInField = {
|
|
301
286
|
parent: {
|
|
302
|
-
|
|
303
|
-
length: 0,
|
|
304
|
-
key: EmptyKey,
|
|
287
|
+
key: dummyRoot,
|
|
305
288
|
parent: undefined,
|
|
306
|
-
|
|
307
|
-
return this.schema === kind.identifier;
|
|
308
|
-
},
|
|
309
|
-
boxedIterator(): IterableIterator<FlexTreeNode> {
|
|
310
|
-
return [].values();
|
|
311
|
-
},
|
|
312
|
-
boxedAt(index: number): FlexTreeNode | undefined {
|
|
313
|
-
return undefined;
|
|
314
|
-
},
|
|
315
|
-
schema: brand(forbiddenFieldKindIdentifier),
|
|
316
|
-
get context(): never {
|
|
317
|
-
return fail(0xb48 /* unsupported */);
|
|
318
|
-
},
|
|
319
|
-
getFieldPath() {
|
|
320
|
-
fail(0xb49 /* unsupported */);
|
|
321
|
-
},
|
|
289
|
+
schema: brand(FieldKinds.optional.identifier),
|
|
322
290
|
},
|
|
323
|
-
index:
|
|
291
|
+
index: 0,
|
|
324
292
|
};
|
|
325
293
|
|
|
326
|
-
|
|
294
|
+
/**
|
|
295
|
+
* The {@link Unhydrated} implementation of {@link FlexTreeField}.
|
|
296
|
+
*/
|
|
297
|
+
export class UnhydratedFlexTreeField
|
|
298
|
+
implements FlexTreeField, MapTreeFieldViewGeneric<UnhydratedFlexTreeNode>
|
|
299
|
+
{
|
|
327
300
|
public [flexTreeMarker] = FlexTreeEntityKind.Field as const;
|
|
328
301
|
|
|
329
|
-
public
|
|
330
|
-
return this.simpleContext.flexContext;
|
|
331
|
-
}
|
|
302
|
+
public parent: UnhydratedFlexTreeNode | undefined = undefined;
|
|
332
303
|
|
|
333
304
|
public constructor(
|
|
334
|
-
public readonly
|
|
305
|
+
public readonly context: FlexTreeContext,
|
|
335
306
|
public readonly schema: FieldKindIdentifier,
|
|
336
307
|
public readonly key: FieldKey,
|
|
337
|
-
|
|
338
|
-
|
|
308
|
+
/**
|
|
309
|
+
* The children of this field.
|
|
310
|
+
* @remarks
|
|
311
|
+
* This is either an array of {@link UnhydratedFlexTreeNode}s or a {@link ContextualFieldProvider} that will be used to populate the children lazily (after which it will become an array).
|
|
312
|
+
* See {@link fillPendingDefaults}.
|
|
313
|
+
* Note that any fields using a {@link ConstantFieldProvider} should be evaluated before constructing the UnhydratedFlexTreeField.
|
|
314
|
+
*/
|
|
315
|
+
private lazyChildren: UnhydratedFlexTreeNode[] | ContextualFieldProvider,
|
|
339
316
|
) {
|
|
340
|
-
const fieldKeyCache = getFieldKeyCache(parent);
|
|
341
|
-
assert(!fieldKeyCache.has(key), 0x990 /* A field already exists for the given MapTrees */);
|
|
342
|
-
fieldKeyCache.set(key, this);
|
|
343
|
-
|
|
344
317
|
// When this field is created (which only happens one time, because it is cached), all the children become parented for the first time.
|
|
345
318
|
// "Adopt" each child by updating its parent information to point to this field.
|
|
346
|
-
|
|
347
|
-
const
|
|
348
|
-
|
|
349
|
-
if (mapTreeNodeChild.parentField !== unparentedLocation) {
|
|
350
|
-
throw new UsageError("A node may not be in more than one place in the tree");
|
|
351
|
-
}
|
|
352
|
-
mapTreeNodeChild.adoptBy(this, i);
|
|
319
|
+
if (Array.isArray(lazyChildren)) {
|
|
320
|
+
for (const [i, child] of lazyChildren.entries()) {
|
|
321
|
+
child.adoptBy(this, i);
|
|
353
322
|
}
|
|
354
323
|
}
|
|
355
324
|
}
|
|
356
325
|
|
|
357
|
-
public
|
|
358
|
-
return
|
|
326
|
+
public borrowCursor(): ITreeCursorSynchronous {
|
|
327
|
+
return cursorForMapTreeField<MapTreeNodeViewGeneric<UnhydratedFlexTreeNode>>(
|
|
328
|
+
this.children,
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
private getPendingDefault(): ContextualFieldProvider | undefined {
|
|
333
|
+
return !Array.isArray(this.lazyChildren) ? this.lazyChildren : undefined;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* Populate pending default (if present) using the provided context.
|
|
338
|
+
* @remarks
|
|
339
|
+
* This apply to just this field: caller will likely want to recursively walk the tree.
|
|
340
|
+
* @see {@link pendingDefault}.
|
|
341
|
+
*/
|
|
342
|
+
public fillPendingDefaults(context: FlexTreeHydratedContextMinimal): void {
|
|
343
|
+
const provider = this.getPendingDefault();
|
|
344
|
+
if (provider) {
|
|
345
|
+
const content = provider(context);
|
|
346
|
+
this.lazyChildren = content;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Returns true if this field has a pending default due to defined defined using a {@link ContextualFieldProvider}.
|
|
352
|
+
*/
|
|
353
|
+
public get pendingDefault(): boolean {
|
|
354
|
+
return this.getPendingDefault() !== undefined;
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
public get children(): UnhydratedFlexTreeNode[] {
|
|
358
|
+
const provider = this.getPendingDefault();
|
|
359
|
+
if (provider) {
|
|
360
|
+
const content = provider("UseGlobalContext");
|
|
361
|
+
this.lazyChildren = content;
|
|
362
|
+
}
|
|
363
|
+
return this.lazyChildren as UnhydratedFlexTreeNode[];
|
|
359
364
|
}
|
|
360
365
|
|
|
361
366
|
public get length(): number {
|
|
362
|
-
return this.
|
|
367
|
+
return this.children.length;
|
|
363
368
|
}
|
|
364
369
|
|
|
365
370
|
public is<TKind2 extends FlexFieldKind>(kind: TKind2): this is FlexTreeTypedField<TKind2> {
|
|
366
371
|
return this.schema === kind.identifier;
|
|
367
372
|
}
|
|
368
373
|
|
|
369
|
-
public boxedIterator(): IterableIterator<FlexTreeNode> {
|
|
370
|
-
return this.mapTrees
|
|
371
|
-
.map(
|
|
372
|
-
(m, index) =>
|
|
373
|
-
getOrCreateChild(this.simpleContext, m, {
|
|
374
|
-
parent: this,
|
|
375
|
-
index,
|
|
376
|
-
}) as FlexTreeNode,
|
|
377
|
-
)
|
|
378
|
-
.values();
|
|
379
|
-
}
|
|
380
|
-
|
|
381
374
|
public boxedAt(index: number): FlexTreeNode | undefined {
|
|
382
375
|
const i = indexForAt(index, this.length);
|
|
383
376
|
if (i === undefined) {
|
|
384
377
|
return undefined;
|
|
385
378
|
}
|
|
386
|
-
const m = this.
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
}
|
|
379
|
+
const m = this.children[i];
|
|
380
|
+
return m;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
public [Symbol.iterator](): IterableIterator<UnhydratedFlexTreeNode> {
|
|
384
|
+
return this.children[Symbol.iterator]();
|
|
393
385
|
}
|
|
394
386
|
|
|
395
387
|
/**
|
|
@@ -400,16 +392,22 @@ class UnhydratedFlexTreeField implements FlexTreeField {
|
|
|
400
392
|
* @remarks All edits to the field (i.e. mutations of the field's MapTrees) should be directed through this function.
|
|
401
393
|
* This function ensures that the parent MapTree has no empty fields (which is an invariant of `MapTree`) after the mutation.
|
|
402
394
|
*/
|
|
403
|
-
protected edit(
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
395
|
+
protected edit(
|
|
396
|
+
edit: (mapTrees: UnhydratedFlexTreeNode[]) => void | UnhydratedFlexTreeNode[],
|
|
397
|
+
): void {
|
|
398
|
+
// Clear parents for all old map trees.
|
|
399
|
+
for (const tree of this.children) {
|
|
400
|
+
tree.adoptBy(undefined);
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
this.lazyChildren = edit(this.children) ?? this.children;
|
|
404
|
+
|
|
405
|
+
// Set parents for all new map trees.
|
|
406
|
+
for (const [index, tree] of this.children.entries()) {
|
|
407
|
+
tree.adoptBy(this, index);
|
|
410
408
|
}
|
|
411
409
|
|
|
412
|
-
this.
|
|
410
|
+
this.parent?.emitChangedEvent(this.key);
|
|
413
411
|
}
|
|
414
412
|
|
|
415
413
|
public getFieldPath(): NormalizedFieldUpPath {
|
|
@@ -417,31 +415,30 @@ class UnhydratedFlexTreeField implements FlexTreeField {
|
|
|
417
415
|
}
|
|
418
416
|
|
|
419
417
|
/** Unboxes leaf nodes to their values */
|
|
420
|
-
protected unboxed(index: number):
|
|
421
|
-
const
|
|
422
|
-
const value =
|
|
418
|
+
protected unboxed(index: number): TreeValue | UnhydratedFlexTreeNode {
|
|
419
|
+
const child = this.children[index] ?? oob();
|
|
420
|
+
const value = child.value;
|
|
423
421
|
if (value !== undefined) {
|
|
424
422
|
return value;
|
|
425
423
|
}
|
|
426
|
-
|
|
427
|
-
return getOrCreateChild(this.simpleContext, mapTree, { parent: this, index });
|
|
424
|
+
return child;
|
|
428
425
|
}
|
|
429
426
|
}
|
|
430
427
|
|
|
431
|
-
|
|
428
|
+
/**
|
|
429
|
+
* The {@link Unhydrated} implementation of {@link FlexTreeOptionalField}.
|
|
430
|
+
*/
|
|
431
|
+
export class UnhydratedOptionalField
|
|
432
432
|
extends UnhydratedFlexTreeField
|
|
433
433
|
implements FlexTreeOptionalField
|
|
434
434
|
{
|
|
435
435
|
public readonly editor = {
|
|
436
|
-
set: (newContent:
|
|
437
|
-
// If the new content is a UnhydratedFlexTreeNode, it needs to have its parent pointer updated
|
|
436
|
+
set: (newContent: FlexibleNodeContent | undefined): void => {
|
|
438
437
|
if (newContent !== undefined) {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
if (oldContent !== undefined) {
|
|
444
|
-
nodeCache.get(oldContent)?.adoptBy(undefined);
|
|
438
|
+
assert(
|
|
439
|
+
newContent instanceof UnhydratedFlexTreeNode,
|
|
440
|
+
0xbb7 /* Expected unhydrated node */,
|
|
441
|
+
);
|
|
445
442
|
}
|
|
446
443
|
|
|
447
444
|
this.edit((mapTrees) => {
|
|
@@ -452,10 +449,11 @@ class EagerMapTreeOptionalField
|
|
|
452
449
|
}
|
|
453
450
|
});
|
|
454
451
|
},
|
|
455
|
-
}
|
|
452
|
+
} satisfies OptionalFieldEditBuilder<FlexibleNodeContent> &
|
|
453
|
+
ValueFieldEditBuilder<FlexibleNodeContent>;
|
|
456
454
|
|
|
457
455
|
public get content(): FlexTreeUnknownUnboxed | undefined {
|
|
458
|
-
const value = this.
|
|
456
|
+
const value = this.children[0];
|
|
459
457
|
if (value !== undefined) {
|
|
460
458
|
return this.unboxed(0);
|
|
461
459
|
}
|
|
@@ -464,8 +462,8 @@ class EagerMapTreeOptionalField
|
|
|
464
462
|
}
|
|
465
463
|
}
|
|
466
464
|
|
|
467
|
-
class
|
|
468
|
-
extends
|
|
465
|
+
class UnhydratedRequiredField
|
|
466
|
+
extends UnhydratedOptionalField
|
|
469
467
|
implements FlexTreeRequiredField
|
|
470
468
|
{
|
|
471
469
|
public override get content(): FlexTreeUnknownUnboxed {
|
|
@@ -478,40 +476,42 @@ class EagerMapTreeRequiredField
|
|
|
478
476
|
}
|
|
479
477
|
}
|
|
480
478
|
|
|
481
|
-
|
|
479
|
+
/**
|
|
480
|
+
* The {@link Unhydrated} implementation of {@link FlexTreeSequenceField}.
|
|
481
|
+
*/
|
|
482
|
+
export class UnhydratedSequenceField
|
|
482
483
|
extends UnhydratedFlexTreeField
|
|
483
484
|
implements FlexTreeSequenceField
|
|
484
485
|
{
|
|
485
|
-
public readonly editor
|
|
486
|
+
public readonly editor = {
|
|
486
487
|
insert: (index, newContent): void => {
|
|
487
|
-
for (
|
|
488
|
-
const c = newContent[i];
|
|
488
|
+
for (const c of newContent) {
|
|
489
489
|
assert(c !== undefined, 0xa0a /* Unexpected sparse array content */);
|
|
490
|
-
|
|
490
|
+
assert(c instanceof UnhydratedFlexTreeNode, 0xbb8 /* Expected unhydrated node */);
|
|
491
491
|
}
|
|
492
|
+
const newContentChecked = newContent as readonly UnhydratedFlexTreeNode[];
|
|
492
493
|
this.edit((mapTrees) => {
|
|
493
494
|
if (newContent.length < 1000) {
|
|
494
495
|
// For "smallish arrays" (`1000` is not empirically derived), the `splice` function is appropriate...
|
|
495
|
-
mapTrees.splice(index, 0, ...
|
|
496
|
+
mapTrees.splice(index, 0, ...newContentChecked);
|
|
496
497
|
} else {
|
|
497
498
|
// ...but we avoid using `splice` + spread for very large input arrays since there is a limit on how many elements can be spread (too many will overflow the stack).
|
|
498
|
-
return mapTrees.slice(0, index).concat(
|
|
499
|
+
return mapTrees.slice(0, index).concat(newContentChecked, mapTrees.slice(index));
|
|
499
500
|
}
|
|
500
501
|
});
|
|
501
502
|
},
|
|
502
|
-
remove: (index, count):
|
|
503
|
+
remove: (index, count): UnhydratedFlexTreeNode[] => {
|
|
503
504
|
for (let i = index; i < index + count; i++) {
|
|
504
|
-
const c = this.
|
|
505
|
+
const c = this.children[i];
|
|
505
506
|
assert(c !== undefined, 0xa0b /* Unexpected sparse array */);
|
|
506
|
-
nodeCache.get(c)?.adoptBy(undefined);
|
|
507
507
|
}
|
|
508
|
-
let removed:
|
|
508
|
+
let removed: UnhydratedFlexTreeNode[] | undefined;
|
|
509
509
|
this.edit((mapTrees) => {
|
|
510
510
|
removed = mapTrees.splice(index, count);
|
|
511
511
|
});
|
|
512
512
|
return removed ?? fail(0xb4a /* Expected removed to be set by edit */);
|
|
513
513
|
},
|
|
514
|
-
};
|
|
514
|
+
} satisfies UnhydratedTreeSequenceFieldEditBuilder;
|
|
515
515
|
|
|
516
516
|
public at(index: number): FlexTreeUnknownUnboxed | undefined {
|
|
517
517
|
const i = indexForAt(index, this.length);
|
|
@@ -523,91 +523,30 @@ export class UnhydratedTreeSequenceField
|
|
|
523
523
|
public map<U>(callbackfn: (value: FlexTreeUnknownUnboxed, index: number) => U): U[] {
|
|
524
524
|
return Array.from(this, callbackfn);
|
|
525
525
|
}
|
|
526
|
-
|
|
527
|
-
public *[Symbol.iterator](): IterableIterator<FlexTreeUnknownUnboxed> {
|
|
528
|
-
for (const [i] of this.mapTrees.entries()) {
|
|
529
|
-
yield this.unboxed(i);
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
526
|
}
|
|
533
527
|
|
|
534
528
|
// #endregion Fields
|
|
535
529
|
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
/** Node Parent -\> Field Key -\> Field */
|
|
540
|
-
const fieldCache = new WeakMap<
|
|
541
|
-
UnhydratedFlexTreeNode,
|
|
542
|
-
Map<FieldKey, UnhydratedFlexTreeField>
|
|
543
|
-
>();
|
|
544
|
-
function getFieldKeyCache(
|
|
545
|
-
parent: UnhydratedFlexTreeNode,
|
|
546
|
-
): WeakMap<FieldKey, UnhydratedFlexTreeField> {
|
|
547
|
-
return getOrCreate(fieldCache, parent, () => new Map());
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
/**
|
|
551
|
-
* If there exists a {@link UnhydratedFlexTreeNode} for the given {@link MapTree}, returns it, otherwise returns `undefined`.
|
|
552
|
-
* @remarks {@link UnhydratedFlexTreeNode | UnhydratedFlexTreeNodes} are created via {@link getOrCreateNodeFromInnerNode}.
|
|
553
|
-
*/
|
|
554
|
-
export function tryUnhydratedFlexTreeNode(
|
|
555
|
-
mapTree: MapTree,
|
|
556
|
-
): UnhydratedFlexTreeNode | undefined {
|
|
557
|
-
return nodeCache.get(mapTree);
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
/** Helper for creating a `UnhydratedFlexTreeNode` given the parent field (e.g. when "walking down") */
|
|
561
|
-
function getOrCreateChild(
|
|
562
|
-
context: Context,
|
|
563
|
-
mapTree: ExclusiveMapTree,
|
|
564
|
-
parent: LocationInField | undefined,
|
|
565
|
-
): UnhydratedFlexTreeNode {
|
|
566
|
-
const cached = nodeCache.get(mapTree);
|
|
567
|
-
if (cached !== undefined) {
|
|
568
|
-
return cached;
|
|
569
|
-
}
|
|
570
|
-
|
|
571
|
-
return new UnhydratedFlexTreeNode(context, mapTree, parent);
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
/** Creates a field with the given attributes, or returns a cached field if there is one */
|
|
575
|
-
function getOrCreateField(
|
|
576
|
-
parent: UnhydratedFlexTreeNode,
|
|
577
|
-
key: FieldKey,
|
|
578
|
-
schema: FieldKindIdentifier,
|
|
579
|
-
onEdit?: () => void,
|
|
530
|
+
/** Creates a field with the given attributes */
|
|
531
|
+
export function createField(
|
|
532
|
+
...args: ConstructorParameters<typeof UnhydratedFlexTreeField>
|
|
580
533
|
): UnhydratedFlexTreeField {
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
return new EagerMapTreeOptionalField(parent.simpleContext, schema, key, parent, onEdit);
|
|
595
|
-
}
|
|
596
|
-
|
|
597
|
-
if (schema === FieldKinds.sequence.identifier) {
|
|
598
|
-
return new UnhydratedTreeSequenceField(parent.simpleContext, schema, key, parent, onEdit);
|
|
534
|
+
switch (args[1]) {
|
|
535
|
+
case FieldKinds.required.identifier:
|
|
536
|
+
case FieldKinds.identifier.identifier:
|
|
537
|
+
return new UnhydratedRequiredField(...args);
|
|
538
|
+
case FieldKinds.optional.identifier:
|
|
539
|
+
return new UnhydratedOptionalField(...args);
|
|
540
|
+
case FieldKinds.sequence.identifier:
|
|
541
|
+
return new UnhydratedSequenceField(...args);
|
|
542
|
+
case FieldKinds.forbidden.identifier:
|
|
543
|
+
// TODO: this seems to used by unknown optional fields. They should probably use "optional" not "Forbidden" schema.
|
|
544
|
+
return new UnhydratedFlexTreeField(...args);
|
|
545
|
+
default:
|
|
546
|
+
return fail(0xb9d /* unsupported field kind */);
|
|
599
547
|
}
|
|
600
|
-
|
|
601
|
-
// TODO: this seems to used by unknown optional fields. They should probably use "optional" not "Forbidden" schema.
|
|
602
|
-
if (schema === FieldKinds.forbidden.identifier) {
|
|
603
|
-
return new UnhydratedFlexTreeField(parent.simpleContext, schema, key, parent, onEdit);
|
|
604
|
-
}
|
|
605
|
-
|
|
606
|
-
return fail(0xb9d /* unsupported field kind */);
|
|
607
548
|
}
|
|
608
549
|
|
|
609
|
-
// #endregion Caching and unboxing utilities
|
|
610
|
-
|
|
611
550
|
export function unsupportedUsageError(message?: string): Error {
|
|
612
551
|
return new UsageError(
|
|
613
552
|
`${
|