@fluidframework/tree 2.102.0 → 2.103.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/CHANGELOG.md +4 -0
- package/dist/codec/versioned/format.d.ts +5 -4
- package/dist/codec/versioned/format.d.ts.map +1 -1
- package/dist/codec/versioned/format.js +26 -3
- package/dist/codec/versioned/format.js.map +1 -1
- package/dist/core/rebase/types.d.ts +4 -3
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +27 -4
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/schema-stored/formatV1.d.ts +16 -15
- package/dist/core/schema-stored/formatV1.d.ts.map +1 -1
- package/dist/core/schema-stored/formatV1.js +31 -8
- package/dist/core/schema-stored/formatV1.js.map +1 -1
- package/dist/core/schema-stored/formatV2.d.ts +29 -28
- package/dist/core/schema-stored/formatV2.d.ts.map +1 -1
- package/dist/core/schema-stored/formatV2.js +33 -10
- package/dist/core/schema-stored/formatV2.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts +11 -10
- package/dist/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatCommon.js +33 -10
- package/dist/core/tree/detachedFieldIndexFormatCommon.js.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts +7 -6
- package/dist/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndexFormatV2.js +25 -2
- package/dist/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
- package/dist/core/tree/persistedTreeTextFormat.d.ts +19 -18
- package/dist/core/tree/persistedTreeTextFormat.d.ts.map +1 -1
- package/dist/core/tree/persistedTreeTextFormat.js +33 -10
- package/dist/core/tree/persistedTreeTextFormat.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts +13 -12
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js +36 -13
- package/dist/feature-libraries/chunked-forest/codec/format/formatGeneric.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.d.ts +36 -35
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js +41 -18
- package/dist/feature-libraries/chunked-forest/codec/format/formatV1.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.d.ts +26 -25
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js +27 -4
- package/dist/feature-libraries/chunked-forest/codec/format/formatV2.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.d.ts +24 -23
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js +30 -7
- package/dist/feature-libraries/chunked-forest/codec/format/formatVText.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +66 -14
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +101 -36
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +36 -14
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/forest-summary/formatCommon.d.ts +6 -5
- package/dist/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/formatCommon.js +26 -3
- package/dist/feature-libraries/forest-summary/formatCommon.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.d.ts +4 -3
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js +26 -3
- package/dist/feature-libraries/modular-schema/genericFieldKindFormat.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +45 -44
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js +48 -25
- package/dist/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +23 -22
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js +29 -6
- package/dist/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +9 -8
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +31 -8
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +14 -13
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js +34 -11
- package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +5 -4
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js +25 -2
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/dist/feature-libraries/schema-index/formatV1.d.ts +15 -14
- package/dist/feature-libraries/schema-index/formatV1.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/formatV1.js +27 -4
- package/dist/feature-libraries/schema-index/formatV1.js.map +1 -1
- package/dist/feature-libraries/schema-index/formatV2.d.ts +20 -19
- package/dist/feature-libraries/schema-index/formatV2.d.ts.map +1 -1
- package/dist/feature-libraries/schema-index/formatV2.js +27 -4
- package/dist/feature-libraries/schema-index/formatV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +1 -3
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV1.d.ts +283 -282
- package/dist/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV1.js +63 -40
- package/dist/feature-libraries/sequence-field/formatV1.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV2.d.ts +180 -179
- package/dist/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV2.js +55 -32
- package/dist/feature-libraries/sequence-field/formatV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV3.d.ts +126 -125
- package/dist/feature-libraries/sequence-field/formatV3.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/formatV3.js +27 -4
- package/dist/feature-libraries/sequence-field/formatV3.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/sharedTree.d.ts +2 -2
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFormat.d.ts +8 -7
- package/dist/shared-tree/sharedTreeChangeFormat.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFormat.js +28 -5
- package/dist/shared-tree/sharedTreeChangeFormat.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +3 -3
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/editManager.d.ts +2 -2
- package/dist/shared-tree-core/editManager.d.ts.map +1 -1
- package/dist/shared-tree-core/editManager.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts +35 -34
- package/dist/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatCommons.js +39 -16
- package/dist/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts +15 -15
- package/dist/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatV1toV4.js +33 -10
- package/dist/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts +40 -40
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.js +27 -4
- package/dist/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageCodecVSharedBranches.js +25 -2
- package/dist/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts +5 -5
- package/dist/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormatV1ToV4.js +31 -8
- package/dist/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts +7 -7
- package/dist/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
- package/dist/shared-tree-core/messageFormatVSharedBranches.js +29 -6
- package/dist/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +5 -0
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +37 -13
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/simpleSchemaFormatV1.d.ts +121 -120
- package/dist/simple-tree/simpleSchemaFormatV1.d.ts.map +1 -1
- package/dist/simple-tree/simpleSchemaFormatV1.js +54 -31
- package/dist/simple-tree/simpleSchemaFormatV1.js.map +1 -1
- package/dist/util/typeboxBrand.d.ts +1 -1
- package/dist/util/typeboxBrand.d.ts.map +1 -1
- package/dist/util/typeboxBrand.js +26 -3
- package/dist/util/typeboxBrand.js.map +1 -1
- package/dist/util/utils.d.ts +2 -2
- package/dist/util/utils.d.ts.map +1 -1
- package/dist/util/utils.js +25 -2
- package/dist/util/utils.js.map +1 -1
- package/eslint.config.mts +44 -0
- package/lib/codec/versioned/format.d.ts +5 -4
- package/lib/codec/versioned/format.d.ts.map +1 -1
- package/lib/codec/versioned/format.js +1 -1
- package/lib/codec/versioned/format.js.map +1 -1
- package/lib/core/rebase/types.d.ts +4 -3
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +1 -1
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/schema-stored/formatV1.d.ts +16 -15
- package/lib/core/schema-stored/formatV1.d.ts.map +1 -1
- package/lib/core/schema-stored/formatV1.js +1 -1
- package/lib/core/schema-stored/formatV1.js.map +1 -1
- package/lib/core/schema-stored/formatV2.d.ts +29 -28
- package/lib/core/schema-stored/formatV2.d.ts.map +1 -1
- package/lib/core/schema-stored/formatV2.js +1 -1
- package/lib/core/schema-stored/formatV2.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts +11 -10
- package/lib/core/tree/detachedFieldIndexFormatCommon.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatCommon.js +1 -1
- package/lib/core/tree/detachedFieldIndexFormatCommon.js.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts +7 -6
- package/lib/core/tree/detachedFieldIndexFormatV2.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV2.js +1 -1
- package/lib/core/tree/detachedFieldIndexFormatV2.js.map +1 -1
- package/lib/core/tree/persistedTreeTextFormat.d.ts +19 -18
- package/lib/core/tree/persistedTreeTextFormat.d.ts.map +1 -1
- package/lib/core/tree/persistedTreeTextFormat.js +1 -1
- package/lib/core/tree/persistedTreeTextFormat.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts +13 -12
- package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatGeneric.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV1.d.ts +36 -35
- package/lib/feature-libraries/chunked-forest/codec/format/formatV1.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV1.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV1.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV2.d.ts +26 -25
- package/lib/feature-libraries/chunked-forest/codec/format/formatV2.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV2.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatV2.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatVText.d.ts +24 -23
- package/lib/feature-libraries/chunked-forest/codec/format/formatVText.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatVText.js +1 -1
- package/lib/feature-libraries/chunked-forest/codec/format/formatVText.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts +66 -14
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +101 -36
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +36 -14
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/forest-summary/formatCommon.d.ts +6 -5
- package/lib/feature-libraries/forest-summary/formatCommon.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/formatCommon.js +1 -1
- package/lib/feature-libraries/forest-summary/formatCommon.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindFormat.d.ts +4 -3
- package/lib/feature-libraries/modular-schema/genericFieldKindFormat.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindFormat.js +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKindFormat.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts +45 -44
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV1.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts +23 -22
- package/lib/feature-libraries/modular-schema/modularChangeFormatV2.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFormatV2.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts +9 -8
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.js +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV1.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts +14 -13
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.js +1 -1
- package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV2.js.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +5 -4
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.js +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.js.map +1 -1
- package/lib/feature-libraries/schema-index/formatV1.d.ts +15 -14
- package/lib/feature-libraries/schema-index/formatV1.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/formatV1.js +1 -1
- package/lib/feature-libraries/schema-index/formatV1.js.map +1 -1
- package/lib/feature-libraries/schema-index/formatV2.d.ts +20 -19
- package/lib/feature-libraries/schema-index/formatV2.d.ts.map +1 -1
- package/lib/feature-libraries/schema-index/formatV2.js +1 -1
- package/lib/feature-libraries/schema-index/formatV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +1 -3
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV1.d.ts +283 -282
- package/lib/feature-libraries/sequence-field/formatV1.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV1.js +1 -1
- package/lib/feature-libraries/sequence-field/formatV1.js.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV2.d.ts +180 -179
- package/lib/feature-libraries/sequence-field/formatV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV2.js +1 -1
- package/lib/feature-libraries/sequence-field/formatV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV3.d.ts +126 -125
- package/lib/feature-libraries/sequence-field/formatV3.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/formatV3.js +1 -1
- package/lib/feature-libraries/sequence-field/formatV3.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/sharedTree.d.ts +2 -2
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +1 -1
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFormat.d.ts +8 -7
- package/lib/shared-tree/sharedTreeChangeFormat.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFormat.js +1 -1
- package/lib/shared-tree/sharedTreeChangeFormat.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +3 -3
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +1 -1
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/editManager.d.ts +2 -2
- package/lib/shared-tree-core/editManager.d.ts.map +1 -1
- package/lib/shared-tree-core/editManager.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts +35 -34
- package/lib/shared-tree-core/editManagerFormatCommons.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.js +1 -1
- package/lib/shared-tree-core/editManagerFormatCommons.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts +15 -15
- package/lib/shared-tree-core/editManagerFormatV1toV4.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.js +1 -1
- package/lib/shared-tree-core/editManagerFormatV1toV4.js.map +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts +40 -40
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.js +1 -1
- package/lib/shared-tree-core/editManagerFormatVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.js +1 -1
- package/lib/shared-tree-core/messageCodecVSharedBranches.js.map +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts +5 -5
- package/lib/shared-tree-core/messageFormatV1ToV4.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.js +1 -1
- package/lib/shared-tree-core/messageFormatV1ToV4.js.map +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts +7 -7
- package/lib/shared-tree-core/messageFormatVSharedBranches.d.ts.map +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.js +1 -1
- package/lib/shared-tree-core/messageFormatVSharedBranches.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +5 -0
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +35 -12
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/simpleSchemaFormatV1.d.ts +121 -120
- package/lib/simple-tree/simpleSchemaFormatV1.d.ts.map +1 -1
- package/lib/simple-tree/simpleSchemaFormatV1.js +1 -1
- package/lib/simple-tree/simpleSchemaFormatV1.js.map +1 -1
- package/lib/util/typeboxBrand.d.ts +1 -1
- package/lib/util/typeboxBrand.d.ts.map +1 -1
- package/lib/util/typeboxBrand.js +1 -1
- package/lib/util/typeboxBrand.js.map +1 -1
- package/lib/util/utils.d.ts +2 -2
- package/lib/util/utils.d.ts.map +1 -1
- package/lib/util/utils.js +1 -1
- package/lib/util/utils.js.map +1 -1
- package/package.json +21 -21
- package/src/codec/versioned/format.ts +2 -1
- package/src/core/rebase/types.ts +1 -1
- package/src/core/schema-stored/formatV1.ts +2 -1
- package/src/core/schema-stored/formatV2.ts +2 -1
- package/src/core/tree/detachedFieldIndexFormatCommon.ts +2 -1
- package/src/core/tree/detachedFieldIndexFormatV2.ts +2 -1
- package/src/core/tree/persistedTreeTextFormat.ts +2 -1
- package/src/feature-libraries/chunked-forest/chunkTree.ts +3 -2
- package/src/feature-libraries/chunked-forest/codec/format/formatGeneric.ts +2 -1
- package/src/feature-libraries/chunked-forest/codec/format/formatV1.ts +2 -1
- package/src/feature-libraries/chunked-forest/codec/format/formatV2.ts +2 -1
- package/src/feature-libraries/chunked-forest/codec/format/formatVText.ts +2 -1
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +131 -44
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +36 -14
- package/src/feature-libraries/forest-summary/formatCommon.ts +2 -1
- package/src/feature-libraries/modular-schema/genericFieldKindFormat.ts +2 -1
- package/src/feature-libraries/modular-schema/modularChangeFormatV1.ts +2 -1
- package/src/feature-libraries/modular-schema/modularChangeFormatV2.ts +2 -1
- package/src/feature-libraries/optional-field/optionalFieldChangeFormatV1.ts +2 -1
- package/src/feature-libraries/optional-field/optionalFieldChangeFormatV2.ts +2 -1
- package/src/feature-libraries/schema-edits/schemaChangeFormat.ts +2 -1
- package/src/feature-libraries/schema-index/formatV1.ts +2 -1
- package/src/feature-libraries/schema-index/formatV2.ts +2 -1
- package/src/feature-libraries/sequence-field/compose.ts +1 -4
- package/src/feature-libraries/sequence-field/formatV1.ts +2 -1
- package/src/feature-libraries/sequence-field/formatV2.ts +2 -1
- package/src/feature-libraries/sequence-field/formatV3.ts +2 -1
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/sharedTree.ts +2 -5
- package/src/shared-tree/sharedTreeChangeFormat.ts +2 -1
- package/src/shared-tree/treeCheckout.ts +3 -6
- package/src/shared-tree-core/editManager.ts +2 -2
- package/src/shared-tree-core/editManagerFormatCommons.ts +2 -1
- package/src/shared-tree-core/editManagerFormatV1toV4.ts +2 -1
- package/src/shared-tree-core/editManagerFormatVSharedBranches.ts +2 -1
- package/src/shared-tree-core/messageCodecVSharedBranches.ts +2 -1
- package/src/shared-tree-core/messageFormatV1ToV4.ts +2 -1
- package/src/shared-tree-core/messageFormatVSharedBranches.ts +2 -1
- package/src/simple-tree/core/treeNodeKernel.ts +39 -15
- package/src/simple-tree/simpleSchemaFormatV1.ts +2 -1
- package/src/util/typeboxBrand.ts +2 -1
- package/src/util/utils.ts +2 -1
|
@@ -57,6 +57,15 @@ export declare class TreeShape {
|
|
|
57
57
|
readonly fields: ReadonlyMap<FieldKey, OffsetShape>;
|
|
58
58
|
readonly fieldsOffsetArray: readonly OffsetShape[];
|
|
59
59
|
readonly valuesPerTopLevelNode: number;
|
|
60
|
+
/**
|
|
61
|
+
* Information about every node in this shape.
|
|
62
|
+
* The root is first, and all indexes it uses to refer to other nodes are indexes into this array.
|
|
63
|
+
* Beyond that the ordering is an implementation detail of this shape.
|
|
64
|
+
* @remarks
|
|
65
|
+
* Use of this in contexts where there might be multiple top-level nodes requires some additional care.
|
|
66
|
+
* For example {@link Cursor} derives each node's actual position info from this shared
|
|
67
|
+
* array plus the node's top-level index within the chunk.
|
|
68
|
+
*/
|
|
60
69
|
readonly positions: readonly NodePositionInfo[];
|
|
61
70
|
/**
|
|
62
71
|
* Whether chunks using this shape (including any descendant leaf within it) may contain values compressed by the {@link UniformChunk.idCompressor}.
|
|
@@ -89,16 +98,16 @@ export declare class TreeShape {
|
|
|
89
98
|
/**
|
|
90
99
|
* The shape (see `TreeShape`) of a sequence of trees, all with the same shape (like `FieldShape`, but without a field key).
|
|
91
100
|
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
101
|
+
* @remarks
|
|
102
|
+
* Paired with a value array, this lets a {@link UniformChunk} be traversed like a tree by an
|
|
103
|
+
* {@link ITreeCursorSynchronous}. The {@link Cursor} derives each node's position info from the
|
|
104
|
+
* shared {@link TreeShape.positions} plus the node's top-level index.
|
|
95
105
|
*
|
|
96
106
|
* TODO: consider storing shape information in WASM
|
|
97
107
|
*/
|
|
98
108
|
export declare class ChunkShape {
|
|
99
109
|
readonly treeShape: TreeShape;
|
|
100
110
|
readonly topLevelLength: number;
|
|
101
|
-
readonly positions: readonly (NodePositionInfo | undefined)[];
|
|
102
111
|
constructor(treeShape: TreeShape, topLevelLength: number);
|
|
103
112
|
equals(other: ChunkShape): boolean;
|
|
104
113
|
}
|
|
@@ -122,7 +131,7 @@ declare class OffsetShape {
|
|
|
122
131
|
constructor(shape: TreeShape, topLevelLength: number, offset: number, key: FieldKey, indexOfParentField: number | undefined);
|
|
123
132
|
}
|
|
124
133
|
/**
|
|
125
|
-
* Information about a node at a specific position within a
|
|
134
|
+
* Information about a node at a specific position within one top-level tree of a {@link TreeShape}.
|
|
126
135
|
*/
|
|
127
136
|
declare class NodePositionInfo implements UpPath {
|
|
128
137
|
readonly parent: NodePositionInfo | undefined;
|
|
@@ -134,13 +143,15 @@ declare class NodePositionInfo implements UpPath {
|
|
|
134
143
|
readonly topLevelLength: number;
|
|
135
144
|
readonly valueOffset: number;
|
|
136
145
|
/**
|
|
137
|
-
* @param parent -
|
|
138
|
-
* @param parentField -
|
|
146
|
+
* @param parent - The parent node's {@link NodePositionInfo} or `undefined` for a root.
|
|
147
|
+
* @param parentField - The {@link FieldKey} of the field this node occupies within its parent.
|
|
139
148
|
* @param parentIndex - indexWithinParentField
|
|
140
|
-
* @param indexOfParentField -
|
|
141
|
-
* @param indexOfParentPosition - Index of parent
|
|
149
|
+
* @param indexOfParentField - Which field of the parent `parentIndex` is indexing into to locate this.
|
|
150
|
+
* @param indexOfParentPosition - Index of this node's parent in {@link TreeShape.positions}
|
|
142
151
|
* @param shape - Shape of the top level sequence this node is part of
|
|
143
|
-
* @param
|
|
152
|
+
* @param topLevelLength - Number of siblings in this node's field. For a root this is unused
|
|
153
|
+
* @param valueOffset - Offset of this node's value within one top-level tree's slice of the chunk's flat `values` array;
|
|
154
|
+
* only valid when `shape.hasValue` (otherwise it's where the value would have gone, and should not be used to read a value).
|
|
144
155
|
*/
|
|
145
156
|
constructor(parent: NodePositionInfo | undefined, // TODO; general UpPath to allow prefixing here?
|
|
146
157
|
parentField: FieldKey, parentIndex: number, indexOfParentField: number | undefined, indexOfParentPosition: number | undefined, shape: TreeShape, // Shape of sequence that contains this node (top level is parent of this node)
|
|
@@ -149,14 +160,25 @@ declare class NodePositionInfo implements UpPath {
|
|
|
149
160
|
/**
|
|
150
161
|
* The cursor implementation for `UniformChunk`.
|
|
151
162
|
*
|
|
152
|
-
*
|
|
163
|
+
* @remarks
|
|
164
|
+
* Tracks a flat `positionIndex` and derives each node's position info from the shape's shared
|
|
165
|
+
* {@link TreeShape.positions} plus the node's top-level index.
|
|
153
166
|
*/
|
|
154
167
|
declare class Cursor extends SynchronousCursor implements ChunkedCursor {
|
|
155
168
|
private readonly chunk;
|
|
156
169
|
private positionIndex;
|
|
170
|
+
/** Position info for the current node, or `undefined` when in root field. */
|
|
157
171
|
private nodePositionInfo;
|
|
172
|
+
/** Which top-level node of the chunk the current position is within. Valid when nodePositionInfo !== undefined. */
|
|
173
|
+
private topLevelIndex;
|
|
174
|
+
/** The chunk's shape. */
|
|
158
175
|
private readonly shape;
|
|
159
|
-
|
|
176
|
+
/** The chunk's per-tree shape (shape of each top-level tree). */
|
|
177
|
+
private readonly treeShape;
|
|
178
|
+
/** Number of positions in one top-level tree (treeShape.positions.length). */
|
|
179
|
+
private readonly nodeLength;
|
|
180
|
+
/** Number of values per top-level node (treeShape.valuesPerTopLevelNode). */
|
|
181
|
+
private readonly stride;
|
|
160
182
|
mode: CursorLocationType;
|
|
161
183
|
private fieldKey?;
|
|
162
184
|
private indexOfField;
|
|
@@ -166,12 +188,32 @@ declare class Cursor extends SynchronousCursor implements ChunkedCursor {
|
|
|
166
188
|
fork(): Cursor;
|
|
167
189
|
/**
|
|
168
190
|
* Change the current node within the chunk.
|
|
191
|
+
*
|
|
192
|
+
* @param positionIndex - flat position index of the newly selected node. This is NOT an index
|
|
193
|
+
* within a field, and is not bounds checked.
|
|
194
|
+
*
|
|
195
|
+
* @remarks
|
|
196
|
+
* Decomposes the index into {@link Cursor.topLevelIndex} and {@link Cursor.nodePositionInfo}.
|
|
169
197
|
* See `nodeInfo` for getting data about the current node.
|
|
170
198
|
*
|
|
171
|
-
* @param positionIndex - index of the position of the newly selected node in `positions`.
|
|
172
|
-
* This is NOT an index within a field, and is not bounds checked.
|
|
173
199
|
*/
|
|
174
200
|
private moveToPosition;
|
|
201
|
+
/**
|
|
202
|
+
* Decode a flat `positionIndex` into its components.
|
|
203
|
+
*
|
|
204
|
+
* @param positionIndex - flat position index of the node to decode. Must be greater than 0;
|
|
205
|
+
* @returns the node's index within {@link TreeShape.positions} (`withinTree`), which top-level
|
|
206
|
+
* tree holds it (`topLevelIndex`), and the corresponding shared {@link NodePositionInfo} (`info`).
|
|
207
|
+
*/
|
|
208
|
+
private decodePosition;
|
|
209
|
+
/**
|
|
210
|
+
* Build a standalone {@link UpPath} for the node at `positionIndex`. O(depth) allocation.
|
|
211
|
+
*
|
|
212
|
+
* @remarks
|
|
213
|
+
* walks the shared per-tree {@link TreeShape.positions} and applies the top-level index
|
|
214
|
+
* at each level. Mirrors how the `BasicChunk` cursor allocates paths.
|
|
215
|
+
*/
|
|
216
|
+
private materializePath;
|
|
175
217
|
/**
|
|
176
218
|
* Gets information about the current node.
|
|
177
219
|
*
|
|
@@ -199,6 +241,16 @@ declare class Cursor extends SynchronousCursor implements ChunkedCursor {
|
|
|
199
241
|
getPath(prefix?: PathRootPrefix): UpPath | undefined;
|
|
200
242
|
get fieldIndex(): number;
|
|
201
243
|
readonly chunkStart: number;
|
|
244
|
+
/**
|
|
245
|
+
* Number of nodes in `info`'s field including `info` itself.
|
|
246
|
+
*
|
|
247
|
+
* @remarks
|
|
248
|
+
* For top-level nodes this is the chunk's `topLevelLength`, read from the chunk
|
|
249
|
+
* rather than the node, so the shared per-tree {@link TreeShape.positions} stays independent of
|
|
250
|
+
* chunk length; the root entry's own `topLevelLength` field is unused. Nested nodes use the
|
|
251
|
+
* field length stored on the node.
|
|
252
|
+
*/
|
|
253
|
+
private siblingCount;
|
|
202
254
|
get chunkLength(): number;
|
|
203
255
|
seekNodes(offset: number): boolean;
|
|
204
256
|
nextNode(): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniformChunk.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/chunked-forest/uniformChunk.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAA4B,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAE7F,OAAO,EACN,kBAAkB,EAClB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,WAAW,EAEX,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAwB,MAAM,qBAAqB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAA+B,MAAM,uBAAuB,CAAC;AAEvF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,CAE9E;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,oBAAqB,YAAW,SAAS;IASlE,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,SAAS,EAAE;IATpB,YAAY,EAAE,SAAS,GAAG,aAAa,CAAC;IAC/C;;;;;OAKG;gBAEK,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,SAAS,EAAE,EAC1B,YAAY,CAAC,EAAE,aAAa;IAU7B,IAAW,cAAc,IAAI,MAAM,CAElC;IAEM,KAAK,IAAI,YAAY;IAIrB,MAAM,IAAI,MAAM;IAIvB,SAAS,CAAC,cAAc,IAAI,IAAI;CAChC;AAED;;;;;GAKG;AACH,MAAM,MAAM,UAAU,GAAG,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AAmBhE;;;;;;;GAOG;AACH,qBAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"uniformChunk.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/chunked-forest/uniformChunk.ts"],"names":[],"mappings":"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"}
|
|
@@ -153,9 +153,10 @@ function clonePositions(indexOfParentInOutput, [key, shape, copies], indexOfPare
|
|
|
153
153
|
/**
|
|
154
154
|
* The shape (see `TreeShape`) of a sequence of trees, all with the same shape (like `FieldShape`, but without a field key).
|
|
155
155
|
*
|
|
156
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
156
|
+
* @remarks
|
|
157
|
+
* Paired with a value array, this lets a {@link UniformChunk} be traversed like a tree by an
|
|
158
|
+
* {@link ITreeCursorSynchronous}. The {@link Cursor} derives each node's position info from the
|
|
159
|
+
* shared {@link TreeShape.positions} plus the node's top-level index.
|
|
159
160
|
*
|
|
160
161
|
* TODO: consider storing shape information in WASM
|
|
161
162
|
*/
|
|
@@ -164,10 +165,6 @@ class ChunkShape {
|
|
|
164
165
|
this.treeShape = treeShape;
|
|
165
166
|
this.topLevelLength = topLevelLength;
|
|
166
167
|
(0, internal_1.assert)(topLevelLength > 0, 0x4c6 /* topLevelLength must be greater than 0 */);
|
|
167
|
-
// TODO: avoid duplication from inner loop
|
|
168
|
-
const positions = [undefined];
|
|
169
|
-
clonePositions(0, [index_js_1.dummyRoot, treeShape, topLevelLength], 0, 0, positions);
|
|
170
|
-
this.positions = positions;
|
|
171
168
|
}
|
|
172
169
|
equals(other) {
|
|
173
170
|
// TODO: either dedup instances and/or store a collision resistant hash for fast compare.
|
|
@@ -196,17 +193,19 @@ class OffsetShape {
|
|
|
196
193
|
}
|
|
197
194
|
}
|
|
198
195
|
/**
|
|
199
|
-
* Information about a node at a specific position within a
|
|
196
|
+
* Information about a node at a specific position within one top-level tree of a {@link TreeShape}.
|
|
200
197
|
*/
|
|
201
198
|
class NodePositionInfo {
|
|
202
199
|
/**
|
|
203
|
-
* @param parent -
|
|
204
|
-
* @param parentField -
|
|
200
|
+
* @param parent - The parent node's {@link NodePositionInfo} or `undefined` for a root.
|
|
201
|
+
* @param parentField - The {@link FieldKey} of the field this node occupies within its parent.
|
|
205
202
|
* @param parentIndex - indexWithinParentField
|
|
206
|
-
* @param indexOfParentField -
|
|
207
|
-
* @param indexOfParentPosition - Index of parent
|
|
203
|
+
* @param indexOfParentField - Which field of the parent `parentIndex` is indexing into to locate this.
|
|
204
|
+
* @param indexOfParentPosition - Index of this node's parent in {@link TreeShape.positions}
|
|
208
205
|
* @param shape - Shape of the top level sequence this node is part of
|
|
209
|
-
* @param
|
|
206
|
+
* @param topLevelLength - Number of siblings in this node's field. For a root this is unused
|
|
207
|
+
* @param valueOffset - Offset of this node's value within one top-level tree's slice of the chunk's flat `values` array;
|
|
208
|
+
* only valid when `shape.hasValue` (otherwise it's where the value would have gone, and should not be used to read a value).
|
|
210
209
|
*/
|
|
211
210
|
constructor(parent, // TODO; general UpPath to allow prefixing here?
|
|
212
211
|
parentField, parentIndex, indexOfParentField, indexOfParentPosition, shape, // Shape of sequence that contains this node (top level is parent of this node)
|
|
@@ -224,20 +223,26 @@ class NodePositionInfo {
|
|
|
224
223
|
/**
|
|
225
224
|
* The cursor implementation for `UniformChunk`.
|
|
226
225
|
*
|
|
227
|
-
*
|
|
226
|
+
* @remarks
|
|
227
|
+
* Tracks a flat `positionIndex` and derives each node's position info from the shape's shared
|
|
228
|
+
* {@link TreeShape.positions} plus the node's top-level index.
|
|
228
229
|
*/
|
|
229
230
|
class Cursor extends treeCursorUtils_js_1.SynchronousCursor {
|
|
230
231
|
// TODO: support prefix (path above root, including index offset of chunk in its containing field)
|
|
231
232
|
constructor(chunk) {
|
|
232
233
|
super();
|
|
233
234
|
this.chunk = chunk;
|
|
235
|
+
/** Which top-level node of the chunk the current position is within. Valid when nodePositionInfo !== undefined. */
|
|
236
|
+
this.topLevelIndex = 0;
|
|
234
237
|
this.mode = 1 /* CursorLocationType.Fields */;
|
|
235
238
|
// Valid only in fields mode. Can be past end for empty fields.
|
|
236
239
|
// This is redundant with fieldKey above (but might be worth keeping for perf), and could be removed.
|
|
237
240
|
this.indexOfField = 0;
|
|
238
241
|
this.chunkStart = 0;
|
|
239
242
|
this.shape = this.chunk.shape;
|
|
240
|
-
this.
|
|
243
|
+
this.treeShape = this.shape.treeShape;
|
|
244
|
+
this.nodeLength = this.treeShape.positions.length;
|
|
245
|
+
this.stride = this.treeShape.valuesPerTopLevelNode;
|
|
241
246
|
this.fieldKey = index_js_1.dummyRoot;
|
|
242
247
|
this.moveToPosition(0);
|
|
243
248
|
}
|
|
@@ -259,18 +264,62 @@ class Cursor extends treeCursorUtils_js_1.SynchronousCursor {
|
|
|
259
264
|
}
|
|
260
265
|
/**
|
|
261
266
|
* Change the current node within the chunk.
|
|
267
|
+
*
|
|
268
|
+
* @param positionIndex - flat position index of the newly selected node. This is NOT an index
|
|
269
|
+
* within a field, and is not bounds checked.
|
|
270
|
+
*
|
|
271
|
+
* @remarks
|
|
272
|
+
* Decomposes the index into {@link Cursor.topLevelIndex} and {@link Cursor.nodePositionInfo}.
|
|
262
273
|
* See `nodeInfo` for getting data about the current node.
|
|
263
274
|
*
|
|
264
|
-
* @param positionIndex - index of the position of the newly selected node in `positions`.
|
|
265
|
-
* This is NOT an index within a field, and is not bounds checked.
|
|
266
275
|
*/
|
|
267
276
|
moveToPosition(positionIndex) {
|
|
268
|
-
this.nodePositionInfo = this.positions[positionIndex];
|
|
269
277
|
this.positionIndex = positionIndex;
|
|
270
|
-
if (
|
|
271
|
-
|
|
278
|
+
if (positionIndex === 0) {
|
|
279
|
+
this.nodePositionInfo = undefined;
|
|
272
280
|
(0, internal_1.assert)(this.mode === 1 /* CursorLocationType.Fields */, 0x562 /* expected root to be a field */);
|
|
281
|
+
return;
|
|
273
282
|
}
|
|
283
|
+
const decoded = this.decodePosition(positionIndex);
|
|
284
|
+
this.topLevelIndex = decoded.topLevelIndex;
|
|
285
|
+
this.nodePositionInfo = decoded.info;
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Decode a flat `positionIndex` into its components.
|
|
289
|
+
*
|
|
290
|
+
* @param positionIndex - flat position index of the node to decode. Must be greater than 0;
|
|
291
|
+
* @returns the node's index within {@link TreeShape.positions} (`withinTree`), which top-level
|
|
292
|
+
* tree holds it (`topLevelIndex`), and the corresponding shared {@link NodePositionInfo} (`info`).
|
|
293
|
+
*/
|
|
294
|
+
decodePosition(positionIndex) {
|
|
295
|
+
const offset = positionIndex - 1;
|
|
296
|
+
// Find the node's index within treeShape.positions, then which top-level tree holds it.
|
|
297
|
+
const withinTree = offset % this.nodeLength; // remainder
|
|
298
|
+
const topLevelIndex = (offset - withinTree) / this.nodeLength; // quotient
|
|
299
|
+
const info = this.treeShape.positions[withinTree] ?? (0, internal_1.oob)();
|
|
300
|
+
return { withinTree, topLevelIndex, info };
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Build a standalone {@link UpPath} for the node at `positionIndex`. O(depth) allocation.
|
|
304
|
+
*
|
|
305
|
+
* @remarks
|
|
306
|
+
* walks the shared per-tree {@link TreeShape.positions} and applies the top-level index
|
|
307
|
+
* at each level. Mirrors how the `BasicChunk` cursor allocates paths.
|
|
308
|
+
*/
|
|
309
|
+
materializePath(positionIndex) {
|
|
310
|
+
if (positionIndex === 0) {
|
|
311
|
+
return undefined;
|
|
312
|
+
}
|
|
313
|
+
const { withinTree, topLevelIndex, info } = this.decodePosition(positionIndex);
|
|
314
|
+
if (info.parent === undefined) {
|
|
315
|
+
// Top-level node: its parent is the (prefixed) chunk root.
|
|
316
|
+
return { parent: undefined, parentField: info.parentField, parentIndex: topLevelIndex };
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
parent: this.materializePath(positionIndex - withinTree + (info.indexOfParentPosition ?? (0, internal_1.oob)())),
|
|
320
|
+
parentField: info.parentField,
|
|
321
|
+
parentIndex: info.parentIndex,
|
|
322
|
+
};
|
|
274
323
|
}
|
|
275
324
|
/**
|
|
276
325
|
* Gets information about the current node.
|
|
@@ -364,29 +413,43 @@ class Cursor extends treeCursorUtils_js_1.SynchronousCursor {
|
|
|
364
413
|
enterRootNodeInner(childIndex) {
|
|
365
414
|
this.mode = 0 /* CursorLocationType.Nodes */;
|
|
366
415
|
this.fieldKey = undefined;
|
|
367
|
-
// 1 for the "undefined"
|
|
368
|
-
this.moveToPosition(1 + childIndex * this.
|
|
416
|
+
// 1 for the "undefined" root-field marker at position 0, then stride by one top-level tree (nodeLength).
|
|
417
|
+
this.moveToPosition(1 + childIndex * this.nodeLength);
|
|
369
418
|
(0, internal_1.assert)(this.fieldIndex === childIndex, 0x543 /* should be at selected child */);
|
|
370
419
|
}
|
|
371
420
|
getFieldPath(prefix) {
|
|
372
421
|
return (0, treeCursorUtils_js_1.prefixFieldPath)(prefix, {
|
|
373
422
|
field: this.getFieldKey(),
|
|
374
|
-
parent: this.
|
|
423
|
+
parent: this.materializePath(this.positionIndex),
|
|
375
424
|
});
|
|
376
425
|
}
|
|
377
426
|
getPath(prefix) {
|
|
378
|
-
|
|
427
|
+
this.nodeInfo(0 /* CursorLocationType.Nodes */); // assert: in nodes mode at a node
|
|
428
|
+
return (0, treeCursorUtils_js_1.prefixPath)(prefix, this.materializePath(this.positionIndex));
|
|
379
429
|
}
|
|
380
430
|
get fieldIndex() {
|
|
381
|
-
|
|
431
|
+
const info = this.nodeInfo(0 /* CursorLocationType.Nodes */);
|
|
432
|
+
return info.parent === undefined ? this.topLevelIndex : info.parentIndex;
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Number of nodes in `info`'s field including `info` itself.
|
|
436
|
+
*
|
|
437
|
+
* @remarks
|
|
438
|
+
* For top-level nodes this is the chunk's `topLevelLength`, read from the chunk
|
|
439
|
+
* rather than the node, so the shared per-tree {@link TreeShape.positions} stays independent of
|
|
440
|
+
* chunk length; the root entry's own `topLevelLength` field is unused. Nested nodes use the
|
|
441
|
+
* field length stored on the node.
|
|
442
|
+
*/
|
|
443
|
+
siblingCount(info) {
|
|
444
|
+
return info.parent === undefined ? this.shape.topLevelLength : info.topLevelLength;
|
|
382
445
|
}
|
|
383
446
|
get chunkLength() {
|
|
384
|
-
return this.nodeInfo(0 /* CursorLocationType.Nodes */)
|
|
447
|
+
return this.siblingCount(this.nodeInfo(0 /* CursorLocationType.Nodes */));
|
|
385
448
|
}
|
|
386
449
|
seekNodes(offset) {
|
|
387
450
|
const info = this.nodeInfo(0 /* CursorLocationType.Nodes */);
|
|
388
|
-
const index = offset +
|
|
389
|
-
if (index >= 0 && index < info
|
|
451
|
+
const index = offset + this.fieldIndex;
|
|
452
|
+
if (index >= 0 && index < this.siblingCount(info)) {
|
|
390
453
|
this.moveToPosition(this.positionIndex + offset * info.shape.positions.length);
|
|
391
454
|
return true;
|
|
392
455
|
}
|
|
@@ -396,8 +459,8 @@ class Cursor extends treeCursorUtils_js_1.SynchronousCursor {
|
|
|
396
459
|
nextNode() {
|
|
397
460
|
// This is the same as `return this.seekNodes(1);` but slightly faster.
|
|
398
461
|
const info = this.nodeInfo(0 /* CursorLocationType.Nodes */);
|
|
399
|
-
const index =
|
|
400
|
-
if (index === info
|
|
462
|
+
const index = this.fieldIndex + 1;
|
|
463
|
+
if (index === this.siblingCount(info)) {
|
|
401
464
|
this.exitNode();
|
|
402
465
|
return false;
|
|
403
466
|
}
|
|
@@ -406,13 +469,15 @@ class Cursor extends treeCursorUtils_js_1.SynchronousCursor {
|
|
|
406
469
|
}
|
|
407
470
|
exitNode() {
|
|
408
471
|
const info = this.nodeInfo(0 /* CursorLocationType.Nodes */);
|
|
409
|
-
this.
|
|
410
|
-
|
|
411
|
-
|
|
472
|
+
const withinTree = this.positionIndex - 1 - this.topLevelIndex * this.nodeLength;
|
|
473
|
+
// Top-level nodes (no parent) exit to the root field at position 0;
|
|
474
|
+
// nested nodes' parent is `indexOfParentPosition` within the same top-level instance.
|
|
475
|
+
this.indexOfField = info.indexOfParentField ?? 0;
|
|
412
476
|
this.fieldKey = info.parentField;
|
|
413
477
|
this.mode = 1 /* CursorLocationType.Fields */;
|
|
414
|
-
this.moveToPosition(info.indexOfParentPosition
|
|
415
|
-
|
|
478
|
+
this.moveToPosition(info.indexOfParentPosition === undefined
|
|
479
|
+
? 0
|
|
480
|
+
: this.positionIndex - withinTree + info.indexOfParentPosition);
|
|
416
481
|
}
|
|
417
482
|
firstField() {
|
|
418
483
|
const fieldsArray = this.nodeInfo(0 /* CursorLocationType.Nodes */).shape.fieldsArray;
|
|
@@ -441,7 +506,7 @@ class Cursor extends treeCursorUtils_js_1.SynchronousCursor {
|
|
|
441
506
|
get value() {
|
|
442
507
|
const info = this.nodeInfo(0 /* CursorLocationType.Nodes */);
|
|
443
508
|
if (info.shape.hasValue) {
|
|
444
|
-
const value = this.chunk.values[info.valueOffset];
|
|
509
|
+
const value = this.chunk.values[info.valueOffset + this.topLevelIndex * this.stride];
|
|
445
510
|
// If mayContainCompressedIds is set, check if the value is a number (i.e. a compressed ID that needs decompression).
|
|
446
511
|
if (info.shape.mayContainCompressedIds && typeof value === "number") {
|
|
447
512
|
const idCompressor = this.chunk.idCompressor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniformChunk.js","sourceRoot":"","sources":["../../../src/feature-libraries/chunked-forest/uniformChunk.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, compareArrays, oob, fail } from \"@fluidframework/core-utils/internal\";\nimport type { SessionSpaceCompressedId, IIdCompressor } from \"@fluidframework/id-compressor\";\n\nimport {\n\tCursorLocationType,\n\ttype FieldKey,\n\ttype FieldUpPath,\n\ttype PathRootPrefix,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeValue,\n\ttype UpPath,\n\ttype Value,\n\ttype ChunkedCursor,\n\ttype TreeChunk,\n\tcursorChunk,\n\tdummyRoot,\n} from \"../../core/index.js\";\nimport { ReferenceCountedBase, getOrCreate, hasSome } from \"../../util/index.js\";\nimport { SynchronousCursor, prefixFieldPath, prefixPath } from \"../treeCursorUtils.js\";\n\n/**\n * Create a tree chunk with ref count 1.\n *\n * @param shape - describes the semantics and layout of `values`.\n * @param values - provides exclusive ownership of this array to this object (which might mutate it in the future).\n */\nexport function uniformChunk(shape: ChunkShape, values: TreeValue[]): TreeChunk {\n\treturn new UniformChunk(shape, values);\n}\n\n/**\n * Chunk which handles a sequence of trees with identical \"shape\" (see `TreeShape`).\n *\n * Separates shape from content,\n * allowing deduplication of shape information and storing of content as a flat sequence of values.\n */\nexport class UniformChunk extends ReferenceCountedBase implements TreeChunk {\n\tpublic idCompressor: undefined | IIdCompressor;\n\t/**\n\t * Create a tree chunk with ref count 1.\n\t *\n\t * @param shape - describes the semantics and layout of `values`.\n\t * @param values - provides exclusive ownership of this array to this object (which might mutate it in the future).\n\t */\n\tpublic constructor(\n\t\tpublic shape: ChunkShape,\n\t\tpublic values: TreeValue[],\n\t\tidCompressor?: IIdCompressor,\n\t) {\n\t\tsuper();\n\t\tthis.idCompressor = shape.treeShape.mayContainCompressedIds ? idCompressor : undefined;\n\t\tassert(\n\t\t\tshape.treeShape.valuesPerTopLevelNode * shape.topLevelLength === values.length,\n\t\t\t0x4c3 /* invalid number of values for shape */,\n\t\t);\n\t}\n\n\tpublic get topLevelLength(): number {\n\t\treturn this.shape.topLevelLength;\n\t}\n\n\tpublic clone(): UniformChunk {\n\t\treturn new UniformChunk(this.shape, [...this.values]);\n\t}\n\n\tpublic cursor(): Cursor {\n\t\treturn new Cursor(this);\n\t}\n\n\tprotected onUnreferenced(): void {}\n}\n\n/**\n * The \"shape\" of a field.\n *\n * Requires that all trees in the field have the same shape, which is described by `TreeShape`.\n * Note that this requirement means that not all fields can be described using this type.\n */\nexport type FieldShape = readonly [FieldKey, TreeShape, number];\n\n/**\n * Maximum topLevelLength value (exclusive) for which {@link TreeShape.withTopLevelLength}\n * caches the resulting {@link ChunkShape}. Values at or above this threshold always\n * create a new instance to prevent unbounded cache growth.\n *\n * @remarks\n * This value is an estimation of the general size needed to cover current workflows,\n * not a researched constant, and is safe to tune as workloads change.\n *\n * Raising this value captures more chunk sizes in the cache, at the cost of\n * each `TreeShape` retaining up to `chunkShapeCacheLimit - 1` cached entries for the\n * lifetime of the shape. Lowering it reduces memory held per `TreeShape` but forces\n * small chunks, where the relative cost of rebuilding `positions` is highest, to pay\n * the construction cost on every call.\n */\nconst chunkShapeCacheLimit = 8;\n\n/**\n * The \"shape\" of a tree.\n * Does not contain the actual values from the tree, but describes everything else,\n * including where the values would be found in a flat values array.\n *\n * Note that since this requires fields to have uniform shapes (see `FieldShape`),\n * not all trees can have their shape described using this type.\n */\nexport class TreeShape {\n\tpublic readonly fields: ReadonlyMap<FieldKey, OffsetShape>;\n\tpublic readonly fieldsOffsetArray: readonly OffsetShape[];\n\tpublic readonly valuesPerTopLevelNode: number;\n\n\t// TODO: this is only needed at chunk roots. Optimize it base on that.\n\tpublic readonly positions: readonly NodePositionInfo[];\n\n\t/**\n\t * Whether chunks using this shape (including any descendant leaf within it) may contain values compressed by the {@link UniformChunk.idCompressor}.\n\t *\n\t * @remarks\n\t * For string leaf nodes, this can be explicitly set to `true` to indicate that the value may be a compressed id\n\t * stored as a number that needs to be decompressed back to a string.\n\t * For non-leaf nodes, this is automatically derived from whether any child shapes have it set.\n\t */\n\tpublic readonly mayContainCompressedIds: boolean;\n\n\t/**\n\t * Cache for ChunkShape instances created by {@link withTopLevelLength}.\n\t * `topLevelLength` is always a positive integer (enforced by the {@link ChunkShape} constructor),\n\t * so the cache only ever holds entries for values in `1..chunkShapeCacheLimit - 1` to prevent unbounded growth.\n\t */\n\tprivate readonly chunkShapeCache: Map<number, ChunkShape> = new Map();\n\n\t/**\n\t * @param type - {@link TreeNodeSchemaIdentifier} used to compare shapes.\n\t * @param hasValue - whether or not the TreeShape has a value.\n\t * @param fieldsArray - an array of {@link FieldShape} values, which contains a TreeShape for each FieldKey.\n\t *\n\t * @param maybeCompressedIdLeaf - whether the value may have been compressed by the {@link UniformChunk.idCompressor}.\n\t * Can only be explicitly set to `true` on string leaf nodes; otherwise this constructor asserts.\n\t * For non-leaf nodes, {@link TreeShape.mayContainCompressedIds} is automatically derived from child shapes.\n\t */\n\tpublic constructor(\n\t\tpublic readonly type: TreeNodeSchemaIdentifier,\n\t\tpublic readonly hasValue: boolean,\n\t\tpublic readonly fieldsArray: readonly FieldShape[],\n\t\tmaybeCompressedIdLeaf: boolean = false,\n\t) {\n\t\tassert(\n\t\t\thasValue === false || fieldsArray.length === 0,\n\t\t\t0xcef /* only non-leaf can have fields */,\n\t\t);\n\t\tif (maybeCompressedIdLeaf) {\n\t\t\tassert(\n\t\t\t\thasValue && type === \"com.fluidframework.leaf.string\",\n\t\t\t\t0xcf0 /* only strings can opt into maybeCompressedIdLeaf */,\n\t\t\t);\n\t\t}\n\t\t// For non-leaf nodes, derive from whether any child shapes contain compressed ids.\n\t\tthis.mayContainCompressedIds =\n\t\t\tmaybeCompressedIdLeaf || fieldsArray.some(([, shape]) => shape.mayContainCompressedIds);\n\t\tconst fields: Map<FieldKey, OffsetShape> = new Map();\n\t\tlet numberOfValues = hasValue ? 1 : 0;\n\t\tconst infos: NodePositionInfo[] = [\n\t\t\tnew NodePositionInfo(undefined, dummyRoot, 0, undefined, undefined, this, 1, 0),\n\t\t];\n\t\tlet fieldIndex = 0;\n\t\tfor (const [k, f, length] of fieldsArray) {\n\t\t\tassert(!fields.has(k), 0x4c5 /* no duplicate keys */);\n\t\t\tconst offset = new OffsetShape(f, length, infos.length, k, fieldIndex);\n\t\t\tfields.set(k, offset);\n\t\t\tclonePositions(0, [k, f, length], fieldIndex, numberOfValues, infos);\n\t\t\tnumberOfValues += f.valuesPerTopLevelNode * length;\n\t\t\tfieldIndex++;\n\t\t}\n\t\tthis.fields = fields;\n\t\tthis.valuesPerTopLevelNode = numberOfValues;\n\t\tthis.positions = infos;\n\n\t\tthis.fieldsOffsetArray = [...fields.values()];\n\t}\n\n\tpublic equals(other: TreeShape): boolean {\n\t\t// TODO: either dedupe instances and/or store a collision resistant hash for fast compare.\n\n\t\tif (\n\t\t\t!compareArrays(\n\t\t\t\tthis.fieldsArray,\n\t\t\t\tother.fieldsArray,\n\t\t\t\t([k, f, l], [k2, f2, l2]) => k === k2 && l === l2 && f.equals(f2),\n\t\t\t)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\tthis.type === other.type &&\n\t\t\tthis.hasValue === other.hasValue &&\n\t\t\tthis.mayContainCompressedIds === other.mayContainCompressedIds\n\t\t);\n\t}\n\n\tpublic withTopLevelLength(topLevelLength: number): ChunkShape {\n\t\tif (topLevelLength < chunkShapeCacheLimit) {\n\t\t\treturn getOrCreate(\n\t\t\t\tthis.chunkShapeCache,\n\t\t\t\ttopLevelLength,\n\t\t\t\t() => new ChunkShape(this, topLevelLength),\n\t\t\t);\n\t\t}\n\t\treturn new ChunkShape(this, topLevelLength);\n\t}\n}\n\nfunction clonePositions(\n\tindexOfParentInOutput: number | undefined,\n\t[key, shape, copies]: FieldShape,\n\tindexOfParentField: number,\n\tvalueOffset: number,\n\toutputInto: NodePositionInfo[] | (NodePositionInfo | undefined)[],\n): void {\n\tconst offset = outputInto.length;\n\tfor (let index = 0; index < copies; index++) {\n\t\tfor (const inner of shape.positions) {\n\t\t\tconst wasRoot = inner.indexOfParentPosition === undefined;\n\t\t\tconst parentPositionIndex = wasRoot\n\t\t\t\t? indexOfParentInOutput\n\t\t\t\t: inner.indexOfParentPosition + index * shape.positions.length + offset;\n\t\t\toutputInto.push(\n\t\t\t\tnew NodePositionInfo(\n\t\t\t\t\tparentPositionIndex === undefined ? undefined : outputInto[parentPositionIndex],\n\t\t\t\t\tinner.parentField === dummyRoot ? key : inner.parentField,\n\t\t\t\t\twasRoot ? index : inner.parentIndex,\n\t\t\t\t\tinner.indexOfParentField ?? indexOfParentField,\n\t\t\t\t\tparentPositionIndex,\n\t\t\t\t\tinner.shape,\n\t\t\t\t\twasRoot ? copies : inner.topLevelLength,\n\t\t\t\t\tinner.valueOffset + valueOffset + shape.valuesPerTopLevelNode * index,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * The shape (see `TreeShape`) of a sequence of trees, all with the same shape (like `FieldShape`, but without a field key).\n *\n * This shape is optimized (by caching derived data like the positions array),\n * so that when paired with a value array it can be efficiently traversed like a tree by an {@link ITreeCursorSynchronous}.\n * See {@link uniformChunk} for how to do this.\n *\n * TODO: consider storing shape information in WASM\n */\nexport class ChunkShape {\n\tpublic readonly positions: readonly (NodePositionInfo | undefined)[];\n\n\tpublic constructor(\n\t\tpublic readonly treeShape: TreeShape,\n\t\tpublic readonly topLevelLength: number,\n\t) {\n\t\tassert(topLevelLength > 0, 0x4c6 /* topLevelLength must be greater than 0 */);\n\n\t\t// TODO: avoid duplication from inner loop\n\t\tconst positions: (NodePositionInfo | undefined)[] = [undefined];\n\t\tclonePositions(0, [dummyRoot, treeShape, topLevelLength], 0, 0, positions);\n\t\tthis.positions = positions;\n\t}\n\n\tpublic equals(other: ChunkShape): boolean {\n\t\t// TODO: either dedup instances and/or store a collision resistant hash for fast compare.\n\t\treturn this.topLevelLength === other.topLevelLength && this.treeShape === other.treeShape;\n\t}\n}\n\n/**\n * Shape of a field (like `FieldShape`) but with information about how it would be offset within a chunk because of its parents.\n */\nclass OffsetShape {\n\t/**\n\t * @param shape - the shape of each child in this field\n\t * @param topLevelLength - number of top level nodes in this sequence chunk (either field within a chunk, or top level chunk)\n\t * @param offset - number of nodes before this in the parent's subtree. The nodes are considered in depth first pre order\n\t * traversal, so a parent is the first node in its subtree (before its children) with offset 0\n\t * @param key - field key\n\t * @param indexOfParentField - index to this shape in the parent's array of fields\n\t */\n\tpublic constructor(\n\t\tpublic readonly shape: TreeShape,\n\t\tpublic readonly topLevelLength: number,\n\t\tpublic readonly offset: number,\n\t\tpublic readonly key: FieldKey,\n\t\tpublic readonly indexOfParentField: number | undefined,\n\t) {}\n}\n\n/**\n * Information about a node at a specific position within a uniform chunk.\n */\nclass NodePositionInfo implements UpPath {\n\t/**\n\t * @param parent - TODO\n\t * @param parentField - TODO\n\t * @param parentIndex - indexWithinParentField\n\t * @param indexOfParentField - which field of the parent `parentIndex` is indexing into to locate this.\n\t * @param indexOfParentPosition - Index of parent NodePositionInfo in positions array. TODO: use offsets to avoid copying at top level?\n\t * @param shape - Shape of the top level sequence this node is part of\n\t * @param valueOffset - TODO\n\t */\n\tpublic constructor(\n\t\tpublic readonly parent: NodePositionInfo | undefined, // TODO; general UpPath to allow prefixing here?\n\t\tpublic readonly parentField: FieldKey,\n\t\tpublic readonly parentIndex: number,\n\t\tpublic readonly indexOfParentField: number | undefined,\n\t\tpublic readonly indexOfParentPosition: number | undefined,\n\t\tpublic readonly shape: TreeShape, // Shape of sequence that contains this node (top level is parent of this node)\n\t\tpublic readonly topLevelLength: number,\n\t\tpublic readonly valueOffset: number,\n\t) {}\n}\n\n/**\n * The cursor implementation for `UniformChunk`.\n *\n * Works by tracking its location in the chunk's `positions` array.\n */\nclass Cursor extends SynchronousCursor implements ChunkedCursor {\n\tprivate positionIndex!: number; // When in fields mode, this points to the parent node.\n\t// Undefined when in root field\n\tprivate nodePositionInfo: NodePositionInfo | undefined;\n\n\t// Cached constants for faster access\n\tprivate readonly shape: ChunkShape;\n\tprivate readonly positions: readonly (NodePositionInfo | undefined)[];\n\n\tpublic mode: CursorLocationType = CursorLocationType.Fields;\n\n\t// Undefined when not in fields mode.\n\tprivate fieldKey?: FieldKey;\n\n\t// Valid only in fields mode. Can be past end for empty fields.\n\t// This is redundant with fieldKey above (but might be worth keeping for perf), and could be removed.\n\tprivate indexOfField: number = 0;\n\n\t// TODO: support prefix (path above root, including index offset of chunk in its containing field)\n\tpublic constructor(private readonly chunk: UniformChunk) {\n\t\tsuper();\n\t\tthis.shape = this.chunk.shape;\n\t\tthis.positions = this.shape.positions;\n\t\tthis.fieldKey = dummyRoot;\n\t\tthis.moveToPosition(0);\n\t}\n\n\tpublic get [cursorChunk](): UniformChunk | undefined {\n\t\treturn this.atChunkRoot() ? this.chunk : undefined;\n\t}\n\n\tpublic atChunkRoot(): boolean {\n\t\tassert(\n\t\t\t(this.fieldKey === undefined) === (this.mode === CursorLocationType.Nodes),\n\t\t\t0x560 /* expect valid field key */,\n\t\t);\n\t\treturn (\n\t\t\tthis.nodePositionInfo === undefined ||\n\t\t\t(this.nodePositionInfo.parent === undefined && this.fieldKey === undefined)\n\t\t);\n\t}\n\n\tpublic fork(): Cursor {\n\t\tconst cursor = new Cursor(this.chunk);\n\t\tcursor.mode = this.mode;\n\t\tcursor.fieldKey = this.fieldKey;\n\t\tcursor.indexOfField = this.indexOfField;\n\t\tcursor.moveToPosition(this.positionIndex);\n\t\treturn cursor;\n\t}\n\n\t/**\n\t * Change the current node within the chunk.\n\t * See `nodeInfo` for getting data about the current node.\n\t *\n\t * @param positionIndex - index of the position of the newly selected node in `positions`.\n\t * This is NOT an index within a field, and is not bounds checked.\n\t */\n\tprivate moveToPosition(positionIndex: number): void {\n\t\tthis.nodePositionInfo = this.positions[positionIndex];\n\t\tthis.positionIndex = positionIndex;\n\t\tif (this.nodePositionInfo === undefined) {\n\t\t\tassert(positionIndex === 0, 0x561 /* expected root at start */);\n\t\t\tassert(this.mode === CursorLocationType.Fields, 0x562 /* expected root to be a field */);\n\t\t}\n\t}\n\n\t/**\n\t * Gets information about the current node.\n\t *\n\t * When in Nodes mode, this means the node this cursor is current at.\n\t * When if fields mode, this means the node which is the parent of the current field.\n\t * This cursor is in Nodes mode at the root, so there is no case where a fields mode does not have a parent.\n\t *\n\t * @param requiredMode - asserts that the mode matches this. Since the semantics of this function are somewhat mode dependent,\n\t * providing this ensures that the caller knows what the results will mean.\n\t */\n\tprivate nodeInfo(requiredMode: CursorLocationType): NodePositionInfo {\n\t\tassert(this.mode === requiredMode, 0x4c8 /* tried to access cursor when in wrong mode */);\n\t\tassert(\n\t\t\tthis.nodePositionInfo !== undefined,\n\t\t\t0x53e /* can not access nodeInfo in root field */,\n\t\t);\n\t\treturn this.nodePositionInfo;\n\t}\n\n\tpublic nextField(): boolean {\n\t\tthis.indexOfField++;\n\t\tconst fields = this.nodeInfo(CursorLocationType.Fields).shape.fieldsArray;\n\t\tif (this.indexOfField < fields.length) {\n\t\t\tconst fieldArr = fields[this.indexOfField] ?? oob();\n\t\t\tthis.fieldKey = fieldArr[0];\n\t\t\treturn true;\n\t\t}\n\t\tthis.exitField();\n\t\treturn false;\n\t}\n\n\tpublic exitField(): void {\n\t\tassert(this.mode === CursorLocationType.Fields, 0x4c9 /* exitField when in wrong mode */);\n\t\tassert(this.nodePositionInfo !== undefined, 0x563 /* can not exit root field */);\n\t\tthis.fieldKey = undefined;\n\t\tthis.mode = CursorLocationType.Nodes;\n\t}\n\n\tpublic getFieldKey(): FieldKey {\n\t\treturn this.fieldKey ?? fail(0xb09 /* not in a field */);\n\t}\n\n\tpublic getFieldLength(): number {\n\t\tassert(\n\t\t\tthis.mode === CursorLocationType.Fields,\n\t\t\t0x53f /* tried to access cursor when in wrong mode */,\n\t\t);\n\t\tif (this.nodePositionInfo === undefined) {\n\t\t\treturn this.shape.topLevelLength;\n\t\t}\n\t\tconst fieldInfo = this.nodePositionInfo.shape.fieldsArray[this.indexOfField];\n\t\tif (fieldInfo === undefined) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn fieldInfo[2];\n\t}\n\n\tpublic firstNode(): boolean {\n\t\tassert(\n\t\t\tthis.mode === CursorLocationType.Fields,\n\t\t\t0x540 /* tried to access cursor when in wrong mode */,\n\t\t);\n\n\t\tif (this.nodePositionInfo === undefined) {\n\t\t\t// Root field is not allowed to be empty, so we can skip handling that case.\n\t\t\tthis.enterRootNodeInner(0);\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn this.enterNodeInner(this.nodePositionInfo, 0);\n\t\t}\n\t}\n\n\tpublic enterNode(childIndex: number): void {\n\t\tassert(\n\t\t\tthis.mode === CursorLocationType.Fields,\n\t\t\t0x541 /* tried to access cursor when in wrong mode */,\n\t\t);\n\t\tassert(childIndex >= 0, 0x4ca /* index must be positive */);\n\t\tif (this.nodePositionInfo === undefined) {\n\t\t\tassert(\n\t\t\t\tchildIndex < this.shape.topLevelLength,\n\t\t\t\t0x542 /* index must not be past the end of the field */,\n\t\t\t);\n\t\t\tthis.enterRootNodeInner(childIndex);\n\t\t} else {\n\t\t\tconst moved = this.enterNodeInner(this.nodePositionInfo, childIndex);\n\t\t\tassert(moved, 0x4cb /* index must not be past the end of the field */);\n\t\t}\n\t}\n\n\t/**\n\t * Enter the current field, at `childIndex`.\n\t * @param childIndex - index into current field to navigate to. Must be non-negative integer.\n\t */\n\tprivate enterNodeInner(currentPosition: NodePositionInfo, childIndex: number): boolean {\n\t\tconst shape = currentPosition.shape;\n\t\tconst fields = shape.fieldsOffsetArray;\n\t\tif (this.indexOfField >= fields.length) {\n\t\t\treturn false; // Handle empty field (indexed by key into empty field)\n\t\t}\n\t\tconst f = shape.fieldsOffsetArray[this.indexOfField] ?? oob();\n\t\tif (childIndex >= f.topLevelLength) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.mode = CursorLocationType.Nodes;\n\t\tthis.fieldKey = undefined;\n\t\tthis.moveToPosition(this.positionIndex + f.offset + childIndex * f.shape.positions.length);\n\t\tassert(this.fieldIndex === childIndex, 0x4cc /* should be at selected child */);\n\t\treturn true;\n\t}\n\n\tprivate enterRootNodeInner(childIndex: number): void {\n\t\tthis.mode = CursorLocationType.Nodes;\n\t\tthis.fieldKey = undefined;\n\t\t// 1 for the \"undefined\" at the beginning of the positions array, then stride by top level tree shape.\n\t\tthis.moveToPosition(1 + childIndex * this.shape.treeShape.positions.length);\n\t\tassert(this.fieldIndex === childIndex, 0x543 /* should be at selected child */);\n\t}\n\n\tpublic getFieldPath(prefix?: PathRootPrefix): FieldUpPath {\n\t\treturn prefixFieldPath(prefix, {\n\t\t\tfield: this.getFieldKey(),\n\t\t\tparent: this.nodePositionInfo,\n\t\t});\n\t}\n\n\tpublic getPath(prefix?: PathRootPrefix): UpPath | undefined {\n\t\treturn prefixPath(prefix, this.nodeInfo(CursorLocationType.Nodes));\n\t}\n\n\tpublic get fieldIndex(): number {\n\t\treturn this.nodeInfo(CursorLocationType.Nodes).parentIndex;\n\t}\n\n\tpublic readonly chunkStart: number = 0;\n\n\tpublic get chunkLength(): number {\n\t\treturn this.nodeInfo(CursorLocationType.Nodes).topLevelLength;\n\t}\n\n\tpublic seekNodes(offset: number): boolean {\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\tconst index = offset + info.parentIndex;\n\t\tif (index >= 0 && index < info.topLevelLength) {\n\t\t\tthis.moveToPosition(this.positionIndex + offset * info.shape.positions.length);\n\t\t\treturn true;\n\t\t}\n\t\tthis.exitNode();\n\t\treturn false;\n\t}\n\n\tpublic nextNode(): boolean {\n\t\t// This is the same as `return this.seekNodes(1);` but slightly faster.\n\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\tconst index = info.parentIndex + 1;\n\t\tif (index === info.topLevelLength) {\n\t\t\tthis.exitNode();\n\t\t\treturn false;\n\t\t}\n\t\tthis.moveToPosition(this.positionIndex + info.shape.positions.length);\n\t\treturn true;\n\t}\n\n\tpublic exitNode(): void {\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\tthis.indexOfField =\n\t\t\tinfo.indexOfParentField ??\n\t\t\tfail(0xb0a /* navigation up to root field not yet supported */); // TODO;\n\t\tthis.fieldKey = info.parentField;\n\t\tthis.mode = CursorLocationType.Fields;\n\t\tthis.moveToPosition(\n\t\t\tinfo.indexOfParentPosition ??\n\t\t\t\tfail(0xb0b /* navigation up to root field not yet supported */),\n\t\t); // TODO\n\t}\n\n\tpublic firstField(): boolean {\n\t\tconst fieldsArray = this.nodeInfo(CursorLocationType.Nodes).shape.fieldsArray;\n\t\tif (!hasSome(fieldsArray)) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.indexOfField = 0;\n\t\tthis.mode = CursorLocationType.Fields;\n\t\tconst fields = fieldsArray[0];\n\t\tthis.fieldKey = fields[0];\n\t\treturn true;\n\t}\n\n\tpublic enterField(key: FieldKey): void {\n\t\tconst fieldMap = this.nodeInfo(CursorLocationType.Nodes).shape.fields;\n\t\tconst fieldInfo = fieldMap.get(key);\n\t\tthis.indexOfField =\n\t\t\tfieldInfo === undefined\n\t\t\t\t? fieldMap.size\n\t\t\t\t: (fieldInfo.indexOfParentField ?? fail(0xb0c /* children should have parents */));\n\t\tthis.fieldKey = key;\n\t\tthis.mode = CursorLocationType.Fields;\n\t}\n\n\tpublic get type(): TreeNodeSchemaIdentifier {\n\t\treturn this.nodeInfo(CursorLocationType.Nodes).shape.type;\n\t}\n\n\tpublic get value(): Value {\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\tif (info.shape.hasValue) {\n\t\t\tconst value = this.chunk.values[info.valueOffset];\n\t\t\t// If mayContainCompressedIds is set, check if the value is a number (i.e. a compressed ID that needs decompression).\n\t\t\tif (info.shape.mayContainCompressedIds && typeof value === \"number\") {\n\t\t\t\tconst idCompressor = this.chunk.idCompressor;\n\t\t\t\tassert(\n\t\t\t\t\tidCompressor !== undefined,\n\t\t\t\t\t0xcf1 /* chunk required idCompressor but did not provide it */,\n\t\t\t\t);\n\t\t\t\treturn idCompressor.decompress(value as SessionSpaceCompressedId);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"uniformChunk.js","sourceRoot":"","sources":["../../../src/feature-libraries/chunked-forest/uniformChunk.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, compareArrays, oob, fail } from \"@fluidframework/core-utils/internal\";\nimport type { SessionSpaceCompressedId, IIdCompressor } from \"@fluidframework/id-compressor\";\n\nimport {\n\tCursorLocationType,\n\ttype FieldKey,\n\ttype FieldUpPath,\n\ttype PathRootPrefix,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeValue,\n\ttype UpPath,\n\ttype Value,\n\ttype ChunkedCursor,\n\ttype TreeChunk,\n\tcursorChunk,\n\tdummyRoot,\n} from \"../../core/index.js\";\nimport { ReferenceCountedBase, getOrCreate, hasSome } from \"../../util/index.js\";\nimport { SynchronousCursor, prefixFieldPath, prefixPath } from \"../treeCursorUtils.js\";\n\n/**\n * Create a tree chunk with ref count 1.\n *\n * @param shape - describes the semantics and layout of `values`.\n * @param values - provides exclusive ownership of this array to this object (which might mutate it in the future).\n */\nexport function uniformChunk(shape: ChunkShape, values: TreeValue[]): TreeChunk {\n\treturn new UniformChunk(shape, values);\n}\n\n/**\n * Chunk which handles a sequence of trees with identical \"shape\" (see `TreeShape`).\n *\n * Separates shape from content,\n * allowing deduplication of shape information and storing of content as a flat sequence of values.\n */\nexport class UniformChunk extends ReferenceCountedBase implements TreeChunk {\n\tpublic idCompressor: undefined | IIdCompressor;\n\t/**\n\t * Create a tree chunk with ref count 1.\n\t *\n\t * @param shape - describes the semantics and layout of `values`.\n\t * @param values - provides exclusive ownership of this array to this object (which might mutate it in the future).\n\t */\n\tpublic constructor(\n\t\tpublic shape: ChunkShape,\n\t\tpublic values: TreeValue[],\n\t\tidCompressor?: IIdCompressor,\n\t) {\n\t\tsuper();\n\t\tthis.idCompressor = shape.treeShape.mayContainCompressedIds ? idCompressor : undefined;\n\t\tassert(\n\t\t\tshape.treeShape.valuesPerTopLevelNode * shape.topLevelLength === values.length,\n\t\t\t0x4c3 /* invalid number of values for shape */,\n\t\t);\n\t}\n\n\tpublic get topLevelLength(): number {\n\t\treturn this.shape.topLevelLength;\n\t}\n\n\tpublic clone(): UniformChunk {\n\t\treturn new UniformChunk(this.shape, [...this.values]);\n\t}\n\n\tpublic cursor(): Cursor {\n\t\treturn new Cursor(this);\n\t}\n\n\tprotected onUnreferenced(): void {}\n}\n\n/**\n * The \"shape\" of a field.\n *\n * Requires that all trees in the field have the same shape, which is described by `TreeShape`.\n * Note that this requirement means that not all fields can be described using this type.\n */\nexport type FieldShape = readonly [FieldKey, TreeShape, number];\n\n/**\n * Maximum topLevelLength value (exclusive) for which {@link TreeShape.withTopLevelLength}\n * caches the resulting {@link ChunkShape}. Values at or above this threshold always\n * create a new instance to prevent unbounded cache growth.\n *\n * @remarks\n * This value is an estimation of the general size needed to cover current workflows,\n * not a researched constant, and is safe to tune as workloads change.\n *\n * Raising this value captures more chunk sizes in the cache, at the cost of\n * each `TreeShape` retaining up to `chunkShapeCacheLimit - 1` cached entries for the\n * lifetime of the shape. Lowering it reduces memory held per `TreeShape` but forces\n * small chunks, where the relative cost of rebuilding `positions` is highest, to pay\n * the construction cost on every call.\n */\nconst chunkShapeCacheLimit = 8;\n\n/**\n * The \"shape\" of a tree.\n * Does not contain the actual values from the tree, but describes everything else,\n * including where the values would be found in a flat values array.\n *\n * Note that since this requires fields to have uniform shapes (see `FieldShape`),\n * not all trees can have their shape described using this type.\n */\nexport class TreeShape {\n\tpublic readonly fields: ReadonlyMap<FieldKey, OffsetShape>;\n\tpublic readonly fieldsOffsetArray: readonly OffsetShape[];\n\tpublic readonly valuesPerTopLevelNode: number;\n\n\t/**\n\t * Information about every node in this shape.\n\t * The root is first, and all indexes it uses to refer to other nodes are indexes into this array.\n\t * Beyond that the ordering is an implementation detail of this shape.\n\t * @remarks\n\t * Use of this in contexts where there might be multiple top-level nodes requires some additional care.\n\t * For example {@link Cursor} derives each node's actual position info from this shared\n\t * array plus the node's top-level index within the chunk.\n\t */\n\tpublic readonly positions: readonly NodePositionInfo[];\n\n\t/**\n\t * Whether chunks using this shape (including any descendant leaf within it) may contain values compressed by the {@link UniformChunk.idCompressor}.\n\t *\n\t * @remarks\n\t * For string leaf nodes, this can be explicitly set to `true` to indicate that the value may be a compressed id\n\t * stored as a number that needs to be decompressed back to a string.\n\t * For non-leaf nodes, this is automatically derived from whether any child shapes have it set.\n\t */\n\tpublic readonly mayContainCompressedIds: boolean;\n\n\t/**\n\t * Cache for ChunkShape instances created by {@link withTopLevelLength}.\n\t * `topLevelLength` is always a positive integer (enforced by the {@link ChunkShape} constructor),\n\t * so the cache only ever holds entries for values in `1..chunkShapeCacheLimit - 1` to prevent unbounded growth.\n\t */\n\tprivate readonly chunkShapeCache: Map<number, ChunkShape> = new Map();\n\n\t/**\n\t * @param type - {@link TreeNodeSchemaIdentifier} used to compare shapes.\n\t * @param hasValue - whether or not the TreeShape has a value.\n\t * @param fieldsArray - an array of {@link FieldShape} values, which contains a TreeShape for each FieldKey.\n\t *\n\t * @param maybeCompressedIdLeaf - whether the value may have been compressed by the {@link UniformChunk.idCompressor}.\n\t * Can only be explicitly set to `true` on string leaf nodes; otherwise this constructor asserts.\n\t * For non-leaf nodes, {@link TreeShape.mayContainCompressedIds} is automatically derived from child shapes.\n\t */\n\tpublic constructor(\n\t\tpublic readonly type: TreeNodeSchemaIdentifier,\n\t\tpublic readonly hasValue: boolean,\n\t\tpublic readonly fieldsArray: readonly FieldShape[],\n\t\tmaybeCompressedIdLeaf: boolean = false,\n\t) {\n\t\tassert(\n\t\t\thasValue === false || fieldsArray.length === 0,\n\t\t\t0xcef /* only non-leaf can have fields */,\n\t\t);\n\t\tif (maybeCompressedIdLeaf) {\n\t\t\tassert(\n\t\t\t\thasValue && type === \"com.fluidframework.leaf.string\",\n\t\t\t\t0xcf0 /* only strings can opt into maybeCompressedIdLeaf */,\n\t\t\t);\n\t\t}\n\t\t// For non-leaf nodes, derive from whether any child shapes contain compressed ids.\n\t\tthis.mayContainCompressedIds =\n\t\t\tmaybeCompressedIdLeaf || fieldsArray.some(([, shape]) => shape.mayContainCompressedIds);\n\t\tconst fields: Map<FieldKey, OffsetShape> = new Map();\n\t\tlet numberOfValues = hasValue ? 1 : 0;\n\t\tconst infos: NodePositionInfo[] = [\n\t\t\tnew NodePositionInfo(undefined, dummyRoot, 0, undefined, undefined, this, 1, 0),\n\t\t];\n\t\tlet fieldIndex = 0;\n\t\tfor (const [k, f, length] of fieldsArray) {\n\t\t\tassert(!fields.has(k), 0x4c5 /* no duplicate keys */);\n\t\t\tconst offset = new OffsetShape(f, length, infos.length, k, fieldIndex);\n\t\t\tfields.set(k, offset);\n\t\t\tclonePositions(0, [k, f, length], fieldIndex, numberOfValues, infos);\n\t\t\tnumberOfValues += f.valuesPerTopLevelNode * length;\n\t\t\tfieldIndex++;\n\t\t}\n\t\tthis.fields = fields;\n\t\tthis.valuesPerTopLevelNode = numberOfValues;\n\t\tthis.positions = infos;\n\n\t\tthis.fieldsOffsetArray = [...fields.values()];\n\t}\n\n\tpublic equals(other: TreeShape): boolean {\n\t\t// TODO: either dedupe instances and/or store a collision resistant hash for fast compare.\n\n\t\tif (\n\t\t\t!compareArrays(\n\t\t\t\tthis.fieldsArray,\n\t\t\t\tother.fieldsArray,\n\t\t\t\t([k, f, l], [k2, f2, l2]) => k === k2 && l === l2 && f.equals(f2),\n\t\t\t)\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t\treturn (\n\t\t\tthis.type === other.type &&\n\t\t\tthis.hasValue === other.hasValue &&\n\t\t\tthis.mayContainCompressedIds === other.mayContainCompressedIds\n\t\t);\n\t}\n\n\tpublic withTopLevelLength(topLevelLength: number): ChunkShape {\n\t\tif (topLevelLength < chunkShapeCacheLimit) {\n\t\t\treturn getOrCreate(\n\t\t\t\tthis.chunkShapeCache,\n\t\t\t\ttopLevelLength,\n\t\t\t\t() => new ChunkShape(this, topLevelLength),\n\t\t\t);\n\t\t}\n\t\treturn new ChunkShape(this, topLevelLength);\n\t}\n}\n\nfunction clonePositions(\n\tindexOfParentInOutput: number | undefined,\n\t[key, shape, copies]: FieldShape,\n\tindexOfParentField: number,\n\tvalueOffset: number,\n\toutputInto: NodePositionInfo[] | (NodePositionInfo | undefined)[],\n): void {\n\tconst offset = outputInto.length;\n\tfor (let index = 0; index < copies; index++) {\n\t\tfor (const inner of shape.positions) {\n\t\t\tconst wasRoot = inner.indexOfParentPosition === undefined;\n\t\t\tconst parentPositionIndex = wasRoot\n\t\t\t\t? indexOfParentInOutput\n\t\t\t\t: inner.indexOfParentPosition + index * shape.positions.length + offset;\n\t\t\toutputInto.push(\n\t\t\t\tnew NodePositionInfo(\n\t\t\t\t\tparentPositionIndex === undefined ? undefined : outputInto[parentPositionIndex],\n\t\t\t\t\tinner.parentField === dummyRoot ? key : inner.parentField,\n\t\t\t\t\twasRoot ? index : inner.parentIndex,\n\t\t\t\t\tinner.indexOfParentField ?? indexOfParentField,\n\t\t\t\t\tparentPositionIndex,\n\t\t\t\t\tinner.shape,\n\t\t\t\t\twasRoot ? copies : inner.topLevelLength,\n\t\t\t\t\tinner.valueOffset + valueOffset + shape.valuesPerTopLevelNode * index,\n\t\t\t\t),\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * The shape (see `TreeShape`) of a sequence of trees, all with the same shape (like `FieldShape`, but without a field key).\n *\n * @remarks\n * Paired with a value array, this lets a {@link UniformChunk} be traversed like a tree by an\n * {@link ITreeCursorSynchronous}. The {@link Cursor} derives each node's position info from the\n * shared {@link TreeShape.positions} plus the node's top-level index.\n *\n * TODO: consider storing shape information in WASM\n */\nexport class ChunkShape {\n\tpublic constructor(\n\t\tpublic readonly treeShape: TreeShape,\n\t\tpublic readonly topLevelLength: number,\n\t) {\n\t\tassert(topLevelLength > 0, 0x4c6 /* topLevelLength must be greater than 0 */);\n\t}\n\n\tpublic equals(other: ChunkShape): boolean {\n\t\t// TODO: either dedup instances and/or store a collision resistant hash for fast compare.\n\t\treturn this.topLevelLength === other.topLevelLength && this.treeShape === other.treeShape;\n\t}\n}\n\n/**\n * Shape of a field (like `FieldShape`) but with information about how it would be offset within a chunk because of its parents.\n */\nclass OffsetShape {\n\t/**\n\t * @param shape - the shape of each child in this field\n\t * @param topLevelLength - number of top level nodes in this sequence chunk (either field within a chunk, or top level chunk)\n\t * @param offset - number of nodes before this in the parent's subtree. The nodes are considered in depth first pre order\n\t * traversal, so a parent is the first node in its subtree (before its children) with offset 0\n\t * @param key - field key\n\t * @param indexOfParentField - index to this shape in the parent's array of fields\n\t */\n\tpublic constructor(\n\t\tpublic readonly shape: TreeShape,\n\t\tpublic readonly topLevelLength: number,\n\t\tpublic readonly offset: number,\n\t\tpublic readonly key: FieldKey,\n\t\tpublic readonly indexOfParentField: number | undefined,\n\t) {}\n}\n\n/**\n * Information about a node at a specific position within one top-level tree of a {@link TreeShape}.\n */\nclass NodePositionInfo implements UpPath {\n\t/**\n\t * @param parent - The parent node's {@link NodePositionInfo} or `undefined` for a root.\n\t * @param parentField - The {@link FieldKey} of the field this node occupies within its parent.\n\t * @param parentIndex - indexWithinParentField\n\t * @param indexOfParentField - Which field of the parent `parentIndex` is indexing into to locate this.\n\t * @param indexOfParentPosition - Index of this node's parent in {@link TreeShape.positions}\n\t * @param shape - Shape of the top level sequence this node is part of\n\t * @param topLevelLength - Number of siblings in this node's field. For a root this is unused\n\t * @param valueOffset - Offset of this node's value within one top-level tree's slice of the chunk's flat `values` array;\n\t * only valid when `shape.hasValue` (otherwise it's where the value would have gone, and should not be used to read a value).\n\t */\n\tpublic constructor(\n\t\tpublic readonly parent: NodePositionInfo | undefined, // TODO; general UpPath to allow prefixing here?\n\t\tpublic readonly parentField: FieldKey,\n\t\tpublic readonly parentIndex: number,\n\t\tpublic readonly indexOfParentField: number | undefined,\n\t\tpublic readonly indexOfParentPosition: number | undefined,\n\t\tpublic readonly shape: TreeShape, // Shape of sequence that contains this node (top level is parent of this node)\n\t\tpublic readonly topLevelLength: number,\n\t\tpublic readonly valueOffset: number,\n\t) {}\n}\n\n/**\n * The cursor implementation for `UniformChunk`.\n *\n * @remarks\n * Tracks a flat `positionIndex` and derives each node's position info from the shape's shared\n * {@link TreeShape.positions} plus the node's top-level index.\n */\nclass Cursor extends SynchronousCursor implements ChunkedCursor {\n\tprivate positionIndex!: number; // When in fields mode, this points to the parent node.\n\n\t/** Position info for the current node, or `undefined` when in root field. */\n\tprivate nodePositionInfo: NodePositionInfo | undefined;\n\n\t/** Which top-level node of the chunk the current position is within. Valid when nodePositionInfo !== undefined. */\n\tprivate topLevelIndex: number = 0;\n\n\t// Cached constants for faster access.\n\t/** The chunk's shape. */\n\tprivate readonly shape: ChunkShape;\n\t/** The chunk's per-tree shape (shape of each top-level tree). */\n\tprivate readonly treeShape: TreeShape;\n\t/** Number of positions in one top-level tree (treeShape.positions.length). */\n\tprivate readonly nodeLength: number;\n\t/** Number of values per top-level node (treeShape.valuesPerTopLevelNode). */\n\tprivate readonly stride: number;\n\n\tpublic mode: CursorLocationType = CursorLocationType.Fields;\n\n\t// Undefined when not in fields mode.\n\tprivate fieldKey?: FieldKey;\n\n\t// Valid only in fields mode. Can be past end for empty fields.\n\t// This is redundant with fieldKey above (but might be worth keeping for perf), and could be removed.\n\tprivate indexOfField: number = 0;\n\n\t// TODO: support prefix (path above root, including index offset of chunk in its containing field)\n\tpublic constructor(private readonly chunk: UniformChunk) {\n\t\tsuper();\n\t\tthis.shape = this.chunk.shape;\n\t\tthis.treeShape = this.shape.treeShape;\n\t\tthis.nodeLength = this.treeShape.positions.length;\n\t\tthis.stride = this.treeShape.valuesPerTopLevelNode;\n\t\tthis.fieldKey = dummyRoot;\n\t\tthis.moveToPosition(0);\n\t}\n\n\tpublic get [cursorChunk](): UniformChunk | undefined {\n\t\treturn this.atChunkRoot() ? this.chunk : undefined;\n\t}\n\n\tpublic atChunkRoot(): boolean {\n\t\tassert(\n\t\t\t(this.fieldKey === undefined) === (this.mode === CursorLocationType.Nodes),\n\t\t\t0x560 /* expect valid field key */,\n\t\t);\n\t\treturn (\n\t\t\tthis.nodePositionInfo === undefined ||\n\t\t\t(this.nodePositionInfo.parent === undefined && this.fieldKey === undefined)\n\t\t);\n\t}\n\n\tpublic fork(): Cursor {\n\t\tconst cursor = new Cursor(this.chunk);\n\t\tcursor.mode = this.mode;\n\t\tcursor.fieldKey = this.fieldKey;\n\t\tcursor.indexOfField = this.indexOfField;\n\t\tcursor.moveToPosition(this.positionIndex);\n\t\treturn cursor;\n\t}\n\n\t/**\n\t * Change the current node within the chunk.\n\t *\n\t * @param positionIndex - flat position index of the newly selected node. This is NOT an index\n\t * within a field, and is not bounds checked.\n\t *\n\t * @remarks\n\t * Decomposes the index into {@link Cursor.topLevelIndex} and {@link Cursor.nodePositionInfo}.\n\t * See `nodeInfo` for getting data about the current node.\n\t *\n\t */\n\tprivate moveToPosition(positionIndex: number): void {\n\t\tthis.positionIndex = positionIndex;\n\t\tif (positionIndex === 0) {\n\t\t\tthis.nodePositionInfo = undefined;\n\t\t\tassert(this.mode === CursorLocationType.Fields, 0x562 /* expected root to be a field */);\n\t\t\treturn;\n\t\t}\n\t\tconst decoded = this.decodePosition(positionIndex);\n\t\tthis.topLevelIndex = decoded.topLevelIndex;\n\t\tthis.nodePositionInfo = decoded.info;\n\t}\n\n\t/**\n\t * Decode a flat `positionIndex` into its components.\n\t *\n\t * @param positionIndex - flat position index of the node to decode. Must be greater than 0;\n\t * @returns the node's index within {@link TreeShape.positions} (`withinTree`), which top-level\n\t * tree holds it (`topLevelIndex`), and the corresponding shared {@link NodePositionInfo} (`info`).\n\t */\n\tprivate decodePosition(positionIndex: number): {\n\t\twithinTree: number;\n\t\ttopLevelIndex: number;\n\t\tinfo: NodePositionInfo;\n\t} {\n\t\tconst offset = positionIndex - 1;\n\t\t// Find the node's index within treeShape.positions, then which top-level tree holds it.\n\t\tconst withinTree = offset % this.nodeLength; // remainder\n\t\tconst topLevelIndex = (offset - withinTree) / this.nodeLength; // quotient\n\t\tconst info = this.treeShape.positions[withinTree] ?? oob();\n\t\treturn { withinTree, topLevelIndex, info };\n\t}\n\n\t/**\n\t * Build a standalone {@link UpPath} for the node at `positionIndex`. O(depth) allocation.\n\t *\n\t * @remarks\n\t * walks the shared per-tree {@link TreeShape.positions} and applies the top-level index\n\t * at each level. Mirrors how the `BasicChunk` cursor allocates paths.\n\t */\n\tprivate materializePath(positionIndex: number): UpPath | undefined {\n\t\tif (positionIndex === 0) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst { withinTree, topLevelIndex, info } = this.decodePosition(positionIndex);\n\t\tif (info.parent === undefined) {\n\t\t\t// Top-level node: its parent is the (prefixed) chunk root.\n\t\t\treturn { parent: undefined, parentField: info.parentField, parentIndex: topLevelIndex };\n\t\t}\n\t\treturn {\n\t\t\tparent: this.materializePath(\n\t\t\t\tpositionIndex - withinTree + (info.indexOfParentPosition ?? oob()),\n\t\t\t),\n\t\t\tparentField: info.parentField,\n\t\t\tparentIndex: info.parentIndex,\n\t\t};\n\t}\n\n\t/**\n\t * Gets information about the current node.\n\t *\n\t * When in Nodes mode, this means the node this cursor is current at.\n\t * When if fields mode, this means the node which is the parent of the current field.\n\t * This cursor is in Nodes mode at the root, so there is no case where a fields mode does not have a parent.\n\t *\n\t * @param requiredMode - asserts that the mode matches this. Since the semantics of this function are somewhat mode dependent,\n\t * providing this ensures that the caller knows what the results will mean.\n\t */\n\tprivate nodeInfo(requiredMode: CursorLocationType): NodePositionInfo {\n\t\tassert(this.mode === requiredMode, 0x4c8 /* tried to access cursor when in wrong mode */);\n\t\tassert(\n\t\t\tthis.nodePositionInfo !== undefined,\n\t\t\t0x53e /* can not access nodeInfo in root field */,\n\t\t);\n\t\treturn this.nodePositionInfo;\n\t}\n\n\tpublic nextField(): boolean {\n\t\tthis.indexOfField++;\n\t\tconst fields = this.nodeInfo(CursorLocationType.Fields).shape.fieldsArray;\n\t\tif (this.indexOfField < fields.length) {\n\t\t\tconst fieldArr = fields[this.indexOfField] ?? oob();\n\t\t\tthis.fieldKey = fieldArr[0];\n\t\t\treturn true;\n\t\t}\n\t\tthis.exitField();\n\t\treturn false;\n\t}\n\n\tpublic exitField(): void {\n\t\tassert(this.mode === CursorLocationType.Fields, 0x4c9 /* exitField when in wrong mode */);\n\t\tassert(this.nodePositionInfo !== undefined, 0x563 /* can not exit root field */);\n\t\tthis.fieldKey = undefined;\n\t\tthis.mode = CursorLocationType.Nodes;\n\t}\n\n\tpublic getFieldKey(): FieldKey {\n\t\treturn this.fieldKey ?? fail(0xb09 /* not in a field */);\n\t}\n\n\tpublic getFieldLength(): number {\n\t\tassert(\n\t\t\tthis.mode === CursorLocationType.Fields,\n\t\t\t0x53f /* tried to access cursor when in wrong mode */,\n\t\t);\n\t\tif (this.nodePositionInfo === undefined) {\n\t\t\treturn this.shape.topLevelLength;\n\t\t}\n\t\tconst fieldInfo = this.nodePositionInfo.shape.fieldsArray[this.indexOfField];\n\t\tif (fieldInfo === undefined) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn fieldInfo[2];\n\t}\n\n\tpublic firstNode(): boolean {\n\t\tassert(\n\t\t\tthis.mode === CursorLocationType.Fields,\n\t\t\t0x540 /* tried to access cursor when in wrong mode */,\n\t\t);\n\n\t\tif (this.nodePositionInfo === undefined) {\n\t\t\t// Root field is not allowed to be empty, so we can skip handling that case.\n\t\t\tthis.enterRootNodeInner(0);\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn this.enterNodeInner(this.nodePositionInfo, 0);\n\t\t}\n\t}\n\n\tpublic enterNode(childIndex: number): void {\n\t\tassert(\n\t\t\tthis.mode === CursorLocationType.Fields,\n\t\t\t0x541 /* tried to access cursor when in wrong mode */,\n\t\t);\n\t\tassert(childIndex >= 0, 0x4ca /* index must be positive */);\n\t\tif (this.nodePositionInfo === undefined) {\n\t\t\tassert(\n\t\t\t\tchildIndex < this.shape.topLevelLength,\n\t\t\t\t0x542 /* index must not be past the end of the field */,\n\t\t\t);\n\t\t\tthis.enterRootNodeInner(childIndex);\n\t\t} else {\n\t\t\tconst moved = this.enterNodeInner(this.nodePositionInfo, childIndex);\n\t\t\tassert(moved, 0x4cb /* index must not be past the end of the field */);\n\t\t}\n\t}\n\n\t/**\n\t * Enter the current field, at `childIndex`.\n\t * @param childIndex - index into current field to navigate to. Must be non-negative integer.\n\t */\n\tprivate enterNodeInner(currentPosition: NodePositionInfo, childIndex: number): boolean {\n\t\tconst shape = currentPosition.shape;\n\t\tconst fields = shape.fieldsOffsetArray;\n\t\tif (this.indexOfField >= fields.length) {\n\t\t\treturn false; // Handle empty field (indexed by key into empty field)\n\t\t}\n\t\tconst f = shape.fieldsOffsetArray[this.indexOfField] ?? oob();\n\t\tif (childIndex >= f.topLevelLength) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.mode = CursorLocationType.Nodes;\n\t\tthis.fieldKey = undefined;\n\t\tthis.moveToPosition(this.positionIndex + f.offset + childIndex * f.shape.positions.length);\n\t\tassert(this.fieldIndex === childIndex, 0x4cc /* should be at selected child */);\n\t\treturn true;\n\t}\n\n\tprivate enterRootNodeInner(childIndex: number): void {\n\t\tthis.mode = CursorLocationType.Nodes;\n\t\tthis.fieldKey = undefined;\n\t\t// 1 for the \"undefined\" root-field marker at position 0, then stride by one top-level tree (nodeLength).\n\t\tthis.moveToPosition(1 + childIndex * this.nodeLength);\n\t\tassert(this.fieldIndex === childIndex, 0x543 /* should be at selected child */);\n\t}\n\n\tpublic getFieldPath(prefix?: PathRootPrefix): FieldUpPath {\n\t\treturn prefixFieldPath(prefix, {\n\t\t\tfield: this.getFieldKey(),\n\t\t\tparent: this.materializePath(this.positionIndex),\n\t\t});\n\t}\n\n\tpublic getPath(prefix?: PathRootPrefix): UpPath | undefined {\n\t\tthis.nodeInfo(CursorLocationType.Nodes); // assert: in nodes mode at a node\n\t\treturn prefixPath(prefix, this.materializePath(this.positionIndex));\n\t}\n\n\tpublic get fieldIndex(): number {\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\treturn info.parent === undefined ? this.topLevelIndex : info.parentIndex;\n\t}\n\n\tpublic readonly chunkStart: number = 0;\n\n\t/**\n\t * Number of nodes in `info`'s field including `info` itself.\n\t *\n\t * @remarks\n\t * For top-level nodes this is the chunk's `topLevelLength`, read from the chunk\n\t * rather than the node, so the shared per-tree {@link TreeShape.positions} stays independent of\n\t * chunk length; the root entry's own `topLevelLength` field is unused. Nested nodes use the\n\t * field length stored on the node.\n\t */\n\tprivate siblingCount(info: NodePositionInfo): number {\n\t\treturn info.parent === undefined ? this.shape.topLevelLength : info.topLevelLength;\n\t}\n\n\tpublic get chunkLength(): number {\n\t\treturn this.siblingCount(this.nodeInfo(CursorLocationType.Nodes));\n\t}\n\n\tpublic seekNodes(offset: number): boolean {\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\tconst index = offset + this.fieldIndex;\n\t\tif (index >= 0 && index < this.siblingCount(info)) {\n\t\t\tthis.moveToPosition(this.positionIndex + offset * info.shape.positions.length);\n\t\t\treturn true;\n\t\t}\n\t\tthis.exitNode();\n\t\treturn false;\n\t}\n\n\tpublic nextNode(): boolean {\n\t\t// This is the same as `return this.seekNodes(1);` but slightly faster.\n\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\tconst index = this.fieldIndex + 1;\n\t\tif (index === this.siblingCount(info)) {\n\t\t\tthis.exitNode();\n\t\t\treturn false;\n\t\t}\n\t\tthis.moveToPosition(this.positionIndex + info.shape.positions.length);\n\t\treturn true;\n\t}\n\n\tpublic exitNode(): void {\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\tconst withinTree = this.positionIndex - 1 - this.topLevelIndex * this.nodeLength;\n\t\t// Top-level nodes (no parent) exit to the root field at position 0;\n\t\t// nested nodes' parent is `indexOfParentPosition` within the same top-level instance.\n\t\tthis.indexOfField = info.indexOfParentField ?? 0;\n\t\tthis.fieldKey = info.parentField;\n\t\tthis.mode = CursorLocationType.Fields;\n\t\tthis.moveToPosition(\n\t\t\tinfo.indexOfParentPosition === undefined\n\t\t\t\t? 0\n\t\t\t\t: this.positionIndex - withinTree + info.indexOfParentPosition,\n\t\t);\n\t}\n\n\tpublic firstField(): boolean {\n\t\tconst fieldsArray = this.nodeInfo(CursorLocationType.Nodes).shape.fieldsArray;\n\t\tif (!hasSome(fieldsArray)) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.indexOfField = 0;\n\t\tthis.mode = CursorLocationType.Fields;\n\t\tconst fields = fieldsArray[0];\n\t\tthis.fieldKey = fields[0];\n\t\treturn true;\n\t}\n\n\tpublic enterField(key: FieldKey): void {\n\t\tconst fieldMap = this.nodeInfo(CursorLocationType.Nodes).shape.fields;\n\t\tconst fieldInfo = fieldMap.get(key);\n\t\tthis.indexOfField =\n\t\t\tfieldInfo === undefined\n\t\t\t\t? fieldMap.size\n\t\t\t\t: (fieldInfo.indexOfParentField ?? fail(0xb0c /* children should have parents */));\n\t\tthis.fieldKey = key;\n\t\tthis.mode = CursorLocationType.Fields;\n\t}\n\n\tpublic get type(): TreeNodeSchemaIdentifier {\n\t\treturn this.nodeInfo(CursorLocationType.Nodes).shape.type;\n\t}\n\n\tpublic get value(): Value {\n\t\tconst info = this.nodeInfo(CursorLocationType.Nodes);\n\t\tif (info.shape.hasValue) {\n\t\t\tconst value = this.chunk.values[info.valueOffset + this.topLevelIndex * this.stride];\n\t\t\t// If mayContainCompressedIds is set, check if the value is a number (i.e. a compressed ID that needs decompression).\n\t\t\tif (info.shape.mayContainCompressedIds && typeof value === \"number\") {\n\t\t\t\tconst idCompressor = this.chunk.idCompressor;\n\t\t\t\tassert(\n\t\t\t\t\tidCompressor !== undefined,\n\t\t\t\t\t0xcf1 /* chunk required idCompressor but did not provide it */,\n\t\t\t\t);\n\t\t\t\treturn idCompressor.decompress(value as SessionSpaceCompressedId);\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\treturn undefined;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultEditBuilder.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/default-schema/defaultEditBuilder.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"defaultEditBuilder.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/default-schema/defaultEditBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAEN,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,MAAM,EAGX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAKN,KAAK,gBAAgB,EAIrB,MAAM,4BAA4B,CAAC;AAMpC,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAEhD;;;;GAIG;AACH,qBAAa,mBACZ,YAAW,YAAY,CAAC,kBAAkB,EAAE,gBAAgB,CAAC;IAE7D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;gBAGnD,MAAM,EAAE,YAAY,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,EAC7D,YAAY,EAAE,iBAAiB;IAKhC,IAAW,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAEpD;IAED,IAAW,MAAM,IAAI,YAAY,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAEzE;IAEM,WAAW,CACjB,eAAe,EAAE,MAAM,WAAW,EAClC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,KAAK,IAAI,GAC9D,kBAAkB;CAQrB;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAEjF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,GAAG,QAAQ,CAAC,mBAAmB,CAAC,CAE5F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,mBAAmB,CAAC,QAAQ,GAAG,SAAS;IACxD;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,qBAAqB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IAE1E;;;;;OAKG;IACH,aAAa,CAAC,KAAK,EAAE,qBAAqB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEhF;;;;;;OAMG;IACH,aAAa,CAAC,KAAK,EAAE,qBAAqB,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IAEhF;;;;;OAKG;IACH,IAAI,CACH,WAAW,EAAE,qBAAqB,EAClC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,qBAAqB,EACvC,gBAAgB,EAAE,MAAM,GACtB,IAAI,CAAC;IAER;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAEtD;;;OAGG;IACH,+BAA+B,CAAC,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAE9D;;OAEG;IACH,qBAAqB,IAAI,IAAI,CAAC;IAE9B;;OAEG;IACH,6BAA6B,IAAI,IAAI,CAAC;CACtC;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,kBAAkB,EAAE,mBAAmB;IAKhF,OAAO,CAAC,QAAQ,CAAC,eAAe;IAJjC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAqB;gBAGnD,MAAM,EAAE,YAAY,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,EACzC,eAAe,EAAE,MAAM,WAAW,EACnD,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,KAAK,IAAI,EAChE,YAAY,EAAE,iBAAiB;IAUzB,gBAAgB,IAAI,IAAI;IAGxB,eAAe,IAAI,IAAI;IAIvB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3C,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAInD,qBAAqB,IAAI,IAAI;IAI7B,6BAA6B,IAAI,IAAI;IAIrC,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,qBAAqB,CAAC,SAAS,CAAC;IA8BhE,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC;IAwCtE,IAAI,CACV,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,gBAAgB,EAAE,WAAW,EAC7B,SAAS,EAAE,MAAM,GACf,IAAI;IA0HA,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,wBAAwB,CAAC,SAAS,CAAC;CAsC7E;AAED,MAAM,WAAW,qBAAqB,CAAC,QAAQ;IAC9C;;;OAGG;IACH,GAAG,CAAC,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,wBAAwB,CAAC,QAAQ;IACjD;;;;OAIG;IACH,GAAG,CAAC,UAAU,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAClE;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,IAAI,CAAC;IAElD;;;;OAIG;IACH,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC;CAC/C"}
|