@fluidframework/tree 2.51.0 → 2.53.0-350190
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +0 -1
- package/CHANGELOG.md +43 -0
- package/api-report/tree.alpha.api.md +40 -30
- package/dist/alpha.d.ts +2 -1
- package/dist/codec/codec.d.ts +2 -1
- package/dist/codec/codec.d.ts.map +1 -1
- package/dist/codec/codec.js +4 -3
- package/dist/codec/codec.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +3 -1
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +2 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +1 -23
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +2 -2
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +2 -3
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.js +68 -0
- package/dist/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.js +55 -0
- package/dist/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.js +49 -0
- package/dist/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
- package/dist/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexCodecs.js +26 -0
- package/dist/core/tree/detachedFieldIndexCodecs.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
- package/dist/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +18 -13
- package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.js +12 -0
- package/dist/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.js +14 -0
- package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js +21 -21
- package/dist/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
- package/dist/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js +74 -61
- package/dist/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
- package/dist/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format.js +18 -12
- package/dist/feature-libraries/chunked-forest/codec/format.js.map +1 -1
- package/{lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts → dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +23 -17
- package/dist/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +22 -22
- package/dist/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
- package/dist/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +15 -2
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultSchema.js +0 -2
- package/dist/feature-libraries/default-schema/defaultSchema.js.map +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts +1 -1
- package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/index.js +2 -2
- package/dist/feature-libraries/default-schema/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
- package/dist/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/schemaChecker.js +31 -26
- package/dist/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -2
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +2 -4
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.d.ts +5 -6
- package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.js +15 -16
- package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -0
- package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +49 -20
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
- package/dist/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/dist/feature-libraries/object-forest/objectForest.js +2 -3
- package/dist/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +3 -0
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts +5 -3
- package/dist/jsonDomainSchema.d.ts.map +1 -1
- package/dist/jsonDomainSchema.js.map +1 -1
- 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/shared-tree/independentView.d.ts +8 -0
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +23 -11
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +1 -1
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +0 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +9 -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 +1 -29
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts +20 -6
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +18 -7
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +2 -1
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +32 -0
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts.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/conciseTree.d.ts +2 -2
- package/dist/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/conciseTree.js +6 -6
- package/dist/simple-tree/api/conciseTree.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +11 -2
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +5 -1
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +8 -7
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +33 -23
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/customTree.d.ts +25 -4
- package/dist/simple-tree/api/customTree.d.ts.map +1 -1
- package/dist/simple-tree/api/customTree.js +42 -16
- package/dist/simple-tree/api/customTree.js.map +1 -1
- package/dist/simple-tree/api/discrepancies.d.ts +94 -0
- package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/dist/simple-tree/api/discrepancies.js +256 -0
- package/dist/simple-tree/api/discrepancies.js.map +1 -0
- package/dist/simple-tree/api/index.d.ts +3 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +3 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +17 -117
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +16 -159
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +4 -47
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +33 -11
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js +1 -7
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/schemaStatics.d.ts +158 -0
- package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -0
- package/dist/simple-tree/api/schemaStatics.js +59 -0
- package/dist/simple-tree/api/schemaStatics.js.map +1 -0
- package/dist/simple-tree/api/storedSchema.d.ts +5 -3
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +9 -3
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts +2 -2
- package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js +16 -4
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.d.ts +2 -2
- package/dist/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +15 -15
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts +43 -11
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +51 -11
- package/dist/simple-tree/core/allowedTypes.js.map +1 -1
- package/dist/simple-tree/core/context.d.ts +13 -2
- package/dist/simple-tree/core/context.d.ts.map +1 -1
- package/dist/simple-tree/core/context.js +22 -9
- package/dist/simple-tree/core/context.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +6 -4
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +8 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.js +7 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
- package/dist/simple-tree/core/toStored.d.ts +32 -0
- package/dist/simple-tree/core/toStored.d.ts.map +1 -0
- package/dist/simple-tree/core/toStored.js +37 -0
- package/dist/simple-tree/core/toStored.js.map +1 -0
- package/dist/simple-tree/core/treeNodeKernel.d.ts +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +7 -2
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts +7 -2
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +19 -4
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +22 -5
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +6 -2
- package/dist/simple-tree/core/walkSchema.js.map +1 -1
- package/dist/simple-tree/createContext.d.ts +2 -0
- package/dist/simple-tree/createContext.d.ts.map +1 -1
- package/dist/simple-tree/createContext.js +4 -2
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +1 -0
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.js +2 -1
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +7 -7
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +13 -8
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +1 -0
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +18 -4
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/index.js +1 -2
- package/dist/simple-tree/node-kinds/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +9 -2
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/dist/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/index.js +1 -2
- package/dist/simple-tree/node-kinds/object/index.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +3 -8
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +41 -44
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +9 -2
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +6 -6
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +19 -13
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/simpleSchema.d.ts +6 -21
- package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/simpleSchema.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +38 -11
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +71 -33
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/dist/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/dist/simple-tree/walkFieldSchema.d.ts +1 -0
- package/dist/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/walkFieldSchema.js +1 -0
- package/dist/simple-tree/walkFieldSchema.js.map +1 -1
- package/lib/alpha.d.ts +2 -1
- package/lib/codec/codec.d.ts +2 -1
- package/lib/codec/codec.d.ts.map +1 -1
- package/lib/codec/codec.js +4 -3
- package/lib/codec/codec.js.map +1 -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/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +3 -1
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +1 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +1 -23
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +2 -2
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +2 -3
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts +17 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.js +64 -0
- package/lib/core/tree/detachedFieldIndexCodecCommon.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.js +51 -0
- package/lib/core/tree/detachedFieldIndexCodecV1.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.js +45 -0
- package/lib/core/tree/detachedFieldIndexCodecV2.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecs.d.ts +11 -0
- package/lib/core/tree/detachedFieldIndexCodecs.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexCodecs.js +21 -0
- package/lib/core/tree/detachedFieldIndexCodecs.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +37 -0
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -0
- package/lib/core/tree/{detachedFieldIndexFormat.js → detachedFieldIndexFormatCommon.js} +13 -10
- package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.d.ts +13 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.js +9 -0
- package/lib/core/tree/detachedFieldIndexFormatV1.js.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +14 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.js +11 -0
- package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts +9 -9
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js +19 -19
- package/lib/feature-libraries/chunked-forest/codec/chunkDecoding.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts +4 -2
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js +4 -4
- package/lib/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts +50 -31
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js +70 -57
- package/lib/feature-libraries/chunked-forest/codec/compressedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.d.ts +20 -14
- package/lib/feature-libraries/chunked-forest/codec/format.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format.js +17 -11
- package/lib/feature-libraries/chunked-forest/codec/format.js.map +1 -1
- package/{dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts → lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts} +20 -14
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.d.ts.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/{nodeShape.js → nodeEncoder.js} +21 -15
- package/lib/feature-libraries/chunked-forest/codec/nodeEncoder.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts +7 -7
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js +19 -19
- package/lib/feature-libraries/chunked-forest/codec/schemaBasedEncode.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js +2 -2
- package/lib/feature-libraries/chunked-forest/codec/uncompressedEncode.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts +5 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +15 -2
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultSchema.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultSchema.js +0 -2
- package/lib/feature-libraries/default-schema/defaultSchema.js.map +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts +1 -1
- package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/index.js +1 -1
- package/lib/feature-libraries/default-schema/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts +14 -4
- package/lib/feature-libraries/default-schema/schemaChecker.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/schemaChecker.js +29 -24
- package/lib/feature-libraries/default-schema/schemaChecker.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -2
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -2
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.d.ts +5 -6
- package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.js +14 -14
- package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -0
- package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +50 -21
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts +9 -3
- package/lib/feature-libraries/modular-schema/modularChangeFormat.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.d.ts.map +1 -1
- package/lib/feature-libraries/object-forest/objectForest.js +3 -4
- package/lib/feature-libraries/object-forest/objectForest.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +3 -0
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts +5 -3
- package/lib/jsonDomainSchema.d.ts.map +1 -1
- package/lib/jsonDomainSchema.js.map +1 -1
- 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/shared-tree/independentView.d.ts +8 -0
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +21 -10
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +2 -2
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +0 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +10 -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 -30
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts +20 -6
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +19 -8
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +2 -1
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +33 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts.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/conciseTree.d.ts +2 -2
- package/lib/simple-tree/api/conciseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/conciseTree.js +6 -6
- package/lib/simple-tree/api/conciseTree.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +11 -2
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +6 -2
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +8 -7
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +35 -25
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/customTree.d.ts +25 -4
- package/lib/simple-tree/api/customTree.d.ts.map +1 -1
- package/lib/simple-tree/api/customTree.js +43 -17
- package/lib/simple-tree/api/customTree.js.map +1 -1
- package/lib/simple-tree/api/discrepancies.d.ts +94 -0
- package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/lib/simple-tree/api/discrepancies.js +251 -0
- package/lib/simple-tree/api/discrepancies.js.map +1 -0
- package/lib/simple-tree/api/index.d.ts +3 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +2 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts +9 -7
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js +19 -119
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +16 -159
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +2 -45
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +23 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js +0 -5
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/schemaStatics.d.ts +158 -0
- package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -0
- package/lib/simple-tree/api/schemaStatics.js +56 -0
- package/lib/simple-tree/api/schemaStatics.js.map +1 -0
- package/lib/simple-tree/api/storedSchema.d.ts +5 -3
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +12 -6
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts +2 -2
- package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js +14 -2
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.d.ts +2 -2
- package/lib/simple-tree/api/verboseTree.d.ts.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +9 -9
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts +43 -11
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +52 -11
- package/lib/simple-tree/core/allowedTypes.js.map +1 -1
- package/lib/simple-tree/core/context.d.ts +13 -2
- package/lib/simple-tree/core/context.d.ts.map +1 -1
- package/lib/simple-tree/core/context.js +22 -9
- package/lib/simple-tree/core/context.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +6 -4
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +4 -3
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.js +6 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
- package/lib/simple-tree/core/toStored.d.ts +32 -0
- package/lib/simple-tree/core/toStored.d.ts.map +1 -0
- package/lib/simple-tree/core/toStored.js +32 -0
- package/lib/simple-tree/core/toStored.js.map +1 -0
- package/lib/simple-tree/core/treeNodeKernel.d.ts +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +7 -2
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts +7 -2
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +17 -3
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +22 -5
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +6 -2
- package/lib/simple-tree/core/walkSchema.js.map +1 -1
- package/lib/simple-tree/createContext.d.ts +2 -0
- package/lib/simple-tree/createContext.d.ts.map +1 -1
- package/lib/simple-tree/createContext.js +5 -3
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +1 -0
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.js +2 -1
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +7 -7
- 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.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +2 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +21 -7
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/index.js +1 -1
- package/lib/simple-tree/node-kinds/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +12 -5
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts +1 -1
- package/lib/simple-tree/node-kinds/object/index.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/index.js +1 -1
- package/lib/simple-tree/node-kinds/object/index.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +3 -8
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +19 -21
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +12 -5
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +6 -6
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +21 -15
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/simpleSchema.d.ts +6 -21
- package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/simpleSchema.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +38 -11
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +70 -34
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts +2 -2
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.d.ts.map +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js +1 -1
- package/lib/simple-tree/unhydratedFlexTreeFromInsertable.js.map +1 -1
- package/lib/simple-tree/walkFieldSchema.d.ts +1 -0
- package/lib/simple-tree/walkFieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/walkFieldSchema.js +1 -0
- package/lib/simple-tree/walkFieldSchema.js.map +1 -1
- package/package.json +23 -23
- package/src/codec/codec.ts +4 -3
- package/src/core/index.ts +2 -0
- package/src/core/rebase/index.ts +2 -0
- package/src/core/rebase/types.ts +4 -0
- package/src/core/schema-stored/schema.ts +2 -26
- package/src/core/tree/detachedFieldIndex.ts +4 -6
- package/src/core/tree/detachedFieldIndexCodecCommon.ts +87 -0
- package/src/core/tree/{detachedFieldIndexCodec.ts → detachedFieldIndexCodecV1.ts} +22 -68
- package/src/core/tree/detachedFieldIndexCodecV2.ts +72 -0
- package/src/core/tree/detachedFieldIndexCodecs.ts +44 -0
- package/src/core/tree/{detachedFieldIndexFormat.ts → detachedFieldIndexFormatCommon.ts} +32 -23
- package/src/core/tree/detachedFieldIndexFormatV1.ts +15 -0
- package/src/core/tree/detachedFieldIndexFormatV2.ts +17 -0
- package/src/feature-libraries/chunked-forest/codec/README.md +1 -1
- package/src/feature-libraries/chunked-forest/codec/chunkDecoding.ts +25 -25
- package/src/feature-libraries/chunked-forest/codec/chunkDecodingGeneric.ts +10 -6
- package/src/feature-libraries/chunked-forest/codec/compressedEncode.ts +96 -73
- package/src/feature-libraries/chunked-forest/codec/format.ts +20 -14
- package/src/feature-libraries/chunked-forest/codec/{nodeShape.ts → nodeEncoder.ts} +23 -17
- package/src/feature-libraries/chunked-forest/codec/schemaBasedEncode.ts +34 -34
- package/src/feature-libraries/chunked-forest/codec/uncompressedEncode.ts +5 -5
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +11 -0
- package/src/feature-libraries/default-schema/defaultSchema.ts +0 -2
- package/src/feature-libraries/default-schema/index.ts +1 -1
- package/src/feature-libraries/default-schema/schemaChecker.ts +47 -30
- package/src/feature-libraries/index.ts +1 -3
- package/src/feature-libraries/modular-schema/comparison.ts +14 -29
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +9 -0
- package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -0
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +61 -19
- package/src/feature-libraries/object-forest/objectForest.ts +10 -6
- package/src/feature-libraries/optional-field/optionalField.ts +4 -0
- package/src/feature-libraries/sequence-field/sequenceFieldChangeRebaser.ts +4 -0
- package/src/index.ts +7 -1
- package/src/jsonDomainSchema.ts +4 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +45 -19
- package/src/shared-tree/schematizeTree.ts +2 -2
- package/src/shared-tree/schematizingTreeView.ts +24 -15
- package/src/shared-tree/sharedTree.ts +2 -42
- package/src/shared-tree/treeAlpha.ts +48 -22
- package/src/shared-tree/treeCheckout.ts +54 -10
- package/src/shared-tree-core/branch.ts +1 -6
- package/src/simple-tree/api/conciseTree.ts +9 -7
- package/src/simple-tree/api/configuration.ts +18 -4
- package/src/simple-tree/api/create.ts +44 -36
- package/src/simple-tree/api/customTree.ts +59 -20
- package/src/simple-tree/api/discrepancies.ts +474 -0
- package/src/simple-tree/api/index.ts +2 -3
- package/src/simple-tree/api/schemaCompatibilityTester.ts +23 -151
- package/src/simple-tree/api/schemaFactory.ts +13 -254
- package/src/simple-tree/api/schemaFactoryAlpha.ts +174 -1
- package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -25
- package/src/simple-tree/api/schemaStatics.ts +291 -0
- package/src/simple-tree/api/storedSchema.ts +18 -14
- package/src/simple-tree/api/treeBeta.ts +24 -4
- package/src/simple-tree/api/verboseTree.ts +17 -8
- package/src/simple-tree/core/allowedTypes.ts +87 -34
- package/src/simple-tree/core/context.ts +24 -22
- package/src/simple-tree/core/index.ts +11 -2
- package/src/simple-tree/core/simpleNodeSchemaBase.ts +30 -0
- package/src/simple-tree/core/toStored.ts +58 -0
- package/src/simple-tree/core/treeNodeKernel.ts +1 -1
- package/src/simple-tree/core/treeNodeSchema.ts +8 -2
- package/src/simple-tree/core/treeNodeValid.ts +23 -4
- package/src/simple-tree/core/walkSchema.ts +26 -6
- package/src/simple-tree/createContext.ts +11 -3
- package/src/simple-tree/fieldSchema.ts +3 -1
- package/src/simple-tree/index.ts +19 -13
- package/src/simple-tree/leafNodeSchema.ts +2 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +64 -23
- package/src/simple-tree/node-kinds/index.ts +0 -1
- package/src/simple-tree/node-kinds/map/mapNode.ts +23 -2
- package/src/simple-tree/node-kinds/object/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +42 -30
- package/src/simple-tree/node-kinds/record/recordNode.ts +20 -2
- package/src/simple-tree/prepareForInsertion.ts +28 -15
- package/src/simple-tree/simpleSchema.ts +6 -26
- package/src/simple-tree/toStoredSchema.ts +110 -44
- package/src/simple-tree/unhydratedFlexTreeFromInsertable.ts +6 -2
- package/src/simple-tree/walkFieldSchema.ts +1 -0
- package/dist/core/tree/detachedFieldIndexCodec.d.ts +0 -11
- package/dist/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
- package/dist/core/tree/detachedFieldIndexCodec.js +0 -100
- package/dist/core/tree/detachedFieldIndexCodec.js.map +0 -1
- package/dist/core/tree/detachedFieldIndexFormat.d.ts +0 -33
- package/dist/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
- package/dist/core/tree/detachedFieldIndexFormat.js.map +0 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
- package/dist/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
- package/dist/feature-libraries/initializeForest.d.ts +0 -18
- package/dist/feature-libraries/initializeForest.d.ts.map +0 -1
- package/dist/feature-libraries/initializeForest.js +0 -35
- package/dist/feature-libraries/initializeForest.js.map +0 -1
- package/dist/simple-tree/discrepancies.d.ts +0 -167
- package/dist/simple-tree/discrepancies.d.ts.map +0 -1
- package/dist/simple-tree/discrepancies.js +0 -382
- package/dist/simple-tree/discrepancies.js.map +0 -1
- package/lib/core/tree/detachedFieldIndexCodec.d.ts +0 -11
- package/lib/core/tree/detachedFieldIndexCodec.d.ts.map +0 -1
- package/lib/core/tree/detachedFieldIndexCodec.js +0 -96
- package/lib/core/tree/detachedFieldIndexCodec.js.map +0 -1
- package/lib/core/tree/detachedFieldIndexFormat.d.ts +0 -33
- package/lib/core/tree/detachedFieldIndexFormat.d.ts.map +0 -1
- package/lib/core/tree/detachedFieldIndexFormat.js.map +0 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.d.ts.map +0 -1
- package/lib/feature-libraries/chunked-forest/codec/nodeShape.js.map +0 -1
- package/lib/feature-libraries/initializeForest.d.ts +0 -18
- package/lib/feature-libraries/initializeForest.d.ts.map +0 -1
- package/lib/feature-libraries/initializeForest.js +0 -31
- package/lib/feature-libraries/initializeForest.js.map +0 -1
- package/lib/simple-tree/discrepancies.d.ts +0 -167
- package/lib/simple-tree/discrepancies.d.ts.map +0 -1
- package/lib/simple-tree/discrepancies.js +0 -376
- package/lib/simple-tree/discrepancies.js.map +0 -1
- package/src/feature-libraries/initializeForest.ts +0 -55
- package/src/simple-tree/discrepancies.ts +0 -648
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
getOrCreate,
|
|
10
|
+
isReadonlyArray,
|
|
11
|
+
type IsUnion,
|
|
12
|
+
type MakeNominal,
|
|
13
|
+
} from "../../util/index.js";
|
|
9
14
|
import { isLazy, type FlexListToUnion, type LazyItem } from "./flexList.js";
|
|
10
15
|
import {
|
|
11
16
|
NodeKind,
|
|
@@ -76,6 +81,7 @@ export interface NormalizedAnnotatedAllowedTypes {
|
|
|
76
81
|
export function isAnnotatedAllowedTypes(
|
|
77
82
|
allowedTypes: ImplicitAnnotatedAllowedTypes,
|
|
78
83
|
): allowedTypes is AnnotatedAllowedTypes {
|
|
84
|
+
checkForUninitializedSchema(allowedTypes);
|
|
79
85
|
return (
|
|
80
86
|
// Class based schema, and lazy schema references report type "function": filtering them out with typeof makes narrowing based on members mostly safe
|
|
81
87
|
typeof allowedTypes === "object" && "metadata" in allowedTypes && "types" in allowedTypes
|
|
@@ -116,7 +122,9 @@ export interface AllowedTypesMetadata {
|
|
|
116
122
|
export function isAnnotatedAllowedType(
|
|
117
123
|
allowedType: AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
|
|
118
124
|
): allowedType is AnnotatedAllowedType {
|
|
119
|
-
|
|
125
|
+
checkForUninitializedSchema(allowedType);
|
|
126
|
+
// Class based schema, and lazy schema references report type "function": filtering them out with typeof makes narrowing based on members mostly safe
|
|
127
|
+
return typeof allowedType === "object" && "metadata" in allowedType && "type" in allowedType;
|
|
120
128
|
}
|
|
121
129
|
|
|
122
130
|
/**
|
|
@@ -131,7 +139,34 @@ export interface AllowedTypeMetadata {
|
|
|
131
139
|
*/
|
|
132
140
|
readonly custom?: unknown;
|
|
133
141
|
|
|
134
|
-
|
|
142
|
+
/**
|
|
143
|
+
* If defined, indicates that an allowed type is {@link SchemaStaticsAlpha.staged | staged}.
|
|
144
|
+
*/
|
|
145
|
+
readonly stagedSchemaUpgrade?: SchemaUpgrade;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Package internal {@link SchemaUpgrade} construction API.
|
|
150
|
+
*/
|
|
151
|
+
export let createSchemaUpgrade: () => SchemaUpgrade;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Unique token used to upgrade schemas and determine if a particular upgrade has been completed.
|
|
155
|
+
* @remarks
|
|
156
|
+
* Create using {@link SchemaStaticsAlpha.staged}.
|
|
157
|
+
* @privateRemarks
|
|
158
|
+
* TODO:#38722 implement runtime schema upgrades.
|
|
159
|
+
* Until then, the class purely behaves mostly as a placeholder.
|
|
160
|
+
* TODO: Consider allowing users to store a name for the upgrade to use in error messages.
|
|
161
|
+
* @sealed @alpha
|
|
162
|
+
*/
|
|
163
|
+
export class SchemaUpgrade {
|
|
164
|
+
protected _typeCheck!: MakeNominal;
|
|
165
|
+
static {
|
|
166
|
+
createSchemaUpgrade = () => new SchemaUpgrade();
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
private constructor() {}
|
|
135
170
|
}
|
|
136
171
|
|
|
137
172
|
/**
|
|
@@ -188,7 +223,7 @@ export type UnannotateImplicitAllowedTypes<T extends ImplicitAnnotatedAllowedTyp
|
|
|
188
223
|
T extends AnnotatedAllowedTypes
|
|
189
224
|
? UnannotateAllowedTypes<T>
|
|
190
225
|
: T extends AnnotatedAllowedType
|
|
191
|
-
?
|
|
226
|
+
? UnannotateAllowedTypesList<[T]>
|
|
192
227
|
: T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]
|
|
193
228
|
? UnannotateAllowedTypesList<T>
|
|
194
229
|
: T extends TreeNodeSchema
|
|
@@ -202,17 +237,9 @@ export type UnannotateImplicitAllowedTypes<T extends ImplicitAnnotatedAllowedTyp
|
|
|
202
237
|
export type UnannotateAllowedTypesList<
|
|
203
238
|
T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[],
|
|
204
239
|
> = {
|
|
205
|
-
[I in keyof T]:
|
|
240
|
+
[I in keyof T]: UnannotateAllowedType<T[I]>;
|
|
206
241
|
};
|
|
207
242
|
|
|
208
|
-
/**
|
|
209
|
-
* Removes annotations from an allowed type that may contain annotations.
|
|
210
|
-
* @system @alpha
|
|
211
|
-
*/
|
|
212
|
-
export type UnannotateAllowedTypeOrLazyItem<
|
|
213
|
-
T extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
|
|
214
|
-
> = T extends AnnotatedAllowedType<infer X> ? X : T;
|
|
215
|
-
|
|
216
243
|
/**
|
|
217
244
|
* Removes all annotations from a set of allowed types.
|
|
218
245
|
* @system @alpha
|
|
@@ -222,10 +249,15 @@ export type UnannotateAllowedTypes<T extends AnnotatedAllowedTypes> =
|
|
|
222
249
|
|
|
223
250
|
/**
|
|
224
251
|
* Removes annotations from an allowed type.
|
|
252
|
+
* @remarks
|
|
253
|
+
* If the input could be lazy
|
|
254
|
+
* (is a LazyItem or AnnotatedAllowedType<LazyItem> instead of just a TreeNodeSchema | AnnotatedAllowedType<TreeNodeSchema>)
|
|
255
|
+
* then the output of this will be a LazyItem and thus is not valid as an ImplicitAllowedTypes without wrapping it in an array.
|
|
256
|
+
* This can however be used on items within an AllowedTypes array.
|
|
225
257
|
* @system @alpha
|
|
226
258
|
*/
|
|
227
|
-
export type UnannotateAllowedType<T extends AnnotatedAllowedType
|
|
228
|
-
T extends AnnotatedAllowedType<infer X> ?
|
|
259
|
+
export type UnannotateAllowedType<T extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>> =
|
|
260
|
+
T extends AnnotatedAllowedType<infer X> ? X : T;
|
|
229
261
|
|
|
230
262
|
/**
|
|
231
263
|
* Normalizes a {@link ImplicitAllowedTypes} to a set of {@link TreeNodeSchema}s, by eagerly evaluating any
|
|
@@ -237,17 +269,19 @@ export type UnannotateAllowedType<T extends AnnotatedAllowedType> =
|
|
|
237
269
|
* @internal
|
|
238
270
|
*/
|
|
239
271
|
export function normalizeAllowedTypes(
|
|
240
|
-
types:
|
|
272
|
+
types: ImplicitAnnotatedAllowedTypes,
|
|
241
273
|
): ReadonlySet<TreeNodeSchema> {
|
|
274
|
+
// remove annotations before normalizing
|
|
275
|
+
const unannotated = unannotateImplicitAllowedTypes(types);
|
|
242
276
|
const normalized = new Set<TreeNodeSchema>();
|
|
243
|
-
if (isReadonlyArray(
|
|
277
|
+
if (isReadonlyArray(unannotated)) {
|
|
244
278
|
// Types array must not be modified after it is normalized since that would result in the user of the normalized data having wrong (out of date) content.
|
|
245
|
-
Object.freeze(
|
|
246
|
-
for (const lazyType of
|
|
279
|
+
Object.freeze(unannotated);
|
|
280
|
+
for (const lazyType of unannotated) {
|
|
247
281
|
normalized.add(evaluateLazySchema(lazyType));
|
|
248
282
|
}
|
|
249
283
|
} else {
|
|
250
|
-
normalized.add(evaluateLazySchema(
|
|
284
|
+
normalized.add(evaluateLazySchema(unannotated));
|
|
251
285
|
}
|
|
252
286
|
return normalized;
|
|
253
287
|
}
|
|
@@ -255,9 +289,9 @@ export function normalizeAllowedTypes(
|
|
|
255
289
|
/**
|
|
256
290
|
* Normalizes an allowed type to an {@link AnnotatedAllowedType}, by adding empty annotations if they don't already exist.
|
|
257
291
|
*/
|
|
258
|
-
export function normalizeToAnnotatedAllowedType<T extends TreeNodeSchema
|
|
259
|
-
type: T | AnnotatedAllowedType<T
|
|
260
|
-
): AnnotatedAllowedType<T>
|
|
292
|
+
export function normalizeToAnnotatedAllowedType<T extends LazyItem<TreeNodeSchema>>(
|
|
293
|
+
type: T | AnnotatedAllowedType<T>,
|
|
294
|
+
): AnnotatedAllowedType<T> {
|
|
261
295
|
return isAnnotatedAllowedType(type)
|
|
262
296
|
? type
|
|
263
297
|
: {
|
|
@@ -317,19 +351,28 @@ export function unannotateImplicitAllowedTypes<Types extends ImplicitAnnotatedAl
|
|
|
317
351
|
): UnannotateImplicitAllowedTypes<Types> {
|
|
318
352
|
return (
|
|
319
353
|
isAnnotatedAllowedTypes(types)
|
|
320
|
-
? types.types.map(
|
|
321
|
-
isAnnotatedAllowedType(allowedType) ? allowedType.type : allowedType,
|
|
322
|
-
)
|
|
354
|
+
? types.types.map(unannotateAllowedType)
|
|
323
355
|
: isReadonlyArray(types)
|
|
324
|
-
? types.map(
|
|
325
|
-
isAnnotatedAllowedType(allowedType) ? allowedType.type : allowedType,
|
|
326
|
-
)
|
|
356
|
+
? types.map(unannotateAllowedType)
|
|
327
357
|
: isAnnotatedAllowedType(types)
|
|
328
|
-
?
|
|
358
|
+
? types.type
|
|
329
359
|
: types
|
|
330
360
|
) as UnannotateImplicitAllowedTypes<Types>;
|
|
331
361
|
}
|
|
332
362
|
|
|
363
|
+
/**
|
|
364
|
+
* Converts an {@link AnnotatedAllowedType} to an {@link LazyItem} by removing any annotations.
|
|
365
|
+
* @remarks
|
|
366
|
+
* This does not evaluate any lazy schemas.
|
|
367
|
+
*/
|
|
368
|
+
export function unannotateAllowedType<
|
|
369
|
+
Type extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
|
|
370
|
+
>(allowedType: Type): UnannotateAllowedType<Type> {
|
|
371
|
+
return isAnnotatedAllowedType(allowedType)
|
|
372
|
+
? (allowedType.type as UnannotateAllowedType<Type>)
|
|
373
|
+
: (allowedType as UnannotateAllowedType<Type>);
|
|
374
|
+
}
|
|
375
|
+
|
|
333
376
|
const cachedLazyItem = new WeakMap<() => unknown, unknown>();
|
|
334
377
|
|
|
335
378
|
/**
|
|
@@ -342,13 +385,23 @@ export function evaluateLazySchema<T extends TreeNodeSchema>(value: LazyItem<T>)
|
|
|
342
385
|
const evaluatedSchema = isLazy(value)
|
|
343
386
|
? (getOrCreate(cachedLazyItem, value, value) as T)
|
|
344
387
|
: value;
|
|
345
|
-
|
|
388
|
+
|
|
389
|
+
checkForUninitializedSchema(evaluatedSchema);
|
|
390
|
+
markSchemaMostDerived(evaluatedSchema);
|
|
391
|
+
return evaluatedSchema;
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Throws a UsageError if the provided schema is undefined, most likely due to being used before it was initialized.
|
|
396
|
+
*/
|
|
397
|
+
export function checkForUninitializedSchema(
|
|
398
|
+
schema: ImplicitAnnotatedAllowedTypes | LazyItem<TreeNodeSchema>,
|
|
399
|
+
): void {
|
|
400
|
+
if (schema === undefined) {
|
|
346
401
|
throw new UsageError(
|
|
347
|
-
`Encountered an undefined schema. This could indicate that some referenced schema has not yet been instantiated.`,
|
|
402
|
+
`Encountered an undefined schema. This could indicate that some referenced schema has not yet been instantiated. Consider using a lazy schema reference (like "() => schema") or delaying the evaluation of the lazy reference if one is already being used.`,
|
|
348
403
|
);
|
|
349
404
|
}
|
|
350
|
-
markSchemaMostDerived(evaluatedSchema);
|
|
351
|
-
return evaluatedSchema;
|
|
352
405
|
}
|
|
353
406
|
|
|
354
407
|
/**
|
|
@@ -28,34 +28,36 @@ import { walkAllowedTypes } from "./walkSchema.js";
|
|
|
28
28
|
* This design is the same as {@link FlexTreeContext} with its base type and {@link FlexTreeHydratedContext} extending it.
|
|
29
29
|
*/
|
|
30
30
|
export class Context {
|
|
31
|
-
|
|
32
|
-
* All schema which could transitively be used under the associated node.
|
|
33
|
-
* @remarks
|
|
34
|
-
* While generally {@link TreeNodeSchema} are referenced as objects and thus do not need to be looked up by identifier,
|
|
35
|
-
* there are a few cases (mainly constructing new TreeNodes from existing tree data) where such a lookup is useful.
|
|
36
|
-
* Having this map in the context addresses this use-case.
|
|
37
|
-
* @privateRemarks
|
|
38
|
-
* This design mirrors how {@link FlexTreeSchema} are accessed off the {@link FlexTreeContext}, making the migration away from them simpler.
|
|
39
|
-
*/
|
|
40
|
-
public readonly schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeSchema>;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Builds the context.
|
|
44
|
-
* @remarks
|
|
45
|
-
* Since this walks the schema, it must not be invoked during schema declaration or schema forward references could fail to be resolved.
|
|
46
|
-
*/
|
|
47
|
-
public constructor(
|
|
31
|
+
public static schemaMapFromRootSchema(
|
|
48
32
|
rootSchema: NormalizedAnnotatedAllowedTypes,
|
|
49
|
-
|
|
50
|
-
) {
|
|
33
|
+
): ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeSchema> {
|
|
51
34
|
const schema: Map<TreeNodeSchemaIdentifier, TreeNodeSchema> = new Map();
|
|
52
35
|
walkAllowedTypes(rootSchema, {
|
|
53
36
|
node(nodeSchema) {
|
|
54
37
|
schema.set(brand(nodeSchema.identifier), nodeSchema);
|
|
55
38
|
},
|
|
56
39
|
});
|
|
57
|
-
|
|
40
|
+
return schema;
|
|
58
41
|
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Builds the context.
|
|
45
|
+
* @remarks
|
|
46
|
+
* Since this walks the schema, it must not be invoked during schema declaration or schema forward references could fail to be resolved.
|
|
47
|
+
*/
|
|
48
|
+
public constructor(
|
|
49
|
+
public readonly flexContext: FlexTreeContext,
|
|
50
|
+
/**
|
|
51
|
+
* All schema which could transitively be used under the associated node.
|
|
52
|
+
* @remarks
|
|
53
|
+
* While generally {@link TreeNodeSchema} are referenced as objects and thus do not need to be looked up by identifier,
|
|
54
|
+
* there are a few cases (mainly constructing new TreeNodes from existing tree data) where such a lookup is useful.
|
|
55
|
+
* Having this map in the context addresses this use-case.
|
|
56
|
+
* @privateRemarks
|
|
57
|
+
* This design mirrors how {@link FlexTreeSchema} are accessed off the {@link FlexTreeContext}, making the migration away from them simpler.
|
|
58
|
+
*/
|
|
59
|
+
public readonly schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeSchema>,
|
|
60
|
+
) {}
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
/**
|
|
@@ -64,9 +66,9 @@ export class Context {
|
|
|
64
66
|
*/
|
|
65
67
|
export class HydratedContext extends Context {
|
|
66
68
|
public constructor(
|
|
67
|
-
rootSchema: NormalizedAnnotatedAllowedTypes,
|
|
68
69
|
public override readonly flexContext: FlexTreeHydratedContext,
|
|
70
|
+
schema: ReadonlyMap<TreeNodeSchemaIdentifier, TreeNodeSchema>,
|
|
69
71
|
) {
|
|
70
|
-
super(
|
|
72
|
+
super(flexContext, schema);
|
|
71
73
|
}
|
|
72
74
|
}
|
|
@@ -53,9 +53,12 @@ export {
|
|
|
53
53
|
isAnnotatedAllowedType,
|
|
54
54
|
normalizeAllowedTypes,
|
|
55
55
|
normalizeAnnotatedAllowedTypes,
|
|
56
|
+
normalizeToAnnotatedAllowedType,
|
|
56
57
|
unannotateImplicitAllowedTypes,
|
|
57
58
|
markSchemaMostDerived,
|
|
58
59
|
evaluateLazySchema,
|
|
60
|
+
createSchemaUpgrade,
|
|
61
|
+
type SchemaUpgrade,
|
|
59
62
|
} from "./allowedTypes.js";
|
|
60
63
|
export type {
|
|
61
64
|
AnnotatedAllowedType,
|
|
@@ -72,11 +75,10 @@ export type {
|
|
|
72
75
|
UnannotateAllowedTypes,
|
|
73
76
|
UnannotateAllowedType,
|
|
74
77
|
UnannotateAllowedTypesList,
|
|
75
|
-
UnannotateAllowedTypeOrLazyItem,
|
|
76
78
|
AllowedTypeMetadata,
|
|
77
79
|
AnnotatedAllowedTypes,
|
|
78
80
|
} from "./allowedTypes.js";
|
|
79
|
-
export { walkAllowedTypes, type SchemaVisitor } from "./walkSchema.js";
|
|
81
|
+
export { walkAllowedTypes, walkNodeSchema, type SchemaVisitor } from "./walkSchema.js";
|
|
80
82
|
export { Context, HydratedContext } from "./context.js";
|
|
81
83
|
export {
|
|
82
84
|
getOrCreateNodeFromInnerNode,
|
|
@@ -100,4 +102,11 @@ export {
|
|
|
100
102
|
TreeNodeValid,
|
|
101
103
|
type MostDerivedData,
|
|
102
104
|
createTreeNodeSchemaPrivateData,
|
|
105
|
+
isClassBasedSchema,
|
|
103
106
|
} from "./treeNodeValid.js";
|
|
107
|
+
export type { SimpleNodeSchemaBase } from "./simpleNodeSchemaBase.js";
|
|
108
|
+
export {
|
|
109
|
+
type StoredSchemaGenerationOptions,
|
|
110
|
+
convertAllowedTypes,
|
|
111
|
+
allowedTypeFilter,
|
|
112
|
+
} from "./toStored.js";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { NodeKind, NodeSchemaMetadata } from "./treeNodeSchema.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Base interface for {@link TreeNodeSchema} and {@link SimpleNodeSchema} types.
|
|
10
|
+
* Once simple schema is stable this doesn't have a reason to be kept `@system`, but it could be.
|
|
11
|
+
* @system
|
|
12
|
+
* @public
|
|
13
|
+
* @sealed
|
|
14
|
+
*/
|
|
15
|
+
export interface SimpleNodeSchemaBase<
|
|
16
|
+
out TNodeKind extends NodeKind,
|
|
17
|
+
out TCustomMetadata = unknown,
|
|
18
|
+
> {
|
|
19
|
+
/**
|
|
20
|
+
* The {@link NodeKind}.
|
|
21
|
+
*
|
|
22
|
+
* @remarks can be used to type-switch between implementations.
|
|
23
|
+
*/
|
|
24
|
+
readonly kind: TNodeKind;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* User-provided {@link NodeSchemaMetadata} for this schema.
|
|
28
|
+
*/
|
|
29
|
+
readonly metadata: NodeSchemaMetadata<TCustomMetadata>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { brand } from "../../util/index.js";
|
|
7
|
+
import {
|
|
8
|
+
normalizeAnnotatedAllowedTypes,
|
|
9
|
+
type AnnotatedAllowedType,
|
|
10
|
+
type ImplicitAnnotatedAllowedTypes,
|
|
11
|
+
type SchemaUpgrade,
|
|
12
|
+
} from "./allowedTypes.js";
|
|
13
|
+
import type { TreeNodeSchemaIdentifier, TreeTypeSet } from "../../core/index.js";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Options for generating a {@link TreeStoredSchema} from view schema.
|
|
17
|
+
*/
|
|
18
|
+
export interface StoredSchemaGenerationOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Determines whether to include staged schema in the resulting stored schema.
|
|
21
|
+
* @remarks
|
|
22
|
+
* Due to caching, the behavior of this function must be pure.
|
|
23
|
+
*/
|
|
24
|
+
includeStaged(upgrade: SchemaUpgrade): boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Filters an allowed type based on the provided options.
|
|
29
|
+
* @param allowedType - The allowed type to filter.
|
|
30
|
+
* @param options - The options to use for filtering.
|
|
31
|
+
* @returns Whether the allowed type passes the filter.
|
|
32
|
+
*/
|
|
33
|
+
export function allowedTypeFilter(
|
|
34
|
+
allowedType: AnnotatedAllowedType,
|
|
35
|
+
options: StoredSchemaGenerationOptions,
|
|
36
|
+
): boolean {
|
|
37
|
+
// If the allowed type is staged, only include it if the options allow it.
|
|
38
|
+
if (allowedType.metadata.stagedSchemaUpgrade !== undefined) {
|
|
39
|
+
return options.includeStaged(allowedType.metadata.stagedSchemaUpgrade);
|
|
40
|
+
}
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Converts an ImplicitAnnotatedAllowedTypes to a stored schema.
|
|
46
|
+
* @param schema - The schema to convert.
|
|
47
|
+
* @param options - The options to use for filtering.
|
|
48
|
+
* @returns The converted stored schema.
|
|
49
|
+
*/
|
|
50
|
+
export function convertAllowedTypes(
|
|
51
|
+
schema: ImplicitAnnotatedAllowedTypes,
|
|
52
|
+
options: StoredSchemaGenerationOptions,
|
|
53
|
+
): TreeTypeSet {
|
|
54
|
+
const filtered: TreeNodeSchemaIdentifier[] = normalizeAnnotatedAllowedTypes(schema)
|
|
55
|
+
.types.filter((allowedType) => allowedTypeFilter(allowedType, options))
|
|
56
|
+
.map((a) => brand(a.type.identifier));
|
|
57
|
+
return new Set(filtered);
|
|
58
|
+
}
|
|
@@ -131,7 +131,7 @@ export class TreeNodeKernel {
|
|
|
131
131
|
/**
|
|
132
132
|
* Create a TreeNodeKernel which can be looked up with {@link getKernel}.
|
|
133
133
|
*
|
|
134
|
-
* @param initialContext - context from when this node was originally
|
|
134
|
+
* @param initialContext - context from when this node was originally created. Only used when unhydrated.
|
|
135
135
|
* @param innerNode - When unhydrated/raw or marinated the MapTreeNode. FlexTreeNode when cooked.
|
|
136
136
|
* @remarks
|
|
137
137
|
* Exactly one kernel per TreeNode should be created.
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
8
8
|
|
|
9
|
-
import type { SimpleNodeSchemaBase } from "
|
|
9
|
+
import type { SimpleNodeSchemaBase } from "./simpleNodeSchemaBase.js";
|
|
10
10
|
import type { TreeNode } from "./treeNode.js";
|
|
11
11
|
import type { InternalTreeNode, Unhydrated } from "./types.js";
|
|
12
12
|
import type { UnionToIntersection } from "../../util/index.js";
|
|
@@ -15,9 +15,10 @@ import type {
|
|
|
15
15
|
NormalizedAnnotatedAllowedTypes,
|
|
16
16
|
} from "./allowedTypes.js";
|
|
17
17
|
import type { Context } from "./context.js";
|
|
18
|
-
import type { FieldKey, NodeData } from "../../core/index.js";
|
|
18
|
+
import type { FieldKey, NodeData, TreeNodeStoredSchema } from "../../core/index.js";
|
|
19
19
|
import type { UnhydratedFlexTreeField } from "./unhydratedFlexTree.js";
|
|
20
20
|
import type { FactoryContent } from "../unhydratedFlexTreeFromInsertable.js";
|
|
21
|
+
import type { StoredSchemaGenerationOptions } from "./toStored.js";
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
24
|
* Schema for a {@link TreeNode} or {@link TreeLeafValue}.
|
|
@@ -396,6 +397,11 @@ export interface TreeNodeSchemaPrivateData {
|
|
|
396
397
|
* Idempotent initialization function that pre-caches data and can dereference lazy schema references.
|
|
397
398
|
*/
|
|
398
399
|
idempotentInitialize(): TreeNodeSchemaInitializedData;
|
|
400
|
+
|
|
401
|
+
/**
|
|
402
|
+
* Converts a the schema into a {@link TreeNodeStoredSchema}.
|
|
403
|
+
*/
|
|
404
|
+
toStored(options: StoredSchemaGenerationOptions): TreeNodeStoredSchema;
|
|
399
405
|
}
|
|
400
406
|
|
|
401
407
|
/**
|
|
@@ -10,7 +10,7 @@ import { type FlexTreeNode, isFlexTreeNode } from "../../feature-libraries/index
|
|
|
10
10
|
|
|
11
11
|
import { markEager } from "./flexList.js";
|
|
12
12
|
import { inPrototypeChain, privateToken, TreeNode } from "./treeNode.js";
|
|
13
|
-
import
|
|
13
|
+
import { UnhydratedFlexTreeNode } from "./unhydratedFlexTree.js";
|
|
14
14
|
import {
|
|
15
15
|
NodeKind,
|
|
16
16
|
type TreeNodeSchema,
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
import type { InternalTreeNode } from "./types.js";
|
|
28
28
|
import { typeSchemaSymbol } from "./withType.js";
|
|
29
29
|
import type { ImplicitAnnotatedAllowedTypes } from "./allowedTypes.js";
|
|
30
|
+
import type { SimpleNodeSchemaBase } from "./simpleNodeSchemaBase.js";
|
|
30
31
|
|
|
31
32
|
/**
|
|
32
33
|
* Class which all {@link TreeNode}s must extend.
|
|
@@ -193,10 +194,17 @@ export abstract class TreeNodeValid<TInput> extends TreeNode {
|
|
|
193
194
|
);
|
|
194
195
|
|
|
195
196
|
const result = schema.prepareInstance(this, node);
|
|
197
|
+
// For unhydrated nodes, grab the context from the `simpleContext` (which likely is from cache.oneTimeInitialized.context,
|
|
198
|
+
// but might be customized for better schema evolution support like unknown optional fields like in clone)
|
|
199
|
+
// For hydrated nodes, this context is unused, so using the default from cache.oneTimeInitialized.context is always fine.
|
|
200
|
+
const context =
|
|
201
|
+
node instanceof UnhydratedFlexTreeNode
|
|
202
|
+
? node.simpleContext
|
|
203
|
+
: cache.oneTimeInitialized.context;
|
|
196
204
|
// The TreeNodeKernel associates itself the TreeNode (result here, not node) so it can be looked up later via getKernel.
|
|
197
205
|
// If desired this could be put in a non-enumerable symbol property for lookup instead, but that gets messy going through proxies,
|
|
198
206
|
// so just relying on the WeakMap seems like the cleanest approach.
|
|
199
|
-
new TreeNodeKernel(result, schema, node,
|
|
207
|
+
new TreeNodeKernel(result, schema, node, context);
|
|
200
208
|
|
|
201
209
|
return result;
|
|
202
210
|
}
|
|
@@ -226,7 +234,7 @@ export interface MostDerivedData {
|
|
|
226
234
|
export function schemaAsTreeNodeValid(
|
|
227
235
|
schema: TreeNodeSchemaCore<string, NodeKind, boolean>,
|
|
228
236
|
): typeof TreeNodeValid & TreeNodeSchema {
|
|
229
|
-
if (!
|
|
237
|
+
if (!isClassBasedSchema(schema)) {
|
|
230
238
|
// Use JSON.stringify to quote and escape identifier string.
|
|
231
239
|
throw new UsageError(
|
|
232
240
|
`Schema for ${JSON.stringify(
|
|
@@ -235,7 +243,16 @@ export function schemaAsTreeNodeValid(
|
|
|
235
243
|
);
|
|
236
244
|
}
|
|
237
245
|
|
|
238
|
-
return schema
|
|
246
|
+
return schema;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Check if a schema is a {@link TreeNodeValid}.
|
|
251
|
+
*/
|
|
252
|
+
export function isClassBasedSchema(
|
|
253
|
+
schema: SimpleNodeSchemaBase<NodeKind>,
|
|
254
|
+
): schema is typeof TreeNodeValid & TreeNodeSchema {
|
|
255
|
+
return inPrototypeChain(schema, TreeNodeValid);
|
|
239
256
|
}
|
|
240
257
|
|
|
241
258
|
/**
|
|
@@ -246,6 +263,7 @@ export function schemaAsTreeNodeValid(
|
|
|
246
263
|
export function createTreeNodeSchemaPrivateData(
|
|
247
264
|
schema: TreeNodeSchemaCore<string, NodeKind, boolean>,
|
|
248
265
|
childAnnotatedAllowedTypes: readonly ImplicitAnnotatedAllowedTypes[],
|
|
266
|
+
toStored: TreeNodeSchemaPrivateData["toStored"],
|
|
249
267
|
): TreeNodeSchemaPrivateData {
|
|
250
268
|
const schemaValid = schemaAsTreeNodeValid(schema);
|
|
251
269
|
// Since this closes over the schema, ensure this schema is marked as most derived
|
|
@@ -255,6 +273,7 @@ export function createTreeNodeSchemaPrivateData(
|
|
|
255
273
|
return {
|
|
256
274
|
idempotentInitialize: () => schemaValid.oneTimeInitialize().oneTimeInitialized,
|
|
257
275
|
childAnnotatedAllowedTypes,
|
|
276
|
+
toStored,
|
|
258
277
|
};
|
|
259
278
|
}
|
|
260
279
|
|
|
@@ -5,12 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
7
|
normalizeAnnotatedAllowedTypes,
|
|
8
|
+
type AnnotatedAllowedType,
|
|
8
9
|
type NormalizedAnnotatedAllowedTypes,
|
|
9
10
|
} from "./allowedTypes.js";
|
|
10
11
|
import { getTreeNodeSchemaPrivateData, type TreeNodeSchema } from "./treeNodeSchema.js";
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Traverses all {@link TreeNodeSchema} schema reachable from `schema`, applying the visitor pattern.
|
|
15
|
+
* @internal
|
|
14
16
|
*/
|
|
15
17
|
export function walkNodeSchema(
|
|
16
18
|
schema: TreeNodeSchema,
|
|
@@ -42,31 +44,49 @@ export function walkNodeSchema(
|
|
|
42
44
|
|
|
43
45
|
/**
|
|
44
46
|
* Traverses all {@link TreeNodeSchema} schema reachable from `allowedTypes`, applying the visitor pattern.
|
|
47
|
+
* @internal
|
|
45
48
|
*/
|
|
46
49
|
export function walkAllowedTypes(
|
|
47
50
|
annotatedAllowedTypes: NormalizedAnnotatedAllowedTypes,
|
|
48
51
|
visitor: SchemaVisitor,
|
|
49
52
|
visitedSet: Set<TreeNodeSchema> = new Set(),
|
|
50
53
|
): void {
|
|
51
|
-
for (const
|
|
52
|
-
|
|
54
|
+
for (const allowedType of annotatedAllowedTypes.types) {
|
|
55
|
+
if ((visitor.allowedTypeFilter ?? (() => true))(allowedType)) {
|
|
56
|
+
walkNodeSchema(allowedType.type, visitor, visitedSet);
|
|
57
|
+
}
|
|
53
58
|
}
|
|
54
59
|
visitor.allowedTypes?.(annotatedAllowedTypes);
|
|
55
60
|
}
|
|
56
61
|
|
|
57
62
|
/**
|
|
58
|
-
* Callbacks for use in {@link walkFieldSchema} / {@link walkAllowedTypes} / {@link walkNodeSchema}.
|
|
63
|
+
* Callbacks and options for use in {@link walkFieldSchema} / {@link walkAllowedTypes} / {@link walkNodeSchema}.
|
|
64
|
+
* @internal
|
|
59
65
|
*/
|
|
60
66
|
export interface SchemaVisitor {
|
|
61
67
|
/**
|
|
62
|
-
* Called once for each node schema.
|
|
68
|
+
* Called once for each node schema reached.
|
|
63
69
|
*/
|
|
64
70
|
node?: (schema: TreeNodeSchema) => void;
|
|
65
71
|
/**
|
|
66
72
|
* Called once for each set of allowed types.
|
|
67
|
-
*
|
|
73
|
+
* @remarks
|
|
74
|
+
* This includes every field, as well as the allowed types for maps and arrays nodes and the root if starting at {@link walkAllowedTypes}.
|
|
68
75
|
*
|
|
69
|
-
*
|
|
76
|
+
* Each allowed types in the schema is visited as it was in the original schema except for normalization.
|
|
77
|
+
*
|
|
78
|
+
* After this is called {@link SchemaVisitor.allowedTypeFilter} is applied to each allowed type in the schema to determine which of them are walked into.
|
|
70
79
|
*/
|
|
71
80
|
allowedTypes?: (allowedTypes: NormalizedAnnotatedAllowedTypes) => void;
|
|
81
|
+
/**
|
|
82
|
+
* If true, will walk into this `allowedType`.
|
|
83
|
+
* If false, the `allowedType` will not be walked into.
|
|
84
|
+
*
|
|
85
|
+
* If not provided, all allowedTypes will be walked into.
|
|
86
|
+
* @remarks
|
|
87
|
+
* Called after {@link SchemaVisitor.allowedTypes}.
|
|
88
|
+
* @privateRemarks
|
|
89
|
+
* It would be possible to combine this with `allowedTypes` into a single callback, but for the current usage this separation is more convenient.
|
|
90
|
+
*/
|
|
91
|
+
allowedTypeFilter?: (allowedType: AnnotatedAllowedType<TreeNodeSchema>) => boolean;
|
|
72
92
|
}
|
|
@@ -15,19 +15,27 @@ import {
|
|
|
15
15
|
type TreeNodeSchemaInitializedData,
|
|
16
16
|
} from "./core/index.js";
|
|
17
17
|
import { normalizeFieldSchema, type ImplicitFieldSchema } from "./fieldSchema.js";
|
|
18
|
-
import { toStoredSchema } from "./toStoredSchema.js";
|
|
18
|
+
import { toStoredSchema, toUnhydratedSchema } from "./toStoredSchema.js";
|
|
19
19
|
|
|
20
20
|
const contextCache: WeakMap<ImplicitFieldSchema, Context> = new WeakMap();
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Utility for creating {@link Context}s for unhydrated nodes.
|
|
24
|
+
* @remarks
|
|
25
|
+
* The resulting context will not allow any unknown optional fields.
|
|
24
26
|
*/
|
|
25
27
|
export function getUnhydratedContext(schema: ImplicitFieldSchema): Context {
|
|
26
28
|
return getOrCreate(contextCache, schema, (s) => {
|
|
27
29
|
const normalized = normalizeFieldSchema(schema);
|
|
28
30
|
|
|
29
|
-
const flexContext = new UnhydratedContext(
|
|
30
|
-
|
|
31
|
+
const flexContext = new UnhydratedContext(
|
|
32
|
+
defaultSchemaPolicy,
|
|
33
|
+
toStoredSchema(schema, toUnhydratedSchema),
|
|
34
|
+
);
|
|
35
|
+
return new Context(
|
|
36
|
+
flexContext,
|
|
37
|
+
Context.schemaMapFromRootSchema(normalized.annotatedAllowedTypesNormalized),
|
|
38
|
+
);
|
|
31
39
|
});
|
|
32
40
|
}
|
|
33
41
|
|
|
@@ -468,7 +468,8 @@ export class FieldSchemaAlpha<
|
|
|
468
468
|
normalizeAnnotatedAllowedTypes(annotatedAllowedTypes),
|
|
469
469
|
);
|
|
470
470
|
this.lazyIdentifiers = new Lazy(
|
|
471
|
-
() =>
|
|
471
|
+
() =>
|
|
472
|
+
new Set(this.annotatedAllowedTypesNormalized.types.map(({ type }) => type.identifier)),
|
|
472
473
|
);
|
|
473
474
|
this.propsAlpha = props;
|
|
474
475
|
}
|
|
@@ -488,6 +489,7 @@ export class FieldSchemaAlpha<
|
|
|
488
489
|
|
|
489
490
|
/**
|
|
490
491
|
* Normalizes a {@link ImplicitFieldSchema} or {@link ImplicitAnnotatedFieldSchema} to a {@link FieldSchema}.
|
|
492
|
+
* @internal
|
|
491
493
|
*/
|
|
492
494
|
export function normalizeFieldSchema(
|
|
493
495
|
schema: ImplicitFieldSchema | ImplicitAnnotatedFieldSchema,
|