@fluidframework/tree 2.23.0-323641 → 2.23.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/extensions.json +1 -0
- package/CHANGELOG.md +47 -0
- package/api-report/tree.alpha.api.md +31 -0
- package/dist/alpha.d.ts +1 -0
- package/dist/codec/codec.js +3 -3
- package/dist/codec/codec.js.map +1 -1
- package/dist/codec/discriminatedUnions.d.ts.map +1 -1
- package/dist/codec/discriminatedUnions.js +1 -1
- package/dist/codec/discriminatedUnions.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +3 -3
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +5 -4
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/treeTextFormat.js +1 -1
- package/dist/core/tree/treeTextFormat.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/basicChunk.js +11 -8
- package/dist/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +2 -2
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +3 -3
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -3
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js +3 -3
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/emptyChunk.js +14 -14
- package/dist/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +6 -4
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +4 -3
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +5 -4
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.js +1 -1
- package/dist/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.js +6 -4
- package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/dist/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/isNeverTree.js +4 -4
- package/dist/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +5 -5
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
- package/dist/feature-libraries/node-key/mockNodeKeyManager.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/schema-index/codec.js +1 -1
- package/dist/feature-libraries/schema-index/codec.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +1 -1
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/invert.js +1 -1
- package/dist/feature-libraries/sequence-field/invert.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +1 -1
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/dist/feature-libraries/treeCursorUtils.js +6 -4
- package/dist/feature-libraries/treeCursorUtils.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts +113 -0
- package/dist/jsonDomainSchema.d.ts.map +1 -0
- package/dist/jsonDomainSchema.js +101 -0
- package/dist/jsonDomainSchema.js.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/serializableDomainSchema.d.ts +108 -0
- package/dist/serializableDomainSchema.d.ts.map +1 -0
- package/dist/serializableDomainSchema.js +90 -0
- package/dist/serializableDomainSchema.js.map +1 -0
- package/dist/shared-tree/index.d.ts +1 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.js +1 -1
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +35 -19
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +14 -17
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/treeApiAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeApiAlpha.js +4 -4
- package/dist/shared-tree/treeApiAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.js +1 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js +8 -7
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.d.ts +1 -2
- package/dist/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +2 -2
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/api/customTree.js +3 -3
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js +1 -1
- package/dist/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/simpleTreeIndex.js +3 -3
- package/dist/simple-tree/api/simpleTreeIndex.js.map +1 -1
- package/dist/simple-tree/api/tree.js +1 -1
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +9 -5
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +5 -4
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/api/view.js +1 -1
- package/dist/simple-tree/api/view.js.map +1 -1
- package/dist/simple-tree/arrayNode.js +2 -2
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js +1 -1
- package/dist/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/dist/simple-tree/core/schemaCaching.js +1 -1
- package/dist/simple-tree/core/schemaCaching.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +6 -6
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/dist/simple-tree/core/unhydratedFlexTree.js +5 -5
- package/dist/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/dist/simple-tree/objectNode.js +2 -2
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/proxies.js +1 -1
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/toMapTree.js +3 -3
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +2 -1
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +5 -2
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/util/idAllocator.js +1 -1
- package/dist/util/idAllocator.js.map +1 -1
- package/dist/util/index.d.ts +2 -2
- package/dist/util/index.d.ts.map +1 -1
- package/dist/util/index.js +4 -4
- package/dist/util/index.js.map +1 -1
- package/dist/util/nestedMap.d.ts +2 -10
- package/dist/util/nestedMap.d.ts.map +1 -1
- package/dist/util/nestedMap.js +9 -28
- package/dist/util/nestedMap.js.map +1 -1
- package/dist/util/utils.d.ts +7 -6
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +18 -13
- package/dist/util/utils.js.map +1 -1
- package/lib/alpha.d.ts +1 -0
- package/lib/codec/codec.js +3 -3
- package/lib/codec/codec.js.map +1 -1
- package/lib/codec/discriminatedUnions.d.ts.map +1 -1
- package/lib/codec/discriminatedUnions.js +1 -1
- package/lib/codec/discriminatedUnions.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +3 -3
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +5 -4
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/treeTextFormat.js +1 -1
- package/lib/core/tree/treeTextFormat.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/basicChunk.js +11 -8
- package/lib/feature-libraries/chunked-forest/basicChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +2 -2
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +3 -3
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +4 -3
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js +3 -3
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncoding.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/emptyChunk.js +14 -14
- package/lib/feature-libraries/chunked-forest/emptyChunk.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +6 -4
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +4 -3
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +5 -4
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.d.ts.map +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.js +1 -1
- package/lib/feature-libraries/indexing/anchorTreeIndex.js.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.js +6 -4
- package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/lib/feature-libraries/modular-schema/isNeverTree.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/isNeverTree.js +4 -4
- package/lib/feature-libraries/modular-schema/isNeverTree.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +4 -4
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +6 -6
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/node-key/mockNodeKeyManager.js +1 -1
- package/lib/feature-libraries/node-key/mockNodeKeyManager.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/schema-index/codec.js +1 -1
- package/lib/feature-libraries/schema-index/codec.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +1 -1
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/invert.js +1 -1
- package/lib/feature-libraries/sequence-field/invert.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +1 -1
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.d.ts.map +1 -1
- package/lib/feature-libraries/treeCursorUtils.js +6 -4
- package/lib/feature-libraries/treeCursorUtils.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts +113 -0
- package/lib/jsonDomainSchema.d.ts.map +1 -0
- package/lib/jsonDomainSchema.js +98 -0
- package/lib/jsonDomainSchema.js.map +1 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/serializableDomainSchema.d.ts +108 -0
- package/lib/serializableDomainSchema.d.ts.map +1 -0
- package/lib/serializableDomainSchema.js +87 -0
- package/lib/serializableDomainSchema.js.map +1 -0
- package/lib/shared-tree/index.d.ts +1 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.js +1 -1
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +35 -19
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +15 -18
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/treeApiAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeApiAlpha.js +4 -4
- package/lib/shared-tree/treeApiAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.js +1 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js +8 -7
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.d.ts +1 -2
- package/lib/shared-tree-core/sharedTreeCore.d.ts.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +2 -2
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/api/customTree.js +3 -3
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js +1 -1
- package/lib/simple-tree/api/schemaCreationUtilities.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/simpleTreeIndex.js +3 -3
- package/lib/simple-tree/api/simpleTreeIndex.js.map +1 -1
- package/lib/simple-tree/api/tree.js +1 -1
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +9 -5
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +5 -4
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/api/view.js +1 -1
- package/lib/simple-tree/api/view.js.map +1 -1
- package/lib/simple-tree/arrayNode.js +2 -2
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.d.ts.map +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js +1 -1
- package/lib/simple-tree/core/getOrCreateNode.js.map +1 -1
- package/lib/simple-tree/core/schemaCaching.js +1 -1
- package/lib/simple-tree/core/schemaCaching.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +6 -6
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.d.ts.map +1 -1
- package/lib/simple-tree/core/unhydratedFlexTree.js +5 -5
- package/lib/simple-tree/core/unhydratedFlexTree.js.map +1 -1
- package/lib/simple-tree/objectNode.js +2 -2
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/proxies.js +1 -1
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/toMapTree.js +3 -3
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +2 -1
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +5 -2
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/util/idAllocator.js +1 -1
- package/lib/util/idAllocator.js.map +1 -1
- package/lib/util/index.d.ts +2 -2
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +2 -2
- package/lib/util/index.js.map +1 -1
- package/lib/util/nestedMap.d.ts +2 -10
- package/lib/util/nestedMap.d.ts.map +1 -1
- package/lib/util/nestedMap.js +5 -23
- package/lib/util/nestedMap.js.map +1 -1
- package/lib/util/utils.d.ts +7 -6
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +15 -11
- package/lib/util/utils.js.map +1 -1
- package/package.json +22 -22
- package/src/codec/codec.ts +3 -3
- package/src/codec/discriminatedUnions.ts +2 -1
- package/src/core/schema-stored/schema.ts +5 -3
- package/src/core/tree/anchorSet.ts +5 -4
- package/src/core/tree/treeTextFormat.ts +1 -1
- package/src/feature-libraries/chunked-forest/basicChunk.ts +11 -8
- package/src/feature-libraries/chunked-forest/chunkTree.ts +2 -2
- package/src/feature-libraries/chunked-forest/chunkedForest.ts +3 -3
- package/src/feature-libraries/chunked-forest/codec/chunkEncodingGeneric.ts +2 -2
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +4 -3
- package/src/feature-libraries/chunked-forest/codec/nodeShape.ts +2 -2
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncoding.ts +4 -3
- package/src/feature-libraries/chunked-forest/emptyChunk.ts +14 -14
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +6 -4
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
- package/src/feature-libraries/default-schema/schemaChecker.ts +1 -1
- package/src/feature-libraries/flex-tree/lazyField.ts +6 -8
- package/src/feature-libraries/flex-tree/lazyNode.ts +6 -4
- package/src/feature-libraries/indexing/anchorTreeIndex.ts +2 -1
- package/src/feature-libraries/modular-schema/comparison.ts +7 -5
- package/src/feature-libraries/modular-schema/isNeverTree.ts +6 -4
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +4 -4
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +7 -6
- package/src/feature-libraries/node-key/mockNodeKeyManager.ts +1 -1
- package/src/feature-libraries/object-forest/objectForest.ts +1 -1
- package/src/feature-libraries/schema-index/codec.ts +1 -1
- package/src/feature-libraries/sequence-field/compose.ts +1 -1
- package/src/feature-libraries/sequence-field/invert.ts +1 -1
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +1 -1
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +1 -1
- package/src/feature-libraries/sequence-field/utils.ts +1 -1
- package/src/feature-libraries/treeCursorUtils.ts +6 -4
- package/src/index.ts +3 -1
- package/src/jsonDomainSchema.ts +129 -0
- package/src/packageVersion.ts +1 -1
- package/src/serializableDomainSchema.ts +121 -0
- package/src/shared-tree/index.ts +0 -1
- package/src/shared-tree/schematizeTree.ts +1 -1
- package/src/shared-tree/sharedTree.ts +26 -41
- package/src/shared-tree/sharedTreeChangeFamily.ts +1 -1
- package/src/shared-tree/treeApiAlpha.ts +12 -4
- package/src/shared-tree/treeCheckout.ts +1 -1
- package/src/shared-tree-core/editManager.ts +8 -7
- package/src/shared-tree-core/sharedTreeCore.ts +6 -4
- package/src/simple-tree/api/customTree.ts +3 -3
- package/src/simple-tree/api/schemaCreationUtilities.ts +1 -1
- package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -1
- package/src/simple-tree/api/simpleTreeIndex.ts +3 -3
- package/src/simple-tree/api/tree.ts +1 -1
- package/src/simple-tree/api/treeNodeApi.ts +11 -6
- package/src/simple-tree/api/verboseTree.ts +8 -4
- package/src/simple-tree/api/view.ts +1 -1
- package/src/simple-tree/arrayNode.ts +2 -2
- package/src/simple-tree/core/getOrCreateNode.ts +2 -1
- package/src/simple-tree/core/schemaCaching.ts +1 -1
- package/src/simple-tree/core/treeNodeKernel.ts +9 -6
- package/src/simple-tree/core/unhydratedFlexTree.ts +7 -5
- package/src/simple-tree/objectNode.ts +2 -2
- package/src/simple-tree/proxies.ts +1 -1
- package/src/simple-tree/toMapTree.ts +3 -3
- package/src/simple-tree/toStoredSchema.ts +2 -1
- package/src/simple-tree/treeNodeValid.ts +5 -2
- package/src/util/idAllocator.ts +1 -1
- package/src/util/index.ts +2 -2
- package/src/util/nestedMap.ts +9 -33
- package/src/util/utils.ts +20 -12
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
} from "../core/index.js";
|
|
41
41
|
import { isObjectNodeSchema } from "../objectNodeTypes.js";
|
|
42
42
|
import { isLazy, type LazyItem } from "../flexList.js";
|
|
43
|
+
import { markSchemaMostDerived } from "./schemaFactory.js";
|
|
43
44
|
|
|
44
45
|
/**
|
|
45
46
|
* Provides various functions for analyzing {@link TreeNode}s.
|
|
@@ -174,7 +175,7 @@ export const treeNodeApi: TreeNodeApi = {
|
|
|
174
175
|
changedFields,
|
|
175
176
|
(field) =>
|
|
176
177
|
nodeSchema.storedKeyToPropertyKey.get(field) ??
|
|
177
|
-
fail(
|
|
178
|
+
fail(0xb36 /* Could not find stored key in schema. */),
|
|
178
179
|
),
|
|
179
180
|
);
|
|
180
181
|
listener({ changedProperties });
|
|
@@ -203,6 +204,10 @@ export const treeNodeApi: TreeNodeApi = {
|
|
|
203
204
|
value: unknown,
|
|
204
205
|
schema: TSchema,
|
|
205
206
|
): value is TreeNodeFromImplicitAllowedTypes<TSchema> {
|
|
207
|
+
// This "is" utility would return false if the provided schema is a base type of the actual schema.
|
|
208
|
+
// This could be confusing, and that case can only be hit when violating the rule that there is a single most derived schema that gets used (See documentation on TreeNodeSchemaClass).
|
|
209
|
+
// Therefore this uses markSchemaMostDerived to ensure an informative usage error is thrown in the case where a base type is used.
|
|
210
|
+
|
|
206
211
|
const actualSchema = tryGetSchema(value);
|
|
207
212
|
if (actualSchema === undefined) {
|
|
208
213
|
return false;
|
|
@@ -210,19 +215,19 @@ export const treeNodeApi: TreeNodeApi = {
|
|
|
210
215
|
if (isReadonlyArray<LazyItem<TreeNodeSchema>>(schema)) {
|
|
211
216
|
for (const singleSchema of schema) {
|
|
212
217
|
const testSchema = isLazy(singleSchema) ? singleSchema() : singleSchema;
|
|
218
|
+
markSchemaMostDerived(testSchema);
|
|
213
219
|
if (testSchema === actualSchema) {
|
|
214
220
|
return true;
|
|
215
221
|
}
|
|
216
222
|
}
|
|
217
223
|
return false;
|
|
218
224
|
} else {
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
return (schema as TreeNodeSchema) === actualSchema;
|
|
225
|
+
markSchemaMostDerived(schema);
|
|
226
|
+
return schema === actualSchema;
|
|
222
227
|
}
|
|
223
228
|
},
|
|
224
229
|
schema(node: TreeNode | TreeLeafValue): TreeNodeSchema {
|
|
225
|
-
return tryGetSchema(node) ?? fail(
|
|
230
|
+
return tryGetSchema(node) ?? fail(0xb37 /* Not a tree node */);
|
|
226
231
|
},
|
|
227
232
|
shortId(node: TreeNode): number | string | undefined {
|
|
228
233
|
const schema = node[typeSchemaSymbol];
|
|
@@ -341,7 +346,7 @@ function getPropertyKeyFromStoredKey(
|
|
|
341
346
|
}
|
|
342
347
|
|
|
343
348
|
if (fields[storedKey] === undefined) {
|
|
344
|
-
fail(
|
|
349
|
+
fail(0xb38 /* Existing stored key should always map to a property key */);
|
|
345
350
|
}
|
|
346
351
|
|
|
347
352
|
return storedKey;
|
|
@@ -172,7 +172,8 @@ export function applySchemaToParserOptions<TCustom>(
|
|
|
172
172
|
: {
|
|
173
173
|
encode: (type, key: FieldKey): string => {
|
|
174
174
|
// translate stored key into property key.
|
|
175
|
-
const simpleNodeSchema =
|
|
175
|
+
const simpleNodeSchema =
|
|
176
|
+
context.schema.get(brand(type)) ?? fail(0xb39 /* missing schema */);
|
|
176
177
|
if (isObjectNodeSchema(simpleNodeSchema)) {
|
|
177
178
|
const propertyKey = simpleNodeSchema.storedKeyToPropertyKey.get(key);
|
|
178
179
|
if (propertyKey !== undefined) {
|
|
@@ -193,10 +194,12 @@ export function applySchemaToParserOptions<TCustom>(
|
|
|
193
194
|
return key;
|
|
194
195
|
},
|
|
195
196
|
parse: (type, inputKey): FieldKey => {
|
|
196
|
-
const simpleNodeSchema =
|
|
197
|
+
const simpleNodeSchema =
|
|
198
|
+
context.schema.get(brand(type)) ?? fail(0xb3a /* missing schema */);
|
|
197
199
|
if (isObjectNodeSchema(simpleNodeSchema)) {
|
|
198
200
|
const info =
|
|
199
|
-
simpleNodeSchema.flexKeyMap.get(inputKey) ??
|
|
201
|
+
simpleNodeSchema.flexKeyMap.get(inputKey) ??
|
|
202
|
+
fail(0xb3b /* missing field info */);
|
|
200
203
|
return info.storedKey;
|
|
201
204
|
}
|
|
202
205
|
return brand(inputKey);
|
|
@@ -345,7 +348,8 @@ function verboseFromCursorInner<TCustom>(
|
|
|
345
348
|
schema: ReadonlyMap<string, TreeNodeSchema>,
|
|
346
349
|
): VerboseTree<TCustom> {
|
|
347
350
|
const fields = customFromCursor(reader, options, schema, verboseFromCursorInner);
|
|
348
|
-
const nodeSchema =
|
|
351
|
+
const nodeSchema =
|
|
352
|
+
schema.get(reader.type) ?? fail(0xb3c /* missing schema for type in cursor */);
|
|
349
353
|
if (nodeSchema.kind === NodeKind.Leaf) {
|
|
350
354
|
return fields as CustomTreeValue<TCustom>;
|
|
351
355
|
}
|
|
@@ -250,7 +250,7 @@ export class ViewSchema {
|
|
|
250
250
|
this.viewSchemaAsStored.nodeSchema.get(adapter.output),
|
|
251
251
|
)
|
|
252
252
|
) {
|
|
253
|
-
fail(
|
|
253
|
+
fail(0xb3d /* tree adapter for stored adapter.output should not be never */);
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
256
|
|
|
@@ -858,7 +858,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
858
858
|
// Therefore it must include `length`,
|
|
859
859
|
// even though this "length" is never invoked (due to being shadowed by the proxy provided own property).
|
|
860
860
|
public get length(): number {
|
|
861
|
-
return fail(
|
|
861
|
+
return fail(0xadb /* Proxy should intercept length */);
|
|
862
862
|
}
|
|
863
863
|
|
|
864
864
|
public [Symbol.iterator](): IterableIterator<TreeNodeFromImplicitAllowedTypes<T>> {
|
|
@@ -1045,7 +1045,7 @@ abstract class CustomArrayNodeBase<const T extends ImplicitAllowedTypes>
|
|
|
1045
1045
|
throw new UsageError(`Concurrent editing and iteration is not allowed.`);
|
|
1046
1046
|
}
|
|
1047
1047
|
for (let i = 0; i < this.length; i++) {
|
|
1048
|
-
yield this.at(i) ?? fail(
|
|
1048
|
+
yield this.at(i) ?? fail(0xadc /* Index is out of bounds */);
|
|
1049
1049
|
if (initialLastUpdatedStamp !== kernel.generationNumber) {
|
|
1050
1050
|
throw new UsageError(`Concurrent editing and iteration is not allowed.`);
|
|
1051
1051
|
}
|
|
@@ -31,7 +31,8 @@ export function getOrCreateNodeFromInnerNode(flexNode: InnerNode): TreeNode | Tr
|
|
|
31
31
|
return cached;
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
const classSchema =
|
|
34
|
+
const classSchema =
|
|
35
|
+
getSimpleNodeSchemaFromInnerNode(flexNode) ?? fail(0xb3e /* Missing schema */);
|
|
35
36
|
const node = flexNode as unknown as InternalTreeNode;
|
|
36
37
|
// eslint-disable-next-line unicorn/prefer-ternary
|
|
37
38
|
if (typeof classSchema === "function") {
|
|
@@ -17,7 +17,7 @@ import { SimpleContextSlot, type Context } from "./context.js";
|
|
|
17
17
|
*/
|
|
18
18
|
export function getSimpleNodeSchemaFromInnerNode(innerNode: InnerNode): TreeNodeSchema {
|
|
19
19
|
const context: Context = getSimpleContextFromInnerNode(innerNode);
|
|
20
|
-
return context.schema.get(innerNode.schema) ?? fail(
|
|
20
|
+
return context.schema.get(innerNode.schema) ?? fail(0xb3f /* missing schema from context */);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -184,7 +184,7 @@ export class TreeNodeKernel {
|
|
|
184
184
|
// This can't be cached on this.#hydrated during hydration since initial tree is hydrated before the context is cached on the anchorSet.
|
|
185
185
|
return (
|
|
186
186
|
this.#hydrationState?.anchorNode.anchorSet.slots.get(SimpleContextSlot) ??
|
|
187
|
-
fail(
|
|
187
|
+
fail(0xb40 /* missing simple-tree context */)
|
|
188
188
|
);
|
|
189
189
|
}
|
|
190
190
|
return this.initialContext;
|
|
@@ -303,7 +303,8 @@ export class TreeNodeKernel {
|
|
|
303
303
|
this.#hydrationState.innerNode = flexNode;
|
|
304
304
|
} else {
|
|
305
305
|
// ...otherwise, the flex node must be created
|
|
306
|
-
const context =
|
|
306
|
+
const context =
|
|
307
|
+
anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb41 /* missing context */);
|
|
307
308
|
const cursor = context.checkout.forest.allocateCursor("getFlexNode");
|
|
308
309
|
context.checkout.forest.moveCursorToPath(anchorNode, cursor);
|
|
309
310
|
this.#hydrationState.innerNode = makeTree(context, cursor);
|
|
@@ -332,7 +333,8 @@ export class TreeNodeKernel {
|
|
|
332
333
|
public anchorProxy(anchors: AnchorSet, path: UpPath): AnchorNode {
|
|
333
334
|
assert(!anchorForgetters.has(this.node), 0x91c /* Proxy anchor should not be set twice */);
|
|
334
335
|
const anchor = anchors.track(path);
|
|
335
|
-
const anchorNode =
|
|
336
|
+
const anchorNode =
|
|
337
|
+
anchors.locate(anchor) ?? fail(0xb42 /* Expected anchor node to be present */);
|
|
336
338
|
this.hydrate(anchorNode);
|
|
337
339
|
const forget = (): void => {
|
|
338
340
|
if (anchors.locate(anchor)) {
|
|
@@ -434,9 +436,9 @@ export function getTreeNodeSchemaFromHydratedFlexNode(flexNode: FlexTreeNode): T
|
|
|
434
436
|
|
|
435
437
|
const context =
|
|
436
438
|
flexNode.anchorNode.anchorSet.slots.get(SimpleContextSlot) ??
|
|
437
|
-
fail(
|
|
439
|
+
fail(0xb43 /* Missing SimpleContextSlot */);
|
|
438
440
|
|
|
439
|
-
return context.schema.get(flexNode.schema) ?? fail(
|
|
441
|
+
return context.schema.get(flexNode.schema) ?? fail(0xb44 /* Missing schema */);
|
|
440
442
|
}
|
|
441
443
|
|
|
442
444
|
/**
|
|
@@ -461,7 +463,8 @@ function flexNodeFromAnchor(anchorNode: AnchorNode): FlexTreeNode {
|
|
|
461
463
|
if (flexNode !== undefined) {
|
|
462
464
|
return flexNode; // If it does have a flex node, return it...
|
|
463
465
|
} // ...otherwise, the flex node must be created
|
|
464
|
-
const context =
|
|
466
|
+
const context =
|
|
467
|
+
anchorNode.anchorSet.slots.get(ContextSlot) ?? fail(0xb45 /* missing context */);
|
|
465
468
|
const cursor = context.checkout.forest.allocateCursor("getFlexNode");
|
|
466
469
|
context.checkout.forest.moveCursorToPath(anchorNode, cursor);
|
|
467
470
|
const newFlexNode = makeTree(context, cursor);
|
|
@@ -79,7 +79,9 @@ export class UnhydratedFlexTreeNode implements UnhydratedFlexTreeNode {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
public get storedSchema(): TreeNodeStoredSchema {
|
|
82
|
-
return
|
|
82
|
+
return (
|
|
83
|
+
this.context.schema.nodeSchema.get(this.mapTree.type) ?? fail(0xb46 /* missing schema */)
|
|
84
|
+
);
|
|
83
85
|
}
|
|
84
86
|
|
|
85
87
|
public readonly [flexTreeMarker] = FlexTreeEntityKind.Node as const;
|
|
@@ -215,7 +217,7 @@ export class UnhydratedFlexTreeNode implements UnhydratedFlexTreeNode {
|
|
|
215
217
|
public get anchorNode(): AnchorNode {
|
|
216
218
|
// This API is relevant to `LazyTreeNode`s, but not `UnhydratedFlexTreeNode`s.
|
|
217
219
|
// TODO: Refactor the FlexTreeNode interface so that stubbing this out isn't necessary.
|
|
218
|
-
return fail(
|
|
220
|
+
return fail(0xb47 /* UnhydratedFlexTreeNode does not implement anchorNode */);
|
|
219
221
|
}
|
|
220
222
|
|
|
221
223
|
private walkTree(): void {
|
|
@@ -294,10 +296,10 @@ const unparentedLocation: LocationInField = {
|
|
|
294
296
|
},
|
|
295
297
|
schema: brand(forbiddenFieldKindIdentifier),
|
|
296
298
|
get context(): never {
|
|
297
|
-
return fail(
|
|
299
|
+
return fail(0xb48 /* unsupported */);
|
|
298
300
|
},
|
|
299
301
|
getFieldPath() {
|
|
300
|
-
fail(
|
|
302
|
+
fail(0xb49 /* unsupported */);
|
|
301
303
|
},
|
|
302
304
|
},
|
|
303
305
|
index: -1,
|
|
@@ -489,7 +491,7 @@ export class UnhydratedTreeSequenceField
|
|
|
489
491
|
this.edit((mapTrees) => {
|
|
490
492
|
removed = mapTrees.splice(index, count);
|
|
491
493
|
});
|
|
492
|
-
return removed ?? fail(
|
|
494
|
+
return removed ?? fail(0xb4a /* Expected removed to be set by edit */);
|
|
493
495
|
},
|
|
494
496
|
};
|
|
495
497
|
|
|
@@ -262,7 +262,7 @@ function createProxyHandler(
|
|
|
262
262
|
// For some reason, the getOwnPropertyDescriptor is not passed in the receiver, so use a weak map.
|
|
263
263
|
// If a refactoring is done to associated flex tree data with the target not the proxy, this extra map could be removed,
|
|
264
264
|
// and the design would be more compatible with proxyless nodes.
|
|
265
|
-
const proxy = targetToProxy.get(target) ?? fail(
|
|
265
|
+
const proxy = targetToProxy.get(target) ?? fail(0xadd /* missing proxy */);
|
|
266
266
|
const field = getOrCreateInnerNode(proxy).tryGetField(fieldInfo.storedKey);
|
|
267
267
|
|
|
268
268
|
const p: PropertyDescriptor = {
|
|
@@ -311,7 +311,7 @@ export function setField(
|
|
|
311
311
|
}
|
|
312
312
|
|
|
313
313
|
default:
|
|
314
|
-
fail(
|
|
314
|
+
fail(0xade /* invalid FieldKind */);
|
|
315
315
|
}
|
|
316
316
|
}
|
|
317
317
|
|
|
@@ -196,7 +196,7 @@ function nodeDataToMapTree(
|
|
|
196
196
|
result = objectToMapTree(data, schema);
|
|
197
197
|
break;
|
|
198
198
|
default:
|
|
199
|
-
fail(
|
|
199
|
+
fail(0xae0 /* Unrecognized schema kind */);
|
|
200
200
|
}
|
|
201
201
|
|
|
202
202
|
return result;
|
|
@@ -642,7 +642,7 @@ export function addDefaultsToMapTree(
|
|
|
642
642
|
): void {
|
|
643
643
|
const schema =
|
|
644
644
|
find(normalizeAllowedTypes(allowedTypes), (s) => s.identifier === mapTree.type) ??
|
|
645
|
-
fail(
|
|
645
|
+
fail(0xae1 /* MapTree is incompatible with schema */);
|
|
646
646
|
|
|
647
647
|
if (isObjectNodeSchema(schema)) {
|
|
648
648
|
for (const [_key, fieldInfo] of schema.flexKeyMap) {
|
|
@@ -660,7 +660,7 @@ export function addDefaultsToMapTree(
|
|
|
660
660
|
setFieldValue(mapTree.fields, data, fieldInfo.schema, fieldInfo.storedKey);
|
|
661
661
|
// call addDefaultsToMapTree on newly inserted default values
|
|
662
662
|
for (const child of mapTree.fields.get(fieldInfo.storedKey) ??
|
|
663
|
-
fail(
|
|
663
|
+
fail(0xae2 /* Expected field to be populated */)) {
|
|
664
664
|
addDefaultsToMapTree(child, fieldInfo.schema.allowedTypes, context);
|
|
665
665
|
}
|
|
666
666
|
}
|
|
@@ -71,7 +71,8 @@ export function convertField(schema: ImplicitFieldSchema): TreeFieldStoredSchema
|
|
|
71
71
|
let kind: FieldKindIdentifier;
|
|
72
72
|
let allowedTypes: ImplicitAllowedTypes;
|
|
73
73
|
if (schema instanceof FieldSchema) {
|
|
74
|
-
kind =
|
|
74
|
+
kind =
|
|
75
|
+
convertFieldKind.get(schema.kind)?.identifier ?? fail(0xae3 /* Invalid field kind */);
|
|
75
76
|
allowedTypes = schema.allowedTypes;
|
|
76
77
|
} else {
|
|
77
78
|
kind = FieldKinds.required.identifier;
|
|
@@ -58,7 +58,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
58
58
|
instance: TreeNodeValid<T>,
|
|
59
59
|
input: T,
|
|
60
60
|
): UnhydratedFlexTreeNode {
|
|
61
|
-
return fail(
|
|
61
|
+
return fail(0xae4 /* Schema must override buildRawNode */);
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
/**
|
|
@@ -66,7 +66,7 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
66
66
|
* This is a good place to perform extra validation and cache schema derived data needed for the implementation of the node.
|
|
67
67
|
*/
|
|
68
68
|
protected static oneTimeSetup<T>(this: typeof TreeNodeValid<T>): Context {
|
|
69
|
-
fail(
|
|
69
|
+
fail(0xae5 /* Missing oneTimeSetup */);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
/**
|
|
@@ -119,6 +119,9 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
119
119
|
return this.constructorCached;
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
+
// If users trying to diagnose the cause of this error becomes a common issue, more information could be captured.
|
|
123
|
+
// The call stack to when a schema is first marked most derived could be captured in debug builds and stored in the `MostDerivedData` object:
|
|
124
|
+
// This could then be included in the error to aid in debugging this error.
|
|
122
125
|
throw new UsageError(
|
|
123
126
|
`Two schema classes were used (${this.name} and ${
|
|
124
127
|
this.constructorCached.constructor.name
|
package/src/util/idAllocator.ts
CHANGED
|
@@ -44,6 +44,6 @@ export function idAllocatorFromState(state: IdAllocationState): IdAllocator {
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
export const fakeIdAllocator: IdAllocator = {
|
|
47
|
-
allocate: () => fail(
|
|
47
|
+
allocate: () => fail(0xae6 /* Should not allocate IDs */),
|
|
48
48
|
getMaxId: () => 0,
|
|
49
49
|
};
|
package/src/util/index.ts
CHANGED
|
@@ -19,8 +19,6 @@ export {
|
|
|
19
19
|
} from "./opaque.js";
|
|
20
20
|
export {
|
|
21
21
|
deleteFromNestedMap,
|
|
22
|
-
getOrAddInMap,
|
|
23
|
-
getOrAddInMapLazy,
|
|
24
22
|
getOrAddInNestedMap,
|
|
25
23
|
getOrDefaultInNestedMap,
|
|
26
24
|
forEachInNestedMap,
|
|
@@ -34,6 +32,7 @@ export {
|
|
|
34
32
|
mapNestedMap,
|
|
35
33
|
nestedMapToFlatList,
|
|
36
34
|
nestedMapFromFlatList,
|
|
35
|
+
getOrCreateInNestedMap,
|
|
37
36
|
} from "./nestedMap.js";
|
|
38
37
|
export { addToNestedSet, type NestedSet, nestedSetContains } from "./nestedSet.js";
|
|
39
38
|
export { type OffsetList, OffsetListFactory } from "./offsetList.js";
|
|
@@ -96,6 +95,7 @@ export {
|
|
|
96
95
|
hasSingle,
|
|
97
96
|
defineLazyCachedProperty,
|
|
98
97
|
copyPropertyIfDefined as copyProperty,
|
|
98
|
+
getOrAddInMap,
|
|
99
99
|
} from "./utils.js";
|
|
100
100
|
export { ReferenceCountedBase, type ReferenceCounted } from "./referenceCounting.js";
|
|
101
101
|
|
package/src/util/nestedMap.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import { oob } from "@fluidframework/core-utils/internal";
|
|
7
7
|
|
|
8
|
-
import
|
|
8
|
+
import { getOrAddInMap, getOrCreate } from "./utils.js";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* A dictionary whose values are keyed off of two objects (key1, key2).
|
|
@@ -87,40 +87,16 @@ export function setInNestedMap<Key1, Key2, Value>(
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
/**
|
|
90
|
-
*
|
|
91
|
-
* Returns the value at `key` after setting it.
|
|
92
|
-
* This is equivalent to a get or default that adds the default to the map.
|
|
90
|
+
* {@link getOrCreate} for {@link NestedMap}.
|
|
93
91
|
*/
|
|
94
|
-
export function
|
|
95
|
-
map:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
const currentValue = map.get(key);
|
|
100
|
-
if (currentValue !== undefined) {
|
|
101
|
-
return currentValue;
|
|
102
|
-
}
|
|
103
|
-
map.set(key, value);
|
|
104
|
-
return value;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Sets the value at `key` in `map` to `generateValue()` if not already present.
|
|
109
|
-
* Returns the value at `key` after setting it.
|
|
110
|
-
*/
|
|
111
|
-
export function getOrAddInMapLazy<Key, Value>(
|
|
112
|
-
map: MapGetSet<Key, Value>,
|
|
113
|
-
key: Key,
|
|
114
|
-
generateValue: () => Value,
|
|
92
|
+
export function getOrCreateInNestedMap<Key1, Key2, Value>(
|
|
93
|
+
map: NestedMap<Key1, Key2, Value>,
|
|
94
|
+
key1: Key1,
|
|
95
|
+
key2: Key2,
|
|
96
|
+
defaultValue: (key1: Key1, key2: Key2) => Value,
|
|
115
97
|
): Value {
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
return currentValue;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
const value = generateValue();
|
|
122
|
-
map.set(key, value);
|
|
123
|
-
return value;
|
|
98
|
+
const innerMap = getOrAddInMap(map, key1, new Map<Key2, Value>());
|
|
99
|
+
return getOrCreate(innerMap, key2, (): Value => defaultValue(key1, key2));
|
|
124
100
|
}
|
|
125
101
|
|
|
126
102
|
/**
|
package/src/util/utils.ts
CHANGED
|
@@ -47,18 +47,8 @@ export function asMutable<T>(readonly: T): Mutable<T> {
|
|
|
47
47
|
|
|
48
48
|
export const clone = structuredClone;
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
* @remarks
|
|
53
|
-
* Works like {@link @fluidframework/core-utils/internal#assert}.
|
|
54
|
-
*/
|
|
55
|
-
export function fail(message: string | number): never {
|
|
56
|
-
// Declaring this here aliased to a different name avoids the assert tagging objecting to the usages of `assert` below.
|
|
57
|
-
// Since users of `fail` do the assert message tagging instead, suppressing tagging errors here makes sense.
|
|
58
|
-
const assertNoTag: (condition: boolean, message: string | number) => asserts condition =
|
|
59
|
-
assert;
|
|
60
|
-
assertNoTag(false, message);
|
|
61
|
-
}
|
|
50
|
+
// TODO: update usages of this to use @fluidframework/core-utils/internal directly.
|
|
51
|
+
export { fail } from "@fluidframework/core-utils/internal";
|
|
62
52
|
|
|
63
53
|
/**
|
|
64
54
|
* Checks whether or not the given object is a `readonly` array.
|
|
@@ -177,6 +167,24 @@ export function compareSets<T>({
|
|
|
177
167
|
return true;
|
|
178
168
|
}
|
|
179
169
|
|
|
170
|
+
/**
|
|
171
|
+
* Sets the value at `key` in map to value if not already present.
|
|
172
|
+
* Returns the value at `key` after setting it.
|
|
173
|
+
* This is equivalent to a get or default that adds the default to the map.
|
|
174
|
+
*/
|
|
175
|
+
export function getOrAddInMap<Key, Value>(
|
|
176
|
+
map: MapGetSet<Key, Value>,
|
|
177
|
+
key: Key,
|
|
178
|
+
value: Value,
|
|
179
|
+
): Value {
|
|
180
|
+
const currentValue = map.get(key);
|
|
181
|
+
if (currentValue !== undefined) {
|
|
182
|
+
return currentValue;
|
|
183
|
+
}
|
|
184
|
+
map.set(key, value);
|
|
185
|
+
return value;
|
|
186
|
+
}
|
|
187
|
+
|
|
180
188
|
/**
|
|
181
189
|
* Retrieve a value from a map with the given key, or create a new entry if the key is not in the map.
|
|
182
190
|
* @param map - The map to query/update
|