@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
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
type ICodecOptions,
|
|
8
|
+
type IJsonCodec,
|
|
9
|
+
makeVersionedValidatedCodec,
|
|
10
|
+
} from "../../codec/index.js";
|
|
11
|
+
import { hasSingle } from "../../util/index.js";
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
Format,
|
|
15
|
+
type EncodedRootsForRevision,
|
|
16
|
+
type RootRanges,
|
|
17
|
+
} from "./detachedFieldIndexFormatCommon.js";
|
|
18
|
+
import type {
|
|
19
|
+
DetachedField,
|
|
20
|
+
DetachedFieldSummaryData,
|
|
21
|
+
Major,
|
|
22
|
+
} from "./detachedFieldIndexTypes.js";
|
|
23
|
+
import type { Static, TSchema } from "@sinclair/typebox";
|
|
24
|
+
|
|
25
|
+
// Return type is intentionally derived.
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
27
|
+
export function makeDetachedFieldIndexCodecFromMajorCodec<
|
|
28
|
+
TEncodedRevisionTag,
|
|
29
|
+
TEncodedRevisionTagSchema extends TSchema,
|
|
30
|
+
TVersion extends number,
|
|
31
|
+
>(
|
|
32
|
+
options: ICodecOptions,
|
|
33
|
+
majorCodec: IJsonCodec<Major, TEncodedRevisionTag>,
|
|
34
|
+
version: TVersion,
|
|
35
|
+
encodedRevisionTagSchema: TEncodedRevisionTagSchema,
|
|
36
|
+
) {
|
|
37
|
+
const formatSchema = Format(version, encodedRevisionTagSchema);
|
|
38
|
+
return makeVersionedValidatedCodec(options, new Set([version]), formatSchema, {
|
|
39
|
+
encode: (data: DetachedFieldSummaryData): Static<typeof formatSchema> => {
|
|
40
|
+
const rootsForRevisions: EncodedRootsForRevision[] = [];
|
|
41
|
+
for (const [major, innerMap] of data.data) {
|
|
42
|
+
const encodedRevision = majorCodec.encode(major);
|
|
43
|
+
const rootRanges: RootRanges = [];
|
|
44
|
+
for (const [minor, detachedField] of innerMap) {
|
|
45
|
+
rootRanges.push([minor, detachedField.root]);
|
|
46
|
+
}
|
|
47
|
+
if (hasSingle(rootRanges)) {
|
|
48
|
+
const firstRootRange = rootRanges[0];
|
|
49
|
+
const rootsForRevision: EncodedRootsForRevision = [
|
|
50
|
+
encodedRevision,
|
|
51
|
+
firstRootRange[0],
|
|
52
|
+
firstRootRange[1],
|
|
53
|
+
];
|
|
54
|
+
rootsForRevisions.push(rootsForRevision);
|
|
55
|
+
} else {
|
|
56
|
+
const rootsForRevision: EncodedRootsForRevision = [encodedRevision, rootRanges];
|
|
57
|
+
rootsForRevisions.push(rootsForRevision);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const encoded: Static<typeof formatSchema> = {
|
|
61
|
+
version,
|
|
62
|
+
data: rootsForRevisions,
|
|
63
|
+
maxId: data.maxId,
|
|
64
|
+
};
|
|
65
|
+
return encoded;
|
|
66
|
+
},
|
|
67
|
+
decode: (parsed: Static<typeof formatSchema>): DetachedFieldSummaryData => {
|
|
68
|
+
const map = new Map();
|
|
69
|
+
for (const rootsForRevision of parsed.data) {
|
|
70
|
+
const innerMap = new Map<number, DetachedField>();
|
|
71
|
+
if (rootsForRevision.length === 2) {
|
|
72
|
+
for (const [minor, root] of rootsForRevision[1]) {
|
|
73
|
+
innerMap.set(minor, { root });
|
|
74
|
+
}
|
|
75
|
+
} else {
|
|
76
|
+
innerMap.set(rootsForRevision[1], { root: rootsForRevision[2] });
|
|
77
|
+
}
|
|
78
|
+
const revision = rootsForRevision[0] as TEncodedRevisionTag;
|
|
79
|
+
map.set(majorCodec.decode(revision), innerMap);
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
data: map,
|
|
83
|
+
maxId: parsed.maxId,
|
|
84
|
+
};
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
@@ -6,27 +6,19 @@
|
|
|
6
6
|
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
7
|
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
8
8
|
|
|
9
|
+
import type { ICodecOptions, IJsonCodec } from "../../codec/index.js";
|
|
9
10
|
import {
|
|
10
|
-
type
|
|
11
|
-
type
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
import type { EncodedRevisionTag, RevisionTagCodec, RevisionTag } from "../rebase/index.js";
|
|
11
|
+
type EncodedRevisionTag,
|
|
12
|
+
type RevisionTagCodec,
|
|
13
|
+
type RevisionTag,
|
|
14
|
+
RevisionTagSchema,
|
|
15
|
+
} from "../rebase/index.js";
|
|
16
16
|
|
|
17
|
-
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
type RootRanges,
|
|
21
|
-
version,
|
|
22
|
-
} from "./detachedFieldIndexFormat.js";
|
|
23
|
-
import type {
|
|
24
|
-
DetachedField,
|
|
25
|
-
DetachedFieldSummaryData,
|
|
26
|
-
Major,
|
|
27
|
-
} from "./detachedFieldIndexTypes.js";
|
|
17
|
+
import { type FormatV1, version1 } from "./detachedFieldIndexFormatV1.js";
|
|
18
|
+
import type { DetachedFieldSummaryData, Major } from "./detachedFieldIndexTypes.js";
|
|
19
|
+
import { makeDetachedFieldIndexCodecFromMajorCodec } from "./detachedFieldIndexCodecCommon.js";
|
|
28
20
|
|
|
29
|
-
class MajorCodec implements IJsonCodec<Major> {
|
|
21
|
+
class MajorCodec implements IJsonCodec<Major, EncodedRevisionTag> {
|
|
30
22
|
public constructor(
|
|
31
23
|
private readonly revisionTagCodec: RevisionTagCodec,
|
|
32
24
|
private readonly options: ICodecOptions,
|
|
@@ -48,6 +40,10 @@ class MajorCodec implements IJsonCodec<Major> {
|
|
|
48
40
|
* This assert is valid because the revision for an acked edit will have already been finalized, and a revision
|
|
49
41
|
* for a local-only edit will be finalizable at summarization time (local edits can only occur on a summarizing client
|
|
50
42
|
* if they're created while detached, and local ids made while detached are finalized before generating the attach summary).
|
|
43
|
+
*
|
|
44
|
+
* WARNING: the above is true when the whole container transitions from detached to attached,
|
|
45
|
+
* but not when the container is already attached and it's just the shared-tree that is attaching.
|
|
46
|
+
* The assert below will fail in such a scenario. This is addressed in the v2 codec.
|
|
51
47
|
*/
|
|
52
48
|
assert(
|
|
53
49
|
id === "root" || id >= 0,
|
|
@@ -69,58 +65,16 @@ class MajorCodec implements IJsonCodec<Major> {
|
|
|
69
65
|
}
|
|
70
66
|
}
|
|
71
67
|
|
|
72
|
-
export function
|
|
68
|
+
export function makeDetachedNodeToFieldCodecV1(
|
|
73
69
|
revisionTagCodec: RevisionTagCodec,
|
|
74
70
|
options: ICodecOptions,
|
|
75
71
|
idCompressor: IIdCompressor,
|
|
76
|
-
): IJsonCodec<DetachedFieldSummaryData,
|
|
72
|
+
): IJsonCodec<DetachedFieldSummaryData, FormatV1> {
|
|
77
73
|
const majorCodec = new MajorCodec(revisionTagCodec, options, idCompressor);
|
|
78
|
-
return
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
for (const [minor, detachedField] of innerMap) {
|
|
85
|
-
rootRanges.push([minor, detachedField.root]);
|
|
86
|
-
}
|
|
87
|
-
if (hasSingle(rootRanges)) {
|
|
88
|
-
const firstRootRange = rootRanges[0];
|
|
89
|
-
const rootsForRevision: EncodedRootsForRevision = [
|
|
90
|
-
encodedRevision,
|
|
91
|
-
firstRootRange[0],
|
|
92
|
-
firstRootRange[1],
|
|
93
|
-
];
|
|
94
|
-
rootsForRevisions.push(rootsForRevision);
|
|
95
|
-
} else {
|
|
96
|
-
const rootsForRevision: EncodedRootsForRevision = [encodedRevision, rootRanges];
|
|
97
|
-
rootsForRevisions.push(rootsForRevision);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
const encoded: Format = {
|
|
101
|
-
version,
|
|
102
|
-
data: rootsForRevisions,
|
|
103
|
-
maxId: data.maxId,
|
|
104
|
-
};
|
|
105
|
-
return encoded;
|
|
106
|
-
},
|
|
107
|
-
decode: (parsed: Format): DetachedFieldSummaryData => {
|
|
108
|
-
const map = new Map();
|
|
109
|
-
for (const rootsForRevision of parsed.data) {
|
|
110
|
-
const innerMap = new Map<number, DetachedField>();
|
|
111
|
-
if (rootsForRevision.length === 2) {
|
|
112
|
-
for (const [minor, root] of rootsForRevision[1]) {
|
|
113
|
-
innerMap.set(minor, { root });
|
|
114
|
-
}
|
|
115
|
-
} else {
|
|
116
|
-
innerMap.set(rootsForRevision[1], { root: rootsForRevision[2] });
|
|
117
|
-
}
|
|
118
|
-
map.set(majorCodec.decode(rootsForRevision[0]), innerMap);
|
|
119
|
-
}
|
|
120
|
-
return {
|
|
121
|
-
data: map,
|
|
122
|
-
maxId: parsed.maxId,
|
|
123
|
-
};
|
|
124
|
-
},
|
|
125
|
-
});
|
|
74
|
+
return makeDetachedFieldIndexCodecFromMajorCodec(
|
|
75
|
+
options,
|
|
76
|
+
majorCodec,
|
|
77
|
+
version1,
|
|
78
|
+
RevisionTagSchema,
|
|
79
|
+
);
|
|
126
80
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { assert } from "@fluidframework/core-utils/internal";
|
|
7
|
+
import type { IIdCompressor, StableId } from "@fluidframework/id-compressor";
|
|
8
|
+
|
|
9
|
+
import type { ICodecOptions, IJsonCodec } from "../../codec/index.js";
|
|
10
|
+
import type { EncodedRevisionTag, RevisionTagCodec, RevisionTag } from "../rebase/index.js";
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
type FormatV2,
|
|
14
|
+
StableOrFinalRevisionTag,
|
|
15
|
+
version2,
|
|
16
|
+
} from "./detachedFieldIndexFormatV2.js";
|
|
17
|
+
import type { DetachedFieldSummaryData, Major } from "./detachedFieldIndexTypes.js";
|
|
18
|
+
import { makeDetachedFieldIndexCodecFromMajorCodec } from "./detachedFieldIndexCodecCommon.js";
|
|
19
|
+
import { isStableId } from "@fluidframework/id-compressor/internal";
|
|
20
|
+
|
|
21
|
+
class MajorCodec implements IJsonCodec<Major> {
|
|
22
|
+
public constructor(
|
|
23
|
+
private readonly revisionTagCodec: RevisionTagCodec,
|
|
24
|
+
private readonly options: ICodecOptions,
|
|
25
|
+
private readonly idCompressor: IIdCompressor,
|
|
26
|
+
) {}
|
|
27
|
+
|
|
28
|
+
public encode(major: Major): EncodedRevisionTag | StableId {
|
|
29
|
+
assert(major !== undefined, 0xbfb /* Unexpected undefined revision */);
|
|
30
|
+
const id = this.revisionTagCodec.encode(major);
|
|
31
|
+
|
|
32
|
+
if (id !== "root" && id < 0) {
|
|
33
|
+
/**
|
|
34
|
+
* This code path handles the case where the major revision is not finalized.
|
|
35
|
+
* This can happen the SharedTree is being attached to an already attached container.
|
|
36
|
+
*/
|
|
37
|
+
assert(major !== "root", 0xbfc /* Major revision cannot be 'root' */);
|
|
38
|
+
const long = this.idCompressor.decompress(major);
|
|
39
|
+
return long;
|
|
40
|
+
}
|
|
41
|
+
return id;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public decode(major: EncodedRevisionTag | StableId): RevisionTag {
|
|
45
|
+
assert(
|
|
46
|
+
major === "root" || (typeof major === "string" && isStableId(major)) || major >= 0,
|
|
47
|
+
0xbfd /* Expected root, stable, or final compressed id */,
|
|
48
|
+
);
|
|
49
|
+
if (typeof major === "string" && isStableId(major)) {
|
|
50
|
+
return this.idCompressor.recompress(major);
|
|
51
|
+
}
|
|
52
|
+
return this.revisionTagCodec.decode(major, {
|
|
53
|
+
originatorId: this.revisionTagCodec.localSessionId,
|
|
54
|
+
idCompressor: this.idCompressor,
|
|
55
|
+
revision: undefined,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export function makeDetachedNodeToFieldCodecV2(
|
|
61
|
+
revisionTagCodec: RevisionTagCodec,
|
|
62
|
+
options: ICodecOptions,
|
|
63
|
+
idCompressor: IIdCompressor,
|
|
64
|
+
): IJsonCodec<DetachedFieldSummaryData, FormatV2> {
|
|
65
|
+
const majorCodec = new MajorCodec(revisionTagCodec, options, idCompressor);
|
|
66
|
+
return makeDetachedFieldIndexCodecFromMajorCodec(
|
|
67
|
+
options,
|
|
68
|
+
majorCodec,
|
|
69
|
+
version2,
|
|
70
|
+
StableOrFinalRevisionTag,
|
|
71
|
+
);
|
|
72
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { IIdCompressor } from "@fluidframework/id-compressor";
|
|
7
|
+
|
|
8
|
+
import {
|
|
9
|
+
type CodecWriteOptions,
|
|
10
|
+
FluidClientVersion,
|
|
11
|
+
type ICodecFamily,
|
|
12
|
+
type IJsonCodec,
|
|
13
|
+
makeCodecFamily,
|
|
14
|
+
makeVersionDispatchingCodec,
|
|
15
|
+
} from "../../codec/index.js";
|
|
16
|
+
import type { RevisionTagCodec } from "../rebase/index.js";
|
|
17
|
+
|
|
18
|
+
import { version1 } from "./detachedFieldIndexFormatV1.js";
|
|
19
|
+
import { version2 } from "./detachedFieldIndexFormatV2.js";
|
|
20
|
+
import { makeDetachedNodeToFieldCodecV1 } from "./detachedFieldIndexCodecV1.js";
|
|
21
|
+
import { makeDetachedNodeToFieldCodecV2 } from "./detachedFieldIndexCodecV2.js";
|
|
22
|
+
import type { DetachedFieldSummaryData } from "./detachedFieldIndexTypes.js";
|
|
23
|
+
|
|
24
|
+
export function makeDetachedFieldIndexCodec(
|
|
25
|
+
revisionTagCodec: RevisionTagCodec,
|
|
26
|
+
options: CodecWriteOptions,
|
|
27
|
+
idCompressor: IIdCompressor,
|
|
28
|
+
): IJsonCodec<DetachedFieldSummaryData> {
|
|
29
|
+
const family = makeDetachedFieldIndexCodecFamily(revisionTagCodec, options, idCompressor);
|
|
30
|
+
const writeVersion =
|
|
31
|
+
options.oldestCompatibleClient < FluidClientVersion.v2_52 ? version1 : version2;
|
|
32
|
+
return makeVersionDispatchingCodec(family, { ...options, writeVersion });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function makeDetachedFieldIndexCodecFamily(
|
|
36
|
+
revisionTagCodec: RevisionTagCodec,
|
|
37
|
+
options: CodecWriteOptions,
|
|
38
|
+
idCompressor: IIdCompressor,
|
|
39
|
+
): ICodecFamily<DetachedFieldSummaryData> {
|
|
40
|
+
return makeCodecFamily([
|
|
41
|
+
[version1, makeDetachedNodeToFieldCodecV1(revisionTagCodec, options, idCompressor)],
|
|
42
|
+
[version2, makeDetachedNodeToFieldCodecV2(revisionTagCodec, options, idCompressor)],
|
|
43
|
+
]);
|
|
44
|
+
}
|
|
@@ -3,15 +3,12 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { type Static, Type } from "@sinclair/typebox";
|
|
6
|
+
import { type Static, type TSchema, Type } from "@sinclair/typebox";
|
|
7
7
|
|
|
8
8
|
import { brandedNumberType } from "../../util/index.js";
|
|
9
|
-
import { RevisionTagSchema } from "../rebase/index.js";
|
|
10
9
|
|
|
11
10
|
import type { ForestRootId } from "./detachedFieldIndexTypes.js";
|
|
12
11
|
|
|
13
|
-
export const version = 1.0;
|
|
14
|
-
|
|
15
12
|
/**
|
|
16
13
|
* The ID of a detached node. Is not globally unique on.
|
|
17
14
|
* A `RevisionTag` + `DetachId` pair is globally unique and eventually consistent across clients.
|
|
@@ -22,7 +19,10 @@ export const DetachId = Type.Number({ multipleOf: 1 });
|
|
|
22
19
|
* The ID of a root node in the forest associated with the owning checkout. Is unique for that forest.
|
|
23
20
|
* Is not consistent across clients.
|
|
24
21
|
*/
|
|
25
|
-
const ForestRootIdSchema = brandedNumberType<ForestRootId>({
|
|
22
|
+
export const ForestRootIdSchema = brandedNumberType<ForestRootId>({
|
|
23
|
+
minimum: -1,
|
|
24
|
+
multipleOf: 1,
|
|
25
|
+
});
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* A mapping from a range of the detached node IDs the corresponding range root IDs.
|
|
@@ -43,21 +43,30 @@ export type RootRanges = Static<typeof RootRanges>;
|
|
|
43
43
|
/**
|
|
44
44
|
* For all the roots detached in a revision, represents a mapping from the detached node ID to corresponding root ID.
|
|
45
45
|
*/
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
])
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
46
|
+
// Return type is intentionally derived.
|
|
47
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
48
|
+
export const EncodedRootsForRevision = <Schema extends TSchema>(tRevisionTag: Schema) =>
|
|
49
|
+
Type.Union([
|
|
50
|
+
// Used to represent a revision in which more than one node were detached
|
|
51
|
+
Type.Tuple([tRevisionTag, RootRanges]),
|
|
52
|
+
// Used to represent a revision in which a single node was detached
|
|
53
|
+
Type.Tuple([tRevisionTag, DetachId, ForestRootIdSchema]),
|
|
54
|
+
]);
|
|
55
|
+
export type EncodedRootsForRevision = Static<ReturnType<typeof EncodedRootsForRevision>>;
|
|
56
|
+
|
|
57
|
+
export const Format = <TVersion extends number, TRevisionTagSchema extends TSchema>(
|
|
58
|
+
tVersion: TVersion,
|
|
59
|
+
tRevisionTag: TRevisionTagSchema,
|
|
60
|
+
// Return type is intentionally derived.
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/explicit-function-return-type
|
|
62
|
+
) =>
|
|
63
|
+
Type.Object(
|
|
64
|
+
{
|
|
65
|
+
version: Type.Literal(tVersion),
|
|
66
|
+
data: Type.Array(EncodedRootsForRevision(tRevisionTag)),
|
|
67
|
+
maxId: ForestRootIdSchema,
|
|
68
|
+
},
|
|
69
|
+
{ additionalProperties: false },
|
|
70
|
+
);
|
|
71
|
+
|
|
72
|
+
export type Format = Static<ReturnType<typeof Format>>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { Static } from "@sinclair/typebox";
|
|
7
|
+
|
|
8
|
+
import { Format } from "./detachedFieldIndexFormatCommon.js";
|
|
9
|
+
import { RevisionTagSchema } from "../rebase/index.js";
|
|
10
|
+
|
|
11
|
+
export const version1 = 1.0;
|
|
12
|
+
|
|
13
|
+
export const FormatV1 = Format(version1, RevisionTagSchema);
|
|
14
|
+
|
|
15
|
+
export type FormatV1 = Static<typeof FormatV1>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Type, type Static } from "@sinclair/typebox";
|
|
7
|
+
|
|
8
|
+
import { Format } from "./detachedFieldIndexFormatCommon.js";
|
|
9
|
+
import { RevisionTagSchema, StableIdSchema } from "../rebase/index.js";
|
|
10
|
+
|
|
11
|
+
export const version2 = 2.0;
|
|
12
|
+
|
|
13
|
+
export const StableOrFinalRevisionTag = Type.Union([RevisionTagSchema, StableIdSchema]);
|
|
14
|
+
|
|
15
|
+
export const FormatV2 = Format(version2, StableOrFinalRevisionTag);
|
|
16
|
+
|
|
17
|
+
export type FormatV2 = Static<typeof FormatV2>;
|
|
@@ -19,7 +19,7 @@ A few implementations are included which make different choices here:
|
|
|
19
19
|
|
|
20
20
|
- [uncompressedEncode.ts](uncompressedEncode.ts): the simplest implementation, which captures nothing in the shape and does no Dictionary Coding of identifiers.
|
|
21
21
|
This makes for more human readable data as well as a simple reference implementation.
|
|
22
|
-
- [compressedEncode.ts](compressedEncode.ts): some utilities for actual compressed encoding, but does not contain any advanced strategies (instead they must be provided to it via the `
|
|
22
|
+
- [compressedEncode.ts](compressedEncode.ts): some utilities for actual compressed encoding, but does not contain any advanced strategies (instead they must be provided to it via the `EncoderContext`)
|
|
23
23
|
- [schemaBasedEncode.ts](schemaBasedEncode.ts): a strategy for compressedEncode using schema to infer commonly used shapes.
|
|
24
24
|
|
|
25
25
|
### Future Optimizations
|
|
@@ -41,9 +41,9 @@ import {
|
|
|
41
41
|
type EncodedAnyShape,
|
|
42
42
|
type EncodedChunkShape,
|
|
43
43
|
type EncodedFieldBatch,
|
|
44
|
-
type
|
|
45
|
-
type
|
|
46
|
-
type
|
|
44
|
+
type EncodedInlineArrayShape,
|
|
45
|
+
type EncodedNestedArrayShape,
|
|
46
|
+
type EncodedNodeShape,
|
|
47
47
|
type EncodedValueShape,
|
|
48
48
|
SpecialField,
|
|
49
49
|
} from "./format.js";
|
|
@@ -72,17 +72,17 @@ export function decode(
|
|
|
72
72
|
|
|
73
73
|
const decoderLibrary = new DiscriminatedUnionDispatcher<
|
|
74
74
|
EncodedChunkShape,
|
|
75
|
-
[
|
|
75
|
+
[context: DecoderContext<EncodedChunkShape>],
|
|
76
76
|
ChunkDecoder
|
|
77
77
|
>({
|
|
78
|
-
a(shape:
|
|
78
|
+
a(shape: EncodedNestedArrayShape, context): ChunkDecoder {
|
|
79
79
|
return new NestedArrayDecoder(shape);
|
|
80
80
|
},
|
|
81
|
-
b(shape:
|
|
81
|
+
b(shape: EncodedInlineArrayShape, context): ChunkDecoder {
|
|
82
82
|
return new InlineArrayDecoder(shape);
|
|
83
83
|
},
|
|
84
|
-
c(shape:
|
|
85
|
-
return new
|
|
84
|
+
c(shape: EncodedNodeShape, context): ChunkDecoder {
|
|
85
|
+
return new NodeDecoder(shape, context);
|
|
86
86
|
},
|
|
87
87
|
d(shape: EncodedAnyShape): ChunkDecoder {
|
|
88
88
|
return anyDecoder;
|
|
@@ -180,10 +180,10 @@ export function aggregateChunks(input: TreeChunk[]): TreeChunk {
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
/**
|
|
183
|
-
* Decoder for {@link
|
|
183
|
+
* Decoder for {@link EncodedNestedArrayShape}s.
|
|
184
184
|
*/
|
|
185
185
|
export class NestedArrayDecoder implements ChunkDecoder {
|
|
186
|
-
public constructor(private readonly shape:
|
|
186
|
+
public constructor(private readonly shape: EncodedNestedArrayShape) {}
|
|
187
187
|
public decode(decoders: readonly ChunkDecoder[], stream: StreamCursor): TreeChunk {
|
|
188
188
|
const decoder = decoders[this.shape] ?? oob();
|
|
189
189
|
|
|
@@ -213,10 +213,10 @@ export class NestedArrayDecoder implements ChunkDecoder {
|
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
/**
|
|
216
|
-
* Decoder for {@link
|
|
216
|
+
* Decoder for {@link EncodedInlineArrayShape}s.
|
|
217
217
|
*/
|
|
218
218
|
export class InlineArrayDecoder implements ChunkDecoder {
|
|
219
|
-
public constructor(private readonly shape:
|
|
219
|
+
public constructor(private readonly shape: EncodedInlineArrayShape) {}
|
|
220
220
|
public decode(decoders: readonly ChunkDecoder[], stream: StreamCursor): TreeChunk {
|
|
221
221
|
const length = this.shape.length;
|
|
222
222
|
const decoder = decoders[this.shape.shape] ?? oob();
|
|
@@ -248,14 +248,14 @@ type BasicFieldDecoder = (
|
|
|
248
248
|
) => [FieldKey, TreeChunk];
|
|
249
249
|
|
|
250
250
|
/**
|
|
251
|
-
* Get a decoder for fields of a provided (via `shape` and `
|
|
251
|
+
* Get a decoder for fields of a provided (via `shape` and `context`) {@link EncodedChunkShape}.
|
|
252
252
|
*/
|
|
253
253
|
function fieldDecoder(
|
|
254
|
-
|
|
254
|
+
context: DecoderContext<EncodedChunkShape>,
|
|
255
255
|
key: FieldKey,
|
|
256
256
|
shape: number,
|
|
257
257
|
): BasicFieldDecoder {
|
|
258
|
-
assertValidIndex(shape,
|
|
258
|
+
assertValidIndex(shape, context.shapes);
|
|
259
259
|
return (decoders, stream) => {
|
|
260
260
|
const decoder = decoders[shape] ?? oob();
|
|
261
261
|
return [key, decoder.decode(decoders, stream)];
|
|
@@ -263,30 +263,30 @@ function fieldDecoder(
|
|
|
263
263
|
}
|
|
264
264
|
|
|
265
265
|
/**
|
|
266
|
-
* Decoder for {@link
|
|
266
|
+
* Decoder for {@link EncodedNodeShape}s.
|
|
267
267
|
*/
|
|
268
|
-
export class
|
|
268
|
+
export class NodeDecoder implements ChunkDecoder {
|
|
269
269
|
private readonly type?: TreeNodeSchemaIdentifier;
|
|
270
270
|
private readonly fieldDecoders: readonly BasicFieldDecoder[];
|
|
271
271
|
public constructor(
|
|
272
|
-
private readonly shape:
|
|
273
|
-
private readonly
|
|
272
|
+
private readonly shape: EncodedNodeShape,
|
|
273
|
+
private readonly context: DecoderContext<EncodedChunkShape>,
|
|
274
274
|
) {
|
|
275
|
-
this.type = shape.type === undefined ? undefined :
|
|
275
|
+
this.type = shape.type === undefined ? undefined : context.identifier(shape.type);
|
|
276
276
|
|
|
277
277
|
const fieldDecoders: BasicFieldDecoder[] = [];
|
|
278
278
|
for (const [fieldKey, fieldShape] of shape.fields ?? []) {
|
|
279
|
-
const key: FieldKey =
|
|
280
|
-
fieldDecoders.push(fieldDecoder(
|
|
279
|
+
const key: FieldKey = context.identifier(fieldKey);
|
|
280
|
+
fieldDecoders.push(fieldDecoder(context, key, fieldShape));
|
|
281
281
|
}
|
|
282
282
|
this.fieldDecoders = fieldDecoders;
|
|
283
283
|
}
|
|
284
284
|
public decode(decoders: readonly ChunkDecoder[], stream: StreamCursor): TreeChunk {
|
|
285
285
|
const type: TreeNodeSchemaIdentifier =
|
|
286
|
-
this.type ?? readStreamIdentifier(stream, this.
|
|
286
|
+
this.type ?? readStreamIdentifier(stream, this.context);
|
|
287
287
|
// TODO: Consider typechecking against stored schema in here somewhere.
|
|
288
288
|
|
|
289
|
-
const value = readValue(stream, this.shape.value, this.
|
|
289
|
+
const value = readValue(stream, this.shape.value, this.context.idDecodingContext);
|
|
290
290
|
const fields: Map<FieldKey, TreeChunk[]> = new Map();
|
|
291
291
|
|
|
292
292
|
// Helper to add fields, but with unneeded array chunks removed.
|
|
@@ -309,7 +309,7 @@ export class TreeDecoder implements ChunkDecoder {
|
|
|
309
309
|
const decoder = decoders[this.shape.extraFields] ?? oob();
|
|
310
310
|
const inner = readStreamStream(stream);
|
|
311
311
|
while (inner.offset !== inner.data.length) {
|
|
312
|
-
const key: FieldKey = readStreamIdentifier(inner, this.
|
|
312
|
+
const key: FieldKey = readStreamIdentifier(inner, this.context);
|
|
313
313
|
addField(key, decoder.decode(decoders, inner));
|
|
314
314
|
}
|
|
315
315
|
}
|
|
@@ -21,13 +21,17 @@ import type { EncodedFieldBatchGeneric, IdentifierOrIndex } from "./formatGeneri
|
|
|
21
21
|
/**
|
|
22
22
|
* General purpose shape based tree decoder which gets its support for specific shapes from the caller.
|
|
23
23
|
*/
|
|
24
|
-
export function decode<TEncodedShape extends object,
|
|
25
|
-
decoderLibrary: DiscriminatedUnionDispatcher<
|
|
26
|
-
|
|
24
|
+
export function decode<TEncodedShape extends object, TContext>(
|
|
25
|
+
decoderLibrary: DiscriminatedUnionDispatcher<
|
|
26
|
+
TEncodedShape,
|
|
27
|
+
[context: TContext],
|
|
28
|
+
ChunkDecoder
|
|
29
|
+
>,
|
|
30
|
+
context: TContext,
|
|
27
31
|
batch: EncodedFieldBatchGeneric<TEncodedShape>,
|
|
28
32
|
rootDecoder: ChunkDecoder,
|
|
29
33
|
): TreeChunk[] {
|
|
30
|
-
const decoders = batch.shapes.map((shape) => decoderLibrary.dispatch(shape,
|
|
34
|
+
const decoders = batch.shapes.map((shape) => decoderLibrary.dispatch(shape, context));
|
|
31
35
|
const chunks: TreeChunk[] = [];
|
|
32
36
|
for (const field of batch.data) {
|
|
33
37
|
const stream = { data: field, offset: 0 };
|
|
@@ -70,12 +74,12 @@ export class DecoderContext<TEncodedShape = unknown> {
|
|
|
70
74
|
*/
|
|
71
75
|
export function readStreamIdentifier<T extends string & BrandedType<string, string>>(
|
|
72
76
|
stream: StreamCursor,
|
|
73
|
-
|
|
77
|
+
context: DecoderContext,
|
|
74
78
|
): T {
|
|
75
79
|
const content = readStream(stream);
|
|
76
80
|
assert(
|
|
77
81
|
typeof content === "number" || typeof content === "string",
|
|
78
82
|
0x73b /* content to be a number or string */,
|
|
79
83
|
);
|
|
80
|
-
return
|
|
84
|
+
return context.identifier(content);
|
|
81
85
|
}
|