@fluidframework/tree 2.2.0 → 2.3.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/.dependency-cruiser-known-violations.json +28 -40
- package/.vscode/Tree.code-workspace +0 -2
- package/CHANGELOG.md +92 -0
- package/README.md +6 -0
- package/alpha.d.ts +11 -0
- package/api-extractor/api-extractor-lint-alpha.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-alpha.esm.json +5 -0
- package/api-extractor/api-extractor-lint-legacy.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-legacy.esm.json +5 -0
- package/api-extractor/api-extractor.current.json +8 -0
- package/api-extractor/api-extractor.legacy.json +4 -0
- package/api-extractor.json +1 -1
- package/api-report/tree.alpha.api.md +21 -6
- package/api-report/tree.beta.api.md +21 -6
- package/api-report/tree.legacy.alpha.api.md +562 -0
- package/api-report/tree.legacy.public.api.md +559 -0
- package/api-report/tree.public.api.md +6 -6
- package/dist/alpha.d.ts +102 -0
- package/dist/beta.d.ts +6 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +2 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/{revertible/revertible.d.ts → revertible.d.ts} +12 -0
- package/dist/core/revertible.d.ts.map +1 -0
- package/dist/core/revertible.js.map +1 -0
- package/dist/core/schema-stored/format.d.ts +3 -3
- package/dist/core/schema-stored/format.js +1 -1
- package/dist/core/schema-stored/format.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +2 -7
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +4 -6
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.d.ts +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.d.ts +4 -6
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +15 -1
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +0 -1
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +1 -0
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts +7 -2
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/events/emitter.d.ts +127 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/{events.js → emitter.js} +49 -28
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +4 -5
- package/dist/events/index.js.map +1 -1
- package/dist/events/interop.d.ts +36 -0
- package/dist/events/interop.d.ts.map +1 -0
- package/dist/{core/revertible/index.d.ts → events/interop.js} +3 -2
- package/dist/events/interop.js.map +1 -0
- package/dist/events/listeners.d.ts +65 -0
- package/dist/events/listeners.d.ts.map +1 -0
- package/{lib/core/revertible/index.d.ts → dist/events/listeners.js} +3 -2
- package/dist/events/listeners.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +25 -7
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +36 -15
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts +4 -2
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +12 -5
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +15 -2
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +28 -2
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +5 -4
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/flex-map-tree/index.d.ts +1 -1
- package/dist/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-map-tree/index.js +2 -1
- package/dist/feature-libraries/flex-map-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +35 -35
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +82 -115
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +30 -14
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +10 -7
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +57 -281
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +15 -32
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +2 -3
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js +1 -3
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +3 -3
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.js +2 -10
- package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +26 -29
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +11 -17
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +6 -34
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +23 -159
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/unboxed.d.ts +4 -16
- package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/unboxed.js +7 -41
- package/dist/feature-libraries/flex-tree/unboxed.js.map +1 -1
- package/dist/feature-libraries/flex-tree/utilities.d.ts +2 -2
- package/dist/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/utilities.js +3 -6
- package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +4 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +3 -5
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +5 -13
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.js +3 -6
- package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/discrepancies.js +3 -13
- package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +4 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +2 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +12 -5
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +6 -6
- package/dist/feature-libraries/schema-index/format.d.ts +3 -3
- package/dist/feature-libraries/storedToViewSchema.d.ts.map +1 -1
- package/dist/feature-libraries/storedToViewSchema.js +2 -4
- package/dist/feature-libraries/storedToViewSchema.js.map +1 -1
- package/dist/feature-libraries/typed-schema/flexList.d.ts +3 -3
- package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
- package/dist/feature-libraries/typed-schema/index.d.ts +2 -2
- package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/index.js +2 -2
- package/dist/feature-libraries/typed-schema/index.js.map +1 -1
- package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/schemaCollection.js +8 -10
- package/dist/feature-libraries/typed-schema/schemaCollection.js.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +17 -48
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js +5 -37
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/dist/feature-libraries/typed-schema/view.d.ts +4 -6
- package/dist/feature-libraries/typed-schema/view.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/view.js +5 -4
- package/dist/feature-libraries/typed-schema/view.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +83 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.d.ts +53 -0
- package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -0
- package/dist/shared-tree/{treeView.js → checkoutFlexTreeView.js} +28 -6
- package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -0
- 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 -2
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +15 -4
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +7 -8
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +9 -4
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +25 -12
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +2 -2
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.d.ts +3 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js +6 -2
- package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts +3 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +3 -2
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts +2 -1
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.js +2 -2
- package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/dist/shared-tree/treeApi.d.ts +1 -3
- package/dist/shared-tree/treeApi.d.ts.map +1 -1
- package/dist/shared-tree/treeApi.js +6 -4
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +2 -13
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +17 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.js +1 -1
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +1 -1
- package/dist/simple-tree/api/create.js.map +1 -1
- package/{lib/simple-tree → dist/simple-tree/api}/getJsonSchema.d.ts +1 -1
- package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -0
- package/dist/simple-tree/{getJsonSchema.js → api/getJsonSchema.js} +1 -1
- package/dist/simple-tree/api/getJsonSchema.js.map +1 -0
- package/{lib/simple-tree → dist/simple-tree/api}/getSimpleSchema.d.ts +1 -1
- package/dist/simple-tree/api/getSimpleSchema.d.ts.map +1 -0
- package/dist/simple-tree/{getSimpleSchema.js → api/getSimpleSchema.js} +1 -1
- package/dist/simple-tree/api/getSimpleSchema.js.map +1 -0
- package/dist/simple-tree/api/index.d.ts +5 -0
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +7 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/{lib/simple-tree → dist/simple-tree/api}/jsonSchema.d.ts +1 -1
- package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -0
- package/dist/simple-tree/api/jsonSchema.js.map +1 -0
- package/dist/simple-tree/api/schemaFactory.d.ts +45 -14
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +43 -12
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/{simpleSchema.d.ts → api/simpleSchema.d.ts} +4 -4
- package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -0
- package/dist/simple-tree/api/simpleSchema.js.map +1 -0
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -0
- package/dist/simple-tree/{simpleSchemaToJsonSchema.js → api/simpleSchemaToJsonSchema.js} +4 -4
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -0
- package/dist/simple-tree/api/tree.d.ts +1 -21
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js +3 -38
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeApiBeta.d.ts +79 -0
- package/dist/simple-tree/api/treeApiBeta.d.ts.map +1 -0
- package/dist/simple-tree/api/treeApiBeta.js +26 -0
- package/dist/simple-tree/api/treeApiBeta.js.map +1 -0
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +51 -21
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +2 -2
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/{viewSchemaToSimpleSchema.d.ts → api/viewSchemaToSimpleSchema.d.ts} +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -0
- package/dist/simple-tree/{viewSchemaToSimpleSchema.js → api/viewSchemaToSimpleSchema.js} +4 -4
- package/{lib/simple-tree → dist/simple-tree/api}/viewSchemaToSimpleSchema.js.map +1 -1
- package/dist/simple-tree/arrayNode.d.ts +2 -2
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +33 -38
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +2 -2
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +4 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/schemaCaching.d.ts +5 -0
- package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -1
- package/dist/simple-tree/core/schemaCaching.js +10 -1
- package/dist/simple-tree/core/schemaCaching.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +78 -7
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +219 -30
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/types.d.ts +23 -8
- 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/withType.d.ts +3 -2
- 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/index.d.ts +7 -9
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +15 -6
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +7 -9
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +13 -11
- 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 +38 -29
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +9 -7
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +37 -31
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/proxies.d.ts +1 -14
- package/dist/simple-tree/proxies.d.ts.map +1 -1
- package/dist/simple-tree/proxies.js +12 -15
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/proxyBinding.d.ts +2 -62
- package/dist/simple-tree/proxyBinding.d.ts.map +1 -1
- package/dist/simple-tree/proxyBinding.js +8 -181
- package/dist/simple-tree/proxyBinding.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +7 -7
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +4 -4
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.d.ts +11 -1
- package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/dist/simple-tree/toFlexSchema.js +54 -31
- package/dist/simple-tree/toFlexSchema.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts +25 -37
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js +53 -16
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +7 -10
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/typesUnsafe.d.ts +13 -13
- package/dist/simple-tree/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/walkSchema.d.ts +26 -0
- package/dist/simple-tree/walkSchema.d.ts.map +1 -0
- package/dist/simple-tree/walkSchema.js +49 -0
- package/dist/simple-tree/walkSchema.js.map +1 -0
- package/dist/treeFactory.d.ts +2 -1
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +2 -1
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/typeUtils.d.ts +2 -2
- package/dist/util/typeUtils.js.map +1 -1
- package/legacy.d.ts +11 -0
- package/lib/alpha.d.ts +102 -0
- package/lib/beta.d.ts +6 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/{revertible/revertible.d.ts → revertible.d.ts} +12 -0
- package/lib/core/revertible.d.ts.map +1 -0
- package/lib/core/revertible.js.map +1 -0
- package/lib/core/schema-stored/format.d.ts +3 -3
- package/lib/core/schema-stored/format.js +1 -1
- package/lib/core/schema-stored/format.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +2 -7
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +4 -6
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.d.ts +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.d.ts +4 -6
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +15 -1
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +0 -1
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +1 -0
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts +7 -2
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/events/emitter.d.ts +127 -0
- package/lib/events/emitter.d.ts.map +1 -0
- package/lib/events/{events.js → emitter.js} +49 -27
- package/lib/events/emitter.js.map +1 -0
- package/lib/events/index.d.ts +2 -1
- package/lib/events/index.d.ts.map +1 -1
- package/lib/events/index.js +1 -1
- package/lib/events/index.js.map +1 -1
- package/lib/events/interop.d.ts +36 -0
- package/lib/events/interop.d.ts.map +1 -0
- package/{src/core/revertible/index.ts → lib/events/interop.js} +2 -2
- package/lib/events/interop.js.map +1 -0
- package/lib/events/listeners.d.ts +65 -0
- package/lib/events/listeners.d.ts.map +1 -0
- package/lib/{core/revertible/index.js → events/listeners.js} +2 -2
- package/lib/events/listeners.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +25 -7
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +37 -16
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts +4 -2
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +12 -5
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts +15 -2
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +28 -2
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +5 -4
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/flex-map-tree/index.d.ts +1 -1
- package/lib/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-map-tree/index.js +1 -1
- package/lib/feature-libraries/flex-map-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +35 -35
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +83 -116
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +30 -14
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +10 -7
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +57 -281
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +15 -31
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +2 -3
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js +2 -2
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +3 -3
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.js +2 -10
- package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +26 -29
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +11 -16
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +6 -34
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +24 -156
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/unboxed.d.ts +4 -16
- package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/unboxed.js +5 -37
- package/lib/feature-libraries/flex-tree/unboxed.js.map +1 -1
- package/lib/feature-libraries/flex-tree/utilities.d.ts +2 -2
- package/lib/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/utilities.js +3 -6
- package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +4 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +3 -5
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +5 -5
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.js +3 -6
- package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/discrepancies.js +3 -13
- package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +4 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +2 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +12 -5
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +6 -6
- package/lib/feature-libraries/schema-index/format.d.ts +3 -3
- package/lib/feature-libraries/storedToViewSchema.d.ts.map +1 -1
- package/lib/feature-libraries/storedToViewSchema.js +3 -5
- package/lib/feature-libraries/storedToViewSchema.js.map +1 -1
- package/lib/feature-libraries/typed-schema/flexList.d.ts +3 -3
- package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
- package/lib/feature-libraries/typed-schema/index.d.ts +2 -2
- package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/index.js +2 -2
- package/lib/feature-libraries/typed-schema/index.js.map +1 -1
- package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/schemaCollection.js +9 -11
- package/lib/feature-libraries/typed-schema/schemaCollection.js.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +17 -48
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js +5 -36
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/lib/feature-libraries/typed-schema/view.d.ts +4 -6
- package/lib/feature-libraries/typed-schema/view.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/view.js +5 -4
- package/lib/feature-libraries/typed-schema/view.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +83 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.d.ts +53 -0
- package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -0
- package/lib/shared-tree/{treeView.js → checkoutFlexTreeView.js} +26 -5
- package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -0
- 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 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +15 -4
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +8 -9
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +9 -4
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +26 -13
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +2 -2
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.d.ts +3 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.js +6 -2
- package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts +3 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +3 -2
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts +2 -1
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.js +2 -2
- package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/lib/shared-tree/treeApi.d.ts +1 -3
- package/lib/shared-tree/treeApi.d.ts.map +1 -1
- package/lib/shared-tree/treeApi.js +7 -5
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +2 -13
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +18 -2
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.js +1 -1
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +2 -2
- package/lib/simple-tree/api/create.js.map +1 -1
- package/{dist/simple-tree → lib/simple-tree/api}/getJsonSchema.d.ts +1 -1
- package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -0
- package/lib/simple-tree/{getJsonSchema.js → api/getJsonSchema.js} +1 -1
- package/lib/simple-tree/api/getJsonSchema.js.map +1 -0
- package/{dist/simple-tree → lib/simple-tree/api}/getSimpleSchema.d.ts +1 -1
- package/lib/simple-tree/api/getSimpleSchema.d.ts.map +1 -0
- package/lib/simple-tree/{getSimpleSchema.js → api/getSimpleSchema.js} +1 -1
- package/lib/simple-tree/api/getSimpleSchema.js.map +1 -0
- package/lib/simple-tree/api/index.d.ts +5 -0
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +3 -0
- package/lib/simple-tree/api/index.js.map +1 -1
- package/{dist/simple-tree → lib/simple-tree/api}/jsonSchema.d.ts +1 -1
- package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -0
- package/lib/simple-tree/api/jsonSchema.js.map +1 -0
- package/lib/simple-tree/api/schemaFactory.d.ts +45 -14
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +43 -12
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/{simpleSchema.d.ts → api/simpleSchema.d.ts} +4 -4
- package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -0
- package/lib/simple-tree/api/simpleSchema.js.map +1 -0
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -0
- package/lib/simple-tree/{simpleSchemaToJsonSchema.js → api/simpleSchemaToJsonSchema.js} +4 -4
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -0
- package/lib/simple-tree/api/tree.d.ts +1 -21
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js +2 -34
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeApiBeta.d.ts +79 -0
- package/lib/simple-tree/api/treeApiBeta.d.ts.map +1 -0
- package/lib/simple-tree/api/treeApiBeta.js +23 -0
- package/lib/simple-tree/api/treeApiBeta.js.map +1 -0
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +53 -23
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +1 -1
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/{viewSchemaToSimpleSchema.d.ts → api/viewSchemaToSimpleSchema.d.ts} +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -0
- package/lib/simple-tree/{viewSchemaToSimpleSchema.js → api/viewSchemaToSimpleSchema.js} +4 -4
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -0
- package/lib/simple-tree/arrayNode.d.ts +2 -2
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +36 -41
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +2 -2
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +2 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/schemaCaching.d.ts +5 -0
- package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -1
- package/lib/simple-tree/core/schemaCaching.js +8 -0
- package/lib/simple-tree/core/schemaCaching.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +78 -7
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +211 -24
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/types.d.ts +23 -8
- 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/withType.d.ts +3 -2
- 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/index.d.ts +7 -9
- 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 +7 -9
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +14 -12
- 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 +38 -29
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +9 -7
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +40 -34
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/proxies.d.ts +1 -14
- package/lib/simple-tree/proxies.d.ts.map +1 -1
- package/lib/simple-tree/proxies.js +11 -14
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/proxyBinding.d.ts +2 -62
- package/lib/simple-tree/proxyBinding.d.ts.map +1 -1
- package/lib/simple-tree/proxyBinding.js +6 -174
- package/lib/simple-tree/proxyBinding.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +7 -7
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +4 -4
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.d.ts +11 -1
- package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/lib/simple-tree/toFlexSchema.js +29 -8
- package/lib/simple-tree/toFlexSchema.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts +25 -37
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js +54 -17
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +8 -11
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/typesUnsafe.d.ts +13 -13
- package/lib/simple-tree/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/walkSchema.d.ts +26 -0
- package/lib/simple-tree/walkSchema.d.ts.map +1 -0
- package/lib/simple-tree/walkSchema.js +43 -0
- package/lib/simple-tree/walkSchema.js.map +1 -0
- package/lib/treeFactory.d.ts +2 -1
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +2 -1
- package/lib/treeFactory.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/lib/util/typeUtils.d.ts +2 -2
- package/lib/util/typeUtils.js.map +1 -1
- package/package.json +58 -36
- package/src/core/index.ts +1 -1
- package/src/core/{revertible/revertible.ts → revertible.ts} +15 -0
- package/src/core/schema-stored/format.ts +1 -1
- package/src/core/schema-stored/schema.ts +6 -13
- package/src/core/tree/anchorSet.ts +35 -9
- package/src/core/tree/detachedFieldIndex.ts +6 -5
- package/src/core/tree/visitDelta.ts +7 -2
- package/src/events/{events.ts → emitter.ts} +55 -134
- package/src/events/index.ts +7 -7
- package/src/events/interop.ts +49 -0
- package/src/events/listeners.ts +68 -0
- package/src/feature-libraries/chunked-forest/chunkTree.ts +63 -18
- package/src/feature-libraries/chunked-forest/chunkedForest.ts +18 -4
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +33 -0
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +5 -3
- package/src/feature-libraries/flex-map-tree/index.ts +1 -0
- package/src/feature-libraries/flex-map-tree/mapTreeNode.ts +135 -231
- package/src/feature-libraries/flex-tree/README.md +4 -75
- package/src/feature-libraries/flex-tree/context.ts +37 -16
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +69 -458
- package/src/feature-libraries/flex-tree/index.ts +7 -29
- package/src/feature-libraries/flex-tree/lazyEntity.ts +2 -11
- package/src/feature-libraries/flex-tree/lazyField.ts +49 -79
- package/src/feature-libraries/flex-tree/lazyNode.ts +26 -306
- package/src/feature-libraries/flex-tree/unboxed.ts +9 -68
- package/src/feature-libraries/flex-tree/utilities.ts +4 -8
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +4 -1
- package/src/feature-libraries/index.ts +2 -41
- package/src/feature-libraries/modular-schema/comparison.ts +4 -6
- package/src/feature-libraries/modular-schema/discrepancies.ts +7 -16
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +4 -1
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +14 -4
- package/src/feature-libraries/storedToViewSchema.ts +5 -6
- package/src/feature-libraries/typed-schema/flexList.ts +3 -3
- package/src/feature-libraries/typed-schema/index.ts +1 -3
- package/src/feature-libraries/typed-schema/schemaCollection.ts +15 -17
- package/src/feature-libraries/typed-schema/typedTreeSchema.ts +35 -127
- package/src/feature-libraries/typed-schema/view.ts +4 -13
- package/src/index.ts +5 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/checkoutFlexTreeView.ts +89 -0
- package/src/shared-tree/index.ts +2 -7
- package/src/shared-tree/schematizeTree.ts +23 -12
- package/src/shared-tree/schematizingTreeView.ts +34 -24
- package/src/shared-tree/sharedTree.ts +6 -1
- package/src/shared-tree/sharedTreeChangeEnricher.ts +6 -1
- package/src/shared-tree/sharedTreeChangeFamily.ts +7 -1
- package/src/shared-tree/sharedTreeEditBuilder.ts +9 -4
- package/src/shared-tree/treeApi.ts +10 -10
- package/src/shared-tree/treeCheckout.ts +26 -15
- package/src/shared-tree-core/branch.ts +1 -1
- package/src/simple-tree/ProxyBinding.md +23 -23
- package/src/simple-tree/api/create.ts +8 -3
- package/src/simple-tree/{getJsonSchema.ts → api/getJsonSchema.ts} +3 -3
- package/src/simple-tree/{getSimpleSchema.ts → api/getSimpleSchema.ts} +3 -3
- package/src/simple-tree/api/index.ts +20 -0
- package/src/simple-tree/{jsonSchema.ts → api/jsonSchema.ts} +1 -1
- package/src/simple-tree/api/schemaFactory.ts +44 -13
- package/src/simple-tree/{simpleSchema.ts → api/simpleSchema.ts} +4 -4
- package/src/simple-tree/{simpleSchemaToJsonSchema.ts → api/simpleSchemaToJsonSchema.ts} +4 -4
- package/src/simple-tree/api/tree.ts +2 -71
- package/src/simple-tree/api/treeApiBeta.ts +101 -0
- package/src/simple-tree/api/treeNodeApi.ts +63 -22
- package/src/simple-tree/api/verboseTree.ts +1 -1
- package/src/simple-tree/{viewSchemaToSimpleSchema.ts → api/viewSchemaToSimpleSchema.ts} +5 -5
- package/src/simple-tree/arrayNode.ts +38 -41
- package/src/simple-tree/core/index.ts +4 -0
- package/src/simple-tree/core/schemaCaching.ts +10 -0
- package/src/simple-tree/core/treeNodeKernel.ts +279 -27
- package/src/simple-tree/core/treeNodeSchema.ts +1 -1
- package/src/simple-tree/core/types.ts +23 -8
- package/src/simple-tree/core/withType.ts +3 -1
- package/src/simple-tree/index.ts +29 -20
- package/src/simple-tree/leafNodeSchema.ts +24 -28
- package/src/simple-tree/mapNode.ts +47 -29
- package/src/simple-tree/objectNode.ts +51 -46
- package/src/simple-tree/proxies.ts +22 -51
- package/src/simple-tree/proxyBinding.ts +3 -254
- package/src/simple-tree/schemaTypes.ts +8 -8
- package/src/simple-tree/toFlexSchema.ts +40 -7
- package/src/simple-tree/toMapTree.ts +113 -79
- package/src/simple-tree/treeNodeValid.ts +10 -13
- package/src/simple-tree/typesUnsafe.ts +13 -13
- package/src/simple-tree/walkSchema.ts +81 -0
- package/src/treeFactory.ts +2 -1
- package/src/util/typeUtils.ts +2 -2
- package/dist/core/revertible/index.d.ts.map +0 -1
- package/dist/core/revertible/index.js +0 -10
- package/dist/core/revertible/index.js.map +0 -1
- package/dist/core/revertible/revertible.d.ts.map +0 -1
- package/dist/core/revertible/revertible.js.map +0 -1
- package/dist/domains/index.d.ts +0 -8
- package/dist/domains/index.d.ts.map +0 -1
- package/dist/domains/index.js +0 -20
- package/dist/domains/index.js.map +0 -1
- package/dist/domains/json/index.d.ts +0 -7
- package/dist/domains/json/index.d.ts.map +0 -1
- package/dist/domains/json/index.js +0 -17
- package/dist/domains/json/index.js.map +0 -1
- package/dist/domains/json/jsonCursor.d.ts +0 -52
- package/dist/domains/json/jsonCursor.d.ts.map +0 -1
- package/dist/domains/json/jsonCursor.js +0 -197
- package/dist/domains/json/jsonCursor.js.map +0 -1
- package/dist/domains/json/jsonDomainSchema.d.ts +0 -24
- package/dist/domains/json/jsonDomainSchema.d.ts.map +0 -1
- package/dist/domains/json/jsonDomainSchema.js +0 -32
- package/dist/domains/json/jsonDomainSchema.js.map +0 -1
- package/dist/domains/leafDomain.d.ts +0 -72
- package/dist/domains/leafDomain.d.ts.map +0 -1
- package/dist/domains/leafDomain.js +0 -88
- package/dist/domains/leafDomain.js.map +0 -1
- package/dist/domains/schemaBuilder.d.ts +0 -103
- package/dist/domains/schemaBuilder.d.ts.map +0 -1
- package/dist/domains/schemaBuilder.js +0 -121
- package/dist/domains/schemaBuilder.js.map +0 -1
- package/dist/domains/testRecursiveDomain.d.ts +0 -17
- package/dist/domains/testRecursiveDomain.d.ts.map +0 -1
- package/dist/domains/testRecursiveDomain.js +0 -35
- package/dist/domains/testRecursiveDomain.js.map +0 -1
- package/dist/events/events.d.ts +0 -201
- package/dist/events/events.d.ts.map +0 -1
- package/dist/events/events.js.map +0 -1
- package/dist/feature-libraries/schemaBuilder.d.ts +0 -31
- package/dist/feature-libraries/schemaBuilder.d.ts.map +0 -1
- package/dist/feature-libraries/schemaBuilder.js +0 -40
- package/dist/feature-libraries/schemaBuilder.js.map +0 -1
- package/dist/feature-libraries/schemaBuilderBase.d.ts +0 -191
- package/dist/feature-libraries/schemaBuilderBase.d.ts.map +0 -1
- package/dist/feature-libraries/schemaBuilderBase.js +0 -201
- package/dist/feature-libraries/schemaBuilderBase.js.map +0 -1
- package/dist/shared-tree/treeView.d.ts +0 -73
- package/dist/shared-tree/treeView.d.ts.map +0 -1
- package/dist/shared-tree/treeView.js.map +0 -1
- package/dist/simple-tree/getJsonSchema.d.ts.map +0 -1
- package/dist/simple-tree/getJsonSchema.js.map +0 -1
- package/dist/simple-tree/getSimpleSchema.d.ts.map +0 -1
- package/dist/simple-tree/getSimpleSchema.js.map +0 -1
- package/dist/simple-tree/jsonSchema.d.ts.map +0 -1
- package/dist/simple-tree/jsonSchema.js.map +0 -1
- package/dist/simple-tree/simpleSchema.d.ts.map +0 -1
- package/dist/simple-tree/simpleSchema.js.map +0 -1
- package/dist/simple-tree/simpleSchemaToJsonSchema.d.ts.map +0 -1
- package/dist/simple-tree/simpleSchemaToJsonSchema.js.map +0 -1
- package/dist/simple-tree/viewSchemaToSimpleSchema.d.ts.map +0 -1
- package/dist/simple-tree/viewSchemaToSimpleSchema.js.map +0 -1
- package/lib/core/revertible/index.d.ts.map +0 -1
- package/lib/core/revertible/index.js.map +0 -1
- package/lib/core/revertible/revertible.d.ts.map +0 -1
- package/lib/core/revertible/revertible.js.map +0 -1
- package/lib/domains/index.d.ts +0 -8
- package/lib/domains/index.d.ts.map +0 -1
- package/lib/domains/index.js +0 -8
- package/lib/domains/index.js.map +0 -1
- package/lib/domains/json/index.d.ts +0 -7
- package/lib/domains/json/index.d.ts.map +0 -1
- package/lib/domains/json/index.js +0 -7
- package/lib/domains/json/index.js.map +0 -1
- package/lib/domains/json/jsonCursor.d.ts +0 -52
- package/lib/domains/json/jsonCursor.d.ts.map +0 -1
- package/lib/domains/json/jsonCursor.js +0 -192
- package/lib/domains/json/jsonCursor.js.map +0 -1
- package/lib/domains/json/jsonDomainSchema.d.ts +0 -24
- package/lib/domains/json/jsonDomainSchema.d.ts.map +0 -1
- package/lib/domains/json/jsonDomainSchema.js +0 -29
- package/lib/domains/json/jsonDomainSchema.js.map +0 -1
- package/lib/domains/leafDomain.d.ts +0 -72
- package/lib/domains/leafDomain.d.ts.map +0 -1
- package/lib/domains/leafDomain.js +0 -85
- package/lib/domains/leafDomain.js.map +0 -1
- package/lib/domains/schemaBuilder.d.ts +0 -103
- package/lib/domains/schemaBuilder.d.ts.map +0 -1
- package/lib/domains/schemaBuilder.js +0 -117
- package/lib/domains/schemaBuilder.js.map +0 -1
- package/lib/domains/testRecursiveDomain.d.ts +0 -17
- package/lib/domains/testRecursiveDomain.d.ts.map +0 -1
- package/lib/domains/testRecursiveDomain.js +0 -32
- package/lib/domains/testRecursiveDomain.js.map +0 -1
- package/lib/events/events.d.ts +0 -201
- package/lib/events/events.d.ts.map +0 -1
- package/lib/events/events.js.map +0 -1
- package/lib/feature-libraries/schemaBuilder.d.ts +0 -31
- package/lib/feature-libraries/schemaBuilder.d.ts.map +0 -1
- package/lib/feature-libraries/schemaBuilder.js +0 -36
- package/lib/feature-libraries/schemaBuilder.js.map +0 -1
- package/lib/feature-libraries/schemaBuilderBase.d.ts +0 -191
- package/lib/feature-libraries/schemaBuilderBase.d.ts.map +0 -1
- package/lib/feature-libraries/schemaBuilderBase.js +0 -195
- package/lib/feature-libraries/schemaBuilderBase.js.map +0 -1
- package/lib/shared-tree/treeView.d.ts +0 -73
- package/lib/shared-tree/treeView.d.ts.map +0 -1
- package/lib/shared-tree/treeView.js.map +0 -1
- package/lib/simple-tree/getJsonSchema.d.ts.map +0 -1
- package/lib/simple-tree/getJsonSchema.js.map +0 -1
- package/lib/simple-tree/getSimpleSchema.d.ts.map +0 -1
- package/lib/simple-tree/getSimpleSchema.js.map +0 -1
- package/lib/simple-tree/jsonSchema.d.ts.map +0 -1
- package/lib/simple-tree/jsonSchema.js.map +0 -1
- package/lib/simple-tree/simpleSchema.d.ts.map +0 -1
- package/lib/simple-tree/simpleSchema.js.map +0 -1
- package/lib/simple-tree/simpleSchemaToJsonSchema.d.ts.map +0 -1
- package/lib/simple-tree/simpleSchemaToJsonSchema.js.map +0 -1
- package/lib/simple-tree/viewSchemaToSimpleSchema.d.ts.map +0 -1
- package/src/domains/README.md +0 -6
- package/src/domains/fence.json +0 -5
- package/src/domains/index.ts +0 -19
- package/src/domains/json/fence.json +0 -5
- package/src/domains/json/index.ts +0 -13
- package/src/domains/json/jsonCursor.ts +0 -247
- package/src/domains/json/jsonDomainSchema.ts +0 -47
- package/src/domains/leafDomain.ts +0 -97
- package/src/domains/schemaBuilder.ts +0 -153
- package/src/domains/testRecursiveDomain.ts +0 -38
- package/src/events/fence.json +0 -5
- package/src/feature-libraries/schemaBuilder.ts +0 -45
- package/src/feature-libraries/schemaBuilderBase.ts +0 -393
- package/src/shared-tree/treeView.ts +0 -113
- /package/dist/core/{revertible/revertible.js → revertible.js} +0 -0
- /package/dist/simple-tree/{jsonSchema.js → api/jsonSchema.js} +0 -0
- /package/dist/simple-tree/{simpleSchema.js → api/simpleSchema.js} +0 -0
- /package/dist/simple-tree/{simpleSchemaToJsonSchema.d.ts → api/simpleSchemaToJsonSchema.d.ts} +0 -0
- /package/lib/core/{revertible/revertible.js → revertible.js} +0 -0
- /package/lib/simple-tree/{jsonSchema.js → api/jsonSchema.js} +0 -0
- /package/lib/simple-tree/{simpleSchema.js → api/simpleSchema.js} +0 -0
- /package/lib/simple-tree/{simpleSchemaToJsonSchema.d.ts → api/simpleSchemaToJsonSchema.d.ts} +0 -0
|
@@ -4,17 +4,39 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
|
-
import { createEmitter, type Listenable, type Off } from "../../events/index.js";
|
|
8
|
-
import type { TreeChangeEvents, TreeNode, Unhydrated } from "./types.js";
|
|
9
|
-
import type { AnchorNode } from "../../core/index.js";
|
|
10
7
|
import {
|
|
8
|
+
createEmitter,
|
|
9
|
+
type HasListeners,
|
|
10
|
+
type IEmitter,
|
|
11
|
+
type Listenable,
|
|
12
|
+
type Off,
|
|
13
|
+
} from "../../events/index.js";
|
|
14
|
+
import type { TreeNode, Unhydrated } from "./types.js";
|
|
15
|
+
import {
|
|
16
|
+
anchorSlot,
|
|
17
|
+
type AnchorEvents,
|
|
18
|
+
type AnchorNode,
|
|
19
|
+
type AnchorSet,
|
|
20
|
+
type UpPath,
|
|
21
|
+
} from "../../core/index.js";
|
|
22
|
+
import {
|
|
23
|
+
assertFlexTreeEntityNotFreed,
|
|
24
|
+
ContextSlot,
|
|
11
25
|
flexTreeSlot,
|
|
26
|
+
isFlexTreeNode,
|
|
12
27
|
isFreedSymbol,
|
|
28
|
+
isMapTreeNode,
|
|
13
29
|
LazyEntity,
|
|
14
30
|
TreeStatus,
|
|
15
31
|
treeStatusFromAnchorCache,
|
|
32
|
+
type FlexTreeNode,
|
|
33
|
+
type MapTreeNode,
|
|
16
34
|
} from "../../feature-libraries/index.js";
|
|
17
35
|
import type { TreeNodeSchema } from "./treeNodeSchema.js";
|
|
36
|
+
import { fail } from "../../util/index.js";
|
|
37
|
+
// TODO: decide how to deal with dependencies on flex-tree implementation.
|
|
38
|
+
// eslint-disable-next-line import/no-internal-modules
|
|
39
|
+
import { makeTree } from "../../feature-libraries/flex-tree/lazyNode.js";
|
|
18
40
|
|
|
19
41
|
const treeNodeToKernel = new WeakMap<TreeNode, TreeNodeKernel>();
|
|
20
42
|
|
|
@@ -60,57 +82,138 @@ export function tryGetTreeNodeSchema(value: unknown): undefined | TreeNodeSchema
|
|
|
60
82
|
* The kernel has the same lifetime as the node and spans both its unhydrated and hydrated states.
|
|
61
83
|
* When hydration occurs, the kernel is notified via the {@link TreeNodeKernel.hydrate | hydrate} method.
|
|
62
84
|
*/
|
|
63
|
-
export class TreeNodeKernel implements Listenable<
|
|
85
|
+
export class TreeNodeKernel implements Listenable<KernelEvents> {
|
|
86
|
+
private disposed = false;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Generation number which is incremented any time we have an edit on the node.
|
|
90
|
+
* Used during iteration to make sure there has been no edits that were concurrently made.
|
|
91
|
+
* @remarks
|
|
92
|
+
* This is updated monotonically by this class when edits are applied.
|
|
93
|
+
* TODO: update this when applying edits to unhydrated trees.
|
|
94
|
+
*
|
|
95
|
+
* If TypeScript supported making this immutable from outside the class without making it readonly from inside, that would be used here,
|
|
96
|
+
* but they only way to do that is add a separate public accessor and make it private, which was deemed not worth the boilerplate, runtime overhead and bundle size.
|
|
97
|
+
*/
|
|
98
|
+
public generationNumber: number = 0;
|
|
99
|
+
|
|
64
100
|
#hydrated?: {
|
|
65
101
|
anchorNode: AnchorNode;
|
|
66
|
-
offAnchorNode: Off
|
|
102
|
+
offAnchorNode: Set<Off>;
|
|
67
103
|
};
|
|
68
|
-
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Events registered before hydration.
|
|
107
|
+
* @remarks
|
|
108
|
+
* As an optimization these are allocated lazily as they are usually unused.
|
|
109
|
+
*/
|
|
110
|
+
#preHydrationEvents?: Listenable<KernelEvents> &
|
|
111
|
+
IEmitter<KernelEvents> &
|
|
112
|
+
HasListeners<KernelEvents>;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Get the listener.
|
|
116
|
+
* @remarks
|
|
117
|
+
* If before hydration, allocates and uses `#preHydrationEvents`, otherwise the anchorNode.
|
|
118
|
+
* This design avoids allocating `#preHydrationEvents` if unneeded.
|
|
119
|
+
*
|
|
120
|
+
* This design also avoids extra forwarding overhead for events from anchorNode and also
|
|
121
|
+
* avoids registering for events that are unneeded.
|
|
122
|
+
* This means optimizations like skipping processing data in subtrees where no subtreeChanged events are subscribed to would be able to work,
|
|
123
|
+
* since this code does not unconditionally subscribe to those events (like a design simply forwarding all events would).
|
|
124
|
+
*/
|
|
125
|
+
get #events(): Listenable<KernelEvents> {
|
|
126
|
+
if (this.#hydrated === undefined) {
|
|
127
|
+
this.#preHydrationEvents ??= createEmitter<KernelEvents>();
|
|
128
|
+
return this.#preHydrationEvents;
|
|
129
|
+
} else {
|
|
130
|
+
return this.#hydrated.anchorNode;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
69
133
|
|
|
70
134
|
/**
|
|
71
135
|
* Create a TreeNodeKernel which can be looked up with {@link getKernel}.
|
|
136
|
+
*
|
|
137
|
+
* @param innerNode - When unhydrated/raw or marinated the MapTreeNode. FlexTreeNode when cooked.
|
|
72
138
|
* @remarks
|
|
73
139
|
* Exactly one kernel per TreeNode should be created.
|
|
74
140
|
*/
|
|
75
141
|
public constructor(
|
|
76
142
|
public readonly node: TreeNode,
|
|
77
143
|
public readonly schema: TreeNodeSchema,
|
|
144
|
+
private innerNode: InnerNode,
|
|
78
145
|
) {
|
|
79
146
|
assert(!treeNodeToKernel.has(node), 0xa1a /* only one kernel per node can be made */);
|
|
80
147
|
treeNodeToKernel.set(node, this);
|
|
148
|
+
|
|
149
|
+
if (isMapTreeNode(innerNode)) {
|
|
150
|
+
// Unhydrated case
|
|
151
|
+
mapTreeNodeToProxy.set(innerNode, node);
|
|
152
|
+
} else {
|
|
153
|
+
// Hydrated case
|
|
154
|
+
assert(
|
|
155
|
+
!innerNode.anchorNode.slots.has(proxySlot),
|
|
156
|
+
0x7f5 /* Cannot associate an flex node with multiple simple-tree nodes */,
|
|
157
|
+
);
|
|
158
|
+
this.hydrate(innerNode.anchorNode);
|
|
159
|
+
}
|
|
81
160
|
}
|
|
82
161
|
|
|
162
|
+
/**
|
|
163
|
+
* Transition from {@link Unhydrated} to hydrated.
|
|
164
|
+
* Bi-directionally associates the given hydrated TreeNode to the given anchor node.
|
|
165
|
+
* @remarks
|
|
166
|
+
* Happens at most once for any given node.
|
|
167
|
+
* Cleans up mappings to {@link MapTreeNode} - it is assumed that they are no longer needed once the proxy has an anchor node.
|
|
168
|
+
*/
|
|
83
169
|
public hydrate(anchorNode: AnchorNode): void {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
});
|
|
170
|
+
assert(!this.disposed, 0xa2a /* cannot hydrate a disposed node */);
|
|
171
|
+
assert(this.#hydrated === undefined, 0xa2b /* hydration should only happen once */);
|
|
87
172
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
173
|
+
// If the this node is raw and thus has a MapTreeNode, forget it:
|
|
174
|
+
if (isMapTreeNode(this.innerNode)) {
|
|
175
|
+
mapTreeNodeToProxy.delete(this.innerNode);
|
|
176
|
+
}
|
|
91
177
|
|
|
92
|
-
|
|
178
|
+
// However, it's fine for an anchor node to rotate through different proxies when the content at that place in the tree is replaced.
|
|
179
|
+
anchorNode.slots.set(proxySlot, this.node);
|
|
93
180
|
|
|
94
181
|
this.#hydrated = {
|
|
95
182
|
anchorNode,
|
|
96
|
-
offAnchorNode: (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
183
|
+
offAnchorNode: new Set([
|
|
184
|
+
anchorNode.on("afterDestroy", () => this.dispose()),
|
|
185
|
+
// TODO: this should be triggered on change even for unhydrated nodes.
|
|
186
|
+
anchorNode.on("childrenChanging", () => {
|
|
187
|
+
this.generationNumber += 1;
|
|
188
|
+
}),
|
|
189
|
+
]),
|
|
101
190
|
};
|
|
102
|
-
}
|
|
103
191
|
|
|
104
|
-
|
|
105
|
-
this.#
|
|
106
|
-
|
|
192
|
+
// If needed, register forwarding emitters for events from before hydration
|
|
193
|
+
if (this.#preHydrationEvents !== undefined) {
|
|
194
|
+
for (const eventName of kernelEvents) {
|
|
195
|
+
if (this.#preHydrationEvents.hasListeners(eventName)) {
|
|
196
|
+
this.#hydrated.offAnchorNode.add(
|
|
197
|
+
// Argument is forwarded between matching events, so the type should be correct.
|
|
198
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
199
|
+
anchorNode.on(eventName, (arg: any) =>
|
|
200
|
+
this.#preHydrationEvents?.emit(eventName, arg),
|
|
201
|
+
),
|
|
202
|
+
);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
107
206
|
}
|
|
108
207
|
|
|
109
208
|
public isHydrated(): boolean {
|
|
209
|
+
assert(!this.disposed, 0xa2c /* cannot use a disposed node */);
|
|
110
210
|
return this.#hydrated !== undefined;
|
|
111
211
|
}
|
|
112
212
|
|
|
113
213
|
public getStatus(): TreeStatus {
|
|
214
|
+
if (this.disposed) {
|
|
215
|
+
return TreeStatus.Deleted;
|
|
216
|
+
}
|
|
114
217
|
if (this.#hydrated?.anchorNode === undefined) {
|
|
115
218
|
return TreeStatus.New;
|
|
116
219
|
}
|
|
@@ -127,15 +230,164 @@ export class TreeNodeKernel implements Listenable<TreeChangeEvents> {
|
|
|
127
230
|
return treeStatusFromAnchorCache(this.#hydrated.anchorNode);
|
|
128
231
|
}
|
|
129
232
|
|
|
130
|
-
public on<K extends keyof
|
|
131
|
-
eventName: K,
|
|
132
|
-
listener: TreeChangeEvents[K],
|
|
133
|
-
): Off {
|
|
233
|
+
public on<K extends keyof KernelEvents>(eventName: K, listener: KernelEvents[K]): Off {
|
|
134
234
|
return this.#events.on(eventName, listener);
|
|
135
235
|
}
|
|
136
236
|
|
|
137
237
|
public dispose(): void {
|
|
138
|
-
this.
|
|
238
|
+
this.disposed = true;
|
|
239
|
+
for (const off of this.#hydrated?.offAnchorNode ?? []) {
|
|
240
|
+
off();
|
|
241
|
+
}
|
|
139
242
|
// TODO: go to the context and remove myself from withAnchors
|
|
140
243
|
}
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Retrieves the flex node associated with the given target via {@link setInnerNode}.
|
|
247
|
+
* @remarks
|
|
248
|
+
* For {@link Unhydrated} nodes, this returns the MapTreeNode.
|
|
249
|
+
*
|
|
250
|
+
* For hydrated nodes it returns a FlexTreeNode backed by the forest.
|
|
251
|
+
* Note that for "marinated" nodes, this FlexTreeNode exists and returns it: it does not return the MapTreeNode which is the current InnerNode.
|
|
252
|
+
*/
|
|
253
|
+
public getOrCreateInnerNode(allowFreed = false): InnerNode {
|
|
254
|
+
if (!isMapTreeNode(this.innerNode)) {
|
|
255
|
+
// Cooked case
|
|
256
|
+
return this.innerNode;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
if (this.#hydrated === undefined) {
|
|
260
|
+
// Unhydrated case
|
|
261
|
+
return this.innerNode;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
// Marinated case -> cooked
|
|
265
|
+
const anchorNode = this.#hydrated.anchorNode;
|
|
266
|
+
// The proxy is bound to an anchor node, but it may or may not have an actual flex node yet
|
|
267
|
+
const flexNode = anchorNode.slots.get(flexTreeSlot);
|
|
268
|
+
if (flexNode !== undefined) {
|
|
269
|
+
this.innerNode = flexNode;
|
|
270
|
+
return flexNode; // If it does have a flex node, return it...
|
|
271
|
+
} // ...otherwise, the flex node must be created
|
|
272
|
+
const context = anchorNode.anchorSet.slots.get(ContextSlot) ?? fail("missing context");
|
|
273
|
+
const cursor = context.checkout.forest.allocateCursor("getFlexNode");
|
|
274
|
+
context.checkout.forest.moveCursorToPath(anchorNode, cursor);
|
|
275
|
+
const newFlexNode = makeTree(context, cursor);
|
|
276
|
+
cursor.free();
|
|
277
|
+
this.innerNode = newFlexNode;
|
|
278
|
+
// Calling this is a performance improvement, however, do this only after demand to avoid momentarily having no anchors to anchorNode
|
|
279
|
+
anchorForgetters?.get(this.node)?.();
|
|
280
|
+
if (!allowFreed) {
|
|
281
|
+
assertFlexTreeEntityNotFreed(newFlexNode);
|
|
282
|
+
}
|
|
283
|
+
return newFlexNode;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Creates an anchor node and associates it with the given proxy.
|
|
288
|
+
* @privateRemarks
|
|
289
|
+
* Use `forgetters` to cleanup the anchor allocated by this function once the anchor is no longer needed.
|
|
290
|
+
* In practice, this happens when either the anchor node is destroyed, or another anchor to the same node is created by a new flex node.
|
|
291
|
+
*
|
|
292
|
+
* The FlexTreeNode holds a reference to the same anchor, and has a lifetime at least as long as the simple-tree,
|
|
293
|
+
* so this would be unnecessary except for the case of "marinated" nodes, which have an anchor,
|
|
294
|
+
* but might not have a FlexTreeNode.
|
|
295
|
+
* Handling this case is an optimization assuming that this extra anchor reference is cheaper than eagerly creating FlexTreeNodes.
|
|
296
|
+
*/
|
|
297
|
+
public anchorProxy(anchors: AnchorSet, path: UpPath): AnchorNode {
|
|
298
|
+
assert(!anchorForgetters.has(this.node), 0x91c /* Proxy anchor should not be set twice */);
|
|
299
|
+
const anchor = anchors.track(path);
|
|
300
|
+
const anchorNode = anchors.locate(anchor) ?? fail("Expected anchor node to be present");
|
|
301
|
+
this.hydrate(anchorNode);
|
|
302
|
+
const forget = (): void => {
|
|
303
|
+
if (anchors.locate(anchor)) {
|
|
304
|
+
anchors.forget(anchor);
|
|
305
|
+
}
|
|
306
|
+
anchorForgetters.delete(this.node);
|
|
307
|
+
off();
|
|
308
|
+
};
|
|
309
|
+
anchorForgetters.set(this.node, forget);
|
|
310
|
+
const off = anchorNode.on("afterDestroy", forget);
|
|
311
|
+
return anchorNode;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
/**
|
|
315
|
+
* Retrieves the InnerNode associated with the given target via {@link setInnerNode}, if any.
|
|
316
|
+
* @remarks
|
|
317
|
+
* If `target` is a unhydrated node, returns its MapTreeNode.
|
|
318
|
+
* If `target` is a cooked node (or marinated but a FlexTreeNode exists) returns the FlexTreeNode.
|
|
319
|
+
* If the target is not a node, or a marinated node with no FlexTreeNode for its anchor, returns undefined.
|
|
320
|
+
*/
|
|
321
|
+
public tryGetInnerNode(): InnerNode | undefined {
|
|
322
|
+
if (isFlexTreeNode(this.innerNode)) {
|
|
323
|
+
// Cooked case
|
|
324
|
+
return this.innerNode;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if (this.#hydrated === undefined) {
|
|
328
|
+
// Unhydrated case
|
|
329
|
+
return this.innerNode;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
// Marinated case -> cooked
|
|
333
|
+
const anchorNode = this.#hydrated.anchorNode;
|
|
334
|
+
// The proxy is bound to an anchor node, but it may or may not have an actual flex node yet
|
|
335
|
+
return anchorNode.slots.get(flexTreeSlot);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
/**
|
|
340
|
+
* Used by {@link anchorProxy} as an optimization to ensure that only one anchor is remembered at a time for a given anchor node
|
|
341
|
+
*/
|
|
342
|
+
const anchorForgetters = new WeakMap<TreeNode, () => void>();
|
|
343
|
+
|
|
344
|
+
const kernelEvents = ["childrenChangedAfterBatch", "subtreeChangedAfterBatch"] as const;
|
|
345
|
+
|
|
346
|
+
type KernelEvents = Pick<AnchorEvents, (typeof kernelEvents)[number]>;
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* For "cooked" nodes this is a FlexTreeNode thats a projection of forest content.
|
|
350
|
+
* For {@link Unhydrated} nodes this is a MapTreeNode.
|
|
351
|
+
* For "marinated" nodes, some code (ex: getOrCreateInnerNode) returns the FlexTreeNode thats a projection of forest content, and some code (ex: tryGetInnerNode) returns undefined.
|
|
352
|
+
*
|
|
353
|
+
* @remarks
|
|
354
|
+
* Currently MapTreeNode extends FlexTreeNode, and most code which can work with either just uses FlexTreeNode.
|
|
355
|
+
* TODO: Code should be migrating toward using this type to distinguish to two use-cases.
|
|
356
|
+
*
|
|
357
|
+
* TODO: The inconsistent handling of "marinated" cases should be cleaned up.
|
|
358
|
+
* Maybe getOrCreateInnerNode should cook marinated nodes so they have a proper InnerNode?
|
|
359
|
+
*/
|
|
360
|
+
export type InnerNode = FlexTreeNode | MapTreeNode;
|
|
361
|
+
|
|
362
|
+
/**
|
|
363
|
+
* {@inheritdoc proxyToMapTreeNode}
|
|
364
|
+
*/
|
|
365
|
+
const mapTreeNodeToProxy = new WeakMap<MapTreeNode, TreeNode>();
|
|
366
|
+
|
|
367
|
+
/**
|
|
368
|
+
* An anchor slot which associates an anchor with its corresponding TreeNode, if there is one.
|
|
369
|
+
* @remarks
|
|
370
|
+
* For this to work, we have to require that there is at most a single view using a given AnchorSet.
|
|
371
|
+
* FlexTree already has this assumption, and we also assume there is a single simple-tree per FlexTree, so this is valid.
|
|
372
|
+
*/
|
|
373
|
+
const proxySlot = anchorSlot<TreeNode>();
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Retrieves the proxy associated with the given flex node via {@link setInnerNode}, if any.
|
|
377
|
+
*/
|
|
378
|
+
export function tryGetCachedTreeNode(flexNode: InnerNode): TreeNode | undefined {
|
|
379
|
+
if (isMapTreeNode(flexNode)) {
|
|
380
|
+
// Unhydrated case
|
|
381
|
+
return mapTreeNodeToProxy.get(flexNode);
|
|
382
|
+
}
|
|
383
|
+
// Hydrated case
|
|
384
|
+
return flexNode.anchorNode.slots.get(proxySlot);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
export function tryDisposeTreeNode(anchorNode: AnchorNode): void {
|
|
388
|
+
const treeNode = anchorNode.slots.get(proxySlot);
|
|
389
|
+
if (treeNode !== undefined) {
|
|
390
|
+
const kernel = getKernel(treeNode);
|
|
391
|
+
kernel.dispose();
|
|
392
|
+
}
|
|
141
393
|
}
|
|
@@ -33,7 +33,7 @@ export type TreeNodeSchema<
|
|
|
33
33
|
* This is used for schema which cannot have their instances constructed using constructors, like leaf schema.
|
|
34
34
|
* @privateRemarks
|
|
35
35
|
* Non-class based schema can have issues with recursive types due to https://github.com/microsoft/TypeScript/issues/55832.
|
|
36
|
-
* @sealed @public
|
|
36
|
+
* @system @sealed @public
|
|
37
37
|
*/
|
|
38
38
|
export interface TreeNodeSchemaNonClass<
|
|
39
39
|
out Name extends string = string,
|
|
@@ -20,6 +20,11 @@ import { isFlexTreeNode, type FlexTreeNode } from "../../feature-libraries/index
|
|
|
20
20
|
*
|
|
21
21
|
* Since un-hydrated nodes become hydrated when inserted, strong typing can't be used to distinguish them.
|
|
22
22
|
* This no-op wrapper is used instead.
|
|
23
|
+
* @remarks
|
|
24
|
+
* Nodes which are Unhydrated report {@link TreeStatus}.new from `Tree.status(node)`.
|
|
25
|
+
* @privateRemarks
|
|
26
|
+
* TODO: Linking tree status is failing in intellisense and linking directly to its .new item is failing in API extractor as well.
|
|
27
|
+
* WOuld be nice to have a working link here.
|
|
23
28
|
* @public
|
|
24
29
|
*/
|
|
25
30
|
export type Unhydrated<T> = T;
|
|
@@ -27,6 +32,11 @@ export type Unhydrated<T> = T;
|
|
|
27
32
|
/**
|
|
28
33
|
* A collection of events that can be emitted by a {@link TreeNode}.
|
|
29
34
|
*
|
|
35
|
+
* @remarks
|
|
36
|
+
* Currently, events can be subscribed to for {@link Unhydrated} nodes, however no events will be triggered for the nodes until after they are hydrated.
|
|
37
|
+
* This is considered a known issue, and should be fixed in future versions.
|
|
38
|
+
* Do not rely on the fact that editing unhydrated nodes does not trigger their events.
|
|
39
|
+
*
|
|
30
40
|
* @privateRemarks
|
|
31
41
|
* TODO: add a way to subscribe to a specific field (for nodeChanged and treeChanged).
|
|
32
42
|
* Probably have object node and map node specific APIs for this.
|
|
@@ -47,15 +57,18 @@ export type Unhydrated<T> = T;
|
|
|
47
57
|
*/
|
|
48
58
|
export interface TreeChangeEvents {
|
|
49
59
|
/**
|
|
50
|
-
* Emitted by a node after a batch of changes has been applied to the tree, if
|
|
51
|
-
* change is:
|
|
60
|
+
* Emitted by a node after a batch of changes has been applied to the tree, if any of the changes affected the node.
|
|
52
61
|
*
|
|
53
|
-
* -
|
|
54
|
-
* to something else, including `undefined`).
|
|
62
|
+
* - Object nodes define a change as being when the value of one of its properties changes (i.e., the property's value is set, including when set to `undefined`).
|
|
55
63
|
*
|
|
56
|
-
* -
|
|
64
|
+
* - Array nodes define a change as when an element is added, removed, moved or replaced.
|
|
57
65
|
*
|
|
58
|
-
* -
|
|
66
|
+
* - Map nodes define a change as when an entry is added, updated, or removed.
|
|
67
|
+
*
|
|
68
|
+
* @param unstable - Future versions of this API (such as the one in beta on TreeBeta) may use this argument to provide additional data to the event.
|
|
69
|
+
* users of this event should ensure that they do not provide a listener callback which has an optional parameter in this position, since unexpected data might get provided to it.
|
|
70
|
+
* This parameter exists to capture this fact in the type system.
|
|
71
|
+
* Using an inline lambda expression as the listener callback is a good pattern to avoid cases like this were arguments are added from breaking due to optional arguments.
|
|
59
72
|
*
|
|
60
73
|
* @remarks
|
|
61
74
|
* This event is not emitted when:
|
|
@@ -70,15 +83,17 @@ export interface TreeChangeEvents {
|
|
|
70
83
|
* For remote edits, this event is not guaranteed to occur in the same order or quantity that it did in
|
|
71
84
|
* the client that made the original edit.
|
|
72
85
|
*
|
|
73
|
-
* When
|
|
86
|
+
* When the event is emitted, the tree is guaranteed to be in-schema.
|
|
74
87
|
*
|
|
75
88
|
* @privateRemarks
|
|
76
89
|
* This event occurs whenever the apparent contents of the node instance change, regardless of what caused the change.
|
|
77
90
|
* For example, it will fire when the local client reassigns a child, when part of a remote edit is applied to the
|
|
78
91
|
* node, or when the node has to be updated due to resolution of a merge conflict
|
|
79
92
|
* (for example a previously applied local change might be undone, then reapplied differently or not at all).
|
|
93
|
+
*
|
|
94
|
+
* TODO: define and document event ordering (ex: bottom up, with nodeChanged before treeChange on each level).
|
|
80
95
|
*/
|
|
81
|
-
nodeChanged(): void;
|
|
96
|
+
nodeChanged(unstable?: unknown): void;
|
|
82
97
|
|
|
83
98
|
/**
|
|
84
99
|
* Emitted by a node after a batch of changes has been applied to the tree, when something changed anywhere in the
|
|
@@ -43,6 +43,7 @@ export const typeSchemaSymbol: unique symbol = Symbol("TreeNode Schema");
|
|
|
43
43
|
*
|
|
44
44
|
* @typeParam TName - Same as {@link TreeNodeSchema}'s "Name" parameter.
|
|
45
45
|
* @typeParam TKind - Same as {@link TreeNodeSchema}'s "Kind" parameter.
|
|
46
|
+
* @typeParam TInfo - Same as {@link TreeNodeSchema}'s "Info" parameter: format depends on the Kind.
|
|
46
47
|
* @remarks
|
|
47
48
|
* Powers {@link TreeNode}'s strong typing setup.
|
|
48
49
|
* @example Narrow types for overloading based on NodeKind
|
|
@@ -75,6 +76,7 @@ export const typeSchemaSymbol: unique symbol = Symbol("TreeNode Schema");
|
|
|
75
76
|
export interface WithType<
|
|
76
77
|
out TName extends string = string,
|
|
77
78
|
out TKind extends NodeKind = NodeKind,
|
|
79
|
+
out TInfo = unknown,
|
|
78
80
|
> {
|
|
79
81
|
/**
|
|
80
82
|
* Type symbol, marking a type in a way to increase type safety via strong type checking.
|
|
@@ -85,5 +87,5 @@ export interface WithType<
|
|
|
85
87
|
/**
|
|
86
88
|
* Type symbol, marking a type in a way to increase type safety via strong type checking.
|
|
87
89
|
*/
|
|
88
|
-
get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind>;
|
|
90
|
+
get [typeSchemaSymbol](): TreeNodeSchemaClass<TName, TKind, unknown, never, boolean, TInfo>;
|
|
89
91
|
}
|
package/src/simple-tree/index.ts
CHANGED
|
@@ -19,6 +19,7 @@ export {
|
|
|
19
19
|
type Unhydrated,
|
|
20
20
|
type InternalTreeNode,
|
|
21
21
|
isTreeNode,
|
|
22
|
+
tryDisposeTreeNode,
|
|
22
23
|
} from "./core/index.js";
|
|
23
24
|
export {
|
|
24
25
|
type ITree,
|
|
@@ -44,6 +45,25 @@ export {
|
|
|
44
45
|
type TreeNodeApi,
|
|
45
46
|
cursorFromInsertable,
|
|
46
47
|
createFromInsertable,
|
|
48
|
+
type NodeChangedData,
|
|
49
|
+
TreeBeta,
|
|
50
|
+
type TreeChangeEventsBeta,
|
|
51
|
+
type SimpleTreeSchema,
|
|
52
|
+
type JsonSchemaId,
|
|
53
|
+
type JsonSchemaType,
|
|
54
|
+
type JsonObjectNodeSchema,
|
|
55
|
+
type JsonArrayNodeSchema,
|
|
56
|
+
type JsonMapNodeSchema,
|
|
57
|
+
type JsonLeafNodeSchema,
|
|
58
|
+
type JsonSchemaRef,
|
|
59
|
+
type JsonRefPath,
|
|
60
|
+
type JsonNodeSchema,
|
|
61
|
+
type JsonNodeSchemaBase,
|
|
62
|
+
type JsonTreeSchema,
|
|
63
|
+
type JsonFieldSchema,
|
|
64
|
+
type JsonLeafSchemaType,
|
|
65
|
+
getJsonSchema,
|
|
66
|
+
getSimpleSchema,
|
|
47
67
|
} from "./api/index.js";
|
|
48
68
|
export {
|
|
49
69
|
type NodeFromSchema,
|
|
@@ -65,7 +85,7 @@ export {
|
|
|
65
85
|
normalizeFieldSchema,
|
|
66
86
|
type ApplyKind,
|
|
67
87
|
} from "./schemaTypes.js";
|
|
68
|
-
export { getOrCreateInnerNode
|
|
88
|
+
export { getOrCreateInnerNode } from "./proxyBinding.js";
|
|
69
89
|
export { toFlexSchema } from "./toFlexSchema.js";
|
|
70
90
|
export type {
|
|
71
91
|
FieldHasDefaultUnsafe,
|
|
@@ -86,7 +106,6 @@ export type {
|
|
|
86
106
|
} from "./typesUnsafe.js";
|
|
87
107
|
export {
|
|
88
108
|
getTreeNodeForField,
|
|
89
|
-
type InsertableContent,
|
|
90
109
|
prepareContentForHydration,
|
|
91
110
|
} from "./proxies.js";
|
|
92
111
|
|
|
@@ -103,22 +122,12 @@ export {
|
|
|
103
122
|
setField,
|
|
104
123
|
} from "./objectNode.js";
|
|
105
124
|
export type { TreeMapNode, MapNodeInsertableData } from "./mapNode.js";
|
|
106
|
-
export { mapTreeFromNodeData } from "./toMapTree.js";
|
|
107
|
-
export
|
|
125
|
+
export { mapTreeFromNodeData, type InsertableContent } from "./toMapTree.js";
|
|
126
|
+
export { toStoredSchema, getStoredSchema, getFlexSchema } from "./toFlexSchema.js";
|
|
108
127
|
export {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
type JsonSchemaRef,
|
|
116
|
-
type JsonRefPath,
|
|
117
|
-
type JsonNodeSchema,
|
|
118
|
-
type JsonNodeSchemaBase,
|
|
119
|
-
type JsonTreeSchema,
|
|
120
|
-
type JsonFieldSchema,
|
|
121
|
-
type JsonLeafSchemaType,
|
|
122
|
-
} from "./jsonSchema.js";
|
|
123
|
-
export { getJsonSchema } from "./getJsonSchema.js";
|
|
124
|
-
export { getSimpleSchema } from "./getSimpleSchema.js";
|
|
128
|
+
numberSchema,
|
|
129
|
+
stringSchema,
|
|
130
|
+
booleanSchema,
|
|
131
|
+
handleSchema,
|
|
132
|
+
nullSchema,
|
|
133
|
+
} from "./leafNodeSchema.js";
|
|
@@ -5,10 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
7
|
|
|
8
|
-
import
|
|
9
|
-
import { leaf } from "../domains/index.js";
|
|
8
|
+
import { type TreeValue, ValueSchema } from "../core/index.js";
|
|
10
9
|
import {
|
|
11
|
-
|
|
10
|
+
LeafNodeSchema as FlexLeafNodeSchema,
|
|
12
11
|
type FlexTreeNode,
|
|
13
12
|
isFlexTreeNode,
|
|
14
13
|
valueSchemaAllows,
|
|
@@ -20,12 +19,6 @@ import {
|
|
|
20
19
|
type TreeNodeSchemaNonClass,
|
|
21
20
|
} from "./core/index.js";
|
|
22
21
|
|
|
23
|
-
type UnbrandedName<T extends FlexLeafNodeSchema> = T["name"] extends TreeNodeSchemaIdentifier<
|
|
24
|
-
infer Name extends string
|
|
25
|
-
>
|
|
26
|
-
? Name
|
|
27
|
-
: T["name"];
|
|
28
|
-
|
|
29
22
|
/**
|
|
30
23
|
* Instances of this class are schema for leaf nodes.
|
|
31
24
|
* @remarks
|
|
@@ -35,14 +28,14 @@ type UnbrandedName<T extends FlexLeafNodeSchema> = T["name"] extends TreeNodeSch
|
|
|
35
28
|
* @privateRemarks
|
|
36
29
|
* This class refers to the underlying flex tree schema in its constructor, so this class can't be included in the package API.
|
|
37
30
|
*/
|
|
38
|
-
export class LeafNodeSchema<T extends
|
|
39
|
-
implements TreeNodeSchemaNonClass<
|
|
31
|
+
export class LeafNodeSchema<Name extends string, const T extends ValueSchema>
|
|
32
|
+
implements TreeNodeSchemaNonClass<Name, NodeKind.Leaf, TreeValue<T>, TreeValue<T>>
|
|
40
33
|
{
|
|
41
|
-
public readonly identifier:
|
|
34
|
+
public readonly identifier: Name;
|
|
42
35
|
public readonly kind = NodeKind.Leaf;
|
|
43
|
-
public readonly info: T
|
|
36
|
+
public readonly info: T;
|
|
44
37
|
public readonly implicitlyConstructable = true as const;
|
|
45
|
-
public create(data: TreeValue<T
|
|
38
|
+
public create(data: TreeValue<T> | FlexTreeNode): TreeValue<T> {
|
|
46
39
|
if (isFlexTreeNode(data)) {
|
|
47
40
|
const value = data.value;
|
|
48
41
|
assert(valueSchemaAllows(this.info, value), 0x916 /* invalid value */);
|
|
@@ -51,30 +44,33 @@ export class LeafNodeSchema<T extends FlexLeafNodeSchema>
|
|
|
51
44
|
return data;
|
|
52
45
|
}
|
|
53
46
|
|
|
54
|
-
public constructor(
|
|
47
|
+
public constructor(name: Name, t: T) {
|
|
48
|
+
const schema: FlexLeafNodeSchema = new FlexLeafNodeSchema({ name: "makeLeaf" }, name, t);
|
|
55
49
|
setFlexSchemaFromClassSchema(this, schema);
|
|
56
|
-
this.identifier =
|
|
57
|
-
this.info =
|
|
50
|
+
this.identifier = name;
|
|
51
|
+
this.info = t;
|
|
58
52
|
}
|
|
59
53
|
}
|
|
60
54
|
|
|
61
55
|
/**
|
|
62
56
|
* Wrapper around LeafNodeSchema's constructor that provides the return type that is desired in the package public API.
|
|
63
57
|
*/
|
|
64
|
-
function makeLeaf<T extends
|
|
65
|
-
|
|
58
|
+
function makeLeaf<Name extends string, const T extends ValueSchema>(
|
|
59
|
+
name: Name,
|
|
60
|
+
t: T,
|
|
66
61
|
): TreeNodeSchema<
|
|
67
|
-
|
|
62
|
+
`com.fluidframework.leaf.${Name}`,
|
|
68
63
|
NodeKind.Leaf,
|
|
69
|
-
TreeValue<T
|
|
70
|
-
TreeValue<T
|
|
64
|
+
TreeValue<T>,
|
|
65
|
+
TreeValue<T>
|
|
71
66
|
> {
|
|
72
|
-
|
|
67
|
+
// Names in this domain follow https://en.wikipedia.org/wiki/Reverse_domain_name_notation
|
|
68
|
+
return new LeafNodeSchema(`com.fluidframework.leaf.${name}`, t);
|
|
73
69
|
}
|
|
74
70
|
|
|
75
71
|
// Leaf schema shared between all SchemaFactory instances.
|
|
76
|
-
export const stringSchema = makeLeaf(
|
|
77
|
-
export const numberSchema = makeLeaf(
|
|
78
|
-
export const booleanSchema = makeLeaf(
|
|
79
|
-
export const nullSchema = makeLeaf(
|
|
80
|
-
export const handleSchema = makeLeaf(
|
|
72
|
+
export const stringSchema = makeLeaf("string", ValueSchema.String);
|
|
73
|
+
export const numberSchema = makeLeaf("number", ValueSchema.Number);
|
|
74
|
+
export const booleanSchema = makeLeaf("boolean", ValueSchema.Boolean);
|
|
75
|
+
export const nullSchema = makeLeaf("null", ValueSchema.Null);
|
|
76
|
+
export const handleSchema = makeLeaf("handle", ValueSchema.FluidHandle);
|