@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
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type { TreeLeafValue } from "../schemaTypes.js";
|
|
7
|
+
import type { InternalTreeNode, TreeNode, Unhydrated } from "./types.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
* Schema for a
|
|
10
|
+
* Schema for a {@link TreeNode} or {@link TreeLeafValue}.
|
|
11
|
+
*
|
|
10
12
|
* @typeParam Name - The full (including scope) name/identifier for the schema.
|
|
11
13
|
* @typeParam Kind - Which kind of node this schema is for.
|
|
12
14
|
* @typeParam TNode - API for nodes that use this schema.
|
|
@@ -14,17 +16,21 @@ import type { InternalTreeNode, Unhydrated } from "./types.js";
|
|
|
14
16
|
* @typeParam Info - Data used when defining this schema.
|
|
15
17
|
* @remarks
|
|
16
18
|
* Captures the schema both as runtime data and compile time type information.
|
|
19
|
+
* Use {@link SchemaFactory} to define schema.
|
|
20
|
+
* Use `Tree.schema(value)` to lookup the schema for a {@link TreeNode} or {@link TreeLeafValue}.
|
|
17
21
|
* @sealed @public
|
|
18
22
|
*/
|
|
19
23
|
export type TreeNodeSchema<
|
|
20
24
|
Name extends string = string,
|
|
21
25
|
Kind extends NodeKind = NodeKind,
|
|
22
|
-
TNode =
|
|
26
|
+
TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
|
|
23
27
|
TBuild = never,
|
|
24
28
|
ImplicitlyConstructable extends boolean = boolean,
|
|
25
29
|
Info = unknown,
|
|
26
30
|
> =
|
|
27
|
-
|
|
|
31
|
+
| (TNode extends TreeNode
|
|
32
|
+
? TreeNodeSchemaClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>
|
|
33
|
+
: never)
|
|
28
34
|
| TreeNodeSchemaNonClass<Name, Kind, TNode, TBuild, ImplicitlyConstructable, Info>;
|
|
29
35
|
|
|
30
36
|
/**
|
|
@@ -35,16 +41,30 @@ export type TreeNodeSchema<
|
|
|
35
41
|
* Non-class based schema can have issues with recursive types due to https://github.com/microsoft/TypeScript/issues/55832.
|
|
36
42
|
* @system @sealed @public
|
|
37
43
|
*/
|
|
38
|
-
export
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
44
|
+
export type TreeNodeSchemaNonClass<
|
|
45
|
+
Name extends string = string,
|
|
46
|
+
Kind extends NodeKind = NodeKind,
|
|
47
|
+
TNode extends TreeNode | TreeLeafValue = TreeNode | TreeLeafValue,
|
|
48
|
+
TInsertable = never,
|
|
49
|
+
ImplicitlyConstructable extends boolean = boolean,
|
|
50
|
+
Info = unknown,
|
|
51
|
+
TConstructorExtra = never,
|
|
52
|
+
> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> &
|
|
53
|
+
(undefined extends TConstructorExtra
|
|
54
|
+
? {
|
|
55
|
+
/**
|
|
56
|
+
* Constructs an {@link Unhydrated} node with this schema.
|
|
57
|
+
* @sealed
|
|
58
|
+
*/
|
|
59
|
+
create(data?: TInsertable | TConstructorExtra): TNode;
|
|
60
|
+
}
|
|
61
|
+
: {
|
|
62
|
+
/**
|
|
63
|
+
* Constructs an {@link Unhydrated} node with this schema.
|
|
64
|
+
* @sealed
|
|
65
|
+
*/
|
|
66
|
+
create(data: TInsertable | TConstructorExtra): TNode;
|
|
67
|
+
});
|
|
48
68
|
|
|
49
69
|
/**
|
|
50
70
|
* Tree node schema which is implemented using a class.
|
|
@@ -91,23 +111,40 @@ export interface TreeNodeSchemaNonClass<
|
|
|
91
111
|
* ```
|
|
92
112
|
* @sealed @public
|
|
93
113
|
*/
|
|
94
|
-
export
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
114
|
+
export type TreeNodeSchemaClass<
|
|
115
|
+
Name extends string = string,
|
|
116
|
+
Kind extends NodeKind = NodeKind,
|
|
117
|
+
TNode extends TreeNode = TreeNode,
|
|
118
|
+
TInsertable = never,
|
|
119
|
+
ImplicitlyConstructable extends boolean = boolean,
|
|
120
|
+
Info = unknown,
|
|
121
|
+
TConstructorExtra = never,
|
|
122
|
+
> = TreeNodeSchemaCore<Name, Kind, ImplicitlyConstructable, Info, TInsertable> &
|
|
123
|
+
(undefined extends TConstructorExtra
|
|
124
|
+
? {
|
|
125
|
+
/**
|
|
126
|
+
* Constructs an {@link Unhydrated} node with this schema.
|
|
127
|
+
* @remarks
|
|
128
|
+
* This constructor is also used internally to construct hydrated nodes with a different parameter type.
|
|
129
|
+
* Therefore, overriding this constructor with different argument types is not type-safe and is not supported.
|
|
130
|
+
* @sealed
|
|
131
|
+
*/
|
|
132
|
+
// The approach suggested by the linter here is more concise, but ir break intellisense for the constructor.
|
|
133
|
+
// eslint-disable-next-line @typescript-eslint/prefer-function-type
|
|
134
|
+
new (data?: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
|
|
135
|
+
}
|
|
136
|
+
: {
|
|
137
|
+
/**
|
|
138
|
+
* Constructs an {@link Unhydrated} node with this schema.
|
|
139
|
+
* @remarks
|
|
140
|
+
* This constructor is also used internally to construct hydrated nodes with a different parameter type.
|
|
141
|
+
* Therefore, overriding this constructor with different argument types is not type-safe and is not supported.
|
|
142
|
+
* @sealed
|
|
143
|
+
*/
|
|
144
|
+
// The approach suggested by the linter here is more concise, but ir break intellisense for the constructor.
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/prefer-function-type
|
|
146
|
+
new (data: TInsertable | InternalTreeNode | TConstructorExtra): Unhydrated<TNode>;
|
|
147
|
+
});
|
|
111
148
|
|
|
112
149
|
/**
|
|
113
150
|
* Internal helper for utilities that return schema which can be used in class and non class formats depending on the API exposing it.
|
|
@@ -115,12 +152,29 @@ export interface TreeNodeSchemaClass<
|
|
|
115
152
|
export type TreeNodeSchemaBoth<
|
|
116
153
|
Name extends string = string,
|
|
117
154
|
Kind extends NodeKind = NodeKind,
|
|
118
|
-
TNode =
|
|
155
|
+
TNode extends TreeNode = TreeNode,
|
|
119
156
|
TInsertable = never,
|
|
120
157
|
ImplicitlyConstructable extends boolean = boolean,
|
|
121
158
|
Info = unknown,
|
|
122
|
-
|
|
123
|
-
|
|
159
|
+
TConstructorExtra = never,
|
|
160
|
+
> = TreeNodeSchemaClass<
|
|
161
|
+
Name,
|
|
162
|
+
Kind,
|
|
163
|
+
TNode,
|
|
164
|
+
TInsertable,
|
|
165
|
+
ImplicitlyConstructable,
|
|
166
|
+
Info,
|
|
167
|
+
TConstructorExtra
|
|
168
|
+
> &
|
|
169
|
+
TreeNodeSchemaNonClass<
|
|
170
|
+
Name,
|
|
171
|
+
Kind,
|
|
172
|
+
TNode,
|
|
173
|
+
TInsertable,
|
|
174
|
+
ImplicitlyConstructable,
|
|
175
|
+
Info,
|
|
176
|
+
TConstructorExtra
|
|
177
|
+
>;
|
|
124
178
|
|
|
125
179
|
/**
|
|
126
180
|
* Data common to all tree node schema.
|
|
@@ -133,6 +187,7 @@ export interface TreeNodeSchemaCore<
|
|
|
133
187
|
out Kind extends NodeKind,
|
|
134
188
|
out ImplicitlyConstructable extends boolean,
|
|
135
189
|
out Info = unknown,
|
|
190
|
+
out TInsertable = never,
|
|
136
191
|
> {
|
|
137
192
|
/**
|
|
138
193
|
* Unique (within a document's schema) identifier used to associate nodes with their schema.
|
|
@@ -188,6 +243,24 @@ export interface TreeNodeSchemaCore<
|
|
|
188
243
|
* @system
|
|
189
244
|
*/
|
|
190
245
|
readonly childTypes: ReadonlySet<TreeNodeSchema>;
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Constructs an instance of this node type.
|
|
249
|
+
* @remarks
|
|
250
|
+
* Due to TypeScript limitations, the return type of this method can not be very specific.
|
|
251
|
+
* For {@link TreeNodeSchemaClass} prefer using the constructor directly for better typing.
|
|
252
|
+
* For {@link TreeNodeSchemaNonClass} use `create`.
|
|
253
|
+
*
|
|
254
|
+
* @privateRemarks
|
|
255
|
+
* This method signature provides a way to infer `TInsertable` without relying on the constructor, and to construct nodes from schema of unknown kind.
|
|
256
|
+
* This makes customizations of the constructor not impact the typing of insertable content, allowing customization of the constructor,
|
|
257
|
+
* as long as doing so only adds additional supported cases.
|
|
258
|
+
*
|
|
259
|
+
* This cannot be required to return `TNode`:
|
|
260
|
+
* doing so breaks sub-classing of schema since they don't overload this method with a more specific return type.
|
|
261
|
+
* @sealed @system
|
|
262
|
+
*/
|
|
263
|
+
createFromInsertable(data: TInsertable): Unhydrated<TreeNode | TreeLeafValue>;
|
|
191
264
|
}
|
|
192
265
|
|
|
193
266
|
/**
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
type FieldKindIdentifier,
|
|
16
16
|
type FieldUpPath,
|
|
17
17
|
forbiddenFieldKindIdentifier,
|
|
18
|
+
type ITreeCursorSynchronous,
|
|
18
19
|
type MapTree,
|
|
19
20
|
type SchemaPolicy,
|
|
20
21
|
type TreeNodeSchemaIdentifier,
|
|
@@ -39,6 +40,7 @@ import {
|
|
|
39
40
|
type FlexFieldKind,
|
|
40
41
|
FieldKinds,
|
|
41
42
|
type SequenceFieldEditBuilder,
|
|
43
|
+
cursorForMapTreeNode,
|
|
42
44
|
} from "../../feature-libraries/index.js";
|
|
43
45
|
import type { Context } from "./context.js";
|
|
44
46
|
import { createEmitter, type Listenable } from "../../events/index.js";
|
|
@@ -168,6 +170,10 @@ export class UnhydratedFlexTreeNode implements UnhydratedFlexTreeNode {
|
|
|
168
170
|
return this.location;
|
|
169
171
|
}
|
|
170
172
|
|
|
173
|
+
public borrowCursor(): ITreeCursorSynchronous {
|
|
174
|
+
return cursorForMapTreeNode(this.mapTree);
|
|
175
|
+
}
|
|
176
|
+
|
|
171
177
|
public tryGetField(key: FieldKey): UnhydratedFlexTreeField | undefined {
|
|
172
178
|
const field = this.mapTree.fields.get(key);
|
|
173
179
|
// Only return the field if it is not empty, in order to fulfill the contract of `tryGetField`.
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import type { NodeKind, TreeNodeSchemaClass } from "./treeNodeSchema.js";
|
|
7
|
+
import type { TreeNode } from "./types.js";
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* The type of a {@link TreeNode}.
|
|
@@ -87,5 +88,5 @@ export interface WithType<
|
|
|
87
88
|
/**
|
|
88
89
|
* Type symbol, marking a type in a way to increase type safety via strong type checking.
|
|
89
90
|
*/
|
|
90
|
-
get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind,
|
|
91
|
+
get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, TreeNode, never, boolean, TInfo>;
|
|
91
92
|
}
|
|
@@ -7,7 +7,7 @@ import { defaultSchemaPolicy } from "../feature-libraries/index.js";
|
|
|
7
7
|
import { getOrCreate } from "../util/index.js";
|
|
8
8
|
import { Context, UnhydratedContext } from "./core/index.js";
|
|
9
9
|
import { normalizeFieldSchema, type ImplicitFieldSchema } from "./schemaTypes.js";
|
|
10
|
-
import { toStoredSchema } from "./
|
|
10
|
+
import { toStoredSchema } from "./toStoredSchema.js";
|
|
11
11
|
|
|
12
12
|
const contextCache: WeakMap<ImplicitFieldSchema, Context> = new WeakMap();
|
|
13
13
|
|
package/src/simple-tree/index.ts
CHANGED
|
@@ -23,6 +23,7 @@ export {
|
|
|
23
23
|
HydratedContext,
|
|
24
24
|
SimpleContextSlot,
|
|
25
25
|
getOrCreateInnerNode,
|
|
26
|
+
getKernel,
|
|
26
27
|
} from "./core/index.js";
|
|
27
28
|
export {
|
|
28
29
|
type ITree,
|
|
@@ -40,7 +41,6 @@ export {
|
|
|
40
41
|
adaptEnum,
|
|
41
42
|
enumFromStrings,
|
|
42
43
|
singletonSchema,
|
|
43
|
-
typedObjectValues,
|
|
44
44
|
test_RecursiveObject,
|
|
45
45
|
test_RecursiveObject_base,
|
|
46
46
|
test_RecursiveObjectPojoMode,
|
|
@@ -92,6 +92,21 @@ export {
|
|
|
92
92
|
type NodeBuilderDataUnsafe,
|
|
93
93
|
type NodeFromSchemaUnsafe,
|
|
94
94
|
type ReadonlyMapInlined,
|
|
95
|
+
type TreeNodeSchemaClassUnsafe,
|
|
96
|
+
type TreeNodeSchemaUnsafe,
|
|
97
|
+
type AllowedTypesUnsafe,
|
|
98
|
+
type TreeNodeSchemaNonClassUnsafe,
|
|
99
|
+
type InsertableTreeNodeFromAllowedTypesUnsafe,
|
|
100
|
+
type TreeViewAlpha,
|
|
101
|
+
type TreeBranch,
|
|
102
|
+
type TreeBranchEvents,
|
|
103
|
+
tryGetSchema,
|
|
104
|
+
applySchemaToParserOptions,
|
|
105
|
+
cursorFromVerbose,
|
|
106
|
+
verboseFromCursor,
|
|
107
|
+
conciseFromCursor,
|
|
108
|
+
createFromCursor,
|
|
109
|
+
asTreeViewAlpha,
|
|
95
110
|
} from "./api/index.js";
|
|
96
111
|
export {
|
|
97
112
|
type NodeFromSchema,
|
|
@@ -111,8 +126,18 @@ export {
|
|
|
111
126
|
type DefaultProvider,
|
|
112
127
|
type FieldProps,
|
|
113
128
|
normalizeFieldSchema,
|
|
129
|
+
areFieldSchemaEqual,
|
|
130
|
+
areImplicitFieldSchemaEqual,
|
|
114
131
|
type ApplyKind,
|
|
115
132
|
type FieldSchemaMetadata,
|
|
133
|
+
type InsertableField,
|
|
134
|
+
type Insertable,
|
|
135
|
+
type UnsafeUnknownSchema,
|
|
136
|
+
type ApplyKindInput,
|
|
137
|
+
type InsertableTreeNodeFromAllowedTypes,
|
|
138
|
+
type Input,
|
|
139
|
+
type ReadableField,
|
|
140
|
+
type ReadSchema,
|
|
116
141
|
} from "./schemaTypes.js";
|
|
117
142
|
export {
|
|
118
143
|
getTreeNodeForField,
|
|
@@ -122,6 +147,7 @@ export {
|
|
|
122
147
|
TreeArrayNode,
|
|
123
148
|
IterableTreeArrayContent,
|
|
124
149
|
type TreeArrayNodeBase,
|
|
150
|
+
type ReadonlyArrayNode,
|
|
125
151
|
} from "./arrayNode.js";
|
|
126
152
|
export {
|
|
127
153
|
type FieldHasDefault,
|
|
@@ -131,8 +157,13 @@ export {
|
|
|
131
157
|
setField,
|
|
132
158
|
} from "./objectNode.js";
|
|
133
159
|
export type { TreeMapNode, MapNodeInsertableData } from "./mapNode.js";
|
|
134
|
-
export {
|
|
135
|
-
|
|
160
|
+
export {
|
|
161
|
+
mapTreeFromNodeData,
|
|
162
|
+
type InsertableContent,
|
|
163
|
+
type FactoryContent,
|
|
164
|
+
type FactoryContentObject,
|
|
165
|
+
} from "./toMapTree.js";
|
|
166
|
+
export { toStoredSchema, getStoredSchema } from "./toStoredSchema.js";
|
|
136
167
|
export {
|
|
137
168
|
numberSchema,
|
|
138
169
|
stringSchema,
|
|
@@ -40,6 +40,10 @@ export class LeafNodeSchema<Name extends string, const T extends ValueSchema>
|
|
|
40
40
|
return data;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
public createFromInsertable(data: TreeValue<T>): TreeValue<T> {
|
|
44
|
+
return data;
|
|
45
|
+
}
|
|
46
|
+
|
|
43
47
|
public constructor(name: Name, t: T) {
|
|
44
48
|
this.identifier = name;
|
|
45
49
|
this.info = t;
|
|
@@ -56,7 +60,8 @@ function makeLeaf<Name extends string, const T extends ValueSchema>(
|
|
|
56
60
|
`com.fluidframework.leaf.${Name}`,
|
|
57
61
|
NodeKind.Leaf,
|
|
58
62
|
TreeValue<T>,
|
|
59
|
-
TreeValue<T
|
|
63
|
+
TreeValue<T>,
|
|
64
|
+
true
|
|
60
65
|
> {
|
|
61
66
|
// Names in this domain follow https://en.wikipedia.org/wiki/Reverse_domain_name_notation
|
|
62
67
|
return new LeafNodeSchema(`com.fluidframework.leaf.${name}`, t);
|
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
type Context,
|
|
34
34
|
UnhydratedFlexTreeNode,
|
|
35
35
|
getOrCreateInnerNode,
|
|
36
|
+
type InternalTreeNode,
|
|
36
37
|
} from "./core/index.js";
|
|
37
38
|
import {
|
|
38
39
|
mapTreeFromNodeData,
|
|
@@ -128,7 +129,10 @@ export interface TreeMapNode<T extends ImplicitAllowedTypes = ImplicitAllowedTyp
|
|
|
128
129
|
): void;
|
|
129
130
|
}
|
|
130
131
|
|
|
131
|
-
|
|
132
|
+
// TreeMapNode is invariant over schema type, so for this handler to work with all schema, the only possible type for the schema is `any`.
|
|
133
|
+
// This is not ideal, but no alternatives are possible.
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
135
|
+
const handler: ProxyHandler<TreeMapNode<any>> = {
|
|
132
136
|
getPrototypeOf: () => {
|
|
133
137
|
return Map.prototype;
|
|
134
138
|
},
|
|
@@ -139,6 +143,10 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
|
|
|
139
143
|
> {
|
|
140
144
|
public static readonly kind = NodeKind.Map;
|
|
141
145
|
|
|
146
|
+
public constructor(input?: InternalTreeNode | MapNodeInsertableData<T> | undefined) {
|
|
147
|
+
super(input ?? []);
|
|
148
|
+
}
|
|
149
|
+
|
|
142
150
|
public [Symbol.iterator](): IterableIterator<[string, TreeNodeFromImplicitAllowedTypes<T>]> {
|
|
143
151
|
return this.entries();
|
|
144
152
|
}
|
|
@@ -177,7 +185,7 @@ abstract class CustomMapNodeBase<const T extends ImplicitAllowedTypes> extends T
|
|
|
177
185
|
const node = this.innerNode;
|
|
178
186
|
return node.keys();
|
|
179
187
|
}
|
|
180
|
-
public set(key: string, value: InsertableTreeNodeFromImplicitAllowedTypes<T>):
|
|
188
|
+
public set(key: string, value: InsertableTreeNodeFromImplicitAllowedTypes<T>): this {
|
|
181
189
|
const kernel = getKernel(this);
|
|
182
190
|
const node = this.innerNode;
|
|
183
191
|
const mapTree = mapTreeFromNodeData(
|
|
@@ -244,7 +252,7 @@ export function mapSchema<
|
|
|
244
252
|
flexNode: FlexTreeNode,
|
|
245
253
|
): TreeNodeValid<T2> {
|
|
246
254
|
if (useMapPrototype) {
|
|
247
|
-
return new Proxy<Schema>(instance as Schema, handler);
|
|
255
|
+
return new Proxy<Schema>(instance as Schema, handler as ProxyHandler<Schema>);
|
|
248
256
|
}
|
|
249
257
|
return instance;
|
|
250
258
|
}
|
|
@@ -290,7 +298,8 @@ export function mapSchema<
|
|
|
290
298
|
TreeMapNode<T> & WithType<TName, NodeKind.Map>,
|
|
291
299
|
MapNodeInsertableData<T>,
|
|
292
300
|
ImplicitlyConstructable,
|
|
293
|
-
T
|
|
301
|
+
T,
|
|
302
|
+
undefined
|
|
294
303
|
> = Schema;
|
|
295
304
|
return schemaErased;
|
|
296
305
|
}
|
|
@@ -98,6 +98,8 @@ export type FieldHasDefault<T extends ImplicitFieldSchema> = T extends FieldSche
|
|
|
98
98
|
*
|
|
99
99
|
* 3. Union of 1 and 2.
|
|
100
100
|
*
|
|
101
|
+
* @see {@link Input}
|
|
102
|
+
*
|
|
101
103
|
* @privateRemarks TODO: consider separating these cases into different types.
|
|
102
104
|
*
|
|
103
105
|
* @system @public
|
|
@@ -107,13 +109,13 @@ export type InsertableObjectFromSchemaRecord<
|
|
|
107
109
|
> = FlattenKeys<
|
|
108
110
|
{
|
|
109
111
|
readonly [Property in keyof T]?: InsertableTreeFieldFromImplicitField<
|
|
110
|
-
T[Property
|
|
112
|
+
T[Property & string]
|
|
111
113
|
>;
|
|
112
114
|
} & {
|
|
113
115
|
// Field does not have a known default, make it required:
|
|
114
|
-
readonly [Property in keyof T as FieldHasDefault<T[Property
|
|
116
|
+
readonly [Property in keyof T as FieldHasDefault<T[Property & string]> extends false
|
|
115
117
|
? Property
|
|
116
|
-
: never]: InsertableTreeFieldFromImplicitField<T[Property
|
|
118
|
+
: never]: InsertableTreeFieldFromImplicitField<T[Property & string]>;
|
|
117
119
|
}
|
|
118
120
|
>;
|
|
119
121
|
|