@fluidframework/tree 2.3.1 → 2.4.0-297027
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/api-report/tree.alpha.api.md +77 -38
- package/api-report/tree.beta.api.md +50 -30
- package/api-report/tree.legacy.alpha.api.md +50 -30
- package/api-report/tree.legacy.public.api.md +50 -30
- package/api-report/tree.public.api.md +50 -30
- package/dist/alpha.d.ts +7 -0
- package/dist/beta.d.ts +4 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +1 -0
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +8 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +7 -0
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +9 -0
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts +1 -2
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +2 -2
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +13 -2
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexTypes.d.ts +1 -1
- package/dist/core/tree/detachedFieldIndexTypes.js.map +1 -1
- package/dist/feature-libraries/editableTreeBinder.d.ts +3 -230
- package/dist/feature-libraries/editableTreeBinder.d.ts.map +1 -1
- package/dist/feature-libraries/editableTreeBinder.js +1 -539
- package/dist/feature-libraries/editableTreeBinder.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +7 -14
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +3 -3
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
- 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/flex-tree/lazyEntity.d.ts +2 -3
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.js +1 -2
- package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +10 -15
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +18 -20
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +13 -23
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/utilities.js +1 -1
- package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +4 -7
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +5 -31
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +7 -0
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +61 -17
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +3 -0
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV1.d.ts +18 -18
- package/dist/feature-libraries/sequence-field/formatV2.d.ts +18 -18
- package/dist/feature-libraries/sequence-field/formatV3.d.ts +27 -27
- package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +1 -4
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/feature-libraries/typed-schema/flexList.d.ts +1 -46
- package/dist/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/flexList.js +1 -13
- package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
- package/dist/feature-libraries/typed-schema/index.d.ts +2 -4
- package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/index.js +1 -19
- package/dist/feature-libraries/typed-schema/index.js.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js +0 -266
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/internalTypes.d.ts +1 -1
- package/dist/internalTypes.d.ts.map +1 -1
- package/dist/internalTypes.js.map +1 -1
- package/dist/legacy.d.ts +4 -0
- 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/public.d.ts +4 -0
- package/dist/shared-tree/checkoutFlexTreeView.d.ts +3 -3
- package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.js +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -1
- package/dist/shared-tree/index.d.ts +3 -3
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +2 -3
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +1 -40
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +2 -11
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +9 -7
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +19 -8
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +19 -2
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +10 -2
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +71 -41
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +116 -84
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +8 -11
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js +12 -15
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +1 -1
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +11 -13
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/getJsonSchema.d.ts +3 -3
- package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/getJsonSchema.js +1 -1
- package/dist/simple-tree/api/getJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/getSimpleSchema.d.ts +2 -2
- package/dist/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/getSimpleSchema.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +2 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +3 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/jsonSchema.d.ts +13 -14
- package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/jsonSchema.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +14 -8
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +21 -2
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/simpleSchema.d.ts +18 -10
- package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchema.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +30 -17
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/dist/simple-tree/api/tree.d.ts +16 -6
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js +4 -4
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +8 -6
- 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 +6 -10
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/{lib/feature-libraries/typed-schema → dist/simple-tree/api}/view.d.ts +4 -11
- package/dist/simple-tree/api/view.d.ts.map +1 -0
- package/dist/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
- package/dist/simple-tree/api/view.js.map +1 -0
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js +11 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +147 -14
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +32 -20
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts +55 -0
- package/dist/simple-tree/core/context.d.ts.map +1 -0
- package/dist/simple-tree/core/context.js +60 -0
- package/dist/simple-tree/core/context.js.map +1 -0
- package/dist/simple-tree/core/getOrCreateNode.d.ts +15 -0
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
- package/dist/simple-tree/core/getOrCreateNode.js +36 -0
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -0
- package/dist/simple-tree/core/index.d.ts +7 -3
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +16 -7
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/schemaCaching.d.ts +5 -13
- package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -1
- package/dist/simple-tree/core/schemaCaching.js +16 -45
- package/dist/simple-tree/core/schemaCaching.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +29 -7
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +94 -58
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +24 -0
- 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/types.d.ts +0 -5
- package/dist/simple-tree/core/types.d.ts.map +1 -1
- package/dist/simple-tree/core/types.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
- package/dist/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +112 -132
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -0
- package/dist/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -0
- package/dist/simple-tree/core/walkSchema.js +34 -0
- package/dist/simple-tree/core/walkSchema.js.map +1 -0
- package/dist/simple-tree/createContext.d.ts +11 -0
- package/dist/simple-tree/createContext.d.ts.map +1 -0
- package/dist/simple-tree/createContext.js +25 -0
- package/dist/simple-tree/createContext.js.map +1 -0
- package/dist/simple-tree/index.d.ts +4 -5
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +7 -7
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +1 -0
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +1 -2
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts +4 -4
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +9 -5
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +8 -8
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +33 -14
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/objectNodeTypes.d.ts +7 -3
- package/dist/simple-tree/objectNodeTypes.d.ts.map +1 -1
- package/dist/simple-tree/objectNodeTypes.js.map +1 -1
- package/dist/simple-tree/proxies.d.ts +1 -2
- package/dist/simple-tree/proxies.d.ts.map +1 -1
- package/dist/simple-tree/proxies.js +6 -22
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +44 -4
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +10 -0
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.d.ts +6 -36
- package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/dist/simple-tree/toFlexSchema.js +58 -142
- package/dist/simple-tree/toFlexSchema.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js +2 -2
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts +13 -5
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +19 -10
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/typesUnsafe.d.ts +4 -4
- package/dist/simple-tree/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/walkFieldSchema.d.ts +11 -0
- package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -0
- package/dist/simple-tree/walkFieldSchema.js +17 -0
- package/dist/simple-tree/walkFieldSchema.js.map +1 -0
- package/dist/util/index.d.ts +1 -1
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeUtils.d.ts +14 -45
- package/dist/util/typeUtils.d.ts.map +1 -1
- package/dist/util/typeUtils.js.map +1 -1
- package/lib/alpha.d.ts +7 -0
- package/lib/beta.d.ts +4 -0
- 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/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +1 -0
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +6 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +7 -0
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +9 -0
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts +1 -2
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +2 -2
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +13 -2
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexTypes.d.ts +1 -1
- package/lib/core/tree/detachedFieldIndexTypes.js.map +1 -1
- package/lib/feature-libraries/editableTreeBinder.d.ts +3 -230
- package/lib/feature-libraries/editableTreeBinder.d.ts.map +1 -1
- package/lib/feature-libraries/editableTreeBinder.js +1 -532
- package/lib/feature-libraries/editableTreeBinder.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +7 -14
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +3 -3
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +2 -16
- 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/flex-tree/lazyEntity.d.ts +2 -3
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.js +1 -2
- package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +10 -15
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +18 -20
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +4 -5
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +13 -23
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/utilities.js +1 -1
- package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +4 -7
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +4 -6
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +7 -0
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +62 -18
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +3 -0
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV1.d.ts +18 -18
- package/lib/feature-libraries/sequence-field/formatV2.d.ts +18 -18
- package/lib/feature-libraries/sequence-field/formatV3.d.ts +27 -27
- package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +2 -5
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/feature-libraries/typed-schema/flexList.d.ts +1 -46
- package/lib/feature-libraries/typed-schema/flexList.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/flexList.js +0 -11
- package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
- package/lib/feature-libraries/typed-schema/index.d.ts +2 -4
- package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/index.js +0 -3
- package/lib/feature-libraries/typed-schema/index.js.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +0 -212
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js +1 -253
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/internalTypes.d.ts +1 -1
- package/lib/internalTypes.d.ts.map +1 -1
- package/lib/internalTypes.js.map +1 -1
- package/lib/legacy.d.ts +4 -0
- 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/public.d.ts +4 -0
- package/lib/shared-tree/checkoutFlexTreeView.d.ts +3 -3
- package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.js +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -1
- package/lib/shared-tree/index.d.ts +3 -3
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +1 -2
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +1 -40
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +1 -9
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +9 -7
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +22 -11
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +19 -2
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +10 -3
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +71 -41
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +118 -86
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +8 -11
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js +12 -15
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +1 -1
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +14 -16
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/getJsonSchema.d.ts +3 -3
- package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/getJsonSchema.js +1 -1
- package/lib/simple-tree/api/getJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/getSimpleSchema.d.ts +2 -2
- package/lib/simple-tree/api/getSimpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/getSimpleSchema.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +2 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -0
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/jsonSchema.d.ts +13 -14
- package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/jsonSchema.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +14 -8
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +21 -2
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +3 -3
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/simpleSchema.d.ts +18 -10
- package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchema.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +31 -18
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/tree.d.ts +16 -6
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js +4 -4
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +10 -8
- 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 +6 -10
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/{dist/feature-libraries/typed-schema → lib/simple-tree/api}/view.d.ts +4 -11
- package/lib/simple-tree/api/view.d.ts.map +1 -0
- package/lib/{feature-libraries/typed-schema → simple-tree/api}/view.js +9 -9
- package/lib/simple-tree/api/view.js.map +1 -0
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts +2 -2
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js +11 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts +147 -14
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +37 -25
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts +55 -0
- package/lib/simple-tree/core/context.d.ts.map +1 -0
- package/lib/simple-tree/core/context.js +55 -0
- package/lib/simple-tree/core/context.js.map +1 -0
- package/lib/simple-tree/core/getOrCreateNode.d.ts +15 -0
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -0
- package/lib/simple-tree/core/getOrCreateNode.js +32 -0
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -0
- package/lib/simple-tree/core/index.d.ts +7 -3
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +6 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/schemaCaching.d.ts +5 -13
- package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -1
- package/lib/simple-tree/core/schemaCaching.js +13 -39
- package/lib/simple-tree/core/schemaCaching.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +29 -7
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +89 -54
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +24 -0
- 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/types.d.ts +0 -5
- package/lib/simple-tree/core/types.d.ts.map +1 -1
- package/lib/simple-tree/core/types.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts +139 -0
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -0
- package/lib/{feature-libraries/flex-map-tree/mapTreeNode.js → simple-tree/core/unhydratedFlexTree.js} +110 -128
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -0
- package/lib/simple-tree/{walkSchema.d.ts → core/walkSchema.d.ts} +8 -4
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -0
- package/lib/simple-tree/core/walkSchema.js +29 -0
- package/lib/simple-tree/core/walkSchema.js.map +1 -0
- package/lib/simple-tree/createContext.d.ts +11 -0
- package/lib/simple-tree/createContext.d.ts.map +1 -0
- package/lib/simple-tree/createContext.js +21 -0
- package/lib/simple-tree/createContext.js.map +1 -0
- package/lib/simple-tree/index.d.ts +4 -5
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +3 -4
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +1 -0
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +3 -4
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts +4 -4
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +12 -8
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +8 -8
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +36 -17
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/objectNodeTypes.d.ts +7 -3
- package/lib/simple-tree/objectNodeTypes.d.ts.map +1 -1
- package/lib/simple-tree/objectNodeTypes.js.map +1 -1
- package/lib/simple-tree/proxies.d.ts +1 -2
- package/lib/simple-tree/proxies.d.ts.map +1 -1
- package/lib/simple-tree/proxies.js +7 -22
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +44 -4
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +10 -0
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.d.ts +6 -36
- package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/lib/simple-tree/toFlexSchema.js +61 -142
- package/lib/simple-tree/toFlexSchema.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js +4 -4
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts +13 -5
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +21 -12
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/typesUnsafe.d.ts +4 -4
- package/lib/simple-tree/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/walkFieldSchema.d.ts +11 -0
- package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -0
- package/lib/simple-tree/walkFieldSchema.js +13 -0
- package/lib/simple-tree/walkFieldSchema.js.map +1 -0
- package/lib/util/index.d.ts +1 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js.map +1 -1
- package/lib/util/typeUtils.d.ts +14 -45
- package/lib/util/typeUtils.d.ts.map +1 -1
- package/lib/util/typeUtils.js.map +1 -1
- package/package.json +41 -22
- package/src/core/index.ts +1 -0
- package/src/core/rebase/index.ts +1 -0
- package/src/core/rebase/types.ts +11 -0
- package/src/core/schema-stored/schema.ts +18 -0
- package/src/core/tree/anchorSet.ts +3 -4
- package/src/core/tree/detachedFieldIndex.ts +14 -3
- package/src/core/tree/detachedFieldIndexTypes.ts +1 -1
- package/src/feature-libraries/editableTreeBinder.ts +2 -915
- package/src/feature-libraries/flex-tree/context.ts +7 -20
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +2 -18
- package/src/feature-libraries/flex-tree/lazyEntity.ts +1 -4
- package/src/feature-libraries/flex-tree/lazyField.ts +22 -78
- package/src/feature-libraries/flex-tree/lazyNode.ts +24 -39
- package/src/feature-libraries/flex-tree/utilities.ts +1 -1
- package/src/feature-libraries/index.ts +3 -71
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +97 -10
- package/src/feature-libraries/sequence-field/compose.ts +3 -0
- package/src/feature-libraries/sequence-field/utils.ts +2 -4
- package/src/feature-libraries/typed-schema/flexList.ts +3 -84
- package/src/feature-libraries/typed-schema/index.ts +1 -33
- package/src/feature-libraries/typed-schema/typedTreeSchema.ts +0 -458
- package/src/index.ts +7 -0
- package/src/internalTypes.ts +0 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/checkoutFlexTreeView.ts +3 -3
- package/src/shared-tree/index.ts +4 -8
- package/src/shared-tree/schematizeTree.ts +2 -56
- package/src/shared-tree/schematizingTreeView.ts +38 -15
- package/src/shared-tree/sharedTree.ts +36 -8
- package/src/shared-tree/treeCheckout.ts +225 -128
- package/src/shared-tree-core/branch.ts +15 -26
- package/src/simple-tree/api/create.ts +18 -20
- package/src/simple-tree/api/getJsonSchema.ts +3 -3
- package/src/simple-tree/api/getSimpleSchema.ts +2 -2
- package/src/simple-tree/api/index.ts +2 -0
- package/src/simple-tree/api/jsonSchema.ts +19 -17
- package/src/simple-tree/api/schemaFactory.ts +53 -18
- package/src/simple-tree/api/schemaFactoryRecursive.ts +3 -6
- package/src/simple-tree/api/simpleSchema.ts +20 -10
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +40 -19
- package/src/simple-tree/api/tree.ts +20 -9
- package/src/simple-tree/api/treeNodeApi.ts +12 -10
- package/src/simple-tree/api/verboseTree.ts +6 -12
- package/src/{feature-libraries/typed-schema → simple-tree/api}/view.ts +9 -22
- package/src/simple-tree/api/viewSchemaToSimpleSchema.ts +18 -4
- package/src/simple-tree/arrayNode.ts +202 -53
- package/src/simple-tree/core/context.ts +78 -0
- package/src/simple-tree/core/getOrCreateNode.ts +38 -0
- package/src/simple-tree/core/index.ts +11 -7
- package/src/simple-tree/core/schemaCaching.ts +13 -50
- package/src/simple-tree/core/treeNodeKernel.ts +117 -78
- package/src/simple-tree/core/treeNodeSchema.ts +35 -1
- package/src/simple-tree/core/types.ts +0 -5
- package/src/{feature-libraries/flex-map-tree/mapTreeNode.ts → simple-tree/core/unhydratedFlexTree.ts} +167 -210
- package/src/simple-tree/{walkSchema.ts → core/walkSchema.ts} +12 -34
- package/src/simple-tree/createContext.ts +24 -0
- package/src/simple-tree/index.ts +6 -2
- package/src/simple-tree/leafNodeSchema.ts +3 -9
- package/src/simple-tree/mapNode.ts +20 -17
- package/src/simple-tree/objectNode.ts +63 -38
- package/src/simple-tree/objectNodeTypes.ts +8 -5
- package/src/simple-tree/proxies.ts +8 -26
- package/src/simple-tree/schemaTypes.ts +55 -5
- package/src/simple-tree/toFlexSchema.ts +71 -204
- package/src/simple-tree/toMapTree.ts +5 -5
- package/src/simple-tree/treeNodeValid.ts +28 -22
- package/src/simple-tree/typesUnsafe.ts +4 -4
- package/src/simple-tree/walkFieldSchema.ts +19 -0
- package/src/util/index.ts +1 -5
- package/src/util/typeUtils.ts +14 -56
- package/dist/feature-libraries/fieldGenerator.d.ts +0 -43
- package/dist/feature-libraries/fieldGenerator.d.ts.map +0 -1
- package/dist/feature-libraries/fieldGenerator.js +0 -13
- package/dist/feature-libraries/fieldGenerator.js.map +0 -1
- package/dist/feature-libraries/flex-map-tree/index.d.ts +0 -6
- package/dist/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
- package/dist/feature-libraries/flex-map-tree/index.js +0 -14
- package/dist/feature-libraries/flex-map-tree/index.js.map +0 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
- package/dist/feature-libraries/storedToViewSchema.d.ts +0 -17
- package/dist/feature-libraries/storedToViewSchema.d.ts.map +0 -1
- package/dist/feature-libraries/storedToViewSchema.js +0 -67
- package/dist/feature-libraries/storedToViewSchema.js.map +0 -1
- package/dist/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
- package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/schemaCollection.js +0 -160
- package/dist/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
- package/dist/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
- package/dist/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/typeUtils.js +0 -14
- package/dist/feature-libraries/typed-schema/typeUtils.js.map +0 -1
- package/dist/feature-libraries/typed-schema/view.d.ts.map +0 -1
- package/dist/feature-libraries/typed-schema/view.js.map +0 -1
- package/dist/simple-tree/getSimpleFieldSchema.d.ts +0 -14
- package/dist/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
- package/dist/simple-tree/getSimpleFieldSchema.js +0 -29
- package/dist/simple-tree/getSimpleFieldSchema.js.map +0 -1
- package/dist/simple-tree/walkSchema.d.ts.map +0 -1
- package/dist/simple-tree/walkSchema.js +0 -49
- package/dist/simple-tree/walkSchema.js.map +0 -1
- package/lib/feature-libraries/fieldGenerator.d.ts +0 -43
- package/lib/feature-libraries/fieldGenerator.d.ts.map +0 -1
- package/lib/feature-libraries/fieldGenerator.js +0 -12
- package/lib/feature-libraries/fieldGenerator.js.map +0 -1
- package/lib/feature-libraries/flex-map-tree/index.d.ts +0 -6
- package/lib/feature-libraries/flex-map-tree/index.d.ts.map +0 -1
- package/lib/feature-libraries/flex-map-tree/index.js +0 -6
- package/lib/feature-libraries/flex-map-tree/index.js.map +0 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +0 -157
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +0 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +0 -1
- package/lib/feature-libraries/storedToViewSchema.d.ts +0 -17
- package/lib/feature-libraries/storedToViewSchema.d.ts.map +0 -1
- package/lib/feature-libraries/storedToViewSchema.js +0 -62
- package/lib/feature-libraries/storedToViewSchema.js.map +0 -1
- package/lib/feature-libraries/typed-schema/schemaCollection.d.ts +0 -58
- package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/schemaCollection.js +0 -153
- package/lib/feature-libraries/typed-schema/schemaCollection.js.map +0 -1
- package/lib/feature-libraries/typed-schema/typeUtils.d.ts +0 -15
- package/lib/feature-libraries/typed-schema/typeUtils.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/typeUtils.js +0 -10
- package/lib/feature-libraries/typed-schema/typeUtils.js.map +0 -1
- package/lib/feature-libraries/typed-schema/view.d.ts.map +0 -1
- package/lib/feature-libraries/typed-schema/view.js.map +0 -1
- package/lib/simple-tree/getSimpleFieldSchema.d.ts +0 -14
- package/lib/simple-tree/getSimpleFieldSchema.d.ts.map +0 -1
- package/lib/simple-tree/getSimpleFieldSchema.js +0 -25
- package/lib/simple-tree/getSimpleFieldSchema.js.map +0 -1
- package/lib/simple-tree/walkSchema.d.ts.map +0 -1
- package/lib/simple-tree/walkSchema.js +0 -43
- package/lib/simple-tree/walkSchema.js.map +0 -1
- package/src/feature-libraries/fieldGenerator.ts +0 -47
- package/src/feature-libraries/flex-map-tree/index.ts +0 -14
- package/src/feature-libraries/storedToViewSchema.ts +0 -100
- package/src/feature-libraries/typed-schema/schemaCollection.ts +0 -254
- package/src/feature-libraries/typed-schema/typeUtils.ts +0 -29
- package/src/simple-tree/getSimpleFieldSchema.ts +0 -36
|
@@ -7,18 +7,22 @@ import { assert, oob } from "@fluidframework/core-utils/internal";
|
|
|
7
7
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
8
8
|
|
|
9
9
|
import {
|
|
10
|
+
type AnchorEvents,
|
|
10
11
|
type AnchorNode,
|
|
11
12
|
EmptyKey,
|
|
12
13
|
type ExclusiveMapTree,
|
|
13
14
|
type FieldKey,
|
|
15
|
+
type FieldKindIdentifier,
|
|
14
16
|
type FieldUpPath,
|
|
17
|
+
forbiddenFieldKindIdentifier,
|
|
15
18
|
type MapTree,
|
|
16
|
-
type
|
|
19
|
+
type SchemaPolicy,
|
|
17
20
|
type TreeNodeSchemaIdentifier,
|
|
21
|
+
type TreeNodeStoredSchema,
|
|
18
22
|
type TreeStoredSchema,
|
|
19
23
|
type Value,
|
|
20
24
|
} from "../../core/index.js";
|
|
21
|
-
import { brand, fail, getOrCreate,
|
|
25
|
+
import { brand, fail, getOrCreate, mapIterable } from "../../util/index.js";
|
|
22
26
|
import {
|
|
23
27
|
type FlexTreeContext,
|
|
24
28
|
FlexTreeEntityKind,
|
|
@@ -32,58 +36,14 @@ import {
|
|
|
32
36
|
flexTreeMarker,
|
|
33
37
|
indexForAt,
|
|
34
38
|
type FlexTreeHydratedContext,
|
|
35
|
-
|
|
36
|
-
import {
|
|
37
|
-
type FlexAllowedTypes,
|
|
38
|
-
FlexFieldSchema,
|
|
39
|
-
type FlexTreeNodeSchema,
|
|
40
|
-
type FlexTreeSchema,
|
|
41
|
-
intoStoredSchemaCollection,
|
|
42
|
-
isLazy,
|
|
43
|
-
} from "../typed-schema/index.js";
|
|
44
|
-
import type { FlexFieldKind } from "../modular-schema/index.js";
|
|
45
|
-
import {
|
|
46
|
-
defaultSchemaPolicy,
|
|
39
|
+
type FlexFieldKind,
|
|
47
40
|
FieldKinds,
|
|
48
41
|
type SequenceFieldEditBuilder,
|
|
49
|
-
} from "
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* A readonly {@link FlexTreeNode} which wraps a {@link MapTree}.
|
|
55
|
-
* @remarks Reading data from the MapTreeNode will read the corresponding data from the {@link MapTree}.
|
|
56
|
-
* Create a `MapTreeNode` by calling {@link getOrCreateMapTreeNode}.
|
|
57
|
-
*/
|
|
58
|
-
export interface MapTreeNode extends FlexTreeNode {
|
|
59
|
-
readonly mapTree: MapTree;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Checks if the given {@link FlexTreeNode} is a {@link MapTreeNode}.
|
|
64
|
-
*/
|
|
65
|
-
export function isMapTreeNode(flexNode: FlexTreeNode): flexNode is MapTreeNode {
|
|
66
|
-
return flexNode instanceof EagerMapTreeNode;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Checks if the given {@link FlexTreeField} is a {@link MapTreeSequenceField}.
|
|
71
|
-
*/
|
|
72
|
-
export function isMapTreeSequenceField(
|
|
73
|
-
field: FlexTreeSequenceField | FlexTreeField,
|
|
74
|
-
): field is MapTreeSequenceField {
|
|
75
|
-
return field instanceof EagerMapTreeSequenceField;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* An unhydrated {@link FlexTreeSequenceField}, which has additional editing capabilities.
|
|
80
|
-
* @remarks When doing a removal edit, a {@link MapTreeSequenceField}'s `editor` returns ownership of the removed {@link ExclusiveMapTree}s to the caller.
|
|
81
|
-
*/
|
|
82
|
-
export interface MapTreeSequenceField extends FlexTreeSequenceField {
|
|
83
|
-
readonly editor: MapTreeSequenceFieldEditBuilder;
|
|
84
|
-
}
|
|
42
|
+
} from "../../feature-libraries/index.js";
|
|
43
|
+
import type { Context } from "./context.js";
|
|
44
|
+
import { createEmitter, type Listenable } from "../../events/index.js";
|
|
85
45
|
|
|
86
|
-
interface
|
|
46
|
+
interface UnhydratedTreeSequenceFieldEditBuilder
|
|
87
47
|
extends SequenceFieldEditBuilder<ExclusiveMapTree[]> {
|
|
88
48
|
/**
|
|
89
49
|
* Issues a change which removes `count` elements starting at the given `index`.
|
|
@@ -94,38 +54,66 @@ interface MapTreeSequenceFieldEditBuilder
|
|
|
94
54
|
remove(index: number, count: number): ExclusiveMapTree[];
|
|
95
55
|
}
|
|
96
56
|
|
|
57
|
+
type UnhydratedFlexTreeNodeEvents = Pick<AnchorEvents, "childrenChangedAfterBatch">;
|
|
58
|
+
|
|
97
59
|
/** A node's parent field and its index in that field */
|
|
98
60
|
interface LocationInField {
|
|
99
|
-
readonly parent:
|
|
61
|
+
readonly parent: FlexTreeField;
|
|
100
62
|
readonly index: number;
|
|
101
63
|
}
|
|
102
64
|
|
|
103
65
|
/**
|
|
104
|
-
*
|
|
105
|
-
* @remarks
|
|
106
|
-
* as will the querying of data specific to the {@link LazyTreeNode} implementation (e.g. {@link FlexTreeNode.context}).
|
|
66
|
+
* An unhydrated implementation of {@link FlexTreeNode} which wraps a {@link MapTree}.
|
|
67
|
+
* @remarks
|
|
107
68
|
* MapTreeNodes are unconditionally cached -
|
|
108
|
-
* when retrieved via {@link getOrCreateNode}, the same {@link MapTree} object will always produce the same `
|
|
69
|
+
* when retrieved via {@link getOrCreateNode}, the same {@link MapTree} object will always produce the same `UnhydratedFlexTreeNode` object.
|
|
70
|
+
*
|
|
71
|
+
* Create a `UnhydratedFlexTreeNode` by calling {@link getOrCreate}.
|
|
109
72
|
*/
|
|
110
|
-
export class
|
|
73
|
+
export class UnhydratedFlexTreeNode implements UnhydratedFlexTreeNode {
|
|
111
74
|
public get schema(): TreeNodeSchemaIdentifier {
|
|
112
|
-
return this.
|
|
75
|
+
return this.mapTree.type;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
public get storedSchema(): TreeNodeStoredSchema {
|
|
79
|
+
return this.context.schema.nodeSchema.get(this.mapTree.type) ?? fail("missing schema");
|
|
113
80
|
}
|
|
114
81
|
|
|
115
82
|
public readonly [flexTreeMarker] = FlexTreeEntityKind.Node as const;
|
|
116
83
|
|
|
84
|
+
private readonly _events = createEmitter<UnhydratedFlexTreeNodeEvents>();
|
|
85
|
+
public get events(): Listenable<UnhydratedFlexTreeNodeEvents> {
|
|
86
|
+
return this._events;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 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.
|
|
91
|
+
* @param nodeSchema - the {@link FlexTreeNodeSchema | schema} that the node conforms to
|
|
92
|
+
* @param mapTree - the {@link MapTree} containing the data for this node.
|
|
93
|
+
* @remarks It must conform to the `nodeSchema`.
|
|
94
|
+
*/
|
|
95
|
+
public static getOrCreate(
|
|
96
|
+
context: Context,
|
|
97
|
+
mapTree: ExclusiveMapTree,
|
|
98
|
+
): UnhydratedFlexTreeNode {
|
|
99
|
+
return nodeCache.get(mapTree) ?? new UnhydratedFlexTreeNode(context, mapTree, undefined);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
public get context(): FlexTreeContext {
|
|
103
|
+
return this.simpleContext.flexContext;
|
|
104
|
+
}
|
|
105
|
+
|
|
117
106
|
/**
|
|
118
|
-
* Create a new
|
|
107
|
+
* Create a new UnhydratedFlexTreeNode.
|
|
119
108
|
* @param location - the parentage of this node, if it is being created underneath an existing node and field, or undefined if not
|
|
120
109
|
* @remarks This class (and its subclasses) should not be directly constructed outside of this module.
|
|
121
|
-
* Instead, use {@link getOrCreateNode} to create a
|
|
122
|
-
* A `
|
|
110
|
+
* Instead, use {@link getOrCreateNode} to create a UnhydratedFlexTreeNode from a {@link MapTree}.
|
|
111
|
+
* A `UnhydratedFlexTreeNode` may never be constructed more than once for the same {@link MapTree} object.
|
|
123
112
|
* Instead, it should always be acquired via {@link getOrCreateNode}.
|
|
124
113
|
*/
|
|
125
114
|
public constructor(
|
|
126
|
-
public readonly
|
|
127
|
-
|
|
128
|
-
/** The underlying {@link MapTree} that this `MapTreeNode` reads its data from */
|
|
115
|
+
public readonly simpleContext: Context,
|
|
116
|
+
/** The underlying {@link MapTree} that this `UnhydratedFlexTreeNode` reads its data from */
|
|
129
117
|
public readonly mapTree: ExclusiveMapTree,
|
|
130
118
|
private location = unparentedLocation,
|
|
131
119
|
) {
|
|
@@ -133,17 +121,17 @@ export class EagerMapTreeNode implements MapTreeNode {
|
|
|
133
121
|
nodeCache.set(mapTree, this);
|
|
134
122
|
|
|
135
123
|
// Fully demand the tree to ensure that parent pointers are present and accurate on all nodes.
|
|
136
|
-
// When a
|
|
137
|
-
// Put another way, for a given MapTree, some ancestor
|
|
124
|
+
// When a UnhydratedFlexTreeNode is constructed, its MapTree may contain nodes (anywhere below) that map (via the `nodeCache`) to pre-existing UnhydratedFlexTreeNodes.
|
|
125
|
+
// Put another way, for a given MapTree, some ancestor UnhydratedFlexTreeNode can be created after any number of its descendant UnhydratedFlexTreeNodes already exist.
|
|
138
126
|
// In such a case, the spine of nodes between the descendant and ancestor need to exist in order for the ancestor to be able to walk upwards via the `parentField` property.
|
|
139
|
-
// This needs to happen for all
|
|
140
|
-
// Demanding the entire tree is overkill to solve this problem since not all descendant MapTree nodes will have corresponding
|
|
127
|
+
// This needs to happen for all UnhydratedFlexTreeNodes that are descendants of the ancestor UnhydratedFlexTreeNode.
|
|
128
|
+
// Demanding the entire tree is overkill to solve this problem since not all descendant MapTree nodes will have corresponding UnhydratedFlexTreeNodes.
|
|
141
129
|
// However, demanding the full tree also lets us eagerly validate that there are no duplicate MapTrees (i.e. same MapTree object) anywhere in the tree.
|
|
142
130
|
this.walkTree();
|
|
143
131
|
}
|
|
144
132
|
|
|
145
133
|
public get type(): TreeNodeSchemaIdentifier {
|
|
146
|
-
return this.
|
|
134
|
+
return this.mapTree.type;
|
|
147
135
|
}
|
|
148
136
|
|
|
149
137
|
/**
|
|
@@ -154,8 +142,8 @@ export class EagerMapTreeNode implements MapTreeNode {
|
|
|
154
142
|
* Removing a node's parent twice in a row is also not supported, as it likely indicates a bug.
|
|
155
143
|
*/
|
|
156
144
|
public adoptBy(parent: undefined): void;
|
|
157
|
-
public adoptBy(parent:
|
|
158
|
-
public adoptBy(parent:
|
|
145
|
+
public adoptBy(parent: UnhydratedFlexTreeField, index: number): void;
|
|
146
|
+
public adoptBy(parent: UnhydratedFlexTreeField | undefined, index?: number): void {
|
|
159
147
|
if (parent !== undefined) {
|
|
160
148
|
assert(
|
|
161
149
|
this.location === unparentedLocation,
|
|
@@ -180,26 +168,31 @@ export class EagerMapTreeNode implements MapTreeNode {
|
|
|
180
168
|
return this.location;
|
|
181
169
|
}
|
|
182
170
|
|
|
183
|
-
public
|
|
184
|
-
return (schema as unknown) === this.flexSchema;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
public tryGetField(key: FieldKey): EagerMapTreeField | undefined {
|
|
171
|
+
public tryGetField(key: FieldKey): UnhydratedFlexTreeField | undefined {
|
|
188
172
|
const field = this.mapTree.fields.get(key);
|
|
189
173
|
// Only return the field if it is not empty, in order to fulfill the contract of `tryGetField`.
|
|
190
174
|
if (field !== undefined && field.length > 0) {
|
|
191
|
-
return getOrCreateField(this, key, this.
|
|
175
|
+
return getOrCreateField(this, key, this.storedSchema.getFieldSchema(key).kind, () =>
|
|
176
|
+
this.emitChangedEvent(key),
|
|
177
|
+
);
|
|
192
178
|
}
|
|
193
179
|
}
|
|
194
180
|
|
|
195
181
|
public getBoxed(key: string): FlexTreeField {
|
|
196
182
|
const fieldKey: FieldKey = brand(key);
|
|
197
|
-
return getOrCreateField(
|
|
183
|
+
return getOrCreateField(
|
|
184
|
+
this,
|
|
185
|
+
fieldKey,
|
|
186
|
+
this.storedSchema.getFieldSchema(fieldKey).kind,
|
|
187
|
+
() => this.emitChangedEvent(fieldKey),
|
|
188
|
+
);
|
|
198
189
|
}
|
|
199
190
|
|
|
200
191
|
public boxedIterator(): IterableIterator<FlexTreeField> {
|
|
201
192
|
return mapIterable(this.mapTree.fields.entries(), ([key]) =>
|
|
202
|
-
getOrCreateField(this, key, this.
|
|
193
|
+
getOrCreateField(this, key, this.storedSchema.getFieldSchema(key).kind, () =>
|
|
194
|
+
this.emitChangedEvent(key),
|
|
195
|
+
),
|
|
203
196
|
);
|
|
204
197
|
}
|
|
205
198
|
|
|
@@ -213,21 +206,24 @@ export class EagerMapTreeNode implements MapTreeNode {
|
|
|
213
206
|
}
|
|
214
207
|
|
|
215
208
|
public get anchorNode(): AnchorNode {
|
|
216
|
-
// This API is relevant to `LazyTreeNode`s, but not `
|
|
209
|
+
// This API is relevant to `LazyTreeNode`s, but not `UnhydratedFlexTreeNode`s.
|
|
217
210
|
// TODO: Refactor the FlexTreeNode interface so that stubbing this out isn't necessary.
|
|
218
|
-
return fail("
|
|
211
|
+
return fail("UnhydratedFlexTreeNode does not implement anchorNode");
|
|
219
212
|
}
|
|
220
213
|
|
|
221
214
|
private walkTree(): void {
|
|
222
215
|
for (const [key, mapTrees] of this.mapTree.fields) {
|
|
223
|
-
const field = getOrCreateField(
|
|
216
|
+
const field = getOrCreateField(
|
|
217
|
+
this,
|
|
218
|
+
key,
|
|
219
|
+
this.storedSchema.getFieldSchema(key).kind,
|
|
220
|
+
() => this.emitChangedEvent(key),
|
|
221
|
+
);
|
|
224
222
|
for (let index = 0; index < field.length; index++) {
|
|
225
|
-
const child = getOrCreateChild(
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
{ parent: field, index },
|
|
230
|
-
);
|
|
223
|
+
const child = getOrCreateChild(this.simpleContext, mapTrees[index] ?? oob(), {
|
|
224
|
+
parent: field,
|
|
225
|
+
index,
|
|
226
|
+
});
|
|
231
227
|
// These next asserts detect the case where `getOrCreateChild` gets a cache hit of a different node than the one we're trying to create
|
|
232
228
|
assert(child.location !== undefined, 0x98d /* Expected node to have parent */);
|
|
233
229
|
assert(
|
|
@@ -239,9 +235,11 @@ export class EagerMapTreeNode implements MapTreeNode {
|
|
|
239
235
|
}
|
|
240
236
|
}
|
|
241
237
|
}
|
|
242
|
-
}
|
|
243
238
|
|
|
244
|
-
|
|
239
|
+
private emitChangedEvent(key: FieldKey): void {
|
|
240
|
+
this._events.emit("childrenChangedAfterBatch", { changedFields: new Set([key]) });
|
|
241
|
+
}
|
|
242
|
+
}
|
|
245
243
|
|
|
246
244
|
/**
|
|
247
245
|
* Implementation of `FlexTreeContext`.
|
|
@@ -249,17 +247,13 @@ export class EagerMapTreeNode implements MapTreeNode {
|
|
|
249
247
|
* @remarks An editor is required to edit the FlexTree.
|
|
250
248
|
*/
|
|
251
249
|
export class UnhydratedContext implements FlexTreeContext {
|
|
252
|
-
public readonly schema: TreeStoredSchema;
|
|
253
|
-
|
|
254
250
|
/**
|
|
255
251
|
* @param flexSchema - Schema to use when working with the tree.
|
|
256
252
|
*/
|
|
257
|
-
public constructor(
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
};
|
|
262
|
-
}
|
|
253
|
+
public constructor(
|
|
254
|
+
public readonly schemaPolicy: SchemaPolicy,
|
|
255
|
+
public readonly schema: TreeStoredSchema,
|
|
256
|
+
) {}
|
|
263
257
|
|
|
264
258
|
public isHydrated(): this is FlexTreeHydratedContext {
|
|
265
259
|
return false;
|
|
@@ -269,25 +263,9 @@ export class UnhydratedContext implements FlexTreeContext {
|
|
|
269
263
|
// #region Fields
|
|
270
264
|
|
|
271
265
|
/**
|
|
272
|
-
* A
|
|
273
|
-
* @remarks
|
|
274
|
-
*
|
|
275
|
-
*/
|
|
276
|
-
interface MapTreeField extends FlexTreeField {
|
|
277
|
-
readonly mapTrees: readonly MapTree[];
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
const emptyContext = new UnhydratedContext({
|
|
281
|
-
adapters: {},
|
|
282
|
-
nodeSchema: new Map(),
|
|
283
|
-
policy: defaultSchemaPolicy,
|
|
284
|
-
rootFieldSchema: FlexFieldSchema.empty,
|
|
285
|
-
});
|
|
286
|
-
|
|
287
|
-
/**
|
|
288
|
-
* A special singleton that is the implicit {@link LocationInField} of all un-parented {@link EagerMapTreeNode}s.
|
|
289
|
-
* @remarks This exists because {@link EagerMapTreeNode.parentField} must return a field.
|
|
290
|
-
* If a {@link EagerMapTreeNode} is created without a parent, its {@link EagerMapTreeNode.parentField} property will point to this object.
|
|
266
|
+
* A special singleton that is the implicit {@link LocationInField} of all un-parented {@link UnhydratedFlexTreeNode}s.
|
|
267
|
+
* @remarks This exists because {@link UnhydratedFlexTreeNode.parentField} must return a field.
|
|
268
|
+
* If a {@link UnhydratedFlexTreeNode} is created without a parent, its {@link UnhydratedFlexTreeNode.parentField} property will point to this object.
|
|
291
269
|
* 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.
|
|
292
270
|
* It has the "empty" schema and it will always contain zero children if queried.
|
|
293
271
|
* Any nodes with this location will have a dummy parent index of `-1`.
|
|
@@ -299,7 +277,7 @@ const unparentedLocation: LocationInField = {
|
|
|
299
277
|
key: EmptyKey,
|
|
300
278
|
parent: undefined,
|
|
301
279
|
is<TKind2 extends FlexFieldKind>(kind: TKind2) {
|
|
302
|
-
return this.schema
|
|
280
|
+
return this.schema === kind.identifier;
|
|
303
281
|
},
|
|
304
282
|
boxedIterator(): IterableIterator<FlexTreeNode> {
|
|
305
283
|
return [].values();
|
|
@@ -307,9 +285,10 @@ const unparentedLocation: LocationInField = {
|
|
|
307
285
|
boxedAt(index: number): FlexTreeNode | undefined {
|
|
308
286
|
return undefined;
|
|
309
287
|
},
|
|
310
|
-
schema:
|
|
311
|
-
context:
|
|
312
|
-
|
|
288
|
+
schema: brand(forbiddenFieldKindIdentifier),
|
|
289
|
+
get context(): never {
|
|
290
|
+
return fail("unsupported");
|
|
291
|
+
},
|
|
313
292
|
getFieldPath() {
|
|
314
293
|
fail("unsupported");
|
|
315
294
|
},
|
|
@@ -317,18 +296,19 @@ const unparentedLocation: LocationInField = {
|
|
|
317
296
|
index: -1,
|
|
318
297
|
};
|
|
319
298
|
|
|
320
|
-
class
|
|
299
|
+
class UnhydratedFlexTreeField implements FlexTreeField {
|
|
321
300
|
public [flexTreeMarker] = FlexTreeEntityKind.Field as const;
|
|
322
301
|
|
|
323
|
-
public get
|
|
324
|
-
return this.
|
|
302
|
+
public get context(): FlexTreeContext {
|
|
303
|
+
return this.simpleContext.flexContext;
|
|
325
304
|
}
|
|
326
305
|
|
|
327
306
|
public constructor(
|
|
328
|
-
public readonly
|
|
329
|
-
public readonly
|
|
307
|
+
public readonly simpleContext: Context,
|
|
308
|
+
public readonly schema: FieldKindIdentifier,
|
|
330
309
|
public readonly key: FieldKey,
|
|
331
|
-
public readonly parent:
|
|
310
|
+
public readonly parent: UnhydratedFlexTreeNode,
|
|
311
|
+
public readonly onEdit?: () => void,
|
|
332
312
|
) {
|
|
333
313
|
const fieldKeyCache = getFieldKeyCache(parent);
|
|
334
314
|
assert(!fieldKeyCache.has(key), 0x990 /* A field already exists for the given MapTrees */);
|
|
@@ -356,14 +336,14 @@ class EagerMapTreeField implements MapTreeField {
|
|
|
356
336
|
}
|
|
357
337
|
|
|
358
338
|
public is<TKind2 extends FlexFieldKind>(kind: TKind2): this is FlexTreeTypedField<TKind2> {
|
|
359
|
-
return this.schema
|
|
339
|
+
return this.schema === kind.identifier;
|
|
360
340
|
}
|
|
361
341
|
|
|
362
342
|
public boxedIterator(): IterableIterator<FlexTreeNode> {
|
|
363
343
|
return this.mapTrees
|
|
364
344
|
.map(
|
|
365
345
|
(m, index) =>
|
|
366
|
-
getOrCreateChild(this.
|
|
346
|
+
getOrCreateChild(this.simpleContext, m, {
|
|
367
347
|
parent: this,
|
|
368
348
|
index,
|
|
369
349
|
}) as FlexTreeNode,
|
|
@@ -378,7 +358,7 @@ class EagerMapTreeField implements MapTreeField {
|
|
|
378
358
|
}
|
|
379
359
|
const m = this.mapTrees[i];
|
|
380
360
|
if (m !== undefined) {
|
|
381
|
-
return getOrCreateChild(this.
|
|
361
|
+
return getOrCreateChild(this.simpleContext, m, {
|
|
382
362
|
parent: this,
|
|
383
363
|
index: i,
|
|
384
364
|
}) as FlexTreeNode;
|
|
@@ -401,21 +381,37 @@ class EagerMapTreeField implements MapTreeField {
|
|
|
401
381
|
} else {
|
|
402
382
|
this.parent.mapTree.fields.delete(this.key);
|
|
403
383
|
}
|
|
384
|
+
|
|
385
|
+
this.onEdit?.();
|
|
404
386
|
}
|
|
405
387
|
|
|
406
388
|
public getFieldPath(): FieldUpPath {
|
|
407
389
|
throw unsupportedUsageError("Editing an array");
|
|
408
390
|
}
|
|
391
|
+
|
|
392
|
+
/** Unboxes leaf nodes to their values */
|
|
393
|
+
protected unboxed(index: number): FlexTreeUnknownUnboxed {
|
|
394
|
+
const mapTree: ExclusiveMapTree = this.mapTrees[index] ?? oob();
|
|
395
|
+
const value = mapTree.value;
|
|
396
|
+
if (value !== undefined) {
|
|
397
|
+
return value;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
return getOrCreateChild(this.simpleContext, mapTree, { parent: this, index });
|
|
401
|
+
}
|
|
409
402
|
}
|
|
410
403
|
|
|
411
|
-
class EagerMapTreeOptionalField
|
|
404
|
+
class EagerMapTreeOptionalField
|
|
405
|
+
extends UnhydratedFlexTreeField
|
|
406
|
+
implements FlexTreeOptionalField
|
|
407
|
+
{
|
|
412
408
|
public readonly editor = {
|
|
413
409
|
set: (newContent: ExclusiveMapTree | undefined): void => {
|
|
414
|
-
// If the new content is a
|
|
410
|
+
// If the new content is a UnhydratedFlexTreeNode, it needs to have its parent pointer updated
|
|
415
411
|
if (newContent !== undefined) {
|
|
416
412
|
nodeCache.get(newContent)?.adoptBy(this, 0);
|
|
417
413
|
}
|
|
418
|
-
// If the old content is a
|
|
414
|
+
// If the old content is a UnhydratedFlexTreeNode, it needs to have its parent pointer unset
|
|
419
415
|
const oldContent = this.mapTrees[0];
|
|
420
416
|
if (oldContent !== undefined) {
|
|
421
417
|
nodeCache.get(oldContent)?.adoptBy(undefined);
|
|
@@ -434,10 +430,7 @@ class EagerMapTreeOptionalField extends EagerMapTreeField implements FlexTreeOpt
|
|
|
434
430
|
public get content(): FlexTreeUnknownUnboxed | undefined {
|
|
435
431
|
const value = this.mapTrees[0];
|
|
436
432
|
if (value !== undefined) {
|
|
437
|
-
return unboxed(
|
|
438
|
-
parent: this,
|
|
439
|
-
index: 0,
|
|
440
|
-
});
|
|
433
|
+
return this.unboxed(0);
|
|
441
434
|
}
|
|
442
435
|
|
|
443
436
|
return undefined;
|
|
@@ -453,8 +446,11 @@ class EagerMapTreeRequiredField
|
|
|
453
446
|
}
|
|
454
447
|
}
|
|
455
448
|
|
|
456
|
-
class
|
|
457
|
-
|
|
449
|
+
export class UnhydratedTreeSequenceField
|
|
450
|
+
extends UnhydratedFlexTreeField
|
|
451
|
+
implements FlexTreeSequenceField
|
|
452
|
+
{
|
|
453
|
+
public readonly editor: UnhydratedTreeSequenceFieldEditBuilder = {
|
|
458
454
|
insert: (index, newContent): void => {
|
|
459
455
|
for (let i = 0; i < newContent.length; i++) {
|
|
460
456
|
const c = newContent[i];
|
|
@@ -490,15 +486,15 @@ class EagerMapTreeSequenceField extends EagerMapTreeField implements FlexTreeSeq
|
|
|
490
486
|
if (i === undefined) {
|
|
491
487
|
return undefined;
|
|
492
488
|
}
|
|
493
|
-
return
|
|
489
|
+
return this.unboxed(i);
|
|
494
490
|
}
|
|
495
491
|
public map<U>(callbackfn: (value: FlexTreeUnknownUnboxed, index: number) => U): U[] {
|
|
496
492
|
return Array.from(this, callbackfn);
|
|
497
493
|
}
|
|
498
494
|
|
|
499
495
|
public *[Symbol.iterator](): IterableIterator<FlexTreeUnknownUnboxed> {
|
|
500
|
-
for (const [i
|
|
501
|
-
yield unboxed(
|
|
496
|
+
for (const [i] of this.mapTrees.entries()) {
|
|
497
|
+
yield this.unboxed(i);
|
|
502
498
|
}
|
|
503
499
|
}
|
|
504
500
|
}
|
|
@@ -507,109 +503,70 @@ class EagerMapTreeSequenceField extends EagerMapTreeField implements FlexTreeSeq
|
|
|
507
503
|
|
|
508
504
|
// #region Caching and unboxing utilities
|
|
509
505
|
|
|
510
|
-
const nodeCache = new WeakMap<MapTree,
|
|
506
|
+
const nodeCache = new WeakMap<MapTree, UnhydratedFlexTreeNode>();
|
|
511
507
|
/** Node Parent -\> Field Key -\> Field */
|
|
512
|
-
const fieldCache = new WeakMap<
|
|
513
|
-
|
|
508
|
+
const fieldCache = new WeakMap<
|
|
509
|
+
UnhydratedFlexTreeNode,
|
|
510
|
+
Map<FieldKey, UnhydratedFlexTreeField>
|
|
511
|
+
>();
|
|
512
|
+
function getFieldKeyCache(
|
|
513
|
+
parent: UnhydratedFlexTreeNode,
|
|
514
|
+
): WeakMap<FieldKey, UnhydratedFlexTreeField> {
|
|
514
515
|
return getOrCreate(fieldCache, parent, () => new Map());
|
|
515
516
|
}
|
|
516
517
|
|
|
517
518
|
/**
|
|
518
|
-
* If there exists a {@link
|
|
519
|
-
* @remarks {@link
|
|
519
|
+
* If there exists a {@link UnhydratedFlexTreeNode} for the given {@link MapTree}, returns it, otherwise returns `undefined`.
|
|
520
|
+
* @remarks {@link UnhydratedFlexTreeNode | UnhydratedFlexTreeNodes} are created via {@link getOrCreateNode}.
|
|
520
521
|
*/
|
|
521
|
-
export function
|
|
522
|
+
export function tryUnhydratedFlexTreeNode(
|
|
523
|
+
mapTree: MapTree,
|
|
524
|
+
): UnhydratedFlexTreeNode | undefined {
|
|
522
525
|
return nodeCache.get(mapTree);
|
|
523
526
|
}
|
|
524
527
|
|
|
525
|
-
/**
|
|
526
|
-
* Create a {@link EagerMapTreeNode} that wraps the given {@link MapTree}, or get the node that already exists for that {@link MapTree} if there is one.
|
|
527
|
-
* @param nodeSchema - the {@link FlexTreeNodeSchema | schema} that the node conforms to
|
|
528
|
-
* @param mapTree - the {@link MapTree} containing the data for this node.
|
|
529
|
-
* @remarks It must conform to the `nodeSchema`.
|
|
530
|
-
*/
|
|
531
|
-
export function getOrCreateMapTreeNode(
|
|
532
|
-
context: UnhydratedContext,
|
|
533
|
-
nodeSchema: FlexTreeNodeSchema,
|
|
534
|
-
mapTree: ExclusiveMapTree,
|
|
535
|
-
): EagerMapTreeNode {
|
|
536
|
-
return nodeCache.get(mapTree) ?? createNode(context, nodeSchema, mapTree, undefined);
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
/** Helper for creating a `MapTreeNode` given the parent field (e.g. when "walking down") */
|
|
528
|
+
/** Helper for creating a `UnhydratedFlexTreeNode` given the parent field (e.g. when "walking down") */
|
|
540
529
|
function getOrCreateChild(
|
|
541
|
-
context:
|
|
530
|
+
context: Context,
|
|
542
531
|
mapTree: ExclusiveMapTree,
|
|
543
|
-
allowedTypes: FlexAllowedTypes,
|
|
544
532
|
parent: LocationInField | undefined,
|
|
545
|
-
):
|
|
533
|
+
): UnhydratedFlexTreeNode {
|
|
546
534
|
const cached = nodeCache.get(mapTree);
|
|
547
535
|
if (cached !== undefined) {
|
|
548
536
|
return cached;
|
|
549
537
|
}
|
|
550
538
|
|
|
551
|
-
|
|
552
|
-
const nodeSchema =
|
|
553
|
-
allowedTypes
|
|
554
|
-
.map((t) => (isLazy(t) ? t() : t))
|
|
555
|
-
.find((t): t is FlexTreeNodeSchema => {
|
|
556
|
-
return t.name === mapTree.type;
|
|
557
|
-
}) ?? fail("Unsupported node schema");
|
|
558
|
-
|
|
559
|
-
return createNode(context, nodeSchema, mapTree, parent);
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
/** Always constructs a new node, therefore may not be called twice for the same `MapTree`. */
|
|
563
|
-
function createNode(
|
|
564
|
-
context: UnhydratedContext,
|
|
565
|
-
nodeSchema: FlexTreeNodeSchema,
|
|
566
|
-
mapTree: ExclusiveMapTree,
|
|
567
|
-
parentField: LocationInField | undefined,
|
|
568
|
-
): EagerMapTreeNode {
|
|
569
|
-
return new EagerMapTreeNode(context, nodeSchema, mapTree, parentField);
|
|
539
|
+
return new UnhydratedFlexTreeNode(context, mapTree, parent);
|
|
570
540
|
}
|
|
571
541
|
|
|
572
542
|
/** Creates a field with the given attributes, or returns a cached field if there is one */
|
|
573
543
|
function getOrCreateField(
|
|
574
|
-
parent:
|
|
544
|
+
parent: UnhydratedFlexTreeNode,
|
|
575
545
|
key: FieldKey,
|
|
576
|
-
schema:
|
|
577
|
-
)
|
|
546
|
+
schema: FieldKindIdentifier,
|
|
547
|
+
onEdit?: () => void,
|
|
548
|
+
): UnhydratedFlexTreeField {
|
|
578
549
|
const cached = getFieldKeyCache(parent).get(key);
|
|
579
550
|
if (cached !== undefined) {
|
|
580
551
|
return cached;
|
|
581
552
|
}
|
|
582
553
|
|
|
583
554
|
if (
|
|
584
|
-
schema
|
|
585
|
-
schema
|
|
555
|
+
schema === FieldKinds.required.identifier ||
|
|
556
|
+
schema === FieldKinds.identifier.identifier
|
|
586
557
|
) {
|
|
587
|
-
return new EagerMapTreeRequiredField(parent.
|
|
558
|
+
return new EagerMapTreeRequiredField(parent.simpleContext, schema, key, parent, onEdit);
|
|
588
559
|
}
|
|
589
560
|
|
|
590
|
-
if (schema
|
|
591
|
-
return new EagerMapTreeOptionalField(parent.
|
|
561
|
+
if (schema === FieldKinds.optional.identifier) {
|
|
562
|
+
return new EagerMapTreeOptionalField(parent.simpleContext, schema, key, parent, onEdit);
|
|
592
563
|
}
|
|
593
564
|
|
|
594
|
-
if (schema
|
|
595
|
-
return new
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
return new EagerMapTreeField(parent.context, schema, key, parent);
|
|
599
|
-
}
|
|
600
|
-
|
|
601
|
-
/** Unboxes leaf nodes to their values */
|
|
602
|
-
function unboxed(
|
|
603
|
-
schema: FlexFieldSchema,
|
|
604
|
-
mapTree: ExclusiveMapTree,
|
|
605
|
-
parent: LocationInField,
|
|
606
|
-
): FlexTreeUnknownUnboxed {
|
|
607
|
-
const value = mapTree.value;
|
|
608
|
-
if (value !== undefined) {
|
|
609
|
-
return value;
|
|
565
|
+
if (schema === FieldKinds.sequence.identifier) {
|
|
566
|
+
return new UnhydratedTreeSequenceField(parent.simpleContext, schema, key, parent, onEdit);
|
|
610
567
|
}
|
|
611
568
|
|
|
612
|
-
return
|
|
569
|
+
return new UnhydratedFlexTreeField(parent.simpleContext, schema, key, parent, onEdit);
|
|
613
570
|
}
|
|
614
571
|
|
|
615
572
|
// #endregion Caching and unboxing utilities
|