@fluidframework/tree 2.51.0 → 2.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/settings.json +0 -1
- package/CHANGELOG.md +43 -0
- package/api-report/tree.alpha.api.md +3 -2
- 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 +14 -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/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/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/packageVersion.d.ts +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.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 +7 -10
- 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 +9 -4
- 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 +8 -2
- package/dist/simple-tree/api/configuration.d.ts.map +1 -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 +35 -22
- 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 +98 -0
- package/dist/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/dist/simple-tree/api/discrepancies.js +255 -0
- package/dist/simple-tree/api/discrepancies.js.map +1 -0
- 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 +18 -117
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +7 -4
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +5 -1
- 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 +10 -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 +20 -4
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +45 -13
- 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 +2 -2
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +3 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- 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/treeNodeValid.d.ts +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +8 -1
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +3 -0
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +2 -0
- 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 +3 -1
- 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 +1 -0
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +4 -4
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +7 -8
- package/dist/simple-tree/index.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 +1 -1
- 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/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 +2 -7
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +4 -18
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +5 -5
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +9 -3
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +3 -0
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +3 -0
- 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/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 +14 -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/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/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/packageVersion.d.ts +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.js +1 -1
- 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 +8 -11
- 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 +10 -5
- 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 +8 -2
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- 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 +38 -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 +98 -0
- package/lib/simple-tree/api/discrepancies.d.ts.map +1 -0
- package/lib/simple-tree/{discrepancies.js → api/discrepancies.js} +80 -206
- package/lib/simple-tree/api/discrepancies.js.map +1 -0
- 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 -118
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +7 -4
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +6 -2
- 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 +8 -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 +20 -4
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +42 -12
- 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 +2 -2
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +2 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/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/treeNodeValid.d.ts +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +8 -1
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +3 -0
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +2 -0
- 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 +3 -1
- 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 +1 -0
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +4 -4
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +4 -4
- package/lib/simple-tree/index.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 +1 -1
- 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/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 +2 -7
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +3 -16
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +5 -5
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +11 -5
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +3 -0
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +3 -0
- 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 +10 -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/object-forest/objectForest.ts +10 -6
- package/src/index.ts +5 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +45 -19
- package/src/shared-tree/schematizeTree.ts +1 -1
- package/src/shared-tree/schematizingTreeView.ts +16 -13
- package/src/shared-tree/sharedTree.ts +2 -42
- package/src/shared-tree/treeAlpha.ts +30 -18
- 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 +8 -2
- package/src/simple-tree/api/create.ts +49 -36
- package/src/simple-tree/api/customTree.ts +59 -20
- package/src/simple-tree/{discrepancies.ts → api/discrepancies.ts} +128 -303
- package/src/simple-tree/api/schemaCompatibilityTester.ts +27 -151
- package/src/simple-tree/api/schemaFactory.ts +7 -4
- package/src/simple-tree/api/storedSchema.ts +6 -9
- package/src/simple-tree/api/treeBeta.ts +17 -4
- package/src/simple-tree/api/verboseTree.ts +17 -8
- package/src/simple-tree/core/allowedTypes.ts +54 -21
- package/src/simple-tree/core/context.ts +24 -22
- package/src/simple-tree/core/index.ts +2 -1
- package/src/simple-tree/core/treeNodeKernel.ts +1 -1
- package/src/simple-tree/core/treeNodeValid.ts +9 -2
- package/src/simple-tree/core/walkSchema.ts +3 -0
- package/src/simple-tree/createContext.ts +6 -1
- package/src/simple-tree/fieldSchema.ts +1 -0
- package/src/simple-tree/index.ts +5 -10
- package/src/simple-tree/node-kinds/array/arrayNode.ts +32 -19
- package/src/simple-tree/node-kinds/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/index.ts +0 -1
- package/src/simple-tree/node-kinds/object/objectNode.ts +9 -27
- package/src/simple-tree/prepareForInsertion.ts +17 -9
- package/src/simple-tree/toStoredSchema.ts +3 -0
- 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.map +0 -1
- package/src/feature-libraries/initializeForest.ts +0 -55
|
@@ -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
|
}
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
type EncodedAnyShape,
|
|
31
31
|
type EncodedChunkShape,
|
|
32
32
|
type EncodedFieldBatch,
|
|
33
|
-
type
|
|
33
|
+
type EncodedNestedArrayShape,
|
|
34
34
|
type EncodedValueShape,
|
|
35
35
|
SpecialField,
|
|
36
36
|
version,
|
|
@@ -41,18 +41,18 @@ import {
|
|
|
41
41
|
*
|
|
42
42
|
* Optimized for encoded size and encoding performance.
|
|
43
43
|
*
|
|
44
|
-
* Most of the compression strategy comes from the policy provided via `
|
|
44
|
+
* Most of the compression strategy comes from the policy provided via `context`.
|
|
45
45
|
*/
|
|
46
46
|
export function compressedEncode(
|
|
47
47
|
fieldBatch: FieldBatch,
|
|
48
|
-
|
|
48
|
+
context: EncoderContext,
|
|
49
49
|
): EncodedFieldBatch {
|
|
50
50
|
const batchBuffer: BufferFormat[] = [];
|
|
51
51
|
|
|
52
52
|
// Populate buffer, including shape and identifier references
|
|
53
53
|
for (const cursor of fieldBatch) {
|
|
54
54
|
const buffer: BufferFormat = [];
|
|
55
|
-
anyFieldEncoder.encodeField(cursor,
|
|
55
|
+
anyFieldEncoder.encodeField(cursor, context, buffer);
|
|
56
56
|
batchBuffer.push(buffer);
|
|
57
57
|
}
|
|
58
58
|
return updateShapesAndIdentifiersEncoding(version, batchBuffer);
|
|
@@ -91,7 +91,7 @@ export interface NodeEncoder extends Encoder {
|
|
|
91
91
|
*/
|
|
92
92
|
encodeNode(
|
|
93
93
|
cursor: ITreeCursorSynchronous,
|
|
94
|
-
|
|
94
|
+
context: EncoderContext,
|
|
95
95
|
outputBuffer: BufferFormat,
|
|
96
96
|
): void;
|
|
97
97
|
}
|
|
@@ -105,7 +105,7 @@ export interface NodesEncoder extends Encoder {
|
|
|
105
105
|
*/
|
|
106
106
|
encodeNodes(
|
|
107
107
|
cursor: ITreeCursorSynchronous,
|
|
108
|
-
|
|
108
|
+
context: EncoderContext,
|
|
109
109
|
outputBuffer: BufferFormat,
|
|
110
110
|
): void;
|
|
111
111
|
}
|
|
@@ -119,7 +119,7 @@ export interface FieldEncoder extends Encoder {
|
|
|
119
119
|
*/
|
|
120
120
|
encodeField(
|
|
121
121
|
cursor: ITreeCursorSynchronous,
|
|
122
|
-
|
|
122
|
+
context: EncoderContext,
|
|
123
123
|
outputBuffer: BufferFormat,
|
|
124
124
|
): void;
|
|
125
125
|
}
|
|
@@ -132,10 +132,10 @@ export function asFieldEncoder(encoder: NodeEncoder): FieldEncoder {
|
|
|
132
132
|
return {
|
|
133
133
|
encodeField(
|
|
134
134
|
cursor: ITreeCursorSynchronous,
|
|
135
|
-
|
|
135
|
+
context: EncoderContext,
|
|
136
136
|
outputBuffer: BufferFormat,
|
|
137
137
|
): void {
|
|
138
|
-
forEachNode(cursor, () => encoder.encodeNode(cursor,
|
|
138
|
+
forEachNode(cursor, () => encoder.encodeNode(cursor, context, outputBuffer));
|
|
139
139
|
},
|
|
140
140
|
shape: encoder.shape,
|
|
141
141
|
};
|
|
@@ -148,10 +148,10 @@ export function asNodesEncoder(encoder: NodeEncoder): NodesEncoder {
|
|
|
148
148
|
return {
|
|
149
149
|
encodeNodes(
|
|
150
150
|
cursor: ITreeCursorSynchronous,
|
|
151
|
-
|
|
151
|
+
context: EncoderContext,
|
|
152
152
|
outputBuffer: BufferFormat,
|
|
153
153
|
): void {
|
|
154
|
-
encoder.encodeNode(cursor,
|
|
154
|
+
encoder.encodeNode(cursor, context, outputBuffer);
|
|
155
155
|
cursor.nextNode();
|
|
156
156
|
},
|
|
157
157
|
shape: encoder.shape,
|
|
@@ -182,32 +182,32 @@ export class AnyShape extends ShapeGeneric<EncodedChunkShape> {
|
|
|
182
182
|
|
|
183
183
|
public static encodeField(
|
|
184
184
|
cursor: ITreeCursorSynchronous,
|
|
185
|
-
|
|
185
|
+
context: EncoderContext,
|
|
186
186
|
outputBuffer: BufferFormat,
|
|
187
|
-
|
|
187
|
+
encoder: FieldEncoder,
|
|
188
188
|
): void {
|
|
189
|
-
outputBuffer.push(
|
|
190
|
-
|
|
189
|
+
outputBuffer.push(encoder.shape);
|
|
190
|
+
encoder.encodeField(cursor, context, outputBuffer);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
public static encodeNode(
|
|
194
194
|
cursor: ITreeCursorSynchronous,
|
|
195
|
-
|
|
195
|
+
context: EncoderContext,
|
|
196
196
|
outputBuffer: BufferFormat,
|
|
197
|
-
|
|
197
|
+
encoder: NodeEncoder,
|
|
198
198
|
): void {
|
|
199
|
-
outputBuffer.push(
|
|
200
|
-
|
|
199
|
+
outputBuffer.push(encoder.shape);
|
|
200
|
+
encoder.encodeNode(cursor, context, outputBuffer);
|
|
201
201
|
}
|
|
202
202
|
|
|
203
203
|
public static encodeNodes(
|
|
204
204
|
cursor: ITreeCursorSynchronous,
|
|
205
|
-
|
|
205
|
+
context: EncoderContext,
|
|
206
206
|
outputBuffer: BufferFormat,
|
|
207
|
-
|
|
207
|
+
encoder: NodesEncoder,
|
|
208
208
|
): void {
|
|
209
|
-
outputBuffer.push(
|
|
210
|
-
|
|
209
|
+
outputBuffer.push(encoder.shape);
|
|
210
|
+
encoder.encodeNodes(cursor, context, outputBuffer);
|
|
211
211
|
}
|
|
212
212
|
}
|
|
213
213
|
|
|
@@ -217,12 +217,12 @@ export class AnyShape extends ShapeGeneric<EncodedChunkShape> {
|
|
|
217
217
|
export const anyNodeEncoder: NodeEncoder = {
|
|
218
218
|
encodeNode(
|
|
219
219
|
cursor: ITreeCursorSynchronous,
|
|
220
|
-
|
|
220
|
+
context: EncoderContext,
|
|
221
221
|
outputBuffer: BufferFormat,
|
|
222
222
|
): void {
|
|
223
223
|
// TODO: Fast path uniform chunk content.
|
|
224
|
-
const shape =
|
|
225
|
-
AnyShape.encodeNode(cursor,
|
|
224
|
+
const shape = context.nodeEncoderFromSchema(cursor.type);
|
|
225
|
+
AnyShape.encodeNode(cursor, context, outputBuffer, shape);
|
|
226
226
|
},
|
|
227
227
|
|
|
228
228
|
shape: AnyShape.instance,
|
|
@@ -234,25 +234,25 @@ export const anyNodeEncoder: NodeEncoder = {
|
|
|
234
234
|
export const anyFieldEncoder: FieldEncoder = {
|
|
235
235
|
encodeField(
|
|
236
236
|
cursor: ITreeCursorSynchronous,
|
|
237
|
-
|
|
237
|
+
context: EncoderContext,
|
|
238
238
|
outputBuffer: BufferFormat,
|
|
239
239
|
): void {
|
|
240
240
|
// TODO: Fast path uniform chunks.
|
|
241
241
|
|
|
242
242
|
if (cursor.getFieldLength() === 0) {
|
|
243
|
-
const shape =
|
|
244
|
-
AnyShape.encodeField(cursor,
|
|
243
|
+
const shape = InlineArrayEncoder.empty;
|
|
244
|
+
AnyShape.encodeField(cursor, context, outputBuffer, shape);
|
|
245
245
|
} else if (cursor.getFieldLength() === 1) {
|
|
246
246
|
// Fast path chunk of size one size one at least: skip nested array.
|
|
247
247
|
cursor.enterNode(0);
|
|
248
|
-
anyNodeEncoder.encodeNode(cursor,
|
|
248
|
+
anyNodeEncoder.encodeNode(cursor, context, outputBuffer);
|
|
249
249
|
cursor.exitNode();
|
|
250
250
|
} else {
|
|
251
251
|
// TODO: more efficient encoding for common cases.
|
|
252
252
|
// Could try to find more specific shape compatible with all children than `anyNodeEncoder`.
|
|
253
253
|
|
|
254
|
-
const shape =
|
|
255
|
-
AnyShape.encodeField(cursor,
|
|
254
|
+
const shape = context.nestedArrayEncoder(anyNodeEncoder);
|
|
255
|
+
AnyShape.encodeField(cursor, context, outputBuffer, shape);
|
|
256
256
|
}
|
|
257
257
|
},
|
|
258
258
|
|
|
@@ -260,20 +260,23 @@ export const anyFieldEncoder: FieldEncoder = {
|
|
|
260
260
|
};
|
|
261
261
|
|
|
262
262
|
/**
|
|
263
|
-
* Encodes a chunk using {@link
|
|
263
|
+
* Encodes a chunk using {@link EncodedInlineArrayShape}.
|
|
264
|
+
* @remarks
|
|
265
|
+
* The fact this is also a Shape is an implementation detail of the encoder: that allows the shape it uses to be itself,
|
|
266
|
+
* which is an easy way to keep all the related code together without extra objects.
|
|
264
267
|
*/
|
|
265
|
-
export class
|
|
268
|
+
export class InlineArrayEncoder
|
|
266
269
|
extends ShapeGeneric<EncodedChunkShape>
|
|
267
270
|
implements NodesEncoder, FieldEncoder
|
|
268
271
|
{
|
|
269
|
-
public static readonly empty:
|
|
272
|
+
public static readonly empty: InlineArrayEncoder = new InlineArrayEncoder(0, {
|
|
270
273
|
get shape() {
|
|
271
274
|
// Not actually used, makes count work without adding an additional shape.
|
|
272
|
-
return
|
|
275
|
+
return InlineArrayEncoder.empty;
|
|
273
276
|
},
|
|
274
277
|
encodeNodes(
|
|
275
278
|
cursor: ITreeCursorSynchronous,
|
|
276
|
-
|
|
279
|
+
context: EncoderContext,
|
|
277
280
|
outputBuffer: BufferFormat,
|
|
278
281
|
): void {
|
|
279
282
|
fail(0xb4d /* Empty array should not encode any nodes */);
|
|
@@ -292,19 +295,19 @@ export class InlineArrayShape
|
|
|
292
295
|
|
|
293
296
|
public encodeNodes(
|
|
294
297
|
cursor: ITreeCursorSynchronous,
|
|
295
|
-
|
|
298
|
+
context: EncoderContext,
|
|
296
299
|
outputBuffer: BufferFormat,
|
|
297
300
|
): void {
|
|
298
301
|
// Linter is wrong about this loop being for-of compatible.
|
|
299
302
|
// eslint-disable-next-line @typescript-eslint/prefer-for-of
|
|
300
303
|
for (let index = 0; index < this.length; index++) {
|
|
301
|
-
this.inner.encodeNodes(cursor,
|
|
304
|
+
this.inner.encodeNodes(cursor, context, outputBuffer);
|
|
302
305
|
}
|
|
303
306
|
}
|
|
304
307
|
|
|
305
308
|
public encodeField(
|
|
306
309
|
cursor: ITreeCursorSynchronous,
|
|
307
|
-
|
|
310
|
+
context: EncoderContext,
|
|
308
311
|
outputBuffer: BufferFormat,
|
|
309
312
|
): void {
|
|
310
313
|
// Its possible individual items from this array encode multiple nodes, so don't assume === here.
|
|
@@ -313,7 +316,7 @@ export class InlineArrayShape
|
|
|
313
316
|
0x73c /* unexpected length for fixed length array */,
|
|
314
317
|
);
|
|
315
318
|
cursor.firstNode();
|
|
316
|
-
this.encodeNodes(cursor,
|
|
319
|
+
this.encodeNodes(cursor, context, outputBuffer);
|
|
317
320
|
assert(
|
|
318
321
|
cursor.mode === CursorLocationType.Fields,
|
|
319
322
|
0x73d /* should return to fields mode when finished encoding */,
|
|
@@ -345,9 +348,15 @@ export class InlineArrayShape
|
|
|
345
348
|
}
|
|
346
349
|
|
|
347
350
|
/**
|
|
348
|
-
* Encodes a field as a nested array with the {@link
|
|
351
|
+
* Encodes a field as a nested array with the {@link EncodedNestedArrayShape} shape.
|
|
352
|
+
* @remarks
|
|
353
|
+
* The fact this is also a Shape is an implementation detail of the encoder: that allows the shape it uses to be itself,
|
|
354
|
+
* which is an easy way to keep all the related code together without extra objects.
|
|
349
355
|
*/
|
|
350
|
-
export class
|
|
356
|
+
export class NestedArrayEncoder
|
|
357
|
+
extends ShapeGeneric<EncodedChunkShape>
|
|
358
|
+
implements FieldEncoder
|
|
359
|
+
{
|
|
351
360
|
public readonly shape: Shape;
|
|
352
361
|
|
|
353
362
|
public constructor(public readonly inner: NodeEncoder) {
|
|
@@ -357,7 +366,7 @@ export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements
|
|
|
357
366
|
|
|
358
367
|
public encodeField(
|
|
359
368
|
cursor: ITreeCursorSynchronous,
|
|
360
|
-
|
|
369
|
+
context: EncoderContext,
|
|
361
370
|
outputBuffer: BufferFormat,
|
|
362
371
|
): void {
|
|
363
372
|
const buffer: BufferFormat = [];
|
|
@@ -365,7 +374,7 @@ export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements
|
|
|
365
374
|
const length = cursor.getFieldLength();
|
|
366
375
|
forEachNode(cursor, () => {
|
|
367
376
|
const before = buffer.length;
|
|
368
|
-
this.inner.encodeNode(cursor,
|
|
377
|
+
this.inner.encodeNode(cursor, context, buffer);
|
|
369
378
|
allNonZeroSize &&= buffer.length - before !== 0;
|
|
370
379
|
});
|
|
371
380
|
if (buffer.length === 0) {
|
|
@@ -385,7 +394,7 @@ export class NestedArrayShape extends ShapeGeneric<EncodedChunkShape> implements
|
|
|
385
394
|
identifiers: DeduplicationTable<string>,
|
|
386
395
|
shapes: DeduplicationTable<Shape>,
|
|
387
396
|
): EncodedChunkShape {
|
|
388
|
-
const shape:
|
|
397
|
+
const shape: EncodedNestedArrayShape =
|
|
389
398
|
shapes.valueToIndex.get(this.inner.shape) ??
|
|
390
399
|
fail(0xb4f /* index for shape not found in table */);
|
|
391
400
|
return {
|
|
@@ -436,46 +445,60 @@ export function encodeValue(
|
|
|
436
445
|
}
|
|
437
446
|
}
|
|
438
447
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
448
|
+
/**
|
|
449
|
+
* Provides common contextual information during encoding, like schema and policy settings.
|
|
450
|
+
* Also, provides a cache to avoid duplicating equivalent shapes during a batch of encode operations.
|
|
451
|
+
* To avoid Shape duplication, any Shapes used in the encoding should either be:
|
|
452
|
+
* - Singletons defined in a static scope.
|
|
453
|
+
* - Cached in this object for future reuse such that all equivalent Shapes are deduplicated.
|
|
454
|
+
*/
|
|
455
|
+
export class EncoderContext implements NodeEncodeBuilder, FieldEncodeBuilder {
|
|
456
|
+
private readonly nodeEncodersFromSchema: Map<TreeNodeSchemaIdentifier, NodeEncoder> =
|
|
457
|
+
new Map();
|
|
458
|
+
private readonly nestedArrayEncoders: Map<NodeEncoder, NestedArrayEncoder> = new Map();
|
|
442
459
|
public constructor(
|
|
443
|
-
private readonly
|
|
444
|
-
private readonly
|
|
460
|
+
private readonly nodeEncoderFromPolicy: NodeEncoderPolicy,
|
|
461
|
+
private readonly fieldEncoderFromPolicy: FieldEncoderPolicy,
|
|
445
462
|
public readonly fieldShapes: ReadonlyMap<FieldKindIdentifier, FlexFieldKind>,
|
|
446
463
|
public readonly idCompressor: IIdCompressor,
|
|
447
464
|
) {}
|
|
448
465
|
|
|
449
|
-
public
|
|
450
|
-
return getOrCreate(this.
|
|
451
|
-
this.
|
|
466
|
+
public nodeEncoderFromSchema(schemaName: TreeNodeSchemaIdentifier): NodeEncoder {
|
|
467
|
+
return getOrCreate(this.nodeEncodersFromSchema, schemaName, () =>
|
|
468
|
+
this.nodeEncoderFromPolicy(this, schemaName),
|
|
452
469
|
);
|
|
453
470
|
}
|
|
454
471
|
|
|
455
|
-
public
|
|
456
|
-
return
|
|
472
|
+
public fieldEncoderFromSchema(fieldSchema: TreeFieldStoredSchema): FieldEncoder {
|
|
473
|
+
return new LazyFieldEncoder(this, fieldSchema, this.fieldEncoderFromPolicy);
|
|
457
474
|
}
|
|
458
475
|
|
|
459
|
-
public
|
|
460
|
-
return
|
|
476
|
+
public nestedArrayEncoder(inner: NodeEncoder): NestedArrayEncoder {
|
|
477
|
+
return getOrCreate(this.nestedArrayEncoders, inner, () => new NestedArrayEncoder(inner));
|
|
461
478
|
}
|
|
462
479
|
}
|
|
463
480
|
|
|
464
|
-
export interface
|
|
465
|
-
|
|
481
|
+
export interface NodeEncodeBuilder {
|
|
482
|
+
nodeEncoderFromSchema(schemaName: TreeNodeSchemaIdentifier): NodeEncoder;
|
|
466
483
|
}
|
|
467
484
|
|
|
468
|
-
export interface
|
|
469
|
-
|
|
485
|
+
export interface FieldEncodeBuilder {
|
|
486
|
+
fieldEncoderFromSchema(schema: TreeFieldStoredSchema): FieldEncoder;
|
|
470
487
|
}
|
|
471
488
|
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
489
|
+
/**
|
|
490
|
+
* The policy for building a {@link FieldEncoder} for a field.
|
|
491
|
+
*/
|
|
492
|
+
export type FieldEncoderPolicy = (
|
|
493
|
+
nodeBuilder: NodeEncodeBuilder,
|
|
494
|
+
schema: TreeFieldStoredSchema,
|
|
475
495
|
) => FieldEncoder;
|
|
476
496
|
|
|
477
|
-
|
|
478
|
-
|
|
497
|
+
/**
|
|
498
|
+
* The policy for building a {@link NodeEncoder} for a node.
|
|
499
|
+
*/
|
|
500
|
+
export type NodeEncoderPolicy = (
|
|
501
|
+
fieldBuilder: FieldEncodeBuilder,
|
|
479
502
|
schemaName: TreeNodeSchemaIdentifier,
|
|
480
503
|
) => NodeEncoder;
|
|
481
504
|
|
|
@@ -483,21 +506,21 @@ class LazyFieldEncoder implements FieldEncoder {
|
|
|
483
506
|
private encoderLazy: FieldEncoder | undefined;
|
|
484
507
|
|
|
485
508
|
public constructor(
|
|
486
|
-
public readonly
|
|
487
|
-
public readonly
|
|
488
|
-
private readonly
|
|
509
|
+
public readonly nodeBuilder: NodeEncodeBuilder,
|
|
510
|
+
public readonly fieldSchema: TreeFieldStoredSchema,
|
|
511
|
+
private readonly fieldEncoderFromPolicy: FieldEncoderPolicy,
|
|
489
512
|
) {}
|
|
490
513
|
public encodeField(
|
|
491
514
|
cursor: ITreeCursorSynchronous,
|
|
492
|
-
|
|
515
|
+
context: EncoderContext,
|
|
493
516
|
outputBuffer: BufferFormat,
|
|
494
517
|
): void {
|
|
495
|
-
this.encoder.encodeField(cursor,
|
|
518
|
+
this.encoder.encodeField(cursor, context, outputBuffer);
|
|
496
519
|
}
|
|
497
520
|
|
|
498
521
|
private get encoder(): FieldEncoder {
|
|
499
522
|
if (this.encoderLazy === undefined) {
|
|
500
|
-
this.encoderLazy = this.
|
|
523
|
+
this.encoderLazy = this.fieldEncoderFromPolicy(this.nodeBuilder, this.fieldSchema);
|
|
501
524
|
}
|
|
502
525
|
return this.encoderLazy;
|
|
503
526
|
}
|
|
@@ -24,12 +24,12 @@ export const validVersions = new Set([version]);
|
|
|
24
24
|
* Top level length is implied from length of data array.
|
|
25
25
|
* All content are of this shape.
|
|
26
26
|
*/
|
|
27
|
-
export const
|
|
27
|
+
export const EncodedNestedArrayShape = ShapeIndex;
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* Inline array.
|
|
31
31
|
*/
|
|
32
|
-
export const
|
|
32
|
+
export const EncodedInlineArrayShape = Type.Object(
|
|
33
33
|
{
|
|
34
34
|
length: Count,
|
|
35
35
|
/**
|
|
@@ -123,7 +123,7 @@ export enum SpecialField {
|
|
|
123
123
|
* In the future other value shape formats may be added, likely as objects.
|
|
124
124
|
*
|
|
125
125
|
* @remarks
|
|
126
|
-
* See {@link
|
|
126
|
+
* See {@link EncodedNodeShape} for usage.
|
|
127
127
|
*/
|
|
128
128
|
export const EncodedValueShape = Type.Union([
|
|
129
129
|
Type.Boolean(),
|
|
@@ -134,7 +134,7 @@ export const EncodedValueShape = Type.Union([
|
|
|
134
134
|
]);
|
|
135
135
|
export type EncodedValueShape = undefined | Static<typeof EncodedValueShape>;
|
|
136
136
|
|
|
137
|
-
export const
|
|
137
|
+
export const EncodedNodeShape = Type.Object(
|
|
138
138
|
{
|
|
139
139
|
/**
|
|
140
140
|
* If not provided, inlined in data.
|
|
@@ -157,24 +157,30 @@ export const EncodedTreeShape = Type.Object(
|
|
|
157
157
|
);
|
|
158
158
|
|
|
159
159
|
/**
|
|
160
|
-
* Discriminated union of
|
|
160
|
+
* Discriminated union that represents the shapes of chunks in the encoded data.
|
|
161
|
+
* "Chunk" here refers to a chunk of tree data, rooted at a range of nodes, that is encoded as a
|
|
162
|
+
* single unit in a specific format represented by one of the shapes in this union.
|
|
163
|
+
*
|
|
164
|
+
* The concept of "chunk" is same for the tree data in memory and in the encoded wire format.
|
|
165
|
+
* The physical representation of the chunk may differ, but the logical structure remains the same.
|
|
166
|
+
* This is similar to other such concepts in the system.
|
|
161
167
|
*
|
|
162
168
|
* See {@link DiscriminatedUnionDispatcher} for more information on this pattern.
|
|
163
169
|
*/
|
|
164
170
|
export const EncodedChunkShape = Type.Object(
|
|
165
171
|
{
|
|
166
172
|
/**
|
|
167
|
-
* {@link
|
|
173
|
+
* {@link EncodedNestedArrayShape} union member.
|
|
168
174
|
*/
|
|
169
|
-
a: Type.Optional(
|
|
175
|
+
a: Type.Optional(EncodedNestedArrayShape),
|
|
170
176
|
/**
|
|
171
|
-
* {@link
|
|
177
|
+
* {@link EncodedInlineArrayShape} union member.
|
|
172
178
|
*/
|
|
173
|
-
b: Type.Optional(
|
|
179
|
+
b: Type.Optional(EncodedInlineArrayShape),
|
|
174
180
|
/**
|
|
175
|
-
* {@link
|
|
181
|
+
* {@link EncodedNodeShape} union member.
|
|
176
182
|
*/
|
|
177
|
-
c: Type.Optional(
|
|
183
|
+
c: Type.Optional(EncodedNodeShape),
|
|
178
184
|
/**
|
|
179
185
|
* {@link EncodedAnyShape} union member.
|
|
180
186
|
*/
|
|
@@ -185,9 +191,9 @@ export const EncodedChunkShape = Type.Object(
|
|
|
185
191
|
|
|
186
192
|
export type EncodedChunkShape = Static<typeof EncodedChunkShape>;
|
|
187
193
|
|
|
188
|
-
export type
|
|
189
|
-
export type
|
|
190
|
-
export type
|
|
194
|
+
export type EncodedNestedArrayShape = Static<typeof EncodedNestedArrayShape>;
|
|
195
|
+
export type EncodedInlineArrayShape = Static<typeof EncodedInlineArrayShape>;
|
|
196
|
+
export type EncodedNodeShape = Static<typeof EncodedNodeShape>;
|
|
191
197
|
export type EncodedAnyShape = Static<typeof EncodedAnyShape>;
|
|
192
198
|
|
|
193
199
|
export const EncodedFieldBatch = EncodedFieldBatchGeneric(version, EncodedChunkShape);
|