@fluidframework/tree 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +12 -1
- package/CHANGELOG.md +371 -0
- package/api-report/tree.alpha.api.md +271 -80
- package/api-report/tree.beta.api.md +100 -51
- package/api-report/tree.legacy.alpha.api.md +99 -50
- package/api-report/tree.legacy.public.api.md +99 -50
- package/api-report/tree.public.api.md +99 -50
- package/dist/alpha.d.ts +32 -2
- package/dist/beta.d.ts +6 -0
- package/dist/codec/codec.d.ts +24 -0
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js +26 -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 +2 -1
- package/dist/codec/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +2 -2
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -2
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +0 -4
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +1 -7
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/rebase/utils.d.ts +1 -0
- package/dist/core/rebase/utils.d.ts.map +1 -1
- package/dist/core/rebase/utils.js +29 -4
- package/dist/core/rebase/utils.js.map +1 -1
- package/dist/events/interop.d.ts +1 -7
- package/dist/events/interop.d.ts.map +1 -1
- package/dist/events/interop.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +2 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +3 -0
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +2 -2
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -7
- 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 +6 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +6 -0
- package/dist/shared-tree/independentView.d.ts +57 -0
- package/dist/shared-tree/independentView.d.ts.map +1 -0
- package/dist/shared-tree/independentView.js +89 -0
- package/dist/shared-tree/independentView.js.map +1 -0
- package/dist/shared-tree/index.d.ts +3 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +6 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +12 -8
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +28 -0
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +10 -7
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeApi.d.ts +6 -6
- package/dist/shared-tree/treeApi.d.ts.map +1 -1
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeApiAlpha.d.ts +147 -0
- package/dist/shared-tree/treeApiAlpha.d.ts.map +1 -0
- package/dist/shared-tree/treeApiAlpha.js +122 -0
- package/dist/shared-tree/treeApiAlpha.js.map +1 -0
- package/dist/shared-tree/treeCheckout.d.ts +12 -7
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +11 -4
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts +13 -6
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +80 -33
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -0
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +28 -3
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/api/conciseTree.d.ts +2 -1
- package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/conciseTree.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +6 -24
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +4 -19
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +1 -0
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +2 -2
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +7 -7
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +10 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts +25 -27
- package/dist/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +31 -21
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +16 -12
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +4 -0
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js +3 -3
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.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/testRecursiveDomain.d.ts +5 -5
- package/dist/simple-tree/api/tree.d.ts +122 -5
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js +12 -4
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeApiBeta.d.ts +8 -5
- package/dist/simple-tree/api/treeApiBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeApiBeta.js +3 -15
- package/dist/simple-tree/api/treeApiBeta.js.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.d.ts +69 -17
- package/dist/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/dist/simple-tree/api/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts +3 -0
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +15 -4
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +1 -1
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +51 -11
- 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/unhydratedFlexTree.d.ts +2 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +3 -0
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +2 -1
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/createContext.js +2 -2
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/index.d.ts +6 -6
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +15 -5
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +6 -5
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +3 -0
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts +1 -1
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +6 -0
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +4 -2
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +210 -18
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +66 -1
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts +4 -2
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/{toFlexSchema.d.ts → toStoredSchema.d.ts} +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -0
- package/dist/simple-tree/{toFlexSchema.js → toStoredSchema.js} +1 -1
- package/dist/simple-tree/toStoredSchema.js.map +1 -0
- package/dist/simple-tree/treeNodeValid.d.ts +5 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +7 -1
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/util/index.d.ts +3 -2
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +3 -1
- package/dist/util/index.js.map +1 -1
- package/dist/util/typeCheck.d.ts +9 -0
- package/dist/util/typeCheck.d.ts.map +1 -1
- package/dist/util/typeCheck.js.map +1 -1
- package/dist/util/typeUtils.d.ts +61 -0
- package/dist/util/typeUtils.d.ts.map +1 -1
- package/dist/util/typeUtils.js +27 -0
- package/dist/util/typeUtils.js.map +1 -1
- package/dist/util/utils.d.ts +7 -3
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +13 -3
- package/dist/util/utils.js.map +1 -1
- package/lib/alpha.d.ts +32 -2
- package/lib/beta.d.ts +6 -0
- package/lib/codec/codec.d.ts +24 -0
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js +25 -0
- 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 +1 -1
- package/lib/codec/index.js.map +1 -1
- package/lib/core/rebase/index.d.ts +2 -2
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +2 -2
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +0 -4
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +0 -5
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/rebase/utils.d.ts +1 -0
- package/lib/core/rebase/utils.d.ts.map +1 -1
- package/lib/core/rebase/utils.js +27 -3
- package/lib/core/rebase/utils.js.map +1 -1
- package/lib/events/interop.d.ts +1 -7
- package/lib/events/interop.d.ts.map +1 -1
- package/lib/events/interop.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +8 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +2 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +3 -0
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +2 -2
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -3
- 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 +6 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +6 -0
- package/lib/shared-tree/independentView.d.ts +57 -0
- package/lib/shared-tree/independentView.d.ts.map +1 -0
- package/lib/shared-tree/independentView.js +84 -0
- package/lib/shared-tree/independentView.js.map +1 -0
- package/lib/shared-tree/index.d.ts +3 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +2 -0
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +12 -8
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +29 -1
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +10 -7
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeApi.d.ts +6 -6
- package/lib/shared-tree/treeApi.d.ts.map +1 -1
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeApiAlpha.d.ts +147 -0
- package/lib/shared-tree/treeApiAlpha.d.ts.map +1 -0
- package/lib/shared-tree/treeApiAlpha.js +119 -0
- package/lib/shared-tree/treeApiAlpha.js.map +1 -0
- package/lib/shared-tree/treeCheckout.d.ts +12 -7
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +11 -4
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts +13 -6
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +80 -33
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -0
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +29 -4
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/api/conciseTree.d.ts +2 -1
- package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/conciseTree.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +6 -24
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +2 -16
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +1 -0
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +2 -2
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +7 -7
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +6 -4
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts +25 -27
- package/lib/simple-tree/api/schemaCreationUtilities.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +30 -19
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +16 -12
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +4 -0
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js +3 -3
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +1 -1
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/testRecursiveDomain.d.ts +5 -5
- package/lib/simple-tree/api/tree.d.ts +122 -5
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js +9 -2
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeApiBeta.d.ts +8 -5
- package/lib/simple-tree/api/treeApiBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeApiBeta.js +4 -16
- package/lib/simple-tree/api/treeApiBeta.js.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.d.ts +69 -17
- package/lib/simple-tree/api/typesUnsafe.d.ts.map +1 -1
- package/lib/simple-tree/api/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts +3 -0
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/arrayNode.d.ts +15 -4
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +1 -1
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +51 -11
- 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/unhydratedFlexTree.d.ts +2 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +4 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +2 -1
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/createContext.js +1 -1
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/index.d.ts +6 -6
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +5 -5
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +6 -5
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +3 -0
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts +1 -1
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +6 -0
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +4 -2
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +210 -18
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +64 -1
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts +4 -2
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/{toFlexSchema.d.ts → toStoredSchema.d.ts} +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -0
- package/lib/simple-tree/{toFlexSchema.js → toStoredSchema.js} +1 -1
- package/lib/simple-tree/toStoredSchema.js.map +1 -0
- package/lib/simple-tree/treeNodeValid.d.ts +5 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +7 -1
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/util/index.d.ts +3 -2
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +1 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/typeCheck.d.ts +9 -0
- package/lib/util/typeCheck.d.ts.map +1 -1
- package/lib/util/typeCheck.js.map +1 -1
- package/lib/util/typeUtils.d.ts +61 -0
- package/lib/util/typeUtils.d.ts.map +1 -1
- package/lib/util/typeUtils.js +25 -1
- package/lib/util/typeUtils.js.map +1 -1
- package/lib/util/utils.d.ts +7 -3
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +13 -3
- package/lib/util/utils.js.map +1 -1
- package/package.json +55 -30
- package/src/codec/codec.ts +25 -0
- package/src/codec/index.ts +1 -0
- package/src/core/rebase/index.ts +1 -1
- package/src/core/rebase/types.ts +0 -12
- package/src/core/rebase/utils.ts +35 -3
- package/src/events/interop.ts +1 -12
- package/src/feature-libraries/chunked-forest/basicChunk.ts +1 -1
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +1 -1
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +9 -0
- package/src/feature-libraries/flex-tree/lazyNode.ts +5 -0
- package/src/feature-libraries/object-forest/objectForest.ts +1 -1
- package/src/feature-libraries/treeCursorUtils.ts +2 -2
- package/src/index.ts +36 -6
- package/src/internalTypes.ts +4 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +176 -0
- package/src/shared-tree/index.ts +9 -1
- package/src/shared-tree/schematizingTreeView.ts +64 -13
- package/src/shared-tree/sharedTree.ts +29 -9
- package/src/shared-tree/treeApi.ts +19 -9
- package/src/shared-tree/treeApiAlpha.ts +401 -0
- package/src/shared-tree/treeCheckout.ts +28 -5
- package/src/shared-tree-core/editManager.ts +126 -59
- package/src/shared-tree-core/sharedTreeCore.ts +37 -8
- package/src/simple-tree/api/conciseTree.ts +2 -1
- package/src/simple-tree/api/create.ts +33 -65
- package/src/simple-tree/api/customTree.ts +3 -2
- package/src/simple-tree/api/index.ts +19 -8
- package/src/simple-tree/api/schemaCreationUtilities.ts +59 -37
- package/src/simple-tree/api/schemaFactory.ts +28 -12
- package/src/simple-tree/api/simpleSchemaToJsonSchema.ts +3 -3
- package/src/simple-tree/api/storedSchema.ts +1 -1
- package/src/simple-tree/api/tree.ts +152 -7
- package/src/simple-tree/api/treeApiBeta.ts +35 -31
- package/src/simple-tree/api/typesUnsafe.ts +125 -30
- package/src/simple-tree/api/verboseTree.ts +3 -0
- package/src/simple-tree/arrayNode.ts +38 -17
- package/src/simple-tree/core/getOrCreateNode.ts +1 -1
- package/src/simple-tree/core/treeNodeSchema.ts +107 -34
- package/src/simple-tree/core/unhydratedFlexTree.ts +6 -0
- package/src/simple-tree/core/withType.ts +2 -1
- package/src/simple-tree/createContext.ts +1 -1
- package/src/simple-tree/index.ts +34 -3
- package/src/simple-tree/leafNodeSchema.ts +6 -1
- package/src/simple-tree/mapNode.ts +13 -4
- package/src/simple-tree/objectNode.ts +5 -3
- package/src/simple-tree/schemaTypes.ts +342 -36
- package/src/simple-tree/toMapTree.ts +4 -1
- package/src/simple-tree/treeNodeValid.ts +11 -1
- package/src/util/index.ts +7 -0
- package/src/util/typeCheck.ts +13 -0
- package/src/util/typeUtils.ts +87 -0
- package/src/util/utils.ts +20 -7
- package/dist/simple-tree/toFlexSchema.d.ts.map +0 -1
- package/dist/simple-tree/toFlexSchema.js.map +0 -1
- package/lib/simple-tree/toFlexSchema.d.ts.map +0 -1
- package/lib/simple-tree/toFlexSchema.js.map +0 -1
- /package/src/simple-tree/{toFlexSchema.ts → toStoredSchema.ts} +0 -0
|
@@ -12,10 +12,9 @@ import {
|
|
|
12
12
|
type Unhydrated,
|
|
13
13
|
type WithType,
|
|
14
14
|
} from "../core/index.js";
|
|
15
|
-
import type { ImplicitFieldSchema, TreeFieldFromImplicitField } from "../schemaTypes.js";
|
|
16
15
|
import { treeNodeApi } from "./treeNodeApi.js";
|
|
17
|
-
import { createFromCursor
|
|
18
|
-
import type {
|
|
16
|
+
import { createFromCursor } from "./create.js";
|
|
17
|
+
import type { ImplicitFieldSchema, TreeFieldFromImplicitField } from "../schemaTypes.js";
|
|
19
18
|
|
|
20
19
|
/**
|
|
21
20
|
* Data included for {@link TreeChangeEventsBeta.nodeChanged}.
|
|
@@ -109,18 +108,40 @@ export const TreeBeta: {
|
|
|
109
108
|
): () => void;
|
|
110
109
|
|
|
111
110
|
/**
|
|
112
|
-
* Clones the persisted data associated with a node.
|
|
111
|
+
* Clones the persisted data associated with a node.
|
|
112
|
+
*
|
|
113
|
+
* @param node - The node to clone.
|
|
114
|
+
* @returns A new unhydrated node with the same persisted data as the original node.
|
|
115
|
+
* @remarks
|
|
116
|
+
* Some key things to note:
|
|
117
|
+
*
|
|
113
118
|
* - Local state, such as properties added to customized schema classes, will not be cloned. However, they will be
|
|
114
119
|
* initialized to their default state just as if the node had been created via its constructor.
|
|
115
120
|
* - Value node types (i.e., numbers, strings, booleans, nulls and Fluid handles) will be returned as is.
|
|
116
121
|
* - The identifiers in the node's subtree will be preserved, i.e., they are not replaced with new values.
|
|
117
|
-
*
|
|
118
|
-
* @param node - The node to clone.
|
|
119
|
-
* @returns A new unhydrated node with the same persisted data as the original node.
|
|
120
122
|
*/
|
|
121
|
-
clone<TSchema extends ImplicitFieldSchema>(
|
|
123
|
+
clone<const TSchema extends ImplicitFieldSchema>(
|
|
122
124
|
node: TreeFieldFromImplicitField<TSchema>,
|
|
123
125
|
): TreeFieldFromImplicitField<TSchema>;
|
|
126
|
+
|
|
127
|
+
// TODO: support more clone options
|
|
128
|
+
// /**
|
|
129
|
+
// * Like {@link TreeBeta.create}, except deeply clones existing nodes.
|
|
130
|
+
// * @remarks
|
|
131
|
+
// * This only clones the persisted data associated with a node.
|
|
132
|
+
// * Local state, such as properties added to customized schema classes, will not be cloned:
|
|
133
|
+
// * they will be initialized however they end up after running the constructor, just like if a remote client had inserted the same nodes.
|
|
134
|
+
// */
|
|
135
|
+
// clone<const TSchema extends ImplicitFieldSchema>(
|
|
136
|
+
// original: TreeFieldFromImplicitField<TSchema>,
|
|
137
|
+
// options?: {
|
|
138
|
+
// /**
|
|
139
|
+
// * If set, all identifier's in the cloned tree (See {@link SchemaFactory.identifier}) will be replaced with new ones allocated using the default identifier allocation schema.
|
|
140
|
+
// * Otherwise any identifiers will be preserved as is.
|
|
141
|
+
// */
|
|
142
|
+
// replaceIdentifiers?: true;
|
|
143
|
+
// },
|
|
144
|
+
// ): TreeFieldFromImplicitField<TSchema>;
|
|
124
145
|
} = {
|
|
125
146
|
on<K extends keyof TreeChangeEventsBeta<TNode>, TNode extends TreeNode>(
|
|
126
147
|
node: TNode,
|
|
@@ -129,35 +150,18 @@ export const TreeBeta: {
|
|
|
129
150
|
): () => void {
|
|
130
151
|
return treeNodeApi.on(node, eventName, listener);
|
|
131
152
|
},
|
|
132
|
-
clone<TSchema extends ImplicitFieldSchema>(
|
|
153
|
+
clone<const TSchema extends ImplicitFieldSchema>(
|
|
133
154
|
node: TreeFieldFromImplicitField<TSchema>,
|
|
134
155
|
): Unhydrated<TreeFieldFromImplicitField<TSchema>> {
|
|
135
|
-
|
|
156
|
+
/** The only non-TreeNode cases are {@link TreeLeafValue} and `undefined` (for an empty optional field) which can be returned as is. */
|
|
136
157
|
if (!isTreeNode(node)) {
|
|
137
158
|
return node;
|
|
138
159
|
}
|
|
139
160
|
|
|
140
161
|
const kernel = getKernel(node);
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
if (!kernel.isHydrated()) {
|
|
146
|
-
return createFromCursor(
|
|
147
|
-
kernel.schema,
|
|
148
|
-
cursorFromInsertable(kernel.schema, node),
|
|
149
|
-
) as Unhydrated<TreeFieldFromImplicitField<TSchema>>;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// For hydrated nodes, create a new cursor in the forest and then create a new node from the cursor.
|
|
153
|
-
const forest = kernel.context.flexContext.checkout.forest;
|
|
154
|
-
const cursor = forest.allocateCursor("tree.clone");
|
|
155
|
-
forest.moveCursorToPath(kernel.anchorNode, cursor);
|
|
156
|
-
const clonedNode = createFromCursor(
|
|
157
|
-
kernel.schema,
|
|
158
|
-
cursor as ITreeCursorSynchronous,
|
|
159
|
-
) as Unhydrated<TreeFieldFromImplicitField<TSchema>>;
|
|
160
|
-
cursor.free();
|
|
161
|
-
return clonedNode;
|
|
162
|
+
const cursor = kernel.getOrCreateInnerNode().borrowCursor();
|
|
163
|
+
return createFromCursor(kernel.schema, cursor) as Unhydrated<
|
|
164
|
+
TreeFieldFromImplicitField<TSchema>
|
|
165
|
+
>;
|
|
162
166
|
},
|
|
163
167
|
};
|
|
@@ -3,27 +3,28 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { RestrictiveStringRecord,
|
|
6
|
+
import type { RestrictiveStringRecord, UnionToIntersection } from "../../util/index.js";
|
|
7
7
|
|
|
8
8
|
import type {
|
|
9
|
-
AllowedTypes,
|
|
10
9
|
ApplyKind,
|
|
10
|
+
ApplyKindInput,
|
|
11
11
|
FieldKind,
|
|
12
12
|
FieldSchema,
|
|
13
13
|
ImplicitAllowedTypes,
|
|
14
14
|
ImplicitFieldSchema,
|
|
15
|
-
|
|
16
|
-
TreeNodeFromImplicitAllowedTypes,
|
|
15
|
+
TreeLeafValue,
|
|
17
16
|
} from "../schemaTypes.js";
|
|
18
17
|
import type {
|
|
19
18
|
NodeKind,
|
|
20
|
-
TreeNodeSchema,
|
|
21
19
|
WithType,
|
|
22
20
|
TreeNode,
|
|
23
21
|
Unhydrated,
|
|
22
|
+
InternalTreeNode,
|
|
23
|
+
TreeNodeSchema,
|
|
24
|
+
TreeNodeSchemaCore,
|
|
24
25
|
} from "../core/index.js";
|
|
25
|
-
import type { TreeArrayNodeBase
|
|
26
|
-
import type { FlexListToUnion } from "../flexList.js";
|
|
26
|
+
import type { TreeArrayNodeBase } from "../arrayNode.js";
|
|
27
|
+
import type { FlexListToUnion, LazyItem } from "../flexList.js";
|
|
27
28
|
|
|
28
29
|
/*
|
|
29
30
|
* TODO:
|
|
@@ -59,6 +60,64 @@ export type ObjectFromSchemaRecordUnsafe<
|
|
|
59
60
|
-readonly [Property in keyof T]: TreeFieldFromImplicitFieldUnsafe<T[Property]>;
|
|
60
61
|
};
|
|
61
62
|
|
|
63
|
+
/**
|
|
64
|
+
* {@link Unenforced} version of {@link TreeNodeSchema}.
|
|
65
|
+
* @remarks
|
|
66
|
+
* Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
67
|
+
* @system @public
|
|
68
|
+
*/
|
|
69
|
+
export type TreeNodeSchemaUnsafe<
|
|
70
|
+
Name extends string = string,
|
|
71
|
+
Kind extends NodeKind = NodeKind,
|
|
72
|
+
TNode extends Unenforced<TreeNode | TreeLeafValue> = unknown,
|
|
73
|
+
TBuild = never,
|
|
74
|
+
ImplicitlyConstructable extends boolean = boolean,
|
|
75
|
+
Info = unknown,
|
|
76
|
+
> =
|
|
77
|
+
| TreeNodeSchemaClassUnsafe<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>
|
|
78
|
+
| TreeNodeSchemaNonClassUnsafe<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* {@link Unenforced} version of {@link TreeNodeSchemaClass}.
|
|
82
|
+
* @remarks
|
|
83
|
+
* Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
84
|
+
* @system @public
|
|
85
|
+
*/
|
|
86
|
+
export interface TreeNodeSchemaClassUnsafe<
|
|
87
|
+
out Name extends string,
|
|
88
|
+
out Kind extends NodeKind,
|
|
89
|
+
out TNode extends Unenforced<TreeNode>,
|
|
90
|
+
in TInsertable,
|
|
91
|
+
out ImplicitlyConstructable extends boolean,
|
|
92
|
+
out Info,
|
|
93
|
+
> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
|
|
94
|
+
/**
|
|
95
|
+
* Constructs an {@link Unhydrated} node with this schema.
|
|
96
|
+
* @remarks
|
|
97
|
+
* This constructor is also used internally to construct hydrated nodes with a different parameter type.
|
|
98
|
+
* Therefore, overriding this constructor with different argument types is not type-safe and is not supported.
|
|
99
|
+
* @sealed
|
|
100
|
+
*/
|
|
101
|
+
new (data: TInsertable | InternalTreeNode): Unhydrated<TNode>;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* {@link Unenforced} version of {@link TreeNodeSchemaNonClass}.
|
|
106
|
+
* @remarks
|
|
107
|
+
* Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
108
|
+
* @system @public
|
|
109
|
+
*/
|
|
110
|
+
export interface TreeNodeSchemaNonClassUnsafe<
|
|
111
|
+
out Name extends string,
|
|
112
|
+
out Kind extends NodeKind,
|
|
113
|
+
out TNode extends Unenforced<TreeNode | TreeLeafValue>,
|
|
114
|
+
in TInsertable,
|
|
115
|
+
out ImplicitlyConstructable extends boolean,
|
|
116
|
+
out Info = unknown,
|
|
117
|
+
> extends TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info> {
|
|
118
|
+
create(data: TInsertable): TNode;
|
|
119
|
+
}
|
|
120
|
+
|
|
62
121
|
/**
|
|
63
122
|
* {@link Unenforced} version of {@link TreeObjectNode}.
|
|
64
123
|
* @remarks
|
|
@@ -78,11 +137,19 @@ export type TreeObjectNodeUnsafe<
|
|
|
78
137
|
*/
|
|
79
138
|
export type TreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<ImplicitFieldSchema>> =
|
|
80
139
|
TSchema extends FieldSchemaUnsafe<infer Kind, infer Types>
|
|
81
|
-
? ApplyKind<TreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind
|
|
140
|
+
? ApplyKind<TreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind>
|
|
82
141
|
: TSchema extends ImplicitAllowedTypes
|
|
83
142
|
? TreeNodeFromImplicitAllowedTypesUnsafe<TSchema>
|
|
84
143
|
: unknown;
|
|
85
144
|
|
|
145
|
+
/**
|
|
146
|
+
* {@link Unenforced} version of {@link AllowedTypes}.
|
|
147
|
+
* @remarks
|
|
148
|
+
* Do not use this type directly: it is only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
149
|
+
* @system @public
|
|
150
|
+
*/
|
|
151
|
+
export type AllowedTypesUnsafe = readonly LazyItem<TreeNodeSchemaUnsafe>[];
|
|
152
|
+
|
|
86
153
|
/**
|
|
87
154
|
* {@link Unenforced} version of {@link TreeNodeFromImplicitAllowedTypes}.
|
|
88
155
|
* @remarks
|
|
@@ -91,36 +158,60 @@ export type TreeFieldFromImplicitFieldUnsafe<TSchema extends Unenforced<Implicit
|
|
|
91
158
|
*/
|
|
92
159
|
export type TreeNodeFromImplicitAllowedTypesUnsafe<
|
|
93
160
|
TSchema extends Unenforced<ImplicitAllowedTypes>,
|
|
94
|
-
> = TSchema extends
|
|
95
|
-
?
|
|
96
|
-
: TSchema extends
|
|
97
|
-
?
|
|
98
|
-
:
|
|
99
|
-
? NodeFromSchema<FlexListToUnion<TSchema>>
|
|
100
|
-
: unknown;
|
|
161
|
+
> = TSchema extends TreeNodeSchemaUnsafe
|
|
162
|
+
? NodeFromSchemaUnsafe<TSchema>
|
|
163
|
+
: TSchema extends AllowedTypesUnsafe
|
|
164
|
+
? NodeFromSchemaUnsafe<FlexListToUnion<TSchema>>
|
|
165
|
+
: unknown;
|
|
101
166
|
|
|
102
167
|
/**
|
|
103
168
|
* {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
|
|
169
|
+
* @see {@link Input}
|
|
104
170
|
* @remarks
|
|
105
171
|
* Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
106
172
|
* @system @public
|
|
107
173
|
*/
|
|
108
174
|
export type InsertableTreeNodeFromImplicitAllowedTypesUnsafe<
|
|
109
175
|
TSchema extends Unenforced<ImplicitAllowedTypes>,
|
|
110
|
-
> = TSchema extends
|
|
111
|
-
? InsertableTypedNodeUnsafe<
|
|
112
|
-
:
|
|
176
|
+
> = [TSchema] extends [TreeNodeSchemaUnsafe]
|
|
177
|
+
? InsertableTypedNodeUnsafe<TSchema>
|
|
178
|
+
: [TSchema] extends [AllowedTypesUnsafe]
|
|
179
|
+
? InsertableTreeNodeFromAllowedTypesUnsafe<TSchema>
|
|
180
|
+
: never;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* {@link Unenforced} version of {@link InsertableTreeNodeFromAllowedTypes}.
|
|
184
|
+
* @see {@link Input}
|
|
185
|
+
* @system @public
|
|
186
|
+
*/
|
|
187
|
+
export type InsertableTreeNodeFromAllowedTypesUnsafe<
|
|
188
|
+
TList extends Unenforced<AllowedTypesUnsafe>,
|
|
189
|
+
> = TList extends readonly [
|
|
190
|
+
LazyItem<infer TSchema extends TreeNodeSchemaUnsafe>,
|
|
191
|
+
...infer Rest extends AllowedTypesUnsafe,
|
|
192
|
+
]
|
|
193
|
+
? InsertableTypedNodeUnsafe<TSchema> | InsertableTreeNodeFromAllowedTypesUnsafe<Rest>
|
|
194
|
+
: never;
|
|
113
195
|
|
|
114
196
|
/**
|
|
115
197
|
* {@link Unenforced} version of {@link InsertableTypedNode}.
|
|
198
|
+
* @see {@link Input}
|
|
116
199
|
* @remarks
|
|
117
200
|
* Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
201
|
+
* @privateRemarks
|
|
202
|
+
* TODO:
|
|
203
|
+
* This is less strict than InsertableTypedNode when given non-exact schema to avoid compilation issues.
|
|
204
|
+
* This should probably be fixed or documented somehow.
|
|
118
205
|
* @system @public
|
|
119
206
|
*/
|
|
120
|
-
export type InsertableTypedNodeUnsafe<
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
207
|
+
export type InsertableTypedNodeUnsafe<
|
|
208
|
+
TSchema extends Unenforced<TreeNodeSchemaUnsafe>,
|
|
209
|
+
T = UnionToIntersection<TSchema>,
|
|
210
|
+
> =
|
|
211
|
+
| (T extends TreeNodeSchemaUnsafe<string, NodeKind, TreeNode | TreeLeafValue, never, true>
|
|
212
|
+
? NodeBuilderDataUnsafe<T>
|
|
213
|
+
: never)
|
|
214
|
+
| (T extends TreeNodeSchemaUnsafe ? NodeFromSchemaUnsafe<T> : never);
|
|
124
215
|
|
|
125
216
|
/**
|
|
126
217
|
* {@link Unenforced} version of {@link NodeFromSchema}.
|
|
@@ -129,7 +220,7 @@ export type InsertableTypedNodeUnsafe<T extends Unenforced<TreeNodeSchema>> = [
|
|
|
129
220
|
* @system @public
|
|
130
221
|
*/
|
|
131
222
|
export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> =
|
|
132
|
-
T extends
|
|
223
|
+
T extends TreeNodeSchemaUnsafe<string, NodeKind, infer TNode> ? TNode : never;
|
|
133
224
|
|
|
134
225
|
/**
|
|
135
226
|
* {@link Unenforced} version of {@link InsertableTreeNodeFromImplicitAllowedTypes}.
|
|
@@ -138,7 +229,7 @@ export type NodeFromSchemaUnsafe<T extends Unenforced<TreeNodeSchema>> =
|
|
|
138
229
|
* @system @public
|
|
139
230
|
*/
|
|
140
231
|
export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> =
|
|
141
|
-
T extends
|
|
232
|
+
T extends TreeNodeSchemaUnsafe<string, NodeKind, unknown, infer TBuild> ? TBuild : never;
|
|
142
233
|
|
|
143
234
|
/**
|
|
144
235
|
* {@link Unenforced} version of {@link (TreeArrayNode:interface)}.
|
|
@@ -149,8 +240,7 @@ export type NodeBuilderDataUnsafe<T extends Unenforced<TreeNodeSchema>> =
|
|
|
149
240
|
export interface TreeArrayNodeUnsafe<TAllowedTypes extends Unenforced<ImplicitAllowedTypes>>
|
|
150
241
|
extends TreeArrayNodeBase<
|
|
151
242
|
TreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>,
|
|
152
|
-
InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes
|
|
153
|
-
TreeArrayNode
|
|
243
|
+
InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TAllowedTypes>
|
|
154
244
|
> {}
|
|
155
245
|
|
|
156
246
|
/**
|
|
@@ -235,6 +325,7 @@ export type FieldHasDefaultUnsafe<T extends Unenforced<ImplicitFieldSchema>> =
|
|
|
235
325
|
|
|
236
326
|
/**
|
|
237
327
|
* {@link Unenforced} version of `InsertableObjectFromSchemaRecord`.
|
|
328
|
+
* @see {@link Input}
|
|
238
329
|
* @remarks
|
|
239
330
|
* Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
240
331
|
* @system @public
|
|
@@ -256,15 +347,19 @@ export type InsertableObjectFromSchemaRecordUnsafe<
|
|
|
256
347
|
|
|
257
348
|
/**
|
|
258
349
|
* {@link Unenforced} version of {@link InsertableTreeFieldFromImplicitField}.
|
|
350
|
+
* @see {@link Input}
|
|
259
351
|
* @remarks
|
|
260
352
|
* Do note use this type directly: its only needed in the implementation of generic logic which define recursive schema, not when using recursive schema.
|
|
261
353
|
* @system @public
|
|
262
354
|
*/
|
|
263
355
|
export type InsertableTreeFieldFromImplicitFieldUnsafe<
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
356
|
+
TSchemaInput extends Unenforced<ImplicitFieldSchema>,
|
|
357
|
+
TSchema = UnionToIntersection<TSchemaInput>,
|
|
358
|
+
> = [TSchema] extends [FieldSchemaUnsafe<infer Kind, infer Types>]
|
|
359
|
+
? ApplyKindInput<InsertableTreeNodeFromImplicitAllowedTypesUnsafe<Types>, Kind, true>
|
|
360
|
+
: [TSchema] extends [ImplicitAllowedTypes]
|
|
361
|
+
? InsertableTreeNodeFromImplicitAllowedTypesUnsafe<TSchema>
|
|
362
|
+
: never;
|
|
268
363
|
|
|
269
364
|
/**
|
|
270
365
|
* {@link Unenforced} version of {@link FieldSchema}.
|
|
@@ -53,6 +53,7 @@ import { getUnhydratedContext } from "../createContext.js";
|
|
|
53
53
|
* @privateRemarks
|
|
54
54
|
* This can store all possible simple trees,
|
|
55
55
|
* but it can not store all possible trees representable by our internal representations like FlexTree and JsonableTree.
|
|
56
|
+
* @alpha
|
|
56
57
|
*/
|
|
57
58
|
export type VerboseTree<THandle = IFluidHandle> =
|
|
58
59
|
| VerboseTreeNode<THandle>
|
|
@@ -82,6 +83,7 @@ export type VerboseTree<THandle = IFluidHandle> =
|
|
|
82
83
|
* Unlike `JsonableTree`, leaf nodes are not boxed into node objects, and instead have their schema inferred from the value.
|
|
83
84
|
* Additionally, sequence fields can only occur on a node that has a single sequence field (with the empty key)
|
|
84
85
|
* replicating the behavior of simple-tree ArrayNodes.
|
|
86
|
+
* @alpha
|
|
85
87
|
*/
|
|
86
88
|
export interface VerboseTreeNode<THandle = IFluidHandle> {
|
|
87
89
|
/**
|
|
@@ -109,6 +111,7 @@ export interface VerboseTreeNode<THandle = IFluidHandle> {
|
|
|
109
111
|
|
|
110
112
|
/**
|
|
111
113
|
* Options for how to interpret a `VerboseTree<TCustom>` when schema information is available.
|
|
114
|
+
* @alpha
|
|
112
115
|
*/
|
|
113
116
|
export interface ParseOptions<TCustom> {
|
|
114
117
|
/**
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
normalizeAllowedTypes,
|
|
19
19
|
type ImplicitAllowedTypes,
|
|
20
20
|
type InsertableTreeNodeFromImplicitAllowedTypes,
|
|
21
|
+
type TreeLeafValue,
|
|
21
22
|
type TreeNodeFromImplicitAllowedTypes,
|
|
22
23
|
} from "./schemaTypes.js";
|
|
23
24
|
import {
|
|
@@ -34,6 +35,7 @@ import {
|
|
|
34
35
|
type TreeNodeSchemaBoth,
|
|
35
36
|
getSimpleNodeSchemaFromInnerNode,
|
|
36
37
|
getOrCreateInnerNode,
|
|
38
|
+
type TreeNodeSchemaClass,
|
|
37
39
|
} from "./core/index.js";
|
|
38
40
|
import { type InsertableContent, mapTreeFromNodeData } from "./toMapTree.js";
|
|
39
41
|
import { fail } from "../util/index.js";
|
|
@@ -45,6 +47,19 @@ import {
|
|
|
45
47
|
import { TreeNodeValid, type MostDerivedData } from "./treeNodeValid.js";
|
|
46
48
|
import { getUnhydratedContext } from "./createContext.js";
|
|
47
49
|
|
|
50
|
+
/**
|
|
51
|
+
* A covariant base type for {@link (TreeArrayNode:interface)}.
|
|
52
|
+
*
|
|
53
|
+
* This provides the readonly subset of TreeArrayNode functionality, and is used as the source interface for moves since that needs to be covariant.
|
|
54
|
+
* @privateRemarks
|
|
55
|
+
* Ideally this would just include `TreeNode, WithType<string, NodeKind.Array>` in the extends list but https://github.com/microsoft/TypeScript/issues/16936 prevents that from compiling.
|
|
56
|
+
* As a workaround around for this TypeScript limitation, the conflicting type intersection is wrapped in `Awaited` (which has no effect on the type in this case) which allows it to compile.
|
|
57
|
+
* @system @sealed @public
|
|
58
|
+
*/
|
|
59
|
+
export interface ReadonlyArrayNode<out T = TreeNode | TreeLeafValue>
|
|
60
|
+
extends ReadonlyArray<T>,
|
|
61
|
+
Awaited<TreeNode & WithType<string, NodeKind.Array>> {}
|
|
62
|
+
|
|
48
63
|
/**
|
|
49
64
|
* A generic array type, used to defined types like {@link (TreeArrayNode:interface)}.
|
|
50
65
|
*
|
|
@@ -53,9 +68,8 @@ import { getUnhydratedContext } from "./createContext.js";
|
|
|
53
68
|
*
|
|
54
69
|
* @system @sealed @public
|
|
55
70
|
*/
|
|
56
|
-
export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom>
|
|
57
|
-
extends
|
|
58
|
-
TreeNode {
|
|
71
|
+
export interface TreeArrayNodeBase<out T, in TNew, in TMoveFrom = ReadonlyArrayNode>
|
|
72
|
+
extends ReadonlyArrayNode<T> {
|
|
59
73
|
/**
|
|
60
74
|
* Inserts new item(s) at a specified location.
|
|
61
75
|
* @param index - The index at which to insert `value`.
|
|
@@ -366,8 +380,7 @@ export interface TreeArrayNode<
|
|
|
366
380
|
TAllowedTypes extends ImplicitAllowedTypes = ImplicitAllowedTypes,
|
|
367
381
|
> extends TreeArrayNodeBase<
|
|
368
382
|
TreeNodeFromImplicitAllowedTypes<TAllowedTypes>,
|
|
369
|
-
InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes
|
|
370
|
-
TreeArrayNode
|
|
383
|
+
InsertableTreeNodeFromImplicitAllowedTypes<TAllowedTypes>
|
|
371
384
|
> {}
|
|
372
385
|
|
|
373
386
|
/**
|
|
@@ -417,9 +430,7 @@ export class IterableTreeArrayContent<T> implements Iterable<T> {
|
|
|
417
430
|
/**
|
|
418
431
|
* Given a array node proxy, returns its underlying LazySequence field.
|
|
419
432
|
*/
|
|
420
|
-
function getSequenceField
|
|
421
|
-
arrayNode: TreeArrayNode<TSimpleType>,
|
|
422
|
-
): FlexTreeSequenceField {
|
|
433
|
+
function getSequenceField(arrayNode: ReadonlyArrayNode): FlexTreeSequenceField {
|
|
423
434
|
return getOrCreateInnerNode(arrayNode).getBoxed(EmptyKey) as FlexTreeSequenceField;
|
|
424
435
|
}
|
|
425
436
|
|
|
@@ -799,10 +810,15 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
799
810
|
protected abstract get simpleSchema(): T;
|
|
800
811
|
protected abstract get allowedTypes(): ReadonlySet<TreeNodeSchema>;
|
|
801
812
|
|
|
813
|
+
public abstract override get [typeSchemaSymbol](): TreeNodeSchemaClass<
|
|
814
|
+
string,
|
|
815
|
+
NodeKind.Array
|
|
816
|
+
>;
|
|
817
|
+
|
|
802
818
|
public constructor(
|
|
803
|
-
input
|
|
819
|
+
input?: Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>> | InternalTreeNode,
|
|
804
820
|
) {
|
|
805
|
-
super(input);
|
|
821
|
+
super(input ?? []);
|
|
806
822
|
}
|
|
807
823
|
|
|
808
824
|
#mapTreesFromFieldData(value: Insertable<T>): ExclusiveMapTree[] {
|
|
@@ -901,13 +917,13 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
901
917
|
}
|
|
902
918
|
field.editor.remove(removeStart, removeEnd - removeStart);
|
|
903
919
|
}
|
|
904
|
-
public moveToStart(sourceIndex: number, source?:
|
|
920
|
+
public moveToStart(sourceIndex: number, source?: ReadonlyArrayNode): void {
|
|
905
921
|
const sourceArray = source ?? this;
|
|
906
922
|
const sourceField = getSequenceField(sourceArray);
|
|
907
923
|
validateIndex(sourceIndex, sourceField, "moveToStart");
|
|
908
924
|
this.moveRangeToIndex(0, sourceIndex, sourceIndex + 1, source);
|
|
909
925
|
}
|
|
910
|
-
public moveToEnd(sourceIndex: number, source?:
|
|
926
|
+
public moveToEnd(sourceIndex: number, source?: ReadonlyArrayNode): void {
|
|
911
927
|
const sourceArray = source ?? this;
|
|
912
928
|
const sourceField = getSequenceField(sourceArray);
|
|
913
929
|
validateIndex(sourceIndex, sourceField, "moveToEnd");
|
|
@@ -916,7 +932,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
916
932
|
public moveToIndex(
|
|
917
933
|
destinationGap: number,
|
|
918
934
|
sourceIndex: number,
|
|
919
|
-
source?:
|
|
935
|
+
source?: ReadonlyArrayNode,
|
|
920
936
|
): void {
|
|
921
937
|
const sourceArray = source ?? this;
|
|
922
938
|
const sourceField = getSequenceField(sourceArray);
|
|
@@ -928,7 +944,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
928
944
|
public moveRangeToStart(
|
|
929
945
|
sourceStart: number,
|
|
930
946
|
sourceEnd: number,
|
|
931
|
-
source?:
|
|
947
|
+
source?: ReadonlyArrayNode,
|
|
932
948
|
): void {
|
|
933
949
|
validateIndexRange(
|
|
934
950
|
sourceStart,
|
|
@@ -938,7 +954,11 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
938
954
|
);
|
|
939
955
|
this.moveRangeToIndex(0, sourceStart, sourceEnd, source);
|
|
940
956
|
}
|
|
941
|
-
public moveRangeToEnd(
|
|
957
|
+
public moveRangeToEnd(
|
|
958
|
+
sourceStart: number,
|
|
959
|
+
sourceEnd: number,
|
|
960
|
+
source?: ReadonlyArrayNode,
|
|
961
|
+
): void {
|
|
942
962
|
validateIndexRange(
|
|
943
963
|
sourceStart,
|
|
944
964
|
sourceEnd,
|
|
@@ -951,7 +971,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
951
971
|
destinationGap: number,
|
|
952
972
|
sourceStart: number,
|
|
953
973
|
sourceEnd: number,
|
|
954
|
-
source?:
|
|
974
|
+
source?: ReadonlyArrayNode,
|
|
955
975
|
): void {
|
|
956
976
|
const destinationField = getSequenceField(this);
|
|
957
977
|
const destinationSchema = this.allowedTypes;
|
|
@@ -1057,7 +1077,8 @@ export function arraySchema<
|
|
|
1057
1077
|
TreeArrayNode<T> & WithType<TName, NodeKind.Array>,
|
|
1058
1078
|
Iterable<InsertableTreeNodeFromImplicitAllowedTypes<T>>,
|
|
1059
1079
|
ImplicitlyConstructable,
|
|
1060
|
-
T
|
|
1080
|
+
T,
|
|
1081
|
+
undefined
|
|
1061
1082
|
>;
|
|
1062
1083
|
|
|
1063
1084
|
const lazyChildTypes = new Lazy(() => normalizeAllowedTypes(info));
|
|
@@ -31,7 +31,7 @@ export function getOrCreateNodeFromInnerNode(flexNode: InnerNode): TreeNode | Tr
|
|
|
31
31
|
const node = flexNode as unknown as InternalTreeNode;
|
|
32
32
|
// eslint-disable-next-line unicorn/prefer-ternary
|
|
33
33
|
if (typeof classSchema === "function") {
|
|
34
|
-
return new classSchema(node)
|
|
34
|
+
return new classSchema(node);
|
|
35
35
|
} else {
|
|
36
36
|
return (classSchema as { create(data: FlexTreeNode): TreeValue }).create(flexNode);
|
|
37
37
|
}
|