@fluidframework/tree 2.3.0-288113 → 2.4.0-294316
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/.dependency-cruiser-known-violations.json +28 -40
- package/.vscode/Tree.code-workspace +0 -2
- package/CHANGELOG.md +92 -0
- package/README.md +6 -0
- package/alpha.d.ts +11 -0
- package/api-extractor/api-extractor-lint-alpha.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-alpha.esm.json +5 -0
- package/api-extractor/api-extractor-lint-legacy.cjs.json +5 -0
- package/api-extractor/api-extractor-lint-legacy.esm.json +5 -0
- package/api-extractor/api-extractor.current.json +8 -0
- package/api-extractor/api-extractor.legacy.json +4 -0
- package/api-extractor.json +1 -1
- package/api-report/tree.alpha.api.md +42 -54
- package/api-report/tree.beta.api.md +35 -16
- package/api-report/tree.legacy.alpha.api.md +571 -0
- package/api-report/tree.legacy.public.api.md +568 -0
- package/api-report/tree.public.api.md +22 -18
- package/dist/alpha.d.ts +103 -0
- package/dist/beta.d.ts +7 -2
- package/dist/core/index.d.ts +2 -2
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +4 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +1 -0
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +8 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/core/{revertible/revertible.d.ts → revertible.d.ts} +12 -0
- package/dist/core/revertible.d.ts.map +1 -0
- package/dist/core/revertible.js.map +1 -0
- package/dist/core/schema-stored/format.d.ts +3 -3
- package/dist/core/schema-stored/format.js +1 -1
- package/dist/core/schema-stored/format.js.map +1 -1
- package/dist/core/schema-stored/schema.d.ts +2 -7
- package/dist/core/schema-stored/schema.d.ts.map +1 -1
- package/dist/core/schema-stored/schema.js +4 -6
- package/dist/core/schema-stored/schema.js.map +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.d.ts +1 -1
- package/dist/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.d.ts.map +1 -1
- package/dist/core/tree/anchorSet.js +6 -2
- package/dist/core/tree/anchorSet.js.map +1 -1
- package/dist/core/tree/detachedFieldIndex.d.ts +0 -1
- package/dist/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/dist/core/tree/detachedFieldIndex.js +1 -0
- package/dist/core/tree/detachedFieldIndex.js.map +1 -1
- package/dist/core/tree/visitDelta.d.ts +7 -2
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/events/emitter.d.ts +127 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/{events.js → emitter.js} +48 -30
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/index.d.ts +2 -1
- package/dist/events/index.d.ts.map +1 -1
- package/dist/events/index.js +4 -5
- package/dist/events/index.js.map +1 -1
- package/dist/events/interop.d.ts +36 -0
- package/dist/events/interop.d.ts.map +1 -0
- package/dist/{core/revertible/index.d.ts → events/interop.js} +3 -2
- package/dist/events/interop.js.map +1 -0
- package/dist/events/listeners.d.ts +65 -0
- package/dist/events/listeners.d.ts.map +1 -0
- package/{lib/core/revertible/index.d.ts → dist/events/listeners.js} +3 -2
- package/dist/events/listeners.js.map +1 -0
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts +25 -7
- package/dist/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkTree.js +36 -15
- package/dist/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts +4 -2
- package/dist/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/chunkedForest.js +12 -5
- package/dist/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts +15 -2
- package/dist/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/uniformChunk.js +28 -2
- package/dist/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +5 -4
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/flex-map-tree/index.d.ts +1 -1
- package/dist/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-map-tree/index.js +2 -1
- package/dist/feature-libraries/flex-map-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts +35 -33
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js +82 -103
- package/dist/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/context.d.ts +30 -14
- package/dist/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/context.js +10 -7
- package/dist/feature-libraries/flex-tree/context.js.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts +57 -190
- package/dist/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js +15 -3
- package/dist/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/dist/feature-libraries/flex-tree/index.d.ts +2 -3
- package/dist/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/index.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts +3 -3
- package/dist/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyEntity.js +2 -10
- package/dist/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.d.ts +26 -28
- package/dist/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyField.js +11 -14
- package/dist/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts +5 -26
- package/dist/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/lazyNode.js +23 -74
- package/dist/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/dist/feature-libraries/flex-tree/unboxed.d.ts +4 -16
- package/dist/feature-libraries/flex-tree/unboxed.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/unboxed.js +7 -41
- package/dist/feature-libraries/flex-tree/unboxed.js.map +1 -1
- package/dist/feature-libraries/flex-tree/utilities.d.ts +2 -2
- package/dist/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
- package/dist/feature-libraries/flex-tree/utilities.js +3 -6
- package/dist/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +4 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +3 -5
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +5 -11
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/comparison.js +3 -6
- package/dist/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/dist/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/discrepancies.js +3 -13
- package/dist/feature-libraries/modular-schema/discrepancies.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +4 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js +73 -22
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/schema-edits/schemaChangeFormat.d.ts +6 -6
- package/dist/feature-libraries/schema-index/format.d.ts +3 -3
- package/dist/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/compose.js +3 -0
- package/dist/feature-libraries/sequence-field/compose.js.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/utils.js +1 -4
- package/dist/feature-libraries/sequence-field/utils.js.map +1 -1
- package/dist/feature-libraries/storedToViewSchema.d.ts.map +1 -1
- package/dist/feature-libraries/storedToViewSchema.js +2 -4
- package/dist/feature-libraries/storedToViewSchema.js.map +1 -1
- package/dist/feature-libraries/typed-schema/flexList.d.ts +3 -3
- package/dist/feature-libraries/typed-schema/flexList.js.map +1 -1
- package/dist/feature-libraries/typed-schema/index.d.ts +2 -2
- package/dist/feature-libraries/typed-schema/index.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/index.js +2 -2
- package/dist/feature-libraries/typed-schema/index.js.map +1 -1
- package/dist/feature-libraries/typed-schema/schemaCollection.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/schemaCollection.js +8 -10
- package/dist/feature-libraries/typed-schema/schemaCollection.js.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts +17 -48
- package/dist/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js +5 -37
- package/dist/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/dist/feature-libraries/typed-schema/view.d.ts +4 -6
- package/dist/feature-libraries/typed-schema/view.d.ts.map +1 -1
- package/dist/feature-libraries/typed-schema/view.js +5 -4
- package/dist/feature-libraries/typed-schema/view.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -36
- package/dist/index.js.map +1 -1
- package/dist/legacy.d.ts +84 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/public.d.ts +1 -1
- package/dist/shared-tree/checkoutFlexTreeView.d.ts +53 -0
- package/dist/shared-tree/checkoutFlexTreeView.d.ts.map +1 -0
- package/dist/shared-tree/{treeView.js → checkoutFlexTreeView.js} +28 -6
- package/dist/shared-tree/checkoutFlexTreeView.js.map +1 -0
- package/dist/shared-tree/index.d.ts +3 -3
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js +2 -2
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +15 -4
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +7 -8
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts +10 -4
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +28 -12
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +2 -2
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.d.ts +3 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeEnricher.js +6 -2
- package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts +3 -1
- package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeChangeFamily.js +3 -2
- package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts +2 -1
- package/dist/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/dist/shared-tree/sharedTreeEditBuilder.js +2 -2
- package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/dist/shared-tree/treeApi.d.ts +1 -3
- package/dist/shared-tree/treeApi.d.ts.map +1 -1
- package/dist/shared-tree/treeApi.js +6 -4
- package/dist/shared-tree/treeApi.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +2 -13
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +17 -1
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.js +1 -1
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +1 -1
- package/dist/simple-tree/api/create.js.map +1 -1
- package/{lib/simple-tree → dist/simple-tree/api}/getJsonSchema.d.ts +1 -1
- package/dist/simple-tree/api/getJsonSchema.d.ts.map +1 -0
- package/dist/simple-tree/{getJsonSchema.js → api/getJsonSchema.js} +1 -1
- package/dist/simple-tree/api/getJsonSchema.js.map +1 -0
- package/{lib/simple-tree → dist/simple-tree/api}/getSimpleSchema.d.ts +1 -1
- package/dist/simple-tree/api/getSimpleSchema.d.ts.map +1 -0
- package/dist/simple-tree/{getSimpleSchema.js → api/getSimpleSchema.js} +1 -1
- package/dist/simple-tree/api/getSimpleSchema.js.map +1 -0
- package/dist/simple-tree/api/index.d.ts +5 -0
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +7 -1
- package/dist/simple-tree/api/index.js.map +1 -1
- package/{lib/simple-tree → dist/simple-tree/api}/jsonSchema.d.ts +14 -15
- package/dist/simple-tree/api/jsonSchema.d.ts.map +1 -0
- package/dist/simple-tree/api/jsonSchema.js.map +1 -0
- package/dist/simple-tree/api/schemaFactory.d.ts +53 -16
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +49 -12
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/{simpleSchema.d.ts → api/simpleSchema.d.ts} +8 -4
- package/dist/simple-tree/api/simpleSchema.d.ts.map +1 -0
- package/dist/simple-tree/api/simpleSchema.js.map +1 -0
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -0
- package/dist/simple-tree/{simpleSchemaToJsonSchema.js → api/simpleSchemaToJsonSchema.js} +34 -21
- package/dist/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -0
- package/dist/simple-tree/api/tree.d.ts +5 -21
- package/dist/simple-tree/api/tree.d.ts.map +1 -1
- package/dist/simple-tree/api/tree.js +3 -38
- package/dist/simple-tree/api/tree.js.map +1 -1
- package/dist/simple-tree/api/treeApiBeta.d.ts +79 -0
- package/dist/simple-tree/api/treeApiBeta.d.ts.map +1 -0
- package/dist/simple-tree/api/treeApiBeta.js +26 -0
- package/dist/simple-tree/api/treeApiBeta.js.map +1 -0
- package/dist/simple-tree/api/treeNodeApi.d.ts +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +21 -19
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/api/verboseTree.js +2 -2
- package/dist/simple-tree/api/verboseTree.js.map +1 -1
- package/dist/simple-tree/{viewSchemaToSimpleSchema.d.ts → api/viewSchemaToSimpleSchema.d.ts} +1 -1
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -0
- package/dist/simple-tree/{viewSchemaToSimpleSchema.js → api/viewSchemaToSimpleSchema.js} +8 -4
- package/dist/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -0
- package/dist/simple-tree/arrayNode.d.ts +2 -2
- package/dist/simple-tree/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/arrayNode.js +30 -21
- package/dist/simple-tree/arrayNode.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +3 -3
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +4 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/schemaCaching.d.ts +5 -0
- package/dist/simple-tree/core/schemaCaching.d.ts.map +1 -1
- package/dist/simple-tree/core/schemaCaching.js +10 -1
- package/dist/simple-tree/core/schemaCaching.js.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.d.ts +61 -3
- package/dist/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeKernel.js +166 -13
- package/dist/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/types.d.ts +17 -20
- package/dist/simple-tree/core/types.d.ts.map +1 -1
- package/dist/simple-tree/core/types.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +3 -2
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/index.d.ts +8 -10
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +15 -6
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +7 -9
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +13 -11
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/mapNode.d.ts +1 -1
- package/dist/simple-tree/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/mapNode.js +38 -29
- package/dist/simple-tree/mapNode.js.map +1 -1
- package/dist/simple-tree/objectNode.d.ts +9 -7
- package/dist/simple-tree/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/objectNode.js +37 -31
- package/dist/simple-tree/objectNode.js.map +1 -1
- package/dist/simple-tree/proxies.d.ts +1 -14
- package/dist/simple-tree/proxies.d.ts.map +1 -1
- package/dist/simple-tree/proxies.js +12 -15
- package/dist/simple-tree/proxies.js.map +1 -1
- package/dist/simple-tree/proxyBinding.d.ts +2 -62
- package/dist/simple-tree/proxyBinding.d.ts.map +1 -1
- package/dist/simple-tree/proxyBinding.js +8 -181
- package/dist/simple-tree/proxyBinding.js.map +1 -1
- package/dist/simple-tree/schemaTypes.d.ts +51 -11
- package/dist/simple-tree/schemaTypes.d.ts.map +1 -1
- package/dist/simple-tree/schemaTypes.js +14 -4
- package/dist/simple-tree/schemaTypes.js.map +1 -1
- package/dist/simple-tree/toFlexSchema.d.ts +11 -1
- package/dist/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/dist/simple-tree/toFlexSchema.js +54 -31
- package/dist/simple-tree/toFlexSchema.js.map +1 -1
- package/dist/simple-tree/toMapTree.d.ts +25 -37
- package/dist/simple-tree/toMapTree.d.ts.map +1 -1
- package/dist/simple-tree/toMapTree.js +53 -16
- package/dist/simple-tree/toMapTree.js.map +1 -1
- package/dist/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/treeNodeValid.js +7 -10
- package/dist/simple-tree/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/typesUnsafe.d.ts +13 -13
- package/dist/simple-tree/typesUnsafe.js.map +1 -1
- package/dist/simple-tree/walkSchema.d.ts +26 -0
- package/dist/simple-tree/walkSchema.d.ts.map +1 -0
- package/dist/simple-tree/walkSchema.js +49 -0
- package/dist/simple-tree/walkSchema.js.map +1 -0
- package/dist/treeFactory.d.ts +2 -1
- package/dist/treeFactory.d.ts.map +1 -1
- package/dist/treeFactory.js +2 -1
- package/dist/treeFactory.js.map +1 -1
- package/dist/util/typeUtils.d.ts +2 -2
- package/dist/util/typeUtils.js.map +1 -1
- package/legacy.d.ts +11 -0
- package/lib/alpha.d.ts +103 -0
- package/lib/beta.d.ts +7 -2
- package/lib/core/index.d.ts +2 -2
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +2 -2
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +1 -0
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +6 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/core/{revertible/revertible.d.ts → revertible.d.ts} +12 -0
- package/lib/core/revertible.d.ts.map +1 -0
- package/lib/core/revertible.js.map +1 -0
- package/lib/core/schema-stored/format.d.ts +3 -3
- package/lib/core/schema-stored/format.js +1 -1
- package/lib/core/schema-stored/format.js.map +1 -1
- package/lib/core/schema-stored/schema.d.ts +2 -7
- package/lib/core/schema-stored/schema.d.ts.map +1 -1
- package/lib/core/schema-stored/schema.js +4 -6
- package/lib/core/schema-stored/schema.js.map +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.d.ts +1 -1
- package/lib/core/schema-stored/storedSchemaRepository.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.d.ts.map +1 -1
- package/lib/core/tree/anchorSet.js +6 -2
- package/lib/core/tree/anchorSet.js.map +1 -1
- package/lib/core/tree/detachedFieldIndex.d.ts +0 -1
- package/lib/core/tree/detachedFieldIndex.d.ts.map +1 -1
- package/lib/core/tree/detachedFieldIndex.js +1 -0
- package/lib/core/tree/detachedFieldIndex.js.map +1 -1
- package/lib/core/tree/visitDelta.d.ts +7 -2
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/events/emitter.d.ts +127 -0
- package/lib/events/emitter.d.ts.map +1 -0
- package/lib/events/{events.js → emitter.js} +48 -29
- package/lib/events/emitter.js.map +1 -0
- package/lib/events/index.d.ts +2 -1
- package/lib/events/index.d.ts.map +1 -1
- package/lib/events/index.js +1 -1
- package/lib/events/index.js.map +1 -1
- package/lib/events/interop.d.ts +36 -0
- package/lib/events/interop.d.ts.map +1 -0
- package/{src/core/revertible/index.ts → lib/events/interop.js} +2 -2
- package/lib/events/interop.js.map +1 -0
- package/lib/events/listeners.d.ts +65 -0
- package/lib/events/listeners.d.ts.map +1 -0
- package/lib/{core/revertible/index.js → events/listeners.js} +2 -2
- package/lib/events/listeners.js.map +1 -0
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts +25 -7
- package/lib/feature-libraries/chunked-forest/chunkTree.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkTree.js +37 -16
- package/lib/feature-libraries/chunked-forest/chunkTree.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts +4 -2
- package/lib/feature-libraries/chunked-forest/chunkedForest.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/chunkedForest.js +12 -5
- package/lib/feature-libraries/chunked-forest/chunkedForest.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts +15 -2
- package/lib/feature-libraries/chunked-forest/uniformChunk.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/uniformChunk.js +28 -2
- package/lib/feature-libraries/chunked-forest/uniformChunk.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +3 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +5 -4
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/flex-map-tree/index.d.ts +1 -1
- package/lib/feature-libraries/flex-map-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-map-tree/index.js +1 -1
- package/lib/feature-libraries/flex-map-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts +35 -33
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js +83 -104
- package/lib/feature-libraries/flex-map-tree/mapTreeNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/context.d.ts +30 -14
- package/lib/feature-libraries/flex-tree/context.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/context.js +10 -7
- package/lib/feature-libraries/flex-tree/context.js.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts +57 -190
- package/lib/feature-libraries/flex-tree/flexTreeTypes.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js +15 -2
- package/lib/feature-libraries/flex-tree/flexTreeTypes.js.map +1 -1
- package/lib/feature-libraries/flex-tree/index.d.ts +2 -3
- package/lib/feature-libraries/flex-tree/index.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/index.js +1 -1
- package/lib/feature-libraries/flex-tree/index.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts +3 -3
- package/lib/feature-libraries/flex-tree/lazyEntity.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyEntity.js +2 -10
- package/lib/feature-libraries/flex-tree/lazyEntity.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.d.ts +26 -28
- package/lib/feature-libraries/flex-tree/lazyField.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyField.js +11 -13
- package/lib/feature-libraries/flex-tree/lazyField.js.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts +5 -26
- package/lib/feature-libraries/flex-tree/lazyNode.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/lazyNode.js +23 -72
- package/lib/feature-libraries/flex-tree/lazyNode.js.map +1 -1
- package/lib/feature-libraries/flex-tree/unboxed.d.ts +4 -16
- package/lib/feature-libraries/flex-tree/unboxed.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/unboxed.js +5 -37
- package/lib/feature-libraries/flex-tree/unboxed.js.map +1 -1
- package/lib/feature-libraries/flex-tree/utilities.d.ts +2 -2
- package/lib/feature-libraries/flex-tree/utilities.d.ts.map +1 -1
- package/lib/feature-libraries/flex-tree/utilities.js +3 -6
- package/lib/feature-libraries/flex-tree/utilities.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +4 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +3 -5
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +5 -5
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/comparison.js +3 -6
- package/lib/feature-libraries/modular-schema/comparison.js.map +1 -1
- package/lib/feature-libraries/modular-schema/discrepancies.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/discrepancies.js +3 -13
- package/lib/feature-libraries/modular-schema/discrepancies.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +4 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +9 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js +74 -23
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/schema-edits/schemaChangeFormat.d.ts +6 -6
- package/lib/feature-libraries/schema-index/format.d.ts +3 -3
- package/lib/feature-libraries/sequence-field/compose.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/compose.js +3 -0
- package/lib/feature-libraries/sequence-field/compose.js.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/utils.js +2 -5
- package/lib/feature-libraries/sequence-field/utils.js.map +1 -1
- package/lib/feature-libraries/storedToViewSchema.d.ts.map +1 -1
- package/lib/feature-libraries/storedToViewSchema.js +3 -5
- package/lib/feature-libraries/storedToViewSchema.js.map +1 -1
- package/lib/feature-libraries/typed-schema/flexList.d.ts +3 -3
- package/lib/feature-libraries/typed-schema/flexList.js.map +1 -1
- package/lib/feature-libraries/typed-schema/index.d.ts +2 -2
- package/lib/feature-libraries/typed-schema/index.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/index.js +2 -2
- package/lib/feature-libraries/typed-schema/index.js.map +1 -1
- package/lib/feature-libraries/typed-schema/schemaCollection.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/schemaCollection.js +9 -11
- package/lib/feature-libraries/typed-schema/schemaCollection.js.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts +17 -48
- package/lib/feature-libraries/typed-schema/typedTreeSchema.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js +5 -36
- package/lib/feature-libraries/typed-schema/typedTreeSchema.js.map +1 -1
- package/lib/feature-libraries/typed-schema/view.d.ts +4 -6
- package/lib/feature-libraries/typed-schema/view.d.ts.map +1 -1
- package/lib/feature-libraries/typed-schema/view.js +5 -4
- package/lib/feature-libraries/typed-schema/view.js.map +1 -1
- package/lib/index.d.ts +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -5
- package/lib/index.js.map +1 -1
- package/lib/legacy.d.ts +84 -0
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/public.d.ts +1 -1
- package/lib/shared-tree/checkoutFlexTreeView.d.ts +53 -0
- package/lib/shared-tree/checkoutFlexTreeView.d.ts.map +1 -0
- package/lib/shared-tree/{treeView.js → checkoutFlexTreeView.js} +26 -5
- package/lib/shared-tree/checkoutFlexTreeView.js.map +1 -0
- package/lib/shared-tree/index.d.ts +3 -3
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +15 -4
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +8 -9
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts +10 -4
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +29 -13
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +2 -2
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.d.ts +3 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeEnricher.js +6 -2
- package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts +3 -1
- package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeChangeFamily.js +3 -2
- package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts +2 -1
- package/lib/shared-tree/sharedTreeEditBuilder.d.ts.map +1 -1
- package/lib/shared-tree/sharedTreeEditBuilder.js +2 -2
- package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
- package/lib/shared-tree/treeApi.d.ts +1 -3
- package/lib/shared-tree/treeApi.d.ts.map +1 -1
- package/lib/shared-tree/treeApi.js +7 -5
- package/lib/shared-tree/treeApi.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +2 -13
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +18 -2
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.js +1 -1
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +2 -2
- package/lib/simple-tree/api/create.js.map +1 -1
- package/{dist/simple-tree → lib/simple-tree/api}/getJsonSchema.d.ts +1 -1
- package/lib/simple-tree/api/getJsonSchema.d.ts.map +1 -0
- package/lib/simple-tree/{getJsonSchema.js → api/getJsonSchema.js} +1 -1
- package/lib/simple-tree/api/getJsonSchema.js.map +1 -0
- package/{dist/simple-tree → lib/simple-tree/api}/getSimpleSchema.d.ts +1 -1
- package/lib/simple-tree/api/getSimpleSchema.d.ts.map +1 -0
- package/lib/simple-tree/{getSimpleSchema.js → api/getSimpleSchema.js} +1 -1
- package/lib/simple-tree/api/getSimpleSchema.js.map +1 -0
- package/lib/simple-tree/api/index.d.ts +5 -0
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +3 -0
- package/lib/simple-tree/api/index.js.map +1 -1
- package/{dist/simple-tree → lib/simple-tree/api}/jsonSchema.d.ts +14 -15
- package/lib/simple-tree/api/jsonSchema.d.ts.map +1 -0
- package/lib/simple-tree/api/jsonSchema.js.map +1 -0
- package/lib/simple-tree/api/schemaFactory.d.ts +53 -16
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +49 -12
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/{simpleSchema.d.ts → api/simpleSchema.d.ts} +8 -4
- package/lib/simple-tree/api/simpleSchema.d.ts.map +1 -0
- package/lib/simple-tree/api/simpleSchema.js.map +1 -0
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.d.ts.map +1 -0
- package/lib/simple-tree/{simpleSchemaToJsonSchema.js → api/simpleSchemaToJsonSchema.js} +35 -22
- package/lib/simple-tree/api/simpleSchemaToJsonSchema.js.map +1 -0
- package/lib/simple-tree/api/tree.d.ts +5 -21
- package/lib/simple-tree/api/tree.d.ts.map +1 -1
- package/lib/simple-tree/api/tree.js +2 -34
- package/lib/simple-tree/api/tree.js.map +1 -1
- package/lib/simple-tree/api/treeApiBeta.d.ts +79 -0
- package/lib/simple-tree/api/treeApiBeta.d.ts.map +1 -0
- package/lib/simple-tree/api/treeApiBeta.js +23 -0
- package/lib/simple-tree/api/treeApiBeta.js.map +1 -0
- package/lib/simple-tree/api/treeNodeApi.d.ts +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +23 -21
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/api/verboseTree.js +1 -1
- package/lib/simple-tree/api/verboseTree.js.map +1 -1
- package/lib/simple-tree/{viewSchemaToSimpleSchema.d.ts → api/viewSchemaToSimpleSchema.d.ts} +1 -1
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.d.ts.map +1 -0
- package/lib/simple-tree/{viewSchemaToSimpleSchema.js → api/viewSchemaToSimpleSchema.js} +8 -4
- package/lib/simple-tree/api/viewSchemaToSimpleSchema.js.map +1 -0
- package/lib/simple-tree/arrayNode.d.ts +2 -2
- package/lib/simple-tree/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/arrayNode.js +33 -24
- package/lib/simple-tree/arrayNode.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +3 -3
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +2 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/schemaCaching.d.ts +5 -0
- package/lib/simple-tree/core/schemaCaching.d.ts.map +1 -1
- package/lib/simple-tree/core/schemaCaching.js +8 -0
- package/lib/simple-tree/core/schemaCaching.js.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.d.ts +61 -3
- package/lib/simple-tree/core/treeNodeKernel.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeKernel.js +156 -5
- package/lib/simple-tree/core/treeNodeKernel.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/types.d.ts +17 -20
- package/lib/simple-tree/core/types.d.ts.map +1 -1
- package/lib/simple-tree/core/types.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +3 -2
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/index.d.ts +8 -10
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +5 -5
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +7 -9
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +14 -12
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/mapNode.d.ts +1 -1
- package/lib/simple-tree/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/mapNode.js +38 -29
- package/lib/simple-tree/mapNode.js.map +1 -1
- package/lib/simple-tree/objectNode.d.ts +9 -7
- package/lib/simple-tree/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/objectNode.js +40 -34
- package/lib/simple-tree/objectNode.js.map +1 -1
- package/lib/simple-tree/proxies.d.ts +1 -14
- package/lib/simple-tree/proxies.d.ts.map +1 -1
- package/lib/simple-tree/proxies.js +11 -14
- package/lib/simple-tree/proxies.js.map +1 -1
- package/lib/simple-tree/proxyBinding.d.ts +2 -62
- package/lib/simple-tree/proxyBinding.d.ts.map +1 -1
- package/lib/simple-tree/proxyBinding.js +6 -174
- package/lib/simple-tree/proxyBinding.js.map +1 -1
- package/lib/simple-tree/schemaTypes.d.ts +51 -11
- package/lib/simple-tree/schemaTypes.d.ts.map +1 -1
- package/lib/simple-tree/schemaTypes.js +14 -4
- package/lib/simple-tree/schemaTypes.js.map +1 -1
- package/lib/simple-tree/toFlexSchema.d.ts +11 -1
- package/lib/simple-tree/toFlexSchema.d.ts.map +1 -1
- package/lib/simple-tree/toFlexSchema.js +29 -8
- package/lib/simple-tree/toFlexSchema.js.map +1 -1
- package/lib/simple-tree/toMapTree.d.ts +25 -37
- package/lib/simple-tree/toMapTree.d.ts.map +1 -1
- package/lib/simple-tree/toMapTree.js +54 -17
- package/lib/simple-tree/toMapTree.js.map +1 -1
- package/lib/simple-tree/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/treeNodeValid.js +8 -11
- package/lib/simple-tree/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/typesUnsafe.d.ts +13 -13
- package/lib/simple-tree/typesUnsafe.js.map +1 -1
- package/lib/simple-tree/walkSchema.d.ts +26 -0
- package/lib/simple-tree/walkSchema.d.ts.map +1 -0
- package/lib/simple-tree/walkSchema.js +43 -0
- package/lib/simple-tree/walkSchema.js.map +1 -0
- package/lib/treeFactory.d.ts +2 -1
- package/lib/treeFactory.d.ts.map +1 -1
- package/lib/treeFactory.js +2 -1
- package/lib/treeFactory.js.map +1 -1
- package/lib/tsdoc-metadata.json +1 -1
- package/lib/util/typeUtils.d.ts +2 -2
- package/lib/util/typeUtils.js.map +1 -1
- package/package.json +68 -26
- package/src/core/index.ts +2 -1
- package/src/core/rebase/index.ts +1 -0
- package/src/core/rebase/types.ts +11 -0
- package/src/core/{revertible/revertible.ts → revertible.ts} +15 -0
- package/src/core/schema-stored/format.ts +1 -1
- package/src/core/schema-stored/schema.ts +7 -13
- package/src/core/tree/anchorSet.ts +18 -3
- package/src/core/tree/detachedFieldIndex.ts +6 -5
- package/src/core/tree/visitDelta.ts +7 -2
- package/src/events/{events.ts → emitter.ts} +52 -139
- package/src/events/index.ts +7 -7
- package/src/events/interop.ts +49 -0
- package/src/events/listeners.ts +68 -0
- package/src/feature-libraries/chunked-forest/chunkTree.ts +63 -18
- package/src/feature-libraries/chunked-forest/chunkedForest.ts +18 -4
- package/src/feature-libraries/chunked-forest/uniformChunk.ts +33 -0
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +5 -3
- package/src/feature-libraries/flex-map-tree/index.ts +1 -0
- package/src/feature-libraries/flex-map-tree/mapTreeNode.ts +135 -210
- package/src/feature-libraries/flex-tree/README.md +4 -75
- package/src/feature-libraries/flex-tree/context.ts +37 -16
- package/src/feature-libraries/flex-tree/flexTreeTypes.ts +69 -291
- package/src/feature-libraries/flex-tree/index.ts +7 -13
- package/src/feature-libraries/flex-tree/lazyEntity.ts +2 -11
- package/src/feature-libraries/flex-tree/lazyField.ts +49 -73
- package/src/feature-libraries/flex-tree/lazyNode.ts +25 -154
- package/src/feature-libraries/flex-tree/unboxed.ts +9 -68
- package/src/feature-libraries/flex-tree/utilities.ts +4 -8
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +4 -1
- package/src/feature-libraries/index.ts +2 -27
- package/src/feature-libraries/modular-schema/comparison.ts +4 -6
- package/src/feature-libraries/modular-schema/discrepancies.ts +7 -16
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +4 -1
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +111 -14
- package/src/feature-libraries/sequence-field/compose.ts +3 -0
- package/src/feature-libraries/sequence-field/utils.ts +2 -4
- package/src/feature-libraries/storedToViewSchema.ts +5 -6
- package/src/feature-libraries/typed-schema/flexList.ts +3 -3
- package/src/feature-libraries/typed-schema/index.ts +1 -3
- package/src/feature-libraries/typed-schema/schemaCollection.ts +15 -17
- package/src/feature-libraries/typed-schema/typedTreeSchema.ts +35 -127
- package/src/feature-libraries/typed-schema/view.ts +4 -13
- package/src/index.ts +5 -8
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/checkoutFlexTreeView.ts +89 -0
- package/src/shared-tree/index.ts +2 -7
- package/src/shared-tree/schematizeTree.ts +23 -12
- package/src/shared-tree/schematizingTreeView.ts +38 -24
- package/src/shared-tree/sharedTree.ts +6 -1
- package/src/shared-tree/sharedTreeChangeEnricher.ts +6 -1
- package/src/shared-tree/sharedTreeChangeFamily.ts +7 -1
- package/src/shared-tree/sharedTreeEditBuilder.ts +9 -4
- package/src/shared-tree/treeApi.ts +10 -10
- package/src/shared-tree/treeCheckout.ts +26 -15
- package/src/shared-tree-core/branch.ts +1 -1
- package/src/simple-tree/ProxyBinding.md +23 -23
- package/src/simple-tree/api/create.ts +8 -3
- package/src/simple-tree/{getJsonSchema.ts → api/getJsonSchema.ts} +3 -3
- package/src/simple-tree/{getSimpleSchema.ts → api/getSimpleSchema.ts} +3 -3
- package/src/simple-tree/api/index.ts +20 -0
- package/src/simple-tree/{jsonSchema.ts → api/jsonSchema.ts} +20 -18
- package/src/simple-tree/api/schemaFactory.ts +56 -19
- package/src/simple-tree/{simpleSchema.ts → api/simpleSchema.ts} +9 -4
- package/src/simple-tree/{simpleSchemaToJsonSchema.ts → api/simpleSchemaToJsonSchema.ts} +43 -22
- package/src/simple-tree/api/tree.ts +7 -71
- package/src/simple-tree/api/treeApiBeta.ts +101 -0
- package/src/simple-tree/api/treeNodeApi.ts +32 -23
- package/src/simple-tree/api/verboseTree.ts +1 -1
- package/src/simple-tree/{viewSchemaToSimpleSchema.ts → api/viewSchemaToSimpleSchema.ts} +11 -6
- package/src/simple-tree/arrayNode.ts +37 -31
- package/src/simple-tree/core/index.ts +4 -1
- package/src/simple-tree/core/schemaCaching.ts +10 -0
- package/src/simple-tree/core/treeNodeKernel.ts +198 -5
- package/src/simple-tree/core/treeNodeSchema.ts +1 -1
- package/src/simple-tree/core/types.ts +16 -27
- package/src/simple-tree/core/withType.ts +3 -1
- package/src/simple-tree/index.ts +30 -21
- package/src/simple-tree/leafNodeSchema.ts +24 -28
- package/src/simple-tree/mapNode.ts +47 -29
- package/src/simple-tree/objectNode.ts +51 -46
- package/src/simple-tree/proxies.ts +22 -51
- package/src/simple-tree/proxyBinding.ts +3 -254
- package/src/simple-tree/schemaTypes.ts +63 -13
- package/src/simple-tree/toFlexSchema.ts +40 -7
- package/src/simple-tree/toMapTree.ts +113 -79
- package/src/simple-tree/treeNodeValid.ts +10 -13
- package/src/simple-tree/typesUnsafe.ts +13 -13
- package/src/simple-tree/walkSchema.ts +81 -0
- package/src/treeFactory.ts +2 -1
- package/src/util/typeUtils.ts +2 -2
- package/dist/core/revertible/index.d.ts.map +0 -1
- package/dist/core/revertible/index.js +0 -10
- package/dist/core/revertible/index.js.map +0 -1
- package/dist/core/revertible/revertible.d.ts.map +0 -1
- package/dist/core/revertible/revertible.js.map +0 -1
- package/dist/domains/index.d.ts +0 -8
- package/dist/domains/index.d.ts.map +0 -1
- package/dist/domains/index.js +0 -20
- package/dist/domains/index.js.map +0 -1
- package/dist/domains/json/index.d.ts +0 -7
- package/dist/domains/json/index.d.ts.map +0 -1
- package/dist/domains/json/index.js +0 -17
- package/dist/domains/json/index.js.map +0 -1
- package/dist/domains/json/jsonCursor.d.ts +0 -52
- package/dist/domains/json/jsonCursor.d.ts.map +0 -1
- package/dist/domains/json/jsonCursor.js +0 -197
- package/dist/domains/json/jsonCursor.js.map +0 -1
- package/dist/domains/json/jsonDomainSchema.d.ts +0 -24
- package/dist/domains/json/jsonDomainSchema.d.ts.map +0 -1
- package/dist/domains/json/jsonDomainSchema.js +0 -32
- package/dist/domains/json/jsonDomainSchema.js.map +0 -1
- package/dist/domains/leafDomain.d.ts +0 -72
- package/dist/domains/leafDomain.d.ts.map +0 -1
- package/dist/domains/leafDomain.js +0 -88
- package/dist/domains/leafDomain.js.map +0 -1
- package/dist/domains/schemaBuilder.d.ts +0 -103
- package/dist/domains/schemaBuilder.d.ts.map +0 -1
- package/dist/domains/schemaBuilder.js +0 -121
- package/dist/domains/schemaBuilder.js.map +0 -1
- package/dist/domains/testRecursiveDomain.d.ts +0 -17
- package/dist/domains/testRecursiveDomain.d.ts.map +0 -1
- package/dist/domains/testRecursiveDomain.js +0 -35
- package/dist/domains/testRecursiveDomain.js.map +0 -1
- package/dist/events/events.d.ts +0 -207
- package/dist/events/events.d.ts.map +0 -1
- package/dist/events/events.js.map +0 -1
- package/dist/feature-libraries/schemaBuilder.d.ts +0 -31
- package/dist/feature-libraries/schemaBuilder.d.ts.map +0 -1
- package/dist/feature-libraries/schemaBuilder.js +0 -40
- package/dist/feature-libraries/schemaBuilder.js.map +0 -1
- package/dist/feature-libraries/schemaBuilderBase.d.ts +0 -191
- package/dist/feature-libraries/schemaBuilderBase.d.ts.map +0 -1
- package/dist/feature-libraries/schemaBuilderBase.js +0 -201
- package/dist/feature-libraries/schemaBuilderBase.js.map +0 -1
- package/dist/shared-tree/treeView.d.ts +0 -73
- package/dist/shared-tree/treeView.d.ts.map +0 -1
- package/dist/shared-tree/treeView.js.map +0 -1
- package/dist/simple-tree/getJsonSchema.d.ts.map +0 -1
- package/dist/simple-tree/getJsonSchema.js.map +0 -1
- package/dist/simple-tree/getSimpleSchema.d.ts.map +0 -1
- package/dist/simple-tree/getSimpleSchema.js.map +0 -1
- package/dist/simple-tree/jsonSchema.d.ts.map +0 -1
- package/dist/simple-tree/jsonSchema.js.map +0 -1
- package/dist/simple-tree/simpleSchema.d.ts.map +0 -1
- package/dist/simple-tree/simpleSchema.js.map +0 -1
- package/dist/simple-tree/simpleSchemaToJsonSchema.d.ts.map +0 -1
- package/dist/simple-tree/simpleSchemaToJsonSchema.js.map +0 -1
- package/dist/simple-tree/viewSchemaToSimpleSchema.d.ts.map +0 -1
- package/dist/simple-tree/viewSchemaToSimpleSchema.js.map +0 -1
- package/lib/core/revertible/index.d.ts.map +0 -1
- package/lib/core/revertible/index.js.map +0 -1
- package/lib/core/revertible/revertible.d.ts.map +0 -1
- package/lib/core/revertible/revertible.js.map +0 -1
- package/lib/domains/index.d.ts +0 -8
- package/lib/domains/index.d.ts.map +0 -1
- package/lib/domains/index.js +0 -8
- package/lib/domains/index.js.map +0 -1
- package/lib/domains/json/index.d.ts +0 -7
- package/lib/domains/json/index.d.ts.map +0 -1
- package/lib/domains/json/index.js +0 -7
- package/lib/domains/json/index.js.map +0 -1
- package/lib/domains/json/jsonCursor.d.ts +0 -52
- package/lib/domains/json/jsonCursor.d.ts.map +0 -1
- package/lib/domains/json/jsonCursor.js +0 -192
- package/lib/domains/json/jsonCursor.js.map +0 -1
- package/lib/domains/json/jsonDomainSchema.d.ts +0 -24
- package/lib/domains/json/jsonDomainSchema.d.ts.map +0 -1
- package/lib/domains/json/jsonDomainSchema.js +0 -29
- package/lib/domains/json/jsonDomainSchema.js.map +0 -1
- package/lib/domains/leafDomain.d.ts +0 -72
- package/lib/domains/leafDomain.d.ts.map +0 -1
- package/lib/domains/leafDomain.js +0 -85
- package/lib/domains/leafDomain.js.map +0 -1
- package/lib/domains/schemaBuilder.d.ts +0 -103
- package/lib/domains/schemaBuilder.d.ts.map +0 -1
- package/lib/domains/schemaBuilder.js +0 -117
- package/lib/domains/schemaBuilder.js.map +0 -1
- package/lib/domains/testRecursiveDomain.d.ts +0 -17
- package/lib/domains/testRecursiveDomain.d.ts.map +0 -1
- package/lib/domains/testRecursiveDomain.js +0 -32
- package/lib/domains/testRecursiveDomain.js.map +0 -1
- package/lib/events/events.d.ts +0 -207
- package/lib/events/events.d.ts.map +0 -1
- package/lib/events/events.js.map +0 -1
- package/lib/feature-libraries/schemaBuilder.d.ts +0 -31
- package/lib/feature-libraries/schemaBuilder.d.ts.map +0 -1
- package/lib/feature-libraries/schemaBuilder.js +0 -36
- package/lib/feature-libraries/schemaBuilder.js.map +0 -1
- package/lib/feature-libraries/schemaBuilderBase.d.ts +0 -191
- package/lib/feature-libraries/schemaBuilderBase.d.ts.map +0 -1
- package/lib/feature-libraries/schemaBuilderBase.js +0 -195
- package/lib/feature-libraries/schemaBuilderBase.js.map +0 -1
- package/lib/shared-tree/treeView.d.ts +0 -73
- package/lib/shared-tree/treeView.d.ts.map +0 -1
- package/lib/shared-tree/treeView.js.map +0 -1
- package/lib/simple-tree/getJsonSchema.d.ts.map +0 -1
- package/lib/simple-tree/getJsonSchema.js.map +0 -1
- package/lib/simple-tree/getSimpleSchema.d.ts.map +0 -1
- package/lib/simple-tree/getSimpleSchema.js.map +0 -1
- package/lib/simple-tree/jsonSchema.d.ts.map +0 -1
- package/lib/simple-tree/jsonSchema.js.map +0 -1
- package/lib/simple-tree/simpleSchema.d.ts.map +0 -1
- package/lib/simple-tree/simpleSchema.js.map +0 -1
- package/lib/simple-tree/simpleSchemaToJsonSchema.d.ts.map +0 -1
- package/lib/simple-tree/simpleSchemaToJsonSchema.js.map +0 -1
- package/lib/simple-tree/viewSchemaToSimpleSchema.d.ts.map +0 -1
- package/lib/simple-tree/viewSchemaToSimpleSchema.js.map +0 -1
- package/src/domains/README.md +0 -6
- package/src/domains/fence.json +0 -5
- package/src/domains/index.ts +0 -19
- package/src/domains/json/fence.json +0 -5
- package/src/domains/json/index.ts +0 -13
- package/src/domains/json/jsonCursor.ts +0 -247
- package/src/domains/json/jsonDomainSchema.ts +0 -47
- package/src/domains/leafDomain.ts +0 -97
- package/src/domains/schemaBuilder.ts +0 -153
- package/src/domains/testRecursiveDomain.ts +0 -38
- package/src/events/fence.json +0 -5
- package/src/feature-libraries/schemaBuilder.ts +0 -45
- package/src/feature-libraries/schemaBuilderBase.ts +0 -393
- package/src/shared-tree/treeView.ts +0 -113
- /package/dist/core/{revertible/revertible.js → revertible.js} +0 -0
- /package/dist/simple-tree/{jsonSchema.js → api/jsonSchema.js} +0 -0
- /package/dist/simple-tree/{simpleSchema.js → api/simpleSchema.js} +0 -0
- /package/dist/simple-tree/{simpleSchemaToJsonSchema.d.ts → api/simpleSchemaToJsonSchema.d.ts} +0 -0
- /package/lib/core/{revertible/revertible.js → revertible.js} +0 -0
- /package/lib/simple-tree/{jsonSchema.js → api/jsonSchema.js} +0 -0
- /package/lib/simple-tree/{simpleSchema.js → api/simpleSchema.js} +0 -0
- /package/lib/simple-tree/{simpleSchemaToJsonSchema.d.ts → api/simpleSchemaToJsonSchema.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/utils.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, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype ChangeAtomId,\n\ttype ChangesetLocalId,\n\ttype RevisionMetadataSource,\n\ttype RevisionTag,\n\tareEqualChangeAtomIds,\n\tmakeChangeAtomId,\n} from \"../../core/index.js\";\nimport { type Mutable, brand, fail } from \"../../util/index.js\";\nimport {\n\tCrossFieldTarget,\n\ttype NodeId,\n\ttype CrossFieldKeyRange,\n} from \"../modular-schema/index.js\";\n\nimport type {\n\tCellRename,\n\tDetachOfRemovedNodes,\n\tEmptyInputCellMark,\n\tMoveMarkEffect,\n} from \"./helperTypes.js\";\nimport {\n\ttype Attach,\n\ttype AttachAndDetach,\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Detach,\n\ttype DetachFields,\n\ttype HasRevisionTag,\n\ttype Insert,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n\ttype Remove,\n\ttype CellCount,\n\ttype Rename,\n} from \"./types.js\";\n\nexport function isEmpty(change: Changeset): boolean {\n\tfor (const mark of change) {\n\t\tif (mark.changes !== undefined || mark.type !== undefined) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nexport function createEmpty(): Changeset {\n\treturn [];\n}\n\nexport function getNestedChanges(change: Changeset): [NodeId, number | undefined][] {\n\tconst output: [NodeId, number | undefined][] = [];\n\tlet index = 0;\n\tfor (const { changes, cellId, count } of change) {\n\t\tif (changes !== undefined) {\n\t\t\toutput.push([changes, cellId === undefined ? index : undefined]);\n\t\t}\n\t\tif (cellId === undefined) {\n\t\t\tindex += count;\n\t\t}\n\t}\n\treturn output;\n}\n\nexport function isNewAttach(mark: Mark, revision?: RevisionTag): boolean {\n\treturn isNewAttachEffect(mark, mark.cellId, revision);\n}\n\nexport function isNewAttachEffect(\n\teffect: MarkEffect,\n\tcellId: CellId | undefined,\n\trevision?: RevisionTag,\n): boolean {\n\treturn (\n\t\t(isAttach(effect) &&\n\t\t\tcellId !== undefined &&\n\t\t\t(effect.revision ?? revision) === (cellId.revision ?? revision)) ||\n\t\t(isAttachAndDetachEffect(effect) && isNewAttachEffect(effect.attach, cellId, revision))\n\t);\n}\n\nexport function isRename(mark: MarkEffect): mark is Rename {\n\treturn mark.type === \"Rename\";\n}\n\nexport function isInsert(mark: MarkEffect): mark is Insert {\n\treturn mark.type === \"Insert\";\n}\n\nexport function isAttach(effect: MarkEffect): effect is Attach {\n\treturn effect.type === \"Insert\" || effect.type === \"MoveIn\";\n}\n\nexport function isReattach(mark: Mark): boolean {\n\treturn isReattachEffect(mark, mark.cellId);\n}\n\nexport function isReattachEffect(effect: MarkEffect, cellId: CellId | undefined): boolean {\n\treturn isAttach(effect) && !isNewAttachEffect(effect, cellId);\n}\n\nexport function isActiveReattach(\n\tmark: Mark,\n): mark is CellMark<Insert> & { conflictsWith?: undefined } {\n\treturn isAttach(mark) && isReattachEffect(mark, mark.cellId) && mark.cellId !== undefined;\n}\n\nexport function areEqualCellIds(a: CellId | undefined, b: CellId | undefined): boolean {\n\tif (a === undefined || b === undefined) {\n\t\treturn a === b;\n\t}\n\treturn areEqualChangeAtomIds(a, b);\n}\n\nexport function getInputCellId(mark: Mark): CellId | undefined {\n\treturn mark.cellId;\n}\n\nexport function getOutputCellId(mark: Mark): CellId | undefined {\n\tif (isDetach(mark) || isRename(mark)) {\n\t\treturn getDetachOutputCellId(mark);\n\t} else if (markFillsCells(mark)) {\n\t\treturn undefined;\n\t} else if (isAttachAndDetachEffect(mark)) {\n\t\treturn getDetachOutputCellId(mark.detach);\n\t}\n\n\treturn getInputCellId(mark);\n}\n\nexport function cellSourcesFromMarks(\n\tmarks: readonly Mark[],\n\tcontextGetter: typeof getInputCellId | typeof getOutputCellId,\n): Set<RevisionTag | undefined> {\n\tconst set = new Set<RevisionTag | undefined>();\n\tfor (const mark of marks) {\n\t\tconst cell = contextGetter(mark);\n\t\tif (cell !== undefined) {\n\t\t\tset.add(cell.revision);\n\t\t}\n\t}\n\treturn set;\n}\n\nexport enum CellOrder {\n\tSameCell,\n\tOldThenNew,\n\tNewThenOld,\n}\n\n/**\n * Determines the order of two cells from two changesets.\n *\n * This function makes the following assumptions:\n * 1. The cells represent the same context.\n * 2. `oldMarkCell` is from a mark in a changeset that is older than the changeset that contains the mark that\n * `newMarkCell` is from.\n * 3. In terms of sequence index, all cells located before A are also located before B,\n * and all cells located before B are also located before A.\n * 4. If a changeset has a mark/tombstone that describes a cell named in some revision R,\n * then that changeset must contain marks/tombstones for all cells named in R as well as all cells named in later\n * revisions up to its own.\n * 5. If a changeset foo is rebased over a changeset bar, then the rebased version of foo must contain tombstones or\n * marks for all cells referenced or named in bar. It has yet to be determined whether this assumption is necessary\n * for the logic below.\n *\n * @param oldMarkCell - The cell referenced or named by a mark or tombstone from the older changeset.\n * @param newMarkCell - The cell referenced or named by a mark or tombstone from the newer changeset.\n * @param oldChangeKnowledge - The set of revisions that the older changeset has cell representations for.\n * @param newChangeKnowledge - The set of revisions that the newer changeset has cell representations for.\n * @param metadata - Revision metadata for the operation being carried out.\n * @returns a {@link CellOrder} which describes how the cells are ordered relative to one-another.\n */\nexport function compareCellPositionsUsingTombstones(\n\toldMarkCell: ChangeAtomId,\n\tnewMarkCell: ChangeAtomId,\n\toldChangeKnowledge: ReadonlySet<RevisionTag | undefined>,\n\tnewChangeKnowledge: ReadonlySet<RevisionTag | undefined>,\n\tmetadata: RevisionMetadataSource,\n): CellOrder {\n\tif (areEqualChangeAtomIds(oldMarkCell, newMarkCell)) {\n\t\treturn CellOrder.SameCell;\n\t}\n\tconst oldChangeKnowsOfNewMarkCellRevision = oldChangeKnowledge.has(newMarkCell.revision);\n\tconst newChangeKnowsOfOldMarkCellRevision = newChangeKnowledge.has(oldMarkCell.revision);\n\tif (oldChangeKnowsOfNewMarkCellRevision && newChangeKnowsOfOldMarkCellRevision) {\n\t\t// If both changesets know of both cells, but we've been asked to compare different cells,\n\t\t// Then either the changesets they originate from do not represent the same context,\n\t\t// or the ordering of their cells in inconsistent.\n\t\t// The only exception to this is when we're composing anonymous changesets in a transaction.\n\t\tassert(\n\t\t\toldMarkCell.revision === undefined && newMarkCell.revision === undefined,\n\t\t\t0x8a0 /* Inconsistent cell ordering */,\n\t\t);\n\t\t// We are composing anonymous changesets in a transaction. The new changeset is creating a cell in a gap\n\t\t// where the old changeset knows of some now empty cell. We order the new cell relative to the old cell in a\n\t\t// way that is consistent with its tie-breaking behavior should the old cell be concurrently re-filled.\n\t\t// Since only tie-break left is supported at the moment, the new cell comes first.\n\t\treturn CellOrder.NewThenOld;\n\t}\n\tif (newChangeKnowsOfOldMarkCellRevision) {\n\t\t// The changeset that contains `newMarkCell` has tombstones for the revision that created `oldMarkCell`,\n\t\t// so a tombstone/mark matching `oldMarkCell` must occur later in the newer changeset.\n\t\treturn CellOrder.NewThenOld;\n\t} else if (oldChangeKnowsOfNewMarkCellRevision) {\n\t\t// The changeset that contains `oldMarkCell` has tombstones for revision that created `newMarkCell`,\n\t\t// so a tombstone/mark matching `newMarkCell` must occur later in the older changeset.\n\t\treturn CellOrder.OldThenNew;\n\t} else {\n\t\t// These cells are only ordered through tie-breaking.\n\t\t// Since tie-breaking is hard-coded to \"merge left\", the younger cell comes first.\n\n\t\t// In the context of compose, an undefined revision means we are composing anonymous changesets into\n\t\t// a transaction, which means the cell from the newer changeset is younger.\n\t\tif (newMarkCell.revision === undefined) {\n\t\t\treturn CellOrder.NewThenOld;\n\t\t}\n\t\t// The only case where the old mark cell should have no revision is when composing anonymous changesets\n\t\t// into a transaction, in which case the new mark cell should also have no revision, which is handled above.\n\t\t// In all other cases, the old mark cell should have a revision.\n\t\tassert(\n\t\t\toldMarkCell.revision !== undefined,\n\t\t\t0x8a1 /* Old mark cell should have a revision */,\n\t\t);\n\n\t\t// Note that these indices are for ordering the revisions in which the cells were named, not the revisions\n\t\t// of the changesets in which the marks targeting these cells appear.\n\t\tconst oldCellRevisionIndex = metadata.getIndex(oldMarkCell.revision);\n\t\tconst newCellRevisionIndex = metadata.getIndex(newMarkCell.revision);\n\n\t\t// If the metadata defines an ordering for the revisions then the cell from the newer revision comes first.\n\t\tif (newCellRevisionIndex !== undefined && oldCellRevisionIndex !== undefined) {\n\t\t\treturn newCellRevisionIndex > oldCellRevisionIndex\n\t\t\t\t? CellOrder.NewThenOld\n\t\t\t\t: CellOrder.OldThenNew;\n\t\t}\n\n\t\tif (newCellRevisionIndex === undefined && oldCellRevisionIndex === undefined) {\n\t\t\t// While it is possible for both marks to refer to cells that were named in revisions that are outside\n\t\t\t// the scope of the metadata, such a scenario should be handled above due to the fact that one of the two\n\t\t\t// changesets should have tombstones or marks for both cells.\n\t\t\t//\n\t\t\t// To see this in the context of rebase, we must consider the lowest common ancestor (LCA) of each change's\n\t\t\t// original (i.e., unrebased) edit with the head of the branch they will both reside on after the rebase.\n\t\t\t// ...─(Ti)─...─(Tj)─...─(old')─(new') <- branch both change will reside on after rebase\n\t\t\t// | └─...─(new)\n\t\t\t// └─...─(old)\n\t\t\t// In the diagram above we can see that by the time `new` is being rebased over `old`, both changesets have\n\t\t\t// been rebased over, and therefore have cell information for, changes `Tj` onwards. This means that one of\n\t\t\t// The two changesets (the `old` one in the diagram above) will have tombstones or marks for any cells that\n\t\t\t// `new` refers to so long as those cells were not created on `new`'s branch.\n\t\t\t// Note that the change that contains the superset of cells (again, ignoring cells created on the other\n\t\t\t// change's branch) is not always the older change. Consider the following scenario:\n\t\t\t// ...─(Ti)─...─(Tj)─...─(old')─(new')\n\t\t\t// | └─...─(old)\n\t\t\t// └─...─(new)\n\t\t\t//\n\t\t\t// The same scenario can arise in the context of compose (just consider composing `old'` and `new'` from\n\t\t\t// the examples above) with the same resolution.\n\t\t\tassert(false, 0x8a2 /* Invalid cell ordering scenario */);\n\t\t}\n\n\t\t// The absence of metadata for a cell with a defined revision means that the cell is from a revision that\n\t\t// predates the edits that are within the scope of the metadata. Such a cell is therefore older than the one\n\t\t// for which we do have metadata.\n\t\treturn oldCellRevisionIndex === undefined ? CellOrder.NewThenOld : CellOrder.OldThenNew;\n\t}\n}\n\n/**\n * @returns the ID of the cell in the output context of the given detach `mark`.\n */\nexport function getDetachOutputCellId(mark: Detach | Rename): ChangeAtomId {\n\tif (isRename(mark)) {\n\t\treturn mark.idOverride;\n\t}\n\tif (mark.idOverride !== undefined) {\n\t\treturn mark.idOverride;\n\t}\n\treturn mark.revision === undefined\n\t\t? { localId: mark.id }\n\t\t: { revision: mark.revision, localId: mark.id };\n}\n\n/**\n * @returns the ID of the detached node in the output context of the given detach `mark`.\n */\nexport function getDetachedNodeId(mark: Detach | Rename): ChangeAtomId {\n\tswitch (mark.type) {\n\t\tcase \"Rename\":\n\t\tcase \"Remove\": {\n\t\t\treturn getDetachOutputCellId(mark);\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\treturn makeChangeAtomId(mark.id, mark.revision);\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(mark);\n\t}\n}\n\n/**\n * Preserves the semantics of the given `mark` but repackages it into a `DetachOfRemovedNodes` when possible.\n */\nexport function normalizeCellRename(\n\tcellId: CellId,\n\tcount: CellCount,\n\tattach: Attach,\n\tdetach: Detach,\n): CellMark<AttachAndDetach | DetachOfRemovedNodes | Rename | NoopMark> {\n\tif (attach.type === \"MoveIn\") {\n\t\tif (detach.type === \"MoveOut\") {\n\t\t\tconst outputId = getDetachOutputCellId(detach);\n\t\t\t// Note that the output ID may be the same as the cellId. In such a scenario,\n\t\t\t// we output an (impact-less) Rename mark anyway (as opposed to a Skip)\n\t\t\t// because the resulting Rename may be rebased over other changes that rename the input cell,\n\t\t\t// eventually leading to an impactful rename.\n\t\t\treturn {\n\t\t\t\ttype: \"Rename\",\n\t\t\t\tcount,\n\t\t\t\tcellId,\n\t\t\t\tidOverride: outputId,\n\t\t\t};\n\t\t}\n\t} else {\n\t\t// Normalization: when the attach is an insert/revive, we rely on the implicit reviving semantics of the\n\t\t// detach instead of using an explicit revive effect in an AttachAndDetach\n\t\treturn {\n\t\t\t...detach,\n\t\t\tcount,\n\t\t\tcellId,\n\t\t};\n\t}\n\treturn {\n\t\ttype: \"AttachAndDetach\",\n\t\tattach,\n\t\tdetach,\n\t\tcount,\n\t\tcellId,\n\t};\n}\n\n/**\n * Preserves the semantics of the given `mark` but repackages it into an `AttachAndDetach` mark if it is not already one.\n */\nexport function asAttachAndDetach(mark: CellMark<CellRename>): CellMark<AttachAndDetach> {\n\tif (mark.type === \"AttachAndDetach\") {\n\t\treturn mark;\n\t}\n\tconst { cellId, count, changes, revision, ...effect } = mark;\n\tconst attachAndDetach: CellMark<AttachAndDetach | Detach> = {\n\t\ttype: \"AttachAndDetach\",\n\t\tcount,\n\t\tcellId,\n\t\tattach: {\n\t\t\ttype: \"Insert\",\n\t\t\tid: mark.id,\n\t\t},\n\t\tdetach: effect,\n\t};\n\tif (changes !== undefined) {\n\t\tattachAndDetach.changes = changes;\n\t}\n\tif (revision !== undefined) {\n\t\tattachAndDetach.attach.revision = revision;\n\t\tattachAndDetach.detach.revision = revision;\n\t}\n\treturn attachAndDetach;\n}\n\nexport function cloneMark<TMark extends Mark>(mark: TMark): TMark {\n\tconst clone: TMark = { ...cloneMarkEffect(mark), count: mark.count };\n\n\tif (mark.cellId !== undefined) {\n\t\tclone.cellId = cloneCellId(mark.cellId);\n\t}\n\treturn clone;\n}\n\nexport function cloneMarkEffect<TEffect extends MarkEffect>(effect: TEffect): TEffect {\n\tconst clone = { ...effect };\n\tif (clone.type === \"AttachAndDetach\") {\n\t\tclone.attach = cloneMarkEffect(clone.attach);\n\t\tclone.detach = cloneMarkEffect(clone.detach);\n\t}\n\treturn clone;\n}\n\nexport function cloneCellId(id: CellId): CellId {\n\tconst cloned = { ...id };\n\treturn cloned;\n}\n\n/**\n * @param mark - The mark to get the length of.\n * @param ignorePairing - When true, the length of a paired mark (e.g. MoveIn/MoveOut) whose matching mark is not active\n * will be treated the same as if the matching mark were active.\n * @returns The number of nodes within the output context of the mark.\n */\nexport function getOutputLength(mark: Mark, ignorePairing: boolean = false): number {\n\treturn areOutputCellsEmpty(mark) ? 0 : mark.count;\n}\n\n/**\n * @param mark - The mark to get the length of.\n * @returns The number of nodes within the input context of the mark.\n */\nexport function getInputLength(mark: Mark): number {\n\treturn areInputCellsEmpty(mark) ? 0 : mark.count;\n}\n\nexport function markEmptiesCells(mark: Mark): boolean {\n\treturn !areInputCellsEmpty(mark) && areOutputCellsEmpty(mark);\n}\n\nexport function markFillsCells(mark: Mark): boolean {\n\treturn areInputCellsEmpty(mark) && !areOutputCellsEmpty(mark);\n}\n\nexport function markHasCellEffect(mark: Mark): boolean {\n\treturn areInputCellsEmpty(mark) !== areOutputCellsEmpty(mark);\n}\n\nexport function isAttachAndDetachEffect(effect: MarkEffect): effect is AttachAndDetach {\n\treturn effect.type === \"AttachAndDetach\";\n}\n\nexport function isDetachOfRemovedNodes(mark: Mark): mark is CellMark<DetachOfRemovedNodes> {\n\treturn isDetach(mark) && mark.cellId !== undefined;\n}\n\nexport function isImpactfulCellRename(mark: Mark): mark is CellMark<CellRename> {\n\treturn (isAttachAndDetachEffect(mark) || isDetachOfRemovedNodes(mark)) && isImpactful(mark);\n}\n\nexport function areInputCellsEmpty(mark: Mark): mark is EmptyInputCellMark {\n\treturn mark.cellId !== undefined;\n}\n\nexport function areOutputCellsEmpty(mark: Mark): boolean {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType:\n\t\t\treturn mark.cellId !== undefined;\n\t\tcase \"Remove\":\n\t\tcase \"Rename\":\n\t\tcase \"MoveOut\":\n\t\tcase \"AttachAndDetach\":\n\t\t\treturn true;\n\t\tcase \"MoveIn\":\n\t\tcase \"Insert\":\n\t\t\treturn false;\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\n/**\n * Creates a mark that is equivalent to the given `mark` but with effects removed if those have no impact in the input\n * context of that mark.\n *\n * @param mark - The mark to settle. Never mutated.\n * @returns either the original mark or a shallow clone of it with effects stripped out.\n */\nexport function settleMark(mark: Mark): Mark {\n\tif (isImpactful(mark)) {\n\t\treturn mark;\n\t}\n\treturn omitMarkEffect(mark);\n}\n\n/**\n * @returns true, iff the given `mark` would have impact on the field when applied.\n * Ignores the impact of nested changes.\n * CellRename effects are considered impactful if they actually change the ID of the cells.\n */\nexport function isImpactful(mark: Mark): boolean {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType:\n\t\t\treturn false;\n\t\tcase \"Rename\":\n\t\t\treturn true;\n\t\tcase \"Remove\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tif (inputId === undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst outputId = getOutputCellId(mark);\n\t\t\tassert(outputId !== undefined, 0x824 /* Remove marks must have an output cell ID */);\n\t\t\treturn !areEqualChangeAtomIds(inputId, outputId);\n\t\t}\n\t\tcase \"AttachAndDetach\":\n\t\tcase \"MoveOut\":\n\t\t\treturn true;\n\t\tcase \"MoveIn\":\n\t\t\t// MoveIn marks always target an empty cell.\n\t\t\tassert(mark.cellId !== undefined, 0x825 /* MoveIn marks should target empty cells */);\n\t\t\treturn true;\n\t\tcase \"Insert\":\n\t\t\t// A Revive has no impact if the nodes are already in the document.\n\t\t\treturn mark.cellId !== undefined;\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\nexport function isTombstone(mark: Mark): mark is CellMark<NoopMark> & { cellId: CellId } {\n\treturn mark.type === NoopMarkType && mark.cellId !== undefined && mark.changes === undefined;\n}\n\nexport function isNoopMark(mark: Mark): mark is CellMark<NoopMark> {\n\treturn mark.type === NoopMarkType;\n}\n\nexport function areOverlappingIdRanges(\n\tid1: ChangesetLocalId,\n\tcount1: number,\n\tid2: ChangesetLocalId,\n\tcount2: number,\n): boolean {\n\tconst lastId1 = (id1 as number) + count1 - 1;\n\tconst lastId2 = (id2 as number) + count2 - 1;\n\treturn (id2 <= id1 && id1 <= lastId2) || (id1 <= id2 && id2 <= lastId1);\n}\n\nexport function compareCellsFromSameRevision(\n\tcell1: CellId,\n\tcount1: number,\n\tcell2: CellId,\n\tcount2: number,\n): number | undefined {\n\tassert(\n\t\tcell1.revision === cell2.revision,\n\t\t0x85b /* Expected cells to have the same revision */,\n\t);\n\tif (areOverlappingIdRanges(cell1.localId, count1, cell2.localId, count2)) {\n\t\treturn cell1.localId - cell2.localId;\n\t}\n\treturn undefined;\n}\n\nexport function isDetach(mark: MarkEffect | undefined): mark is Detach {\n\tconst type = mark?.type;\n\treturn type === \"Remove\" || type === \"MoveOut\";\n}\n\nexport function isRemoveMark(mark: Mark | undefined): mark is CellMark<Remove> {\n\treturn mark?.type === \"Remove\";\n}\n\nfunction areMergeableChangeAtoms(\n\tlhs: ChangeAtomId | undefined,\n\tlhsCount: number,\n\trhs: ChangeAtomId | undefined,\n): boolean {\n\tif (lhs === undefined || rhs === undefined) {\n\t\treturn lhs === undefined && rhs === undefined;\n\t}\n\n\treturn (\n\t\tlhs.revision === rhs.revision && areAdjacentIdRanges(lhs.localId, lhsCount, rhs.localId)\n\t);\n}\n\nfunction areAdjacentIdRanges(\n\tfirstStart: ChangesetLocalId,\n\tfirstLength: number,\n\tsecondStart: ChangesetLocalId,\n): boolean {\n\treturn (firstStart as number) + firstLength === secondStart;\n}\n\nfunction haveMergeableIdOverrides(\n\tlhs: DetachFields,\n\tlhsCount: number,\n\trhs: DetachFields,\n): boolean {\n\tif (lhs.idOverride !== undefined && rhs.idOverride !== undefined) {\n\t\treturn areMergeableCellIds(lhs.idOverride, lhsCount, rhs.idOverride);\n\t}\n\treturn (lhs.idOverride === undefined) === (rhs.idOverride === undefined);\n}\n\nfunction areMergeableCellIds(\n\tlhs: CellId | undefined,\n\tlhsCount: number,\n\trhs: CellId | undefined,\n): boolean {\n\treturn areMergeableChangeAtoms(lhs, lhsCount, rhs);\n}\n\n/**\n * Attempts to extend `lhs` to include the effects of `rhs`.\n * @param lhs - The mark to extend.\n * @param rhs - The effect so extend `rhs` with.\n * @returns `lhs` iff the function was able to mutate `lhs` to include the effects of `rhs`.\n * When `undefined` is returned, `lhs` is left untouched.\n */\nexport function tryMergeMarks(lhs: Mark, rhs: Readonly<Mark>): Mark | undefined {\n\tif (rhs.type !== lhs.type) {\n\t\treturn undefined;\n\t}\n\n\tif (!areMergeableCellIds(lhs.cellId, lhs.count, rhs.cellId)) {\n\t\treturn undefined;\n\t}\n\n\tif (rhs.changes !== undefined || lhs.changes !== undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst mergedEffect = tryMergeEffects(lhs, rhs, lhs.count);\n\tif (mergedEffect === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn { ...lhs, ...mergedEffect, count: lhs.count + rhs.count };\n}\n\nfunction tryMergeEffects(\n\tlhs: MarkEffect,\n\trhs: MarkEffect,\n\tlhsCount: number,\n): MarkEffect | undefined {\n\tif (lhs.type !== rhs.type) {\n\t\treturn undefined;\n\t}\n\n\tif (rhs.type === NoopMarkType) {\n\t\treturn lhs;\n\t}\n\n\tif (rhs.type === \"AttachAndDetach\") {\n\t\tconst lhsAttachAndDetach = lhs as AttachAndDetach;\n\t\tconst attach = tryMergeEffects(lhsAttachAndDetach.attach, rhs.attach, lhsCount);\n\t\tconst detach = tryMergeEffects(lhsAttachAndDetach.detach, rhs.detach, lhsCount);\n\t\tif (attach === undefined || detach === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tassert(\n\t\t\tisAttach(attach) && isDetach(detach),\n\t\t\t0x826 /* Merged marks should be same type as input marks */,\n\t\t);\n\t\treturn { ...lhsAttachAndDetach, attach, detach };\n\t}\n\n\tif (\n\t\t(lhs as Partial<HasRevisionTag>).revision !== (rhs as Partial<HasRevisionTag>).revision\n\t) {\n\t\treturn undefined;\n\t}\n\n\tif (isDetach(lhs) && isDetach(rhs) && !haveMergeableIdOverrides(lhs, lhsCount, rhs)) {\n\t\treturn undefined;\n\t}\n\n\tconst type = rhs.type;\n\tswitch (type) {\n\t\tcase \"MoveIn\": {\n\t\t\tconst lhsMoveIn = lhs as MoveIn;\n\t\t\tif (\n\t\t\t\t(lhsMoveIn.id as number) + lhsCount === rhs.id &&\n\t\t\t\tareMergeableChangeAtoms(lhsMoveIn.finalEndpoint, lhsCount, rhs.finalEndpoint)\n\t\t\t) {\n\t\t\t\treturn lhsMoveIn;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tconst lhsDetach = lhs as Remove;\n\t\t\tif (\n\t\t\t\t(lhsDetach.id as number) + lhsCount === rhs.id &&\n\t\t\t\thaveMergeableIdOverrides(lhsDetach, lhsCount, rhs)\n\t\t\t) {\n\t\t\t\treturn lhsDetach;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Rename\": {\n\t\t\tconst lhsDetach = lhs as Rename;\n\t\t\tif (haveMergeableIdOverrides(lhsDetach, lhsCount, rhs)) {\n\t\t\t\treturn lhsDetach;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\tconst lhsMoveOut = lhs as MoveOut;\n\t\t\tif (\n\t\t\t\t(lhsMoveOut.id as number) + lhsCount === rhs.id &&\n\t\t\t\thaveMergeableIdOverrides(lhsMoveOut, lhsCount, rhs) &&\n\t\t\t\tareMergeableChangeAtoms(lhsMoveOut.finalEndpoint, lhsCount, rhs.finalEndpoint)\n\t\t\t) {\n\t\t\t\treturn lhsMoveOut;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\tconst lhsInsert = lhs as Insert;\n\t\t\tif ((lhsInsert.id as number) + lhsCount === rhs.id) {\n\t\t\t\treturn lhsInsert;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Splits the `mark` into two marks such that the first returned mark has length `length`.\n * @param mark - The mark to split.\n * @param revision - The revision of the changeset the mark is part of.\n * @param length - The desired length for the first of the two returned marks.\n * @param genId - An ID allocator\n * @param moveEffects - The table in which to record splitting of move marks\n * @param recordMoveEffect - Whether when splitting a move an entry should be added to `moveEffects` indicating that the mark should be split (in case we process this mark again).\n * An entry is always added to `moveEffects` indicating that the opposite end of the move should be split.\n * @returns A pair of marks equivalent to the original `mark`\n * such that the first returned mark has input length `length`.\n */\nexport function splitMark<TMark extends Mark>(mark: TMark, length: number): [TMark, TMark] {\n\tconst markLength = mark.count;\n\tconst remainder = markLength - length;\n\tif (length < 1 || remainder < 1) {\n\t\tfail(\"Unable to split mark due to lengths\");\n\t}\n\n\tconst [effect1, effect2] = splitMarkEffect(mark, length);\n\tconst mark1 = { ...mark, ...effect1, count: length };\n\tconst mark2 = { ...mark, ...effect2, count: remainder };\n\tif (mark2.cellId !== undefined) {\n\t\tmark2.cellId = splitDetachEvent(mark2.cellId, length);\n\t}\n\n\treturn [mark1, mark2];\n}\n\nexport function splitMarkEffect<TEffect extends MarkEffect>(\n\teffect: TEffect,\n\tlength: number,\n): [TEffect, TEffect] {\n\tconst type = effect.type;\n\tswitch (type) {\n\t\tcase NoopMarkType:\n\t\t\treturn [effect, effect];\n\t\tcase \"Insert\": {\n\t\t\tconst effect1: TEffect = {\n\t\t\t\t...effect,\n\t\t\t};\n\t\t\tconst effect2: TEffect = {\n\t\t\t\t...effect,\n\t\t\t\tid: (effect.id as number) + length,\n\t\t\t};\n\t\t\treturn [effect1, effect2];\n\t\t}\n\t\tcase \"MoveIn\": {\n\t\t\tconst effect2: TEffect = { ...effect, id: (effect.id as number) + length };\n\t\t\tconst move2 = effect2 as MoveIn;\n\t\t\tif (move2.finalEndpoint !== undefined) {\n\t\t\t\tmove2.finalEndpoint = splitDetachEvent(move2.finalEndpoint, length);\n\t\t\t}\n\t\t\treturn [effect, effect2];\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tconst effect1 = { ...effect };\n\t\t\tconst id2: ChangesetLocalId = brand((effect.id as number) + length);\n\t\t\tconst effect2 = { ...effect, id: id2 };\n\t\t\tconst effect2Remove = effect2 as Mutable<Remove>;\n\t\t\tif (effect2Remove.idOverride !== undefined) {\n\t\t\t\teffect2Remove.idOverride = splitDetachEvent(effect2Remove.idOverride, length);\n\t\t\t}\n\t\t\treturn [effect1, effect2];\n\t\t}\n\t\tcase \"Rename\": {\n\t\t\tconst effect1 = { ...effect };\n\t\t\tconst effect2 = { ...effect };\n\t\t\tconst effect2Rename = effect2 as Mutable<Rename>;\n\t\t\tif (effect2Rename.idOverride !== undefined) {\n\t\t\t\teffect2Rename.idOverride = splitDetachEvent(effect2Rename.idOverride, length);\n\t\t\t}\n\t\t\treturn [effect1, effect2];\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\tconst effect2 = {\n\t\t\t\t...effect,\n\t\t\t\tid: (effect.id as number) + length,\n\t\t\t};\n\n\t\t\tconst return2 = effect2 as Mutable<MoveOut>;\n\n\t\t\tif (return2.idOverride !== undefined) {\n\t\t\t\treturn2.idOverride = splitDetachEvent(return2.idOverride, length);\n\t\t\t}\n\n\t\t\tif (return2.finalEndpoint !== undefined) {\n\t\t\t\treturn2.finalEndpoint = splitDetachEvent(return2.finalEndpoint, length);\n\t\t\t}\n\t\t\treturn [effect, effect2];\n\t\t}\n\t\tcase \"AttachAndDetach\": {\n\t\t\tconst [attach1, attach2] = splitMarkEffect(effect.attach, length);\n\t\t\tconst [detach1, detach2] = splitMarkEffect(effect.detach, length);\n\t\t\tconst effect1 = {\n\t\t\t\t...effect,\n\t\t\t\tattach: attach1,\n\t\t\t\tdetach: detach1,\n\t\t\t};\n\n\t\t\tconst effect2 = {\n\t\t\t\t...effect,\n\t\t\t\tattach: attach2,\n\t\t\t\tdetach: detach2,\n\t\t\t};\n\n\t\t\treturn [effect1, effect2];\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\nfunction splitDetachEvent(detachEvent: CellId, length: number): CellId {\n\treturn { ...detachEvent, localId: brand((detachEvent.localId as number) + length) };\n}\n\n// TODO: Refactor MarkEffect into a field of CellMark so this function isn't necessary.\nexport function extractMarkEffect<TEffect extends MarkEffect>(\n\tmark: CellMark<TEffect>,\n): TEffect {\n\tconst { cellId: _cellId, count: _count, changes: _changes, ...effect } = mark;\n\treturn effect as unknown as TEffect;\n}\n\n// TODO: Refactor MarkEffect into a field of CellMark so this function isn't necessary.\nexport function omitMarkEffect(mark: CellMark<unknown>): CellMark<NoopMark> {\n\tconst { cellId, count, changes } = mark;\n\tconst noopMark: CellMark<NoopMark> = { count };\n\tif (cellId !== undefined) {\n\t\tnoopMark.cellId = cellId;\n\t}\n\tif (changes !== undefined) {\n\t\tnoopMark.changes = changes;\n\t}\n\treturn noopMark;\n}\n\nexport function withNodeChange<TMark extends CellMark<TKind>, TKind extends MarkEffect>(\n\tmark: TMark,\n\tchanges: NodeId | undefined,\n): TMark {\n\tconst newMark = { ...mark };\n\tif (changes !== undefined) {\n\t\tnewMark.changes = changes;\n\t} else {\n\t\tdelete newMark.changes;\n\t}\n\treturn newMark;\n}\n\nexport function withRevision<TMark extends Mark>(\n\tmark: TMark,\n\trevision: RevisionTag | undefined,\n): TMark {\n\tif (revision === undefined) {\n\t\treturn mark;\n\t}\n\n\tconst cloned = cloneMark(mark);\n\taddRevision(cloned, revision);\n\tif (\n\t\tcloned.cellId !== undefined &&\n\t\tcloned.cellId.revision === undefined &&\n\t\trevision !== undefined\n\t) {\n\t\t(cloned.cellId as Mutable<CellId>).revision = revision;\n\t}\n\treturn cloned;\n}\n\nfunction addRevision(effect: MarkEffect, revision: RevisionTag): void {\n\tif (effect.type === NoopMarkType || isRename(effect)) {\n\t\treturn;\n\t}\n\n\tif (effect.type === \"AttachAndDetach\") {\n\t\taddRevision(effect.attach, revision);\n\t\taddRevision(effect.detach, revision);\n\t\treturn;\n\t}\n\n\tassert(\n\t\teffect.revision === undefined || effect.revision === revision,\n\t\t0x829 /* Should not overwrite mark revision */,\n\t);\n\teffect.revision = revision;\n}\n\nexport function getEndpoint(effect: MoveMarkEffect): ChangeAtomId {\n\treturn effect.finalEndpoint ?? { revision: effect.revision, localId: effect.id };\n}\n\nexport function getCrossFieldKeys(change: Changeset): CrossFieldKeyRange[] {\n\tconst keys: CrossFieldKeyRange[] = [];\n\tfor (const mark of change) {\n\t\tkeys.push(...getCrossFieldKeysForMarkEffect(mark, mark.count));\n\t}\n\n\treturn keys;\n}\n\nfunction getCrossFieldKeysForMarkEffect(\n\teffect: MarkEffect,\n\tcount: number,\n): CrossFieldKeyRange[] {\n\tswitch (effect.type) {\n\t\tcase \"Insert\":\n\t\t\t// An insert behaves like a move where the source and destination are at the same location.\n\t\t\t// An insert can become a move when after rebasing.\n\t\t\treturn [\n\t\t\t\t[CrossFieldTarget.Source, effect.revision, effect.id, count],\n\t\t\t\t[CrossFieldTarget.Destination, effect.revision, effect.id, count],\n\t\t\t];\n\t\tcase \"MoveOut\":\n\t\t\treturn [[CrossFieldTarget.Source, effect.revision, effect.id, count]];\n\t\tcase \"MoveIn\":\n\t\t\treturn [[CrossFieldTarget.Destination, effect.revision, effect.id, count]];\n\t\tcase \"AttachAndDetach\":\n\t\t\treturn [\n\t\t\t\t...getCrossFieldKeysForMarkEffect(effect.attach, count),\n\t\t\t\t...getCrossFieldKeysForMarkEffect(effect.detach, count),\n\t\t\t];\n\t\tdefault:\n\t\t\treturn [];\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/feature-libraries/sequence-field/utils.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, unreachableCase } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype ChangeAtomId,\n\ttype ChangesetLocalId,\n\ttype RevisionMetadataSource,\n\ttype RevisionTag,\n\tareEqualChangeAtomIdOpts,\n\tareEqualChangeAtomIds,\n\tmakeChangeAtomId,\n} from \"../../core/index.js\";\nimport { type Mutable, brand, fail } from \"../../util/index.js\";\nimport {\n\tCrossFieldTarget,\n\ttype NodeId,\n\ttype CrossFieldKeyRange,\n} from \"../modular-schema/index.js\";\n\nimport type {\n\tCellRename,\n\tDetachOfRemovedNodes,\n\tEmptyInputCellMark,\n\tMoveMarkEffect,\n} from \"./helperTypes.js\";\nimport {\n\ttype Attach,\n\ttype AttachAndDetach,\n\ttype CellId,\n\ttype CellMark,\n\ttype Changeset,\n\ttype Detach,\n\ttype DetachFields,\n\ttype HasRevisionTag,\n\ttype Insert,\n\ttype Mark,\n\ttype MarkEffect,\n\ttype MoveIn,\n\ttype MoveOut,\n\ttype NoopMark,\n\tNoopMarkType,\n\ttype Remove,\n\ttype CellCount,\n\ttype Rename,\n} from \"./types.js\";\n\nexport function isEmpty(change: Changeset): boolean {\n\tfor (const mark of change) {\n\t\tif (mark.changes !== undefined || mark.type !== undefined) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nexport function createEmpty(): Changeset {\n\treturn [];\n}\n\nexport function getNestedChanges(change: Changeset): [NodeId, number | undefined][] {\n\tconst output: [NodeId, number | undefined][] = [];\n\tlet index = 0;\n\tfor (const { changes, cellId, count } of change) {\n\t\tif (changes !== undefined) {\n\t\t\toutput.push([changes, cellId === undefined ? index : undefined]);\n\t\t}\n\t\tif (cellId === undefined) {\n\t\t\tindex += count;\n\t\t}\n\t}\n\treturn output;\n}\n\nexport function isNewAttach(mark: Mark, revision?: RevisionTag): boolean {\n\treturn isNewAttachEffect(mark, mark.cellId, revision);\n}\n\nexport function isNewAttachEffect(\n\teffect: MarkEffect,\n\tcellId: CellId | undefined,\n\trevision?: RevisionTag,\n): boolean {\n\treturn (\n\t\t(isAttach(effect) &&\n\t\t\tcellId !== undefined &&\n\t\t\t(effect.revision ?? revision) === (cellId.revision ?? revision)) ||\n\t\t(isAttachAndDetachEffect(effect) && isNewAttachEffect(effect.attach, cellId, revision))\n\t);\n}\n\nexport function isRename(mark: MarkEffect): mark is Rename {\n\treturn mark.type === \"Rename\";\n}\n\nexport function isInsert(mark: MarkEffect): mark is Insert {\n\treturn mark.type === \"Insert\";\n}\n\nexport function isAttach(effect: MarkEffect): effect is Attach {\n\treturn effect.type === \"Insert\" || effect.type === \"MoveIn\";\n}\n\nexport function isReattach(mark: Mark): boolean {\n\treturn isReattachEffect(mark, mark.cellId);\n}\n\nexport function isReattachEffect(effect: MarkEffect, cellId: CellId | undefined): boolean {\n\treturn isAttach(effect) && !isNewAttachEffect(effect, cellId);\n}\n\nexport function isActiveReattach(\n\tmark: Mark,\n): mark is CellMark<Insert> & { conflictsWith?: undefined } {\n\treturn isAttach(mark) && isReattachEffect(mark, mark.cellId) && mark.cellId !== undefined;\n}\n\nexport function areEqualCellIds(a: CellId | undefined, b: CellId | undefined): boolean {\n\treturn areEqualChangeAtomIdOpts(a, b);\n}\n\nexport function getInputCellId(mark: Mark): CellId | undefined {\n\treturn mark.cellId;\n}\n\nexport function getOutputCellId(mark: Mark): CellId | undefined {\n\tif (isDetach(mark) || isRename(mark)) {\n\t\treturn getDetachOutputCellId(mark);\n\t} else if (markFillsCells(mark)) {\n\t\treturn undefined;\n\t} else if (isAttachAndDetachEffect(mark)) {\n\t\treturn getDetachOutputCellId(mark.detach);\n\t}\n\n\treturn getInputCellId(mark);\n}\n\nexport function cellSourcesFromMarks(\n\tmarks: readonly Mark[],\n\tcontextGetter: typeof getInputCellId | typeof getOutputCellId,\n): Set<RevisionTag | undefined> {\n\tconst set = new Set<RevisionTag | undefined>();\n\tfor (const mark of marks) {\n\t\tconst cell = contextGetter(mark);\n\t\tif (cell !== undefined) {\n\t\t\tset.add(cell.revision);\n\t\t}\n\t}\n\treturn set;\n}\n\nexport enum CellOrder {\n\tSameCell,\n\tOldThenNew,\n\tNewThenOld,\n}\n\n/**\n * Determines the order of two cells from two changesets.\n *\n * This function makes the following assumptions:\n * 1. The cells represent the same context.\n * 2. `oldMarkCell` is from a mark in a changeset that is older than the changeset that contains the mark that\n * `newMarkCell` is from.\n * 3. In terms of sequence index, all cells located before A are also located before B,\n * and all cells located before B are also located before A.\n * 4. If a changeset has a mark/tombstone that describes a cell named in some revision R,\n * then that changeset must contain marks/tombstones for all cells named in R as well as all cells named in later\n * revisions up to its own.\n * 5. If a changeset foo is rebased over a changeset bar, then the rebased version of foo must contain tombstones or\n * marks for all cells referenced or named in bar. It has yet to be determined whether this assumption is necessary\n * for the logic below.\n *\n * @param oldMarkCell - The cell referenced or named by a mark or tombstone from the older changeset.\n * @param newMarkCell - The cell referenced or named by a mark or tombstone from the newer changeset.\n * @param oldChangeKnowledge - The set of revisions that the older changeset has cell representations for.\n * @param newChangeKnowledge - The set of revisions that the newer changeset has cell representations for.\n * @param metadata - Revision metadata for the operation being carried out.\n * @returns a {@link CellOrder} which describes how the cells are ordered relative to one-another.\n */\nexport function compareCellPositionsUsingTombstones(\n\toldMarkCell: ChangeAtomId,\n\tnewMarkCell: ChangeAtomId,\n\toldChangeKnowledge: ReadonlySet<RevisionTag | undefined>,\n\tnewChangeKnowledge: ReadonlySet<RevisionTag | undefined>,\n\tmetadata: RevisionMetadataSource,\n): CellOrder {\n\tif (areEqualChangeAtomIds(oldMarkCell, newMarkCell)) {\n\t\treturn CellOrder.SameCell;\n\t}\n\tconst oldChangeKnowsOfNewMarkCellRevision = oldChangeKnowledge.has(newMarkCell.revision);\n\tconst newChangeKnowsOfOldMarkCellRevision = newChangeKnowledge.has(oldMarkCell.revision);\n\tif (oldChangeKnowsOfNewMarkCellRevision && newChangeKnowsOfOldMarkCellRevision) {\n\t\t// If both changesets know of both cells, but we've been asked to compare different cells,\n\t\t// Then either the changesets they originate from do not represent the same context,\n\t\t// or the ordering of their cells in inconsistent.\n\t\t// The only exception to this is when we're composing anonymous changesets in a transaction.\n\t\tassert(\n\t\t\toldMarkCell.revision === undefined && newMarkCell.revision === undefined,\n\t\t\t0x8a0 /* Inconsistent cell ordering */,\n\t\t);\n\t\t// We are composing anonymous changesets in a transaction. The new changeset is creating a cell in a gap\n\t\t// where the old changeset knows of some now empty cell. We order the new cell relative to the old cell in a\n\t\t// way that is consistent with its tie-breaking behavior should the old cell be concurrently re-filled.\n\t\t// Since only tie-break left is supported at the moment, the new cell comes first.\n\t\treturn CellOrder.NewThenOld;\n\t}\n\tif (newChangeKnowsOfOldMarkCellRevision) {\n\t\t// The changeset that contains `newMarkCell` has tombstones for the revision that created `oldMarkCell`,\n\t\t// so a tombstone/mark matching `oldMarkCell` must occur later in the newer changeset.\n\t\treturn CellOrder.NewThenOld;\n\t} else if (oldChangeKnowsOfNewMarkCellRevision) {\n\t\t// The changeset that contains `oldMarkCell` has tombstones for revision that created `newMarkCell`,\n\t\t// so a tombstone/mark matching `newMarkCell` must occur later in the older changeset.\n\t\treturn CellOrder.OldThenNew;\n\t} else {\n\t\t// These cells are only ordered through tie-breaking.\n\t\t// Since tie-breaking is hard-coded to \"merge left\", the younger cell comes first.\n\n\t\t// In the context of compose, an undefined revision means we are composing anonymous changesets into\n\t\t// a transaction, which means the cell from the newer changeset is younger.\n\t\tif (newMarkCell.revision === undefined) {\n\t\t\treturn CellOrder.NewThenOld;\n\t\t}\n\t\t// The only case where the old mark cell should have no revision is when composing anonymous changesets\n\t\t// into a transaction, in which case the new mark cell should also have no revision, which is handled above.\n\t\t// In all other cases, the old mark cell should have a revision.\n\t\tassert(\n\t\t\toldMarkCell.revision !== undefined,\n\t\t\t0x8a1 /* Old mark cell should have a revision */,\n\t\t);\n\n\t\t// Note that these indices are for ordering the revisions in which the cells were named, not the revisions\n\t\t// of the changesets in which the marks targeting these cells appear.\n\t\tconst oldCellRevisionIndex = metadata.getIndex(oldMarkCell.revision);\n\t\tconst newCellRevisionIndex = metadata.getIndex(newMarkCell.revision);\n\n\t\t// If the metadata defines an ordering for the revisions then the cell from the newer revision comes first.\n\t\tif (newCellRevisionIndex !== undefined && oldCellRevisionIndex !== undefined) {\n\t\t\treturn newCellRevisionIndex > oldCellRevisionIndex\n\t\t\t\t? CellOrder.NewThenOld\n\t\t\t\t: CellOrder.OldThenNew;\n\t\t}\n\n\t\tif (newCellRevisionIndex === undefined && oldCellRevisionIndex === undefined) {\n\t\t\t// While it is possible for both marks to refer to cells that were named in revisions that are outside\n\t\t\t// the scope of the metadata, such a scenario should be handled above due to the fact that one of the two\n\t\t\t// changesets should have tombstones or marks for both cells.\n\t\t\t//\n\t\t\t// To see this in the context of rebase, we must consider the lowest common ancestor (LCA) of each change's\n\t\t\t// original (i.e., unrebased) edit with the head of the branch they will both reside on after the rebase.\n\t\t\t// ...─(Ti)─...─(Tj)─...─(old')─(new') <- branch both change will reside on after rebase\n\t\t\t// | └─...─(new)\n\t\t\t// └─...─(old)\n\t\t\t// In the diagram above we can see that by the time `new` is being rebased over `old`, both changesets have\n\t\t\t// been rebased over, and therefore have cell information for, changes `Tj` onwards. This means that one of\n\t\t\t// The two changesets (the `old` one in the diagram above) will have tombstones or marks for any cells that\n\t\t\t// `new` refers to so long as those cells were not created on `new`'s branch.\n\t\t\t// Note that the change that contains the superset of cells (again, ignoring cells created on the other\n\t\t\t// change's branch) is not always the older change. Consider the following scenario:\n\t\t\t// ...─(Ti)─...─(Tj)─...─(old')─(new')\n\t\t\t// | └─...─(old)\n\t\t\t// └─...─(new)\n\t\t\t//\n\t\t\t// The same scenario can arise in the context of compose (just consider composing `old'` and `new'` from\n\t\t\t// the examples above) with the same resolution.\n\t\t\tassert(false, 0x8a2 /* Invalid cell ordering scenario */);\n\t\t}\n\n\t\t// The absence of metadata for a cell with a defined revision means that the cell is from a revision that\n\t\t// predates the edits that are within the scope of the metadata. Such a cell is therefore older than the one\n\t\t// for which we do have metadata.\n\t\treturn oldCellRevisionIndex === undefined ? CellOrder.NewThenOld : CellOrder.OldThenNew;\n\t}\n}\n\n/**\n * @returns the ID of the cell in the output context of the given detach `mark`.\n */\nexport function getDetachOutputCellId(mark: Detach | Rename): ChangeAtomId {\n\tif (isRename(mark)) {\n\t\treturn mark.idOverride;\n\t}\n\tif (mark.idOverride !== undefined) {\n\t\treturn mark.idOverride;\n\t}\n\treturn mark.revision === undefined\n\t\t? { localId: mark.id }\n\t\t: { revision: mark.revision, localId: mark.id };\n}\n\n/**\n * @returns the ID of the detached node in the output context of the given detach `mark`.\n */\nexport function getDetachedNodeId(mark: Detach | Rename): ChangeAtomId {\n\tswitch (mark.type) {\n\t\tcase \"Rename\":\n\t\tcase \"Remove\": {\n\t\t\treturn getDetachOutputCellId(mark);\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\treturn makeChangeAtomId(mark.id, mark.revision);\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(mark);\n\t}\n}\n\n/**\n * Preserves the semantics of the given `mark` but repackages it into a `DetachOfRemovedNodes` when possible.\n */\nexport function normalizeCellRename(\n\tcellId: CellId,\n\tcount: CellCount,\n\tattach: Attach,\n\tdetach: Detach,\n): CellMark<AttachAndDetach | DetachOfRemovedNodes | Rename | NoopMark> {\n\tif (attach.type === \"MoveIn\") {\n\t\tif (detach.type === \"MoveOut\") {\n\t\t\tconst outputId = getDetachOutputCellId(detach);\n\t\t\t// Note that the output ID may be the same as the cellId. In such a scenario,\n\t\t\t// we output an (impact-less) Rename mark anyway (as opposed to a Skip)\n\t\t\t// because the resulting Rename may be rebased over other changes that rename the input cell,\n\t\t\t// eventually leading to an impactful rename.\n\t\t\treturn {\n\t\t\t\ttype: \"Rename\",\n\t\t\t\tcount,\n\t\t\t\tcellId,\n\t\t\t\tidOverride: outputId,\n\t\t\t};\n\t\t}\n\t} else {\n\t\t// Normalization: when the attach is an insert/revive, we rely on the implicit reviving semantics of the\n\t\t// detach instead of using an explicit revive effect in an AttachAndDetach\n\t\treturn {\n\t\t\t...detach,\n\t\t\tcount,\n\t\t\tcellId,\n\t\t};\n\t}\n\treturn {\n\t\ttype: \"AttachAndDetach\",\n\t\tattach,\n\t\tdetach,\n\t\tcount,\n\t\tcellId,\n\t};\n}\n\n/**\n * Preserves the semantics of the given `mark` but repackages it into an `AttachAndDetach` mark if it is not already one.\n */\nexport function asAttachAndDetach(mark: CellMark<CellRename>): CellMark<AttachAndDetach> {\n\tif (mark.type === \"AttachAndDetach\") {\n\t\treturn mark;\n\t}\n\tconst { cellId, count, changes, revision, ...effect } = mark;\n\tconst attachAndDetach: CellMark<AttachAndDetach | Detach> = {\n\t\ttype: \"AttachAndDetach\",\n\t\tcount,\n\t\tcellId,\n\t\tattach: {\n\t\t\ttype: \"Insert\",\n\t\t\tid: mark.id,\n\t\t},\n\t\tdetach: effect,\n\t};\n\tif (changes !== undefined) {\n\t\tattachAndDetach.changes = changes;\n\t}\n\tif (revision !== undefined) {\n\t\tattachAndDetach.attach.revision = revision;\n\t\tattachAndDetach.detach.revision = revision;\n\t}\n\treturn attachAndDetach;\n}\n\nexport function cloneMark<TMark extends Mark>(mark: TMark): TMark {\n\tconst clone: TMark = { ...cloneMarkEffect(mark), count: mark.count };\n\n\tif (mark.cellId !== undefined) {\n\t\tclone.cellId = cloneCellId(mark.cellId);\n\t}\n\treturn clone;\n}\n\nexport function cloneMarkEffect<TEffect extends MarkEffect>(effect: TEffect): TEffect {\n\tconst clone = { ...effect };\n\tif (clone.type === \"AttachAndDetach\") {\n\t\tclone.attach = cloneMarkEffect(clone.attach);\n\t\tclone.detach = cloneMarkEffect(clone.detach);\n\t}\n\treturn clone;\n}\n\nexport function cloneCellId(id: CellId): CellId {\n\tconst cloned = { ...id };\n\treturn cloned;\n}\n\n/**\n * @param mark - The mark to get the length of.\n * @param ignorePairing - When true, the length of a paired mark (e.g. MoveIn/MoveOut) whose matching mark is not active\n * will be treated the same as if the matching mark were active.\n * @returns The number of nodes within the output context of the mark.\n */\nexport function getOutputLength(mark: Mark, ignorePairing: boolean = false): number {\n\treturn areOutputCellsEmpty(mark) ? 0 : mark.count;\n}\n\n/**\n * @param mark - The mark to get the length of.\n * @returns The number of nodes within the input context of the mark.\n */\nexport function getInputLength(mark: Mark): number {\n\treturn areInputCellsEmpty(mark) ? 0 : mark.count;\n}\n\nexport function markEmptiesCells(mark: Mark): boolean {\n\treturn !areInputCellsEmpty(mark) && areOutputCellsEmpty(mark);\n}\n\nexport function markFillsCells(mark: Mark): boolean {\n\treturn areInputCellsEmpty(mark) && !areOutputCellsEmpty(mark);\n}\n\nexport function markHasCellEffect(mark: Mark): boolean {\n\treturn areInputCellsEmpty(mark) !== areOutputCellsEmpty(mark);\n}\n\nexport function isAttachAndDetachEffect(effect: MarkEffect): effect is AttachAndDetach {\n\treturn effect.type === \"AttachAndDetach\";\n}\n\nexport function isDetachOfRemovedNodes(mark: Mark): mark is CellMark<DetachOfRemovedNodes> {\n\treturn isDetach(mark) && mark.cellId !== undefined;\n}\n\nexport function isImpactfulCellRename(mark: Mark): mark is CellMark<CellRename> {\n\treturn (isAttachAndDetachEffect(mark) || isDetachOfRemovedNodes(mark)) && isImpactful(mark);\n}\n\nexport function areInputCellsEmpty(mark: Mark): mark is EmptyInputCellMark {\n\treturn mark.cellId !== undefined;\n}\n\nexport function areOutputCellsEmpty(mark: Mark): boolean {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType:\n\t\t\treturn mark.cellId !== undefined;\n\t\tcase \"Remove\":\n\t\tcase \"Rename\":\n\t\tcase \"MoveOut\":\n\t\tcase \"AttachAndDetach\":\n\t\t\treturn true;\n\t\tcase \"MoveIn\":\n\t\tcase \"Insert\":\n\t\t\treturn false;\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\n/**\n * Creates a mark that is equivalent to the given `mark` but with effects removed if those have no impact in the input\n * context of that mark.\n *\n * @param mark - The mark to settle. Never mutated.\n * @returns either the original mark or a shallow clone of it with effects stripped out.\n */\nexport function settleMark(mark: Mark): Mark {\n\tif (isImpactful(mark)) {\n\t\treturn mark;\n\t}\n\treturn omitMarkEffect(mark);\n}\n\n/**\n * @returns true, iff the given `mark` would have impact on the field when applied.\n * Ignores the impact of nested changes.\n * CellRename effects are considered impactful if they actually change the ID of the cells.\n */\nexport function isImpactful(mark: Mark): boolean {\n\tconst type = mark.type;\n\tswitch (type) {\n\t\tcase NoopMarkType:\n\t\t\treturn false;\n\t\tcase \"Rename\":\n\t\t\treturn true;\n\t\tcase \"Remove\": {\n\t\t\tconst inputId = getInputCellId(mark);\n\t\t\tif (inputId === undefined) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tconst outputId = getOutputCellId(mark);\n\t\t\tassert(outputId !== undefined, 0x824 /* Remove marks must have an output cell ID */);\n\t\t\treturn !areEqualChangeAtomIds(inputId, outputId);\n\t\t}\n\t\tcase \"AttachAndDetach\":\n\t\tcase \"MoveOut\":\n\t\t\treturn true;\n\t\tcase \"MoveIn\":\n\t\t\t// MoveIn marks always target an empty cell.\n\t\t\tassert(mark.cellId !== undefined, 0x825 /* MoveIn marks should target empty cells */);\n\t\t\treturn true;\n\t\tcase \"Insert\":\n\t\t\t// A Revive has no impact if the nodes are already in the document.\n\t\t\treturn mark.cellId !== undefined;\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\nexport function isTombstone(mark: Mark): mark is CellMark<NoopMark> & { cellId: CellId } {\n\treturn mark.type === NoopMarkType && mark.cellId !== undefined && mark.changes === undefined;\n}\n\nexport function isNoopMark(mark: Mark): mark is CellMark<NoopMark> {\n\treturn mark.type === NoopMarkType;\n}\n\nexport function areOverlappingIdRanges(\n\tid1: ChangesetLocalId,\n\tcount1: number,\n\tid2: ChangesetLocalId,\n\tcount2: number,\n): boolean {\n\tconst lastId1 = (id1 as number) + count1 - 1;\n\tconst lastId2 = (id2 as number) + count2 - 1;\n\treturn (id2 <= id1 && id1 <= lastId2) || (id1 <= id2 && id2 <= lastId1);\n}\n\nexport function compareCellsFromSameRevision(\n\tcell1: CellId,\n\tcount1: number,\n\tcell2: CellId,\n\tcount2: number,\n): number | undefined {\n\tassert(\n\t\tcell1.revision === cell2.revision,\n\t\t0x85b /* Expected cells to have the same revision */,\n\t);\n\tif (areOverlappingIdRanges(cell1.localId, count1, cell2.localId, count2)) {\n\t\treturn cell1.localId - cell2.localId;\n\t}\n\treturn undefined;\n}\n\nexport function isDetach(mark: MarkEffect | undefined): mark is Detach {\n\tconst type = mark?.type;\n\treturn type === \"Remove\" || type === \"MoveOut\";\n}\n\nexport function isRemoveMark(mark: Mark | undefined): mark is CellMark<Remove> {\n\treturn mark?.type === \"Remove\";\n}\n\nfunction areMergeableChangeAtoms(\n\tlhs: ChangeAtomId | undefined,\n\tlhsCount: number,\n\trhs: ChangeAtomId | undefined,\n): boolean {\n\tif (lhs === undefined || rhs === undefined) {\n\t\treturn lhs === undefined && rhs === undefined;\n\t}\n\n\treturn (\n\t\tlhs.revision === rhs.revision && areAdjacentIdRanges(lhs.localId, lhsCount, rhs.localId)\n\t);\n}\n\nfunction areAdjacentIdRanges(\n\tfirstStart: ChangesetLocalId,\n\tfirstLength: number,\n\tsecondStart: ChangesetLocalId,\n): boolean {\n\treturn (firstStart as number) + firstLength === secondStart;\n}\n\nfunction haveMergeableIdOverrides(\n\tlhs: DetachFields,\n\tlhsCount: number,\n\trhs: DetachFields,\n): boolean {\n\tif (lhs.idOverride !== undefined && rhs.idOverride !== undefined) {\n\t\treturn areMergeableCellIds(lhs.idOverride, lhsCount, rhs.idOverride);\n\t}\n\treturn (lhs.idOverride === undefined) === (rhs.idOverride === undefined);\n}\n\nfunction areMergeableCellIds(\n\tlhs: CellId | undefined,\n\tlhsCount: number,\n\trhs: CellId | undefined,\n): boolean {\n\treturn areMergeableChangeAtoms(lhs, lhsCount, rhs);\n}\n\n/**\n * Attempts to extend `lhs` to include the effects of `rhs`.\n * @param lhs - The mark to extend.\n * @param rhs - The effect so extend `rhs` with.\n * @returns `lhs` iff the function was able to mutate `lhs` to include the effects of `rhs`.\n * When `undefined` is returned, `lhs` is left untouched.\n */\nexport function tryMergeMarks(lhs: Mark, rhs: Readonly<Mark>): Mark | undefined {\n\tif (rhs.type !== lhs.type) {\n\t\treturn undefined;\n\t}\n\n\tif (!areMergeableCellIds(lhs.cellId, lhs.count, rhs.cellId)) {\n\t\treturn undefined;\n\t}\n\n\tif (rhs.changes !== undefined || lhs.changes !== undefined) {\n\t\treturn undefined;\n\t}\n\n\tconst mergedEffect = tryMergeEffects(lhs, rhs, lhs.count);\n\tif (mergedEffect === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn { ...lhs, ...mergedEffect, count: lhs.count + rhs.count };\n}\n\nfunction tryMergeEffects(\n\tlhs: MarkEffect,\n\trhs: MarkEffect,\n\tlhsCount: number,\n): MarkEffect | undefined {\n\tif (lhs.type !== rhs.type) {\n\t\treturn undefined;\n\t}\n\n\tif (rhs.type === NoopMarkType) {\n\t\treturn lhs;\n\t}\n\n\tif (rhs.type === \"AttachAndDetach\") {\n\t\tconst lhsAttachAndDetach = lhs as AttachAndDetach;\n\t\tconst attach = tryMergeEffects(lhsAttachAndDetach.attach, rhs.attach, lhsCount);\n\t\tconst detach = tryMergeEffects(lhsAttachAndDetach.detach, rhs.detach, lhsCount);\n\t\tif (attach === undefined || detach === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tassert(\n\t\t\tisAttach(attach) && isDetach(detach),\n\t\t\t0x826 /* Merged marks should be same type as input marks */,\n\t\t);\n\t\treturn { ...lhsAttachAndDetach, attach, detach };\n\t}\n\n\tif (\n\t\t(lhs as Partial<HasRevisionTag>).revision !== (rhs as Partial<HasRevisionTag>).revision\n\t) {\n\t\treturn undefined;\n\t}\n\n\tif (isDetach(lhs) && isDetach(rhs) && !haveMergeableIdOverrides(lhs, lhsCount, rhs)) {\n\t\treturn undefined;\n\t}\n\n\tconst type = rhs.type;\n\tswitch (type) {\n\t\tcase \"MoveIn\": {\n\t\t\tconst lhsMoveIn = lhs as MoveIn;\n\t\t\tif (\n\t\t\t\t(lhsMoveIn.id as number) + lhsCount === rhs.id &&\n\t\t\t\tareMergeableChangeAtoms(lhsMoveIn.finalEndpoint, lhsCount, rhs.finalEndpoint)\n\t\t\t) {\n\t\t\t\treturn lhsMoveIn;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tconst lhsDetach = lhs as Remove;\n\t\t\tif (\n\t\t\t\t(lhsDetach.id as number) + lhsCount === rhs.id &&\n\t\t\t\thaveMergeableIdOverrides(lhsDetach, lhsCount, rhs)\n\t\t\t) {\n\t\t\t\treturn lhsDetach;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Rename\": {\n\t\t\tconst lhsDetach = lhs as Rename;\n\t\t\tif (haveMergeableIdOverrides(lhsDetach, lhsCount, rhs)) {\n\t\t\t\treturn lhsDetach;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\tconst lhsMoveOut = lhs as MoveOut;\n\t\t\tif (\n\t\t\t\t(lhsMoveOut.id as number) + lhsCount === rhs.id &&\n\t\t\t\thaveMergeableIdOverrides(lhsMoveOut, lhsCount, rhs) &&\n\t\t\t\tareMergeableChangeAtoms(lhsMoveOut.finalEndpoint, lhsCount, rhs.finalEndpoint)\n\t\t\t) {\n\t\t\t\treturn lhsMoveOut;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tcase \"Insert\": {\n\t\t\tconst lhsInsert = lhs as Insert;\n\t\t\tif ((lhsInsert.id as number) + lhsCount === rhs.id) {\n\t\t\t\treturn lhsInsert;\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n\n\treturn undefined;\n}\n\n/**\n * Splits the `mark` into two marks such that the first returned mark has length `length`.\n * @param mark - The mark to split.\n * @param revision - The revision of the changeset the mark is part of.\n * @param length - The desired length for the first of the two returned marks.\n * @param genId - An ID allocator\n * @param moveEffects - The table in which to record splitting of move marks\n * @param recordMoveEffect - Whether when splitting a move an entry should be added to `moveEffects` indicating that the mark should be split (in case we process this mark again).\n * An entry is always added to `moveEffects` indicating that the opposite end of the move should be split.\n * @returns A pair of marks equivalent to the original `mark`\n * such that the first returned mark has input length `length`.\n */\nexport function splitMark<TMark extends Mark>(mark: TMark, length: number): [TMark, TMark] {\n\tconst markLength = mark.count;\n\tconst remainder = markLength - length;\n\tif (length < 1 || remainder < 1) {\n\t\tfail(\"Unable to split mark due to lengths\");\n\t}\n\n\tconst [effect1, effect2] = splitMarkEffect(mark, length);\n\tconst mark1 = { ...mark, ...effect1, count: length };\n\tconst mark2 = { ...mark, ...effect2, count: remainder };\n\tif (mark2.cellId !== undefined) {\n\t\tmark2.cellId = splitDetachEvent(mark2.cellId, length);\n\t}\n\n\treturn [mark1, mark2];\n}\n\nexport function splitMarkEffect<TEffect extends MarkEffect>(\n\teffect: TEffect,\n\tlength: number,\n): [TEffect, TEffect] {\n\tconst type = effect.type;\n\tswitch (type) {\n\t\tcase NoopMarkType:\n\t\t\treturn [effect, effect];\n\t\tcase \"Insert\": {\n\t\t\tconst effect1: TEffect = {\n\t\t\t\t...effect,\n\t\t\t};\n\t\t\tconst effect2: TEffect = {\n\t\t\t\t...effect,\n\t\t\t\tid: (effect.id as number) + length,\n\t\t\t};\n\t\t\treturn [effect1, effect2];\n\t\t}\n\t\tcase \"MoveIn\": {\n\t\t\tconst effect2: TEffect = { ...effect, id: (effect.id as number) + length };\n\t\t\tconst move2 = effect2 as MoveIn;\n\t\t\tif (move2.finalEndpoint !== undefined) {\n\t\t\t\tmove2.finalEndpoint = splitDetachEvent(move2.finalEndpoint, length);\n\t\t\t}\n\t\t\treturn [effect, effect2];\n\t\t}\n\t\tcase \"Remove\": {\n\t\t\tconst effect1 = { ...effect };\n\t\t\tconst id2: ChangesetLocalId = brand((effect.id as number) + length);\n\t\t\tconst effect2 = { ...effect, id: id2 };\n\t\t\tconst effect2Remove = effect2 as Mutable<Remove>;\n\t\t\tif (effect2Remove.idOverride !== undefined) {\n\t\t\t\teffect2Remove.idOverride = splitDetachEvent(effect2Remove.idOverride, length);\n\t\t\t}\n\t\t\treturn [effect1, effect2];\n\t\t}\n\t\tcase \"Rename\": {\n\t\t\tconst effect1 = { ...effect };\n\t\t\tconst effect2 = { ...effect };\n\t\t\tconst effect2Rename = effect2 as Mutable<Rename>;\n\t\t\tif (effect2Rename.idOverride !== undefined) {\n\t\t\t\teffect2Rename.idOverride = splitDetachEvent(effect2Rename.idOverride, length);\n\t\t\t}\n\t\t\treturn [effect1, effect2];\n\t\t}\n\t\tcase \"MoveOut\": {\n\t\t\tconst effect2 = {\n\t\t\t\t...effect,\n\t\t\t\tid: (effect.id as number) + length,\n\t\t\t};\n\n\t\t\tconst return2 = effect2 as Mutable<MoveOut>;\n\n\t\t\tif (return2.idOverride !== undefined) {\n\t\t\t\treturn2.idOverride = splitDetachEvent(return2.idOverride, length);\n\t\t\t}\n\n\t\t\tif (return2.finalEndpoint !== undefined) {\n\t\t\t\treturn2.finalEndpoint = splitDetachEvent(return2.finalEndpoint, length);\n\t\t\t}\n\t\t\treturn [effect, effect2];\n\t\t}\n\t\tcase \"AttachAndDetach\": {\n\t\t\tconst [attach1, attach2] = splitMarkEffect(effect.attach, length);\n\t\t\tconst [detach1, detach2] = splitMarkEffect(effect.detach, length);\n\t\t\tconst effect1 = {\n\t\t\t\t...effect,\n\t\t\t\tattach: attach1,\n\t\t\t\tdetach: detach1,\n\t\t\t};\n\n\t\t\tconst effect2 = {\n\t\t\t\t...effect,\n\t\t\t\tattach: attach2,\n\t\t\t\tdetach: detach2,\n\t\t\t};\n\n\t\t\treturn [effect1, effect2];\n\t\t}\n\t\tdefault:\n\t\t\tunreachableCase(type);\n\t}\n}\n\nfunction splitDetachEvent(detachEvent: CellId, length: number): CellId {\n\treturn { ...detachEvent, localId: brand((detachEvent.localId as number) + length) };\n}\n\n// TODO: Refactor MarkEffect into a field of CellMark so this function isn't necessary.\nexport function extractMarkEffect<TEffect extends MarkEffect>(\n\tmark: CellMark<TEffect>,\n): TEffect {\n\tconst { cellId: _cellId, count: _count, changes: _changes, ...effect } = mark;\n\treturn effect as unknown as TEffect;\n}\n\n// TODO: Refactor MarkEffect into a field of CellMark so this function isn't necessary.\nexport function omitMarkEffect(mark: CellMark<unknown>): CellMark<NoopMark> {\n\tconst { cellId, count, changes } = mark;\n\tconst noopMark: CellMark<NoopMark> = { count };\n\tif (cellId !== undefined) {\n\t\tnoopMark.cellId = cellId;\n\t}\n\tif (changes !== undefined) {\n\t\tnoopMark.changes = changes;\n\t}\n\treturn noopMark;\n}\n\nexport function withNodeChange<TMark extends CellMark<TKind>, TKind extends MarkEffect>(\n\tmark: TMark,\n\tchanges: NodeId | undefined,\n): TMark {\n\tconst newMark = { ...mark };\n\tif (changes !== undefined) {\n\t\tnewMark.changes = changes;\n\t} else {\n\t\tdelete newMark.changes;\n\t}\n\treturn newMark;\n}\n\nexport function withRevision<TMark extends Mark>(\n\tmark: TMark,\n\trevision: RevisionTag | undefined,\n): TMark {\n\tif (revision === undefined) {\n\t\treturn mark;\n\t}\n\n\tconst cloned = cloneMark(mark);\n\taddRevision(cloned, revision);\n\tif (\n\t\tcloned.cellId !== undefined &&\n\t\tcloned.cellId.revision === undefined &&\n\t\trevision !== undefined\n\t) {\n\t\t(cloned.cellId as Mutable<CellId>).revision = revision;\n\t}\n\treturn cloned;\n}\n\nfunction addRevision(effect: MarkEffect, revision: RevisionTag): void {\n\tif (effect.type === NoopMarkType || isRename(effect)) {\n\t\treturn;\n\t}\n\n\tif (effect.type === \"AttachAndDetach\") {\n\t\taddRevision(effect.attach, revision);\n\t\taddRevision(effect.detach, revision);\n\t\treturn;\n\t}\n\n\tassert(\n\t\teffect.revision === undefined || effect.revision === revision,\n\t\t0x829 /* Should not overwrite mark revision */,\n\t);\n\teffect.revision = revision;\n}\n\nexport function getEndpoint(effect: MoveMarkEffect): ChangeAtomId {\n\treturn effect.finalEndpoint ?? { revision: effect.revision, localId: effect.id };\n}\n\nexport function getCrossFieldKeys(change: Changeset): CrossFieldKeyRange[] {\n\tconst keys: CrossFieldKeyRange[] = [];\n\tfor (const mark of change) {\n\t\tkeys.push(...getCrossFieldKeysForMarkEffect(mark, mark.count));\n\t}\n\n\treturn keys;\n}\n\nfunction getCrossFieldKeysForMarkEffect(\n\teffect: MarkEffect,\n\tcount: number,\n): CrossFieldKeyRange[] {\n\tswitch (effect.type) {\n\t\tcase \"Insert\":\n\t\t\t// An insert behaves like a move where the source and destination are at the same location.\n\t\t\t// An insert can become a move when after rebasing.\n\t\t\treturn [\n\t\t\t\t[CrossFieldTarget.Source, effect.revision, effect.id, count],\n\t\t\t\t[CrossFieldTarget.Destination, effect.revision, effect.id, count],\n\t\t\t];\n\t\tcase \"MoveOut\":\n\t\t\treturn [[CrossFieldTarget.Source, effect.revision, effect.id, count]];\n\t\tcase \"MoveIn\":\n\t\t\treturn [[CrossFieldTarget.Destination, effect.revision, effect.id, count]];\n\t\tcase \"AttachAndDetach\":\n\t\t\treturn [\n\t\t\t\t...getCrossFieldKeysForMarkEffect(effect.attach, count),\n\t\t\t\t...getCrossFieldKeysForMarkEffect(effect.detach, count),\n\t\t\t];\n\t\tdefault:\n\t\t\treturn [];\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storedToViewSchema.d.ts","sourceRoot":"","sources":["../../src/feature-libraries/storedToViewSchema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAIN,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,
|
|
1
|
+
{"version":3,"file":"storedToViewSchema.d.ts","sourceRoot":"","sources":["../../src/feature-libraries/storedToViewSchema.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAIN,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,MAAM,kBAAkB,CAAC;AAI1B,OAAO,EAEN,eAAe,EAIf,KAAK,kBAAkB,EACvB,KAAK,cAAc,EAEnB,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,gBAAgB,GAAG,cAAc,CAoCnF;AAgBD,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,WAAW,CAAC,wBAAwB,EAAE,kBAAkB,CAAC,GAC5D,eAAe,CAOjB"}
|
|
@@ -22,7 +22,7 @@ function treeSchemaFromStoredSchema(schema) {
|
|
|
22
22
|
const map = new Map();
|
|
23
23
|
for (const [identifier, innerSchema] of schema.nodeSchema) {
|
|
24
24
|
if (innerSchema instanceof index_js_1.LeafNodeStoredSchema) {
|
|
25
|
-
map.set(identifier, index_js_4.LeafNodeSchema
|
|
25
|
+
map.set(identifier, new index_js_4.LeafNodeSchema({ name: "intoTypedSchema" }, identifier, innerSchema.leafValue));
|
|
26
26
|
}
|
|
27
27
|
else if (innerSchema instanceof index_js_1.MapNodeStoredSchema) {
|
|
28
28
|
map.set(identifier, index_js_4.FlexMapNodeSchema.create({ name: "intoTypedSchema" }, identifier, fieldSchemaFromStoredSchema(innerSchema.mapFields, map)));
|
|
@@ -60,9 +60,7 @@ function mapToObject(map) {
|
|
|
60
60
|
}
|
|
61
61
|
function fieldSchemaFromStoredSchema(schema, map) {
|
|
62
62
|
const kind = index_js_3.defaultSchemaPolicy.fieldKinds.get(schema.kind) ?? (0, index_js_2.fail)("missing field kind");
|
|
63
|
-
const types = schema.types
|
|
64
|
-
? [index_js_4.Any]
|
|
65
|
-
: Array.from(schema.types, (v) => () => map.get(v) ?? (0, index_js_2.fail)("missing schema"));
|
|
63
|
+
const types = Array.from(schema.types, (v) => () => map.get(v) ?? (0, index_js_2.fail)("missing schema"));
|
|
66
64
|
return index_js_4.FlexFieldSchema.create(kind, types);
|
|
67
65
|
}
|
|
68
66
|
exports.fieldSchemaFromStoredSchema = fieldSchemaFromStoredSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storedToViewSchema.js","sourceRoot":"","sources":["../../src/feature-libraries/storedToViewSchema.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,kEAA6D;AAE7D,+CAO0B;AAC1B,+CAAwC;AAExC,wDAAgE;AAChE,
|
|
1
|
+
{"version":3,"file":"storedToViewSchema.js","sourceRoot":"","sources":["../../src/feature-libraries/storedToViewSchema.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 } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\tLeafNodeStoredSchema,\n\tMapNodeStoredSchema,\n\tObjectNodeStoredSchema,\n\ttype TreeFieldStoredSchema,\n\ttype TreeNodeSchemaIdentifier,\n\ttype TreeStoredSchema,\n} from \"../core/index.js\";\nimport { fail } from \"../util/index.js\";\n\nimport { defaultSchemaPolicy } from \"./default-schema/index.js\";\nimport {\n\ttype FlexAllowedTypes,\n\tFlexFieldSchema,\n\ttype FlexMapFieldSchema,\n\tFlexMapNodeSchema,\n\tFlexObjectNodeSchema,\n\ttype FlexTreeNodeSchema,\n\ttype FlexTreeSchema,\n\tLeafNodeSchema,\n} from \"./typed-schema/index.js\";\n\n/**\n * Creates a new view schema using the stored schema.\n * @remarks\n * This is really only suitable for use with code that happens to need access to things which require a view schema, but isn't actually schema aware.\n * If the input schema came from a view schema, it will not return the same view schema, and will not be compatible:\n * the returned TreeSchema is simply one which schematize will not object to.\n * Assumes the schema uses the default field kinds.\n */\nexport function treeSchemaFromStoredSchema(schema: TreeStoredSchema): FlexTreeSchema {\n\tconst map: Map<TreeNodeSchemaIdentifier, FlexTreeNodeSchema> = new Map();\n\tfor (const [identifier, innerSchema] of schema.nodeSchema) {\n\t\tif (innerSchema instanceof LeafNodeStoredSchema) {\n\t\t\tmap.set(\n\t\t\t\tidentifier,\n\t\t\t\tnew LeafNodeSchema({ name: \"intoTypedSchema\" }, identifier, innerSchema.leafValue),\n\t\t\t);\n\t\t} else if (innerSchema instanceof MapNodeStoredSchema) {\n\t\t\tmap.set(\n\t\t\t\tidentifier,\n\t\t\t\tFlexMapNodeSchema.create(\n\t\t\t\t\t{ name: \"intoTypedSchema\" },\n\t\t\t\t\tidentifier,\n\t\t\t\t\tfieldSchemaFromStoredSchema(innerSchema.mapFields, map) as FlexMapFieldSchema,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tassert(innerSchema instanceof ObjectNodeStoredSchema, 0x882 /* unsupported node kind */);\n\t\t\tconst fields = new Map<string, FlexFieldSchema>();\n\t\t\tfor (const [key, field] of innerSchema.objectNodeFields) {\n\t\t\t\tfields.set(key, fieldSchemaFromStoredSchema(field, map));\n\t\t\t}\n\t\t\tconst fieldsObject = mapToObject(fields);\n\t\t\tmap.set(\n\t\t\t\tidentifier,\n\t\t\t\tFlexObjectNodeSchema.create({ name: \"intoTypedSchema\" }, identifier, fieldsObject),\n\t\t\t);\n\t\t}\n\t}\n\treturn {\n\t\tadapters: {},\n\t\tpolicy: defaultSchemaPolicy,\n\t\trootFieldSchema: fieldSchemaFromStoredSchema(schema.rootFieldSchema, map),\n\t\tnodeSchema: map,\n\t};\n}\n\nfunction mapToObject<MapValue>(map: Map<string, MapValue>): Record<string, MapValue> {\n\tconst objectMap: Record<string, MapValue> = Object.create(null);\n\tfor (const [key, value] of map.entries()) {\n\t\t// This code has to be careful to avoid assigned to __proto__ or similar built in fields.\n\t\tObject.defineProperty(objectMap, key, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\twritable: false,\n\t\t\tvalue,\n\t\t});\n\t}\n\treturn objectMap;\n}\n\nexport function fieldSchemaFromStoredSchema(\n\tschema: TreeFieldStoredSchema,\n\tmap: ReadonlyMap<TreeNodeSchemaIdentifier, FlexTreeNodeSchema>,\n): FlexFieldSchema {\n\tconst kind = defaultSchemaPolicy.fieldKinds.get(schema.kind) ?? fail(\"missing field kind\");\n\tconst types: FlexAllowedTypes = Array.from(\n\t\tschema.types,\n\t\t(v) => () => map.get(v) ?? fail(\"missing schema\"),\n\t);\n\treturn FlexFieldSchema.create(kind, types);\n}\n"]}
|
|
@@ -20,7 +20,7 @@ export declare function markEager<T>(t: T): T;
|
|
|
20
20
|
* To force a `"function"` item to be treated as an eager item, call `markEager` before putting it in the list.
|
|
21
21
|
* This is necessary e.g. when the eager list items are function types and the lazy items are functions that _return_ function types.
|
|
22
22
|
* `FlexList`s are processed by `normalizeFlexList` and `normalizeFlexListEager`.
|
|
23
|
-
* @public
|
|
23
|
+
* @system @public
|
|
24
24
|
*/
|
|
25
25
|
export type FlexList<Item = unknown> = readonly LazyItem<Item>[];
|
|
26
26
|
/**
|
|
@@ -44,7 +44,7 @@ export type NormalizedFlexList<Item> = readonly Item[];
|
|
|
44
44
|
export type NormalizedLazyFlexList<Item> = (() => Item)[];
|
|
45
45
|
/**
|
|
46
46
|
* Get the `Item` type from a `LazyItem<Item>`.
|
|
47
|
-
* @public
|
|
47
|
+
* @system @public
|
|
48
48
|
*/
|
|
49
49
|
export type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result ? Result : Item;
|
|
50
50
|
/**
|
|
@@ -57,7 +57,7 @@ export type NormalizeLazyItem<List extends LazyItem> = List extends () => unknow
|
|
|
57
57
|
export type FlexListToNonLazyArray<List extends FlexList> = ArrayHasFixedLength<List> extends true ? ConstantFlexListToNonLazyArray<List> : NormalizedFlexList<ExtractListItemType<List>>;
|
|
58
58
|
/**
|
|
59
59
|
* Normalize FlexList type to a union.
|
|
60
|
-
* @public
|
|
60
|
+
* @system @public
|
|
61
61
|
*/
|
|
62
62
|
export type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;
|
|
63
63
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flexList.js","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/flexList.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iDAAiD;AACjD,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAU/C,gFAAgF;AAChF,SAAgB,MAAM,CAAO,IAAoB;IAChD,OAAO,OAAO,IAAI,KAAK,UAAU,IAAK,IAA6B,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;AAC7F,CAAC;AAFD,wBAEC;AAED;;;;;;GAMG;AACH,SAAgB,SAAS,CAAI,CAAI;IAChC,OAAO,MAAM,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,aAAa,EAAE;YACxC,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;SACf,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AATD,8BASC;AAcD;;GAEG;AACH,SAAgB,qBAAqB,CACpC,CAAO;IAEP,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;QAChC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;IACpB,CAAC,CAA8B,CAAC;AACjC,CAAC;AATD,sDASC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CACrC,CAAO;IAEP,MAAM,IAAI,GAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;QAC1D,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,IAAoC,CAAC;AAC7C,CAAC;AAVD,wDAUC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/** A symbol used to identify a `MarkedEager`. */\nconst flexListEager = Symbol(\"FlexList Eager\");\n\n/**\n * An object that has been marked as eager (as opposed to lazy) when used as an item in a `FlexList`.\n * It will be considered to be an eager item in a `FlexList` even if it is a function.\n */\ninterface MarkedEager {\n\t[flexListEager]: true;\n}\n\n/** Returns true iff the given item is a function and is not a `MarkedEager`. */\nexport function isLazy<Item>(item: LazyItem<Item>): item is () => Item {\n\treturn typeof item === \"function\" && (item as Partial<MarkedEager>)[flexListEager] !== true;\n}\n\n/**\n * Mark the given object as an eager item in a `FlexList`.\n * @remarks\n * This only has an effect on function objects that would otherwise be considered to be lazy items in a `FlexList`.\n * @param t - The object to mark as eager.\n * @returns `t`, marked as eager if applicable.\n */\nexport function markEager<T>(t: T): T {\n\treturn isLazy(t)\n\t\t? Object.defineProperty(t, flexListEager, {\n\t\t\t\tvalue: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: false,\n\t\t\t})\n\t\t: t;\n}\n\n/**\n * A flexible way to list values.\n * Each item in the list can either be an \"eager\" **value** or a \"lazy\" **function that returns a value** (the latter allows cyclic references to work).\n * @privateRemarks\n * By default, items that are of type `\"function\"` will be considered lazy and all other items will be considered eager.\n * To force a `\"function\"` item to be treated as an eager item, call `markEager` before putting it in the list.\n * This is necessary e.g. when the eager list items are function types and the lazy items are functions that _return_ function types.\n * `FlexList`s are processed by `normalizeFlexList` and `normalizeFlexListEager`.\n * @public\n */\nexport type FlexList<Item = unknown> = readonly LazyItem<Item>[];\n\n/**\n * Given a `FlexList` of eager and lazy items, return an equivalent list where all items are lazy.\n */\nexport function normalizeFlexListLazy<List extends FlexList>(\n\tt: List,\n): FlexListToLazyArray<List> {\n\treturn t.map((value: LazyItem) => {\n\t\tif (isLazy(value)) {\n\t\t\treturn value;\n\t\t}\n\t\treturn () => value;\n\t}) as FlexListToLazyArray<List>;\n}\n\n/**\n * Given a `FlexList` of eager and lazy items, return an equivalent list where all items are eager.\n */\nexport function normalizeFlexListEager<List extends FlexList>(\n\tt: List,\n): FlexListToNonLazyArray<List> {\n\tconst data: readonly unknown[] = t.map((value: LazyItem) => {\n\t\tif (isLazy(value)) {\n\t\t\treturn value();\n\t\t}\n\t\treturn value;\n\t});\n\treturn data as FlexListToNonLazyArray<List>;\n}\n\n/**\n * An \"eager\" or \"lazy\" Item in a `FlexList`.\n * Lazy items are wrapped in a function to allow referring to themselves before they are declared.\n * This makes recursive and co-recursive items possible.\n * @public\n */\nexport type LazyItem<Item = unknown> = Item | (() => Item);\n\n/**\n */\nexport type NormalizedFlexList<Item> = readonly Item[];\n\nexport type NormalizedLazyFlexList<Item> = (() => Item)[];\n\n/**\n * Get the `Item` type from a `LazyItem<Item>`.\n * @public\n */\nexport type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result\n\t? Result\n\t: Item;\n\n/**\n */\nexport type ExtractListItemType<List extends FlexList> = List extends FlexList<infer Item>\n\t? Item\n\t: unknown;\n\nexport type NormalizeLazyItem<List extends LazyItem> = List extends () => unknown\n\t? List\n\t: () => List;\n\n/**\n * Normalize FlexList type to a non-lazy array.\n */\nexport type FlexListToNonLazyArray<List extends FlexList> =\n\tArrayHasFixedLength<List> extends true\n\t\t? ConstantFlexListToNonLazyArray<List>\n\t\t: NormalizedFlexList<ExtractListItemType<List>>;\n\n/**\n * Normalize FlexList type to a union.\n * @public\n */\nexport type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;\n\n/**\n * Normalize FlexList type to a non-lazy array.\n */\nexport type ConstantFlexListToNonLazyArray<List extends FlexList> = List extends readonly [\n\tinfer Head,\n\t...infer Tail,\n]\n\t? [ExtractItemType<Head>, ...ConstantFlexListToNonLazyArray<Tail>]\n\t: [];\n\n/**\n * Detect if an array is a Tuple (fixed length) or unknown length.\n *\n * Types which many have one of multiple fixed lengths (like `[] | [0]`) count as having a fixed length.\n *\n * @remarks\n * Type operations designed to work on tuples can often behave very badly on regular arrays.\n * For example recursive patterns for processing them often just return the base case,\n * losing all the type information.\n */\n// This works by determining if the length is `number` (and not a specific number).\nexport type ArrayHasFixedLength<List extends readonly unknown[]> =\n\tnumber extends List[\"length\"] ? false : true;\n\n/**\n * Normalize FlexList type to a lazy array.\n */\nexport type FlexListToLazyArray<List extends FlexList> = ArrayHasFixedLength<List> extends true\n\t? ConstantFlexListToLazyArray<List>\n\t: NormalizedLazyFlexList<ExtractListItemType<List>>;\n\n/**\n * Normalize FlexList type to a lazy array.\n */\nexport type ConstantFlexListToLazyArray<List extends FlexList> = List extends readonly [\n\tinfer Head,\n\t...infer Tail,\n]\n\t? [NormalizeLazyItem<Head>, ...ConstantFlexListToLazyArray<Tail>]\n\t: [];\n"]}
|
|
1
|
+
{"version":3,"file":"flexList.js","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/flexList.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,iDAAiD;AACjD,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAU/C,gFAAgF;AAChF,SAAgB,MAAM,CAAO,IAAoB;IAChD,OAAO,OAAO,IAAI,KAAK,UAAU,IAAK,IAA6B,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC;AAC7F,CAAC;AAFD,wBAEC;AAED;;;;;;GAMG;AACH,SAAgB,SAAS,CAAI,CAAI;IAChC,OAAO,MAAM,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,aAAa,EAAE;YACxC,KAAK,EAAE,IAAI;YACX,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,KAAK;SACf,CAAC;QACH,CAAC,CAAC,CAAC,CAAC;AACN,CAAC;AATD,8BASC;AAcD;;GAEG;AACH,SAAgB,qBAAqB,CACpC,CAAO;IAEP,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;QAChC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;IACpB,CAAC,CAA8B,CAAC;AACjC,CAAC;AATD,sDASC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CACrC,CAAO;IAEP,MAAM,IAAI,GAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,KAAe,EAAE,EAAE;QAC1D,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,OAAO,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,IAAoC,CAAC;AAC7C,CAAC;AAVD,wDAUC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/** A symbol used to identify a `MarkedEager`. */\nconst flexListEager = Symbol(\"FlexList Eager\");\n\n/**\n * An object that has been marked as eager (as opposed to lazy) when used as an item in a `FlexList`.\n * It will be considered to be an eager item in a `FlexList` even if it is a function.\n */\ninterface MarkedEager {\n\t[flexListEager]: true;\n}\n\n/** Returns true iff the given item is a function and is not a `MarkedEager`. */\nexport function isLazy<Item>(item: LazyItem<Item>): item is () => Item {\n\treturn typeof item === \"function\" && (item as Partial<MarkedEager>)[flexListEager] !== true;\n}\n\n/**\n * Mark the given object as an eager item in a `FlexList`.\n * @remarks\n * This only has an effect on function objects that would otherwise be considered to be lazy items in a `FlexList`.\n * @param t - The object to mark as eager.\n * @returns `t`, marked as eager if applicable.\n */\nexport function markEager<T>(t: T): T {\n\treturn isLazy(t)\n\t\t? Object.defineProperty(t, flexListEager, {\n\t\t\t\tvalue: true,\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: false,\n\t\t\t\twritable: false,\n\t\t\t})\n\t\t: t;\n}\n\n/**\n * A flexible way to list values.\n * Each item in the list can either be an \"eager\" **value** or a \"lazy\" **function that returns a value** (the latter allows cyclic references to work).\n * @privateRemarks\n * By default, items that are of type `\"function\"` will be considered lazy and all other items will be considered eager.\n * To force a `\"function\"` item to be treated as an eager item, call `markEager` before putting it in the list.\n * This is necessary e.g. when the eager list items are function types and the lazy items are functions that _return_ function types.\n * `FlexList`s are processed by `normalizeFlexList` and `normalizeFlexListEager`.\n * @system @public\n */\nexport type FlexList<Item = unknown> = readonly LazyItem<Item>[];\n\n/**\n * Given a `FlexList` of eager and lazy items, return an equivalent list where all items are lazy.\n */\nexport function normalizeFlexListLazy<List extends FlexList>(\n\tt: List,\n): FlexListToLazyArray<List> {\n\treturn t.map((value: LazyItem) => {\n\t\tif (isLazy(value)) {\n\t\t\treturn value;\n\t\t}\n\t\treturn () => value;\n\t}) as FlexListToLazyArray<List>;\n}\n\n/**\n * Given a `FlexList` of eager and lazy items, return an equivalent list where all items are eager.\n */\nexport function normalizeFlexListEager<List extends FlexList>(\n\tt: List,\n): FlexListToNonLazyArray<List> {\n\tconst data: readonly unknown[] = t.map((value: LazyItem) => {\n\t\tif (isLazy(value)) {\n\t\t\treturn value();\n\t\t}\n\t\treturn value;\n\t});\n\treturn data as FlexListToNonLazyArray<List>;\n}\n\n/**\n * An \"eager\" or \"lazy\" Item in a `FlexList`.\n * Lazy items are wrapped in a function to allow referring to themselves before they are declared.\n * This makes recursive and co-recursive items possible.\n * @public\n */\nexport type LazyItem<Item = unknown> = Item | (() => Item);\n\n/**\n */\nexport type NormalizedFlexList<Item> = readonly Item[];\n\nexport type NormalizedLazyFlexList<Item> = (() => Item)[];\n\n/**\n * Get the `Item` type from a `LazyItem<Item>`.\n * @system @public\n */\nexport type ExtractItemType<Item extends LazyItem> = Item extends () => infer Result\n\t? Result\n\t: Item;\n\n/**\n */\nexport type ExtractListItemType<List extends FlexList> = List extends FlexList<infer Item>\n\t? Item\n\t: unknown;\n\nexport type NormalizeLazyItem<List extends LazyItem> = List extends () => unknown\n\t? List\n\t: () => List;\n\n/**\n * Normalize FlexList type to a non-lazy array.\n */\nexport type FlexListToNonLazyArray<List extends FlexList> =\n\tArrayHasFixedLength<List> extends true\n\t\t? ConstantFlexListToNonLazyArray<List>\n\t\t: NormalizedFlexList<ExtractListItemType<List>>;\n\n/**\n * Normalize FlexList type to a union.\n * @system @public\n */\nexport type FlexListToUnion<TList extends FlexList> = ExtractItemType<TList[number]>;\n\n/**\n * Normalize FlexList type to a non-lazy array.\n */\nexport type ConstantFlexListToNonLazyArray<List extends FlexList> = List extends readonly [\n\tinfer Head,\n\t...infer Tail,\n]\n\t? [ExtractItemType<Head>, ...ConstantFlexListToNonLazyArray<Tail>]\n\t: [];\n\n/**\n * Detect if an array is a Tuple (fixed length) or unknown length.\n *\n * Types which many have one of multiple fixed lengths (like `[] | [0]`) count as having a fixed length.\n *\n * @remarks\n * Type operations designed to work on tuples can often behave very badly on regular arrays.\n * For example recursive patterns for processing them often just return the base case,\n * losing all the type information.\n */\n// This works by determining if the length is `number` (and not a specific number).\nexport type ArrayHasFixedLength<List extends readonly unknown[]> =\n\tnumber extends List[\"length\"] ? false : true;\n\n/**\n * Normalize FlexList type to a lazy array.\n */\nexport type FlexListToLazyArray<List extends FlexList> = ArrayHasFixedLength<List> extends true\n\t? ConstantFlexListToLazyArray<List>\n\t: NormalizedLazyFlexList<ExtractListItemType<List>>;\n\n/**\n * Normalize FlexList type to a lazy array.\n */\nexport type ConstantFlexListToLazyArray<List extends FlexList> = List extends readonly [\n\tinfer Head,\n\t...infer Tail,\n]\n\t? [NormalizeLazyItem<Head>, ...ConstantFlexListToLazyArray<Tail>]\n\t: [];\n"]}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
|
-
export { type FlexTreeNodeSchema, FlexFieldSchema,
|
|
5
|
+
export { type FlexTreeNodeSchema, FlexFieldSchema, allowedTypesToTypeSet, type FlexAllowedTypes, type LazyTreeNodeSchema, LeafNodeSchema, FlexMapNodeSchema, FlexObjectNodeSchema, type FlexTreeSchema, type Unenforced, type AllowedTypeSet, type FlexMapFieldSchema, type SchemaCollection, TreeNodeSchemaBase, type FlexObjectNodeFields, schemaIsLeaf, schemaIsMap, schemaIsObjectNode, intoStoredSchema, allowedTypesSchemaSet, intoStoredSchemaCollection, } from "./typedTreeSchema.js";
|
|
6
6
|
export { ViewSchema } from "./view.js";
|
|
7
7
|
export { type SchemaLibraryData, type SchemaLintConfiguration, aggregateSchemaLibraries, schemaLintDefault, } from "./schemaCollection.js";
|
|
8
|
-
export { type FlexList, markEager, type LazyItem, isLazy, type NormalizeLazyItem, type FlexListToUnion, type ExtractItemType, } from "./flexList.js";
|
|
8
|
+
export { type FlexList, markEager, type LazyItem, isLazy, type NormalizeLazyItem, type FlexListToUnion, type ExtractItemType, normalizeFlexListEager, } from "./flexList.js";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,kBAAkB,EACvB,eAAe,EACf,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,KAAK,kBAAkB,EACvB,eAAe,EACf,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,KAAK,oBAAoB,EACzB,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,0BAA0B,GAC1B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EACN,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC5B,wBAAwB,EACxB,iBAAiB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACN,KAAK,QAAQ,EACb,SAAS,EACT,KAAK,QAAQ,EACb,MAAM,EACN,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,sBAAsB,GACtB,MAAM,eAAe,CAAC"}
|
|
@@ -4,10 +4,9 @@
|
|
|
4
4
|
* Licensed under the MIT License.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.isLazy = exports.markEager = exports.schemaLintDefault = exports.aggregateSchemaLibraries = exports.ViewSchema = exports.intoStoredSchemaCollection = exports.allowedTypesSchemaSet = exports.intoStoredSchema = exports.schemaIsObjectNode = exports.schemaIsMap = exports.schemaIsLeaf = exports.TreeNodeSchemaBase = exports.FlexObjectNodeSchema = exports.FlexMapNodeSchema = exports.LeafNodeSchema = exports.allowedTypesToTypeSet = exports.
|
|
7
|
+
exports.normalizeFlexListEager = exports.isLazy = exports.markEager = exports.schemaLintDefault = exports.aggregateSchemaLibraries = exports.ViewSchema = exports.intoStoredSchemaCollection = exports.allowedTypesSchemaSet = exports.intoStoredSchema = exports.schemaIsObjectNode = exports.schemaIsMap = exports.schemaIsLeaf = exports.TreeNodeSchemaBase = exports.FlexObjectNodeSchema = exports.FlexMapNodeSchema = exports.LeafNodeSchema = exports.allowedTypesToTypeSet = exports.FlexFieldSchema = void 0;
|
|
8
8
|
var typedTreeSchema_js_1 = require("./typedTreeSchema.js");
|
|
9
9
|
Object.defineProperty(exports, "FlexFieldSchema", { enumerable: true, get: function () { return typedTreeSchema_js_1.FlexFieldSchema; } });
|
|
10
|
-
Object.defineProperty(exports, "Any", { enumerable: true, get: function () { return typedTreeSchema_js_1.Any; } });
|
|
11
10
|
Object.defineProperty(exports, "allowedTypesToTypeSet", { enumerable: true, get: function () { return typedTreeSchema_js_1.allowedTypesToTypeSet; } });
|
|
12
11
|
Object.defineProperty(exports, "LeafNodeSchema", { enumerable: true, get: function () { return typedTreeSchema_js_1.LeafNodeSchema; } });
|
|
13
12
|
Object.defineProperty(exports, "FlexMapNodeSchema", { enumerable: true, get: function () { return typedTreeSchema_js_1.FlexMapNodeSchema; } });
|
|
@@ -27,4 +26,5 @@ Object.defineProperty(exports, "schemaLintDefault", { enumerable: true, get: fun
|
|
|
27
26
|
var flexList_js_1 = require("./flexList.js");
|
|
28
27
|
Object.defineProperty(exports, "markEager", { enumerable: true, get: function () { return flexList_js_1.markEager; } });
|
|
29
28
|
Object.defineProperty(exports, "isLazy", { enumerable: true, get: function () { return flexList_js_1.isLazy; } });
|
|
29
|
+
Object.defineProperty(exports, "normalizeFlexListEager", { enumerable: true, get: function () { return flexList_js_1.normalizeFlexListEager; } });
|
|
30
30
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,2DAsB8B;AApB7B,qHAAA,eAAe,OAAA;AACf,2HAAA,qBAAqB,OAAA;AAGrB,oHAAA,cAAc,OAAA;AACd,uHAAA,iBAAiB,OAAA;AACjB,0HAAA,oBAAoB,OAAA;AAMpB,wHAAA,kBAAkB,OAAA;AAElB,kHAAA,YAAY,OAAA;AACZ,iHAAA,WAAW,OAAA;AACX,wHAAA,kBAAkB,OAAA;AAClB,sHAAA,gBAAgB,OAAA;AAChB,2HAAA,qBAAqB,OAAA;AACrB,gIAAA,0BAA0B,OAAA;AAG3B,qCAAuC;AAA9B,qGAAA,UAAU,OAAA;AAEnB,6DAK+B;AAF9B,+HAAA,wBAAwB,OAAA;AACxB,wHAAA,iBAAiB,OAAA;AAGlB,6CASuB;AAPtB,wGAAA,SAAS,OAAA;AAET,qGAAA,MAAM,OAAA;AAIN,qHAAA,sBAAsB,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\ttype FlexTreeNodeSchema,\n\tFlexFieldSchema,\n\tallowedTypesToTypeSet,\n\ttype FlexAllowedTypes,\n\ttype LazyTreeNodeSchema,\n\tLeafNodeSchema,\n\tFlexMapNodeSchema,\n\tFlexObjectNodeSchema,\n\ttype FlexTreeSchema,\n\ttype Unenforced,\n\ttype AllowedTypeSet,\n\ttype FlexMapFieldSchema,\n\ttype SchemaCollection,\n\tTreeNodeSchemaBase,\n\ttype FlexObjectNodeFields,\n\tschemaIsLeaf,\n\tschemaIsMap,\n\tschemaIsObjectNode,\n\tintoStoredSchema,\n\tallowedTypesSchemaSet,\n\tintoStoredSchemaCollection,\n} from \"./typedTreeSchema.js\";\n\nexport { ViewSchema } from \"./view.js\";\n\nexport {\n\ttype SchemaLibraryData,\n\ttype SchemaLintConfiguration,\n\taggregateSchemaLibraries,\n\tschemaLintDefault,\n} from \"./schemaCollection.js\";\n\nexport {\n\ttype FlexList,\n\tmarkEager,\n\ttype LazyItem,\n\tisLazy,\n\ttype NormalizeLazyItem,\n\ttype FlexListToUnion,\n\ttype ExtractItemType,\n\tnormalizeFlexListEager,\n} from \"./flexList.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaCollection.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/schemaCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,WAAW,EAGhB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EACN,KAAK,eAAe,EAKpB,KAAK,gBAAgB,
|
|
1
|
+
{"version":3,"file":"schemaCollection.d.ts","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/schemaCollection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,WAAW,EAGhB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EACN,KAAK,eAAe,EAKpB,KAAK,gBAAgB,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIzC;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IAC1D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,GAAG,WAAW,CAAC,EAAE,CAAC;CACzC;AAMD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACvC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC9B;AAED,eAAO,MAAM,iBAAiB,EAAE,uBAG/B,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,MAAM,EACZ,iBAAiB,EAAE,uBAAuB,EAC1C,SAAS,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACtC,eAAe,CAAC,EAAE,eAAe,GAC/B,iBAAiB,CAuDnB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACvC,iBAAiB,EAAE,uBAAuB,EAC1C,UAAU,EAAE,gBAAgB,EAC5B,eAAe,CAAC,EAAE,eAAe,GAC/B,MAAM,EAAE,CA0CV;AAED,wBAAgB,iBAAiB,CAChC,iBAAiB,EAAE,uBAAuB,EAC1C,UAAU,EAAE,gBAAgB,EAC5B,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,MAAM,EAAE,GACd,IAAI,CAGN;AAED,wBAAgB,aAAa,CAC5B,iBAAiB,EAAE,uBAAuB,EAC1C,UAAU,EAAE,gBAAgB,EAC5B,KAAK,EAAE,eAAe,EACtB,aAAa,EAAE,MAAM,MAAM,EAC3B,MAAM,EAAE,MAAM,EAAE,GACd,IAAI,CAyCN"}
|
|
@@ -128,18 +128,16 @@ function validateRootField(lintConfiguration, collection, field, errors) {
|
|
|
128
128
|
exports.validateRootField = validateRootField;
|
|
129
129
|
function validateField(lintConfiguration, collection, field, describeField, errors) {
|
|
130
130
|
const types = field.allowedTypes;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
errors.push(`${describeField()} references type "${type.name}" from library "${type.builder.name}" which is not defined. Perhaps another type was intended, or that library needs to be added.`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
if (types.length === 0 && lintConfiguration.rejectEmpty) {
|
|
140
|
-
errors.push(`${describeField()} requires children to have a type from a set of zero types. This means the field must always be empty.`);
|
|
131
|
+
const normalizedTypes = (0, flexList_js_1.normalizeFlexListEager)(types);
|
|
132
|
+
for (const type of normalizedTypes) {
|
|
133
|
+
const referenced = collection.nodeSchema.get(type.name);
|
|
134
|
+
if (referenced === undefined) {
|
|
135
|
+
errors.push(`${describeField()} references type "${type.name}" from library "${type.builder.name}" which is not defined. Perhaps another type was intended, or that library needs to be added.`);
|
|
141
136
|
}
|
|
142
137
|
}
|
|
138
|
+
if (types.length === 0 && lintConfiguration.rejectEmpty) {
|
|
139
|
+
errors.push(`${describeField()} requires children to have a type from a set of zero types. This means the field must always be empty.`);
|
|
140
|
+
}
|
|
143
141
|
const kind = field.kind;
|
|
144
142
|
const kindFromPolicy = index_js_3.defaultSchemaPolicy.fieldKinds.get(kind.identifier);
|
|
145
143
|
if (kindFromPolicy === undefined) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaCollection.js","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/schemaCollection.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 } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype Adapters,\n\ttype TreeAdapter,\n\ttype TreeNodeSchemaIdentifier,\n\tMultiplicity,\n} from \"../../core/index.js\";\nimport { fail, type requireAssignableTo } from \"../../util/index.js\";\nimport { FieldKinds, defaultSchemaPolicy } from \"../default-schema/index.js\";\n\nimport { normalizeFlexListEager } from \"./flexList.js\";\nimport {\n\ttype FlexFieldSchema,\n\tFlexMapNodeSchema,\n\tFlexObjectNodeSchema,\n\ttype FlexTreeNodeSchema,\n\tLeafNodeSchema,\n\ttype SchemaCollection,\n\tallowedTypesIsAny,\n} from \"./typedTreeSchema.js\";\nimport type { Sourced } from \"./view.js\";\n\n// TODO: tests for this file\n\n/**\n * Schema data collected by a single SchemaBuilder (does not include referenced libraries).\n * @internal\n */\nexport interface SchemaLibraryData extends SchemaCollection {\n\treadonly name: string;\n\treadonly adapters: Adapters;\n}\n\n/**\n * Mutable adapter collection which records the associated factory.\n * See {@link Adapters}.\n */\nexport interface SourcedAdapters {\n\treadonly tree: (Sourced & TreeAdapter)[];\n}\n\n{\n\ttype _check = requireAssignableTo<SourcedAdapters, Adapters>;\n}\n\n/**\n * Allows opting into and out of errors for some unusual schema patterns which are usually bugs.\n * @internal\n */\nexport interface SchemaLintConfiguration {\n\treadonly rejectForbidden: boolean;\n\treadonly rejectEmpty: boolean;\n}\n\nexport const schemaLintDefault: SchemaLintConfiguration = {\n\trejectForbidden: true,\n\trejectEmpty: true,\n};\n\n/**\n * Build and validate a SchemaCollection.\n *\n * As much as possible tries to detect anything that might be a mistake made by the schema author.\n * This will error on some valid but probably never intended to be used patterns\n * (like libraries with the same name, nodes which are impossible to create etc).\n *\n * @param name - Name of the resulting library.\n * @param lintConfiguration - configuration for what errors to generate.\n * @param libraries - Data to aggregate into the SchemaCollection.\n * @param rootFieldSchema - Only validated: not included in the result.\n *\n * @privateRemarks\n * This checks that input works with defaultSchemaPolicy.\n * If support fo other policies is added, this will need to take in the policy.\n */\nexport function aggregateSchemaLibraries(\n\tname: string,\n\tlintConfiguration: SchemaLintConfiguration,\n\tlibraries: Iterable<SchemaLibraryData>,\n\trootFieldSchema?: FlexFieldSchema,\n): SchemaLibraryData {\n\tconst nodeSchema: Map<TreeNodeSchemaIdentifier, FlexTreeNodeSchema> = new Map();\n\tconst adapters: SourcedAdapters = { tree: [] };\n\n\tconst errors: string[] = [];\n\tconst librarySet: Set<SchemaLibraryData> = new Set();\n\tconst libraryNames: Set<string> = new Set();\n\n\tfor (const library of libraries) {\n\t\tif (librarySet.has(library)) {\n\t\t\t// SchemaBuilder should ensure this doesn't happen, but include it here for completeness.\n\t\t\terrors.push(`Duplicate library named \"${library.name}\"`);\n\t\t\tcontinue;\n\t\t}\n\t\tlibrarySet.add(library);\n\t\tif (libraryNames.has(library.name)) {\n\t\t\t// This wouldn't break anything, but could make error messages confusing, so its better to avoid duplicates.\n\t\t\terrors.push(`Found another library with name \"${library.name}\"`);\n\t\t}\n\n\t\tfor (const [key, tree] of library.nodeSchema) {\n\t\t\t// This check is an assert since if it fails, the other error messages would be incorrect.\n\t\t\tassert(\n\t\t\t\ttree.builder.name === library.name,\n\t\t\t\t0x6a9 /* tree must be part by the library its in */,\n\t\t\t);\n\t\t\tconst existing = nodeSchema.get(key);\n\t\t\tif (existing !== undefined) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`Multiple tree schema for identifier \"${key}\". One from library \"${existing.builder.name}\" and one from \"${tree.builder.name}\"`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tnodeSchema.set(key, tree);\n\t\t\t}\n\t\t}\n\t\tfor (const _adapter of library.adapters.tree ?? []) {\n\t\t\tfail(\"Adapters not yet supported\");\n\t\t}\n\t}\n\n\tif (errors.length !== 0) {\n\t\tfail(errors.join(\"\\n\"));\n\t}\n\n\tconst result = { rootFieldSchema, nodeSchema, adapters, policy: defaultSchemaPolicy };\n\tconst errors2 = validateSchemaCollection(lintConfiguration, result, rootFieldSchema);\n\tif (errors2.length !== 0) {\n\t\tfail(errors2.join(\"\\n\"));\n\t}\n\n\treturn {\n\t\tname,\n\t\tnodeSchema,\n\t\tadapters,\n\t};\n}\n\n/**\n * Returns an array of descriptions of errors in the collection.\n *\n * As much as possible tries to detect anything that might be a mistake made by the schema author.\n * This will error on some valid but probably never intended to be used patterns (like never nodes).\n */\nexport function validateSchemaCollection(\n\tlintConfiguration: SchemaLintConfiguration,\n\tcollection: SchemaCollection,\n\trootFieldSchema?: FlexFieldSchema,\n): string[] {\n\tconst errors: string[] = [];\n\n\t// TODO: make this check specific to document schema. Replace check here for no tre or field schema (empty library).\n\tif (collection.nodeSchema.size === 0 && lintConfiguration.rejectEmpty) {\n\t\terrors.push(\"No tree schema are included, meaning no data can possibly be stored.\");\n\t}\n\n\t// Validate that all schema referenced are included, and none are \"never\".\n\tif (rootFieldSchema !== undefined) {\n\t\tvalidateRootField(lintConfiguration, collection, rootFieldSchema, errors);\n\t}\n\tfor (const [identifier, tree] of collection.nodeSchema) {\n\t\tif (tree instanceof FlexMapNodeSchema) {\n\t\t\tvalidateField(\n\t\t\t\tlintConfiguration,\n\t\t\t\tcollection,\n\t\t\t\ttree.info,\n\t\t\t\t() => `Map fields of \"${identifier}\" schema from library \"${tree.builder.name}\"`,\n\t\t\t\terrors,\n\t\t\t);\n\t\t\tif ((tree.info.kind.multiplicity as Multiplicity) === Multiplicity.Single) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`Map fields of \"${identifier}\" schema from library \"${tree.builder.name}\" has kind with multiplicity \"Single\". This is invalid since it requires all possible field keys to have a value under them.`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (tree instanceof LeafNodeSchema) {\n\t\t\t// No validation for now.\n\t\t} else if (tree instanceof FlexObjectNodeSchema) {\n\t\t\tfor (const [key, field] of tree.objectNodeFields) {\n\t\t\t\tconst description = (): string =>\n\t\t\t\t\t`Object node field \"${key}\" of \"${identifier}\" schema from library \"${tree.builder.name}\"`;\n\t\t\t\tvalidateField(lintConfiguration, collection, field, description, errors);\n\t\t\t}\n\t\t} else {\n\t\t\t// TODO: there should be a common fallback that works for cases without a specialized implementation.\n\t\t\tfail(\"unrecognized node kind\");\n\t\t}\n\t}\n\n\t// TODO: validate adapters\n\treturn errors;\n}\n\nexport function validateRootField(\n\tlintConfiguration: SchemaLintConfiguration,\n\tcollection: SchemaCollection,\n\tfield: FlexFieldSchema,\n\terrors: string[],\n): void {\n\tconst describeField = (): string => `Root field schema`;\n\tvalidateField(lintConfiguration, collection, field, describeField, errors);\n}\n\nexport function validateField(\n\tlintConfiguration: SchemaLintConfiguration,\n\tcollection: SchemaCollection,\n\tfield: FlexFieldSchema,\n\tdescribeField: () => string,\n\terrors: string[],\n): void {\n\tconst types = field.allowedTypes;\n\tif (!allowedTypesIsAny(types)) {\n\t\tconst normalizedTypes = normalizeFlexListEager(types);\n\t\tfor (const type of normalizedTypes) {\n\t\t\tconst referenced = collection.nodeSchema.get(type.name);\n\t\t\tif (referenced === undefined) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`${describeField()} references type \"${type.name}\" from library \"${\n\t\t\t\t\t\ttype.builder.name\n\t\t\t\t\t}\" which is not defined. Perhaps another type was intended, or that library needs to be added.`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (types.length === 0 && lintConfiguration.rejectEmpty) {\n\t\t\terrors.push(\n\t\t\t\t`${describeField()} requires children to have a type from a set of zero types. This means the field must always be empty.`,\n\t\t\t);\n\t\t}\n\t}\n\n\tconst kind = field.kind;\n\tconst kindFromPolicy = defaultSchemaPolicy.fieldKinds.get(kind.identifier);\n\tif (kindFromPolicy === undefined) {\n\t\terrors.push(`\"${describeField()}\" has unknown field kind \"${kind.identifier}\".`);\n\t} else if (kindFromPolicy !== kind) {\n\t\terrors.push(\n\t\t\t`${describeField()} has field kind \"${\n\t\t\t\tkind.identifier\n\t\t\t}\" which isn't a reference to the default kind with that identifier.`,\n\t\t);\n\t} else if (kind === FieldKinds.forbidden) {\n\t\tif (lintConfiguration.rejectForbidden) {\n\t\t\terrors.push(\n\t\t\t\t`${describeField()} explicitly uses \"forbidden\" kind, which is not recommended.`,\n\t\t\t);\n\t\t}\n\t} // else if (kind !== counter) {\n\t// \terrors.push(\n\t// \t\t`${describeField()} explicitly uses \"counter\" kind, which is finished.`,\n\t// \t);\n\t// }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"schemaCollection.js","sourceRoot":"","sources":["../../../src/feature-libraries/typed-schema/schemaCollection.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 } from \"@fluidframework/core-utils/internal\";\n\nimport {\n\ttype Adapters,\n\ttype TreeAdapter,\n\ttype TreeNodeSchemaIdentifier,\n\tMultiplicity,\n} from \"../../core/index.js\";\nimport { fail, type requireAssignableTo } from \"../../util/index.js\";\nimport { FieldKinds, defaultSchemaPolicy } from \"../default-schema/index.js\";\n\nimport { normalizeFlexListEager } from \"./flexList.js\";\nimport {\n\ttype FlexFieldSchema,\n\tFlexMapNodeSchema,\n\tFlexObjectNodeSchema,\n\ttype FlexTreeNodeSchema,\n\tLeafNodeSchema,\n\ttype SchemaCollection,\n} from \"./typedTreeSchema.js\";\nimport type { Sourced } from \"./view.js\";\n\n// TODO: tests for this file\n\n/**\n * Schema data collected by a single SchemaBuilder (does not include referenced libraries).\n * @internal\n */\nexport interface SchemaLibraryData extends SchemaCollection {\n\treadonly name: string;\n\treadonly adapters: Adapters;\n}\n\n/**\n * Mutable adapter collection which records the associated factory.\n * See {@link Adapters}.\n */\nexport interface SourcedAdapters {\n\treadonly tree: (Sourced & TreeAdapter)[];\n}\n\n{\n\ttype _check = requireAssignableTo<SourcedAdapters, Adapters>;\n}\n\n/**\n * Allows opting into and out of errors for some unusual schema patterns which are usually bugs.\n * @internal\n */\nexport interface SchemaLintConfiguration {\n\treadonly rejectForbidden: boolean;\n\treadonly rejectEmpty: boolean;\n}\n\nexport const schemaLintDefault: SchemaLintConfiguration = {\n\trejectForbidden: true,\n\trejectEmpty: true,\n};\n\n/**\n * Build and validate a SchemaCollection.\n *\n * As much as possible tries to detect anything that might be a mistake made by the schema author.\n * This will error on some valid but probably never intended to be used patterns\n * (like libraries with the same name, nodes which are impossible to create etc).\n *\n * @param name - Name of the resulting library.\n * @param lintConfiguration - configuration for what errors to generate.\n * @param libraries - Data to aggregate into the SchemaCollection.\n * @param rootFieldSchema - Only validated: not included in the result.\n *\n * @privateRemarks\n * This checks that input works with defaultSchemaPolicy.\n * If support fo other policies is added, this will need to take in the policy.\n */\nexport function aggregateSchemaLibraries(\n\tname: string,\n\tlintConfiguration: SchemaLintConfiguration,\n\tlibraries: Iterable<SchemaLibraryData>,\n\trootFieldSchema?: FlexFieldSchema,\n): SchemaLibraryData {\n\tconst nodeSchema: Map<TreeNodeSchemaIdentifier, FlexTreeNodeSchema> = new Map();\n\tconst adapters: SourcedAdapters = { tree: [] };\n\n\tconst errors: string[] = [];\n\tconst librarySet: Set<SchemaLibraryData> = new Set();\n\tconst libraryNames: Set<string> = new Set();\n\n\tfor (const library of libraries) {\n\t\tif (librarySet.has(library)) {\n\t\t\t// SchemaBuilder should ensure this doesn't happen, but include it here for completeness.\n\t\t\terrors.push(`Duplicate library named \"${library.name}\"`);\n\t\t\tcontinue;\n\t\t}\n\t\tlibrarySet.add(library);\n\t\tif (libraryNames.has(library.name)) {\n\t\t\t// This wouldn't break anything, but could make error messages confusing, so its better to avoid duplicates.\n\t\t\terrors.push(`Found another library with name \"${library.name}\"`);\n\t\t}\n\n\t\tfor (const [key, tree] of library.nodeSchema) {\n\t\t\t// This check is an assert since if it fails, the other error messages would be incorrect.\n\t\t\tassert(\n\t\t\t\ttree.builder.name === library.name,\n\t\t\t\t0x6a9 /* tree must be part by the library its in */,\n\t\t\t);\n\t\t\tconst existing = nodeSchema.get(key);\n\t\t\tif (existing !== undefined) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`Multiple tree schema for identifier \"${key}\". One from library \"${existing.builder.name}\" and one from \"${tree.builder.name}\"`,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tnodeSchema.set(key, tree);\n\t\t\t}\n\t\t}\n\t\tfor (const _adapter of library.adapters.tree ?? []) {\n\t\t\tfail(\"Adapters not yet supported\");\n\t\t}\n\t}\n\n\tif (errors.length !== 0) {\n\t\tfail(errors.join(\"\\n\"));\n\t}\n\n\tconst result = { rootFieldSchema, nodeSchema, adapters, policy: defaultSchemaPolicy };\n\tconst errors2 = validateSchemaCollection(lintConfiguration, result, rootFieldSchema);\n\tif (errors2.length !== 0) {\n\t\tfail(errors2.join(\"\\n\"));\n\t}\n\n\treturn {\n\t\tname,\n\t\tnodeSchema,\n\t\tadapters,\n\t};\n}\n\n/**\n * Returns an array of descriptions of errors in the collection.\n *\n * As much as possible tries to detect anything that might be a mistake made by the schema author.\n * This will error on some valid but probably never intended to be used patterns (like never nodes).\n */\nexport function validateSchemaCollection(\n\tlintConfiguration: SchemaLintConfiguration,\n\tcollection: SchemaCollection,\n\trootFieldSchema?: FlexFieldSchema,\n): string[] {\n\tconst errors: string[] = [];\n\n\t// TODO: make this check specific to document schema. Replace check here for no tre or field schema (empty library).\n\tif (collection.nodeSchema.size === 0 && lintConfiguration.rejectEmpty) {\n\t\terrors.push(\"No tree schema are included, meaning no data can possibly be stored.\");\n\t}\n\n\t// Validate that all schema referenced are included, and none are \"never\".\n\tif (rootFieldSchema !== undefined) {\n\t\tvalidateRootField(lintConfiguration, collection, rootFieldSchema, errors);\n\t}\n\tfor (const [identifier, tree] of collection.nodeSchema) {\n\t\tif (tree instanceof FlexMapNodeSchema) {\n\t\t\tvalidateField(\n\t\t\t\tlintConfiguration,\n\t\t\t\tcollection,\n\t\t\t\ttree.info as FlexFieldSchema,\n\t\t\t\t() => `Map fields of \"${identifier}\" schema from library \"${tree.builder.name}\"`,\n\t\t\t\terrors,\n\t\t\t);\n\t\t\tif ((tree.info as FlexFieldSchema).kind.multiplicity === Multiplicity.Single) {\n\t\t\t\terrors.push(\n\t\t\t\t\t`Map fields of \"${identifier}\" schema from library \"${tree.builder.name}\" has kind with multiplicity \"Single\". This is invalid since it requires all possible field keys to have a value under them.`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else if (tree instanceof LeafNodeSchema) {\n\t\t\t// No validation for now.\n\t\t} else if (tree instanceof FlexObjectNodeSchema) {\n\t\t\tfor (const [key, field] of tree.objectNodeFields) {\n\t\t\t\tconst description = (): string =>\n\t\t\t\t\t`Object node field \"${key}\" of \"${identifier}\" schema from library \"${tree.builder.name}\"`;\n\t\t\t\tvalidateField(lintConfiguration, collection, field, description, errors);\n\t\t\t}\n\t\t} else {\n\t\t\t// TODO: there should be a common fallback that works for cases without a specialized implementation.\n\t\t\tfail(\"unrecognized node kind\");\n\t\t}\n\t}\n\n\t// TODO: validate adapters\n\treturn errors;\n}\n\nexport function validateRootField(\n\tlintConfiguration: SchemaLintConfiguration,\n\tcollection: SchemaCollection,\n\tfield: FlexFieldSchema,\n\terrors: string[],\n): void {\n\tconst describeField = (): string => `Root field schema`;\n\tvalidateField(lintConfiguration, collection, field, describeField, errors);\n}\n\nexport function validateField(\n\tlintConfiguration: SchemaLintConfiguration,\n\tcollection: SchemaCollection,\n\tfield: FlexFieldSchema,\n\tdescribeField: () => string,\n\terrors: string[],\n): void {\n\tconst types = field.allowedTypes;\n\n\tconst normalizedTypes = normalizeFlexListEager(types);\n\tfor (const type of normalizedTypes) {\n\t\tconst referenced = collection.nodeSchema.get(type.name);\n\t\tif (referenced === undefined) {\n\t\t\terrors.push(\n\t\t\t\t`${describeField()} references type \"${type.name}\" from library \"${\n\t\t\t\t\ttype.builder.name\n\t\t\t\t}\" which is not defined. Perhaps another type was intended, or that library needs to be added.`,\n\t\t\t);\n\t\t}\n\t}\n\tif (types.length === 0 && lintConfiguration.rejectEmpty) {\n\t\terrors.push(\n\t\t\t`${describeField()} requires children to have a type from a set of zero types. This means the field must always be empty.`,\n\t\t);\n\t}\n\n\tconst kind = field.kind;\n\tconst kindFromPolicy = defaultSchemaPolicy.fieldKinds.get(kind.identifier);\n\tif (kindFromPolicy === undefined) {\n\t\terrors.push(`\"${describeField()}\" has unknown field kind \"${kind.identifier}\".`);\n\t} else if (kindFromPolicy !== kind) {\n\t\terrors.push(\n\t\t\t`${describeField()} has field kind \"${\n\t\t\t\tkind.identifier\n\t\t\t}\" which isn't a reference to the default kind with that identifier.`,\n\t\t);\n\t} else if (kind === FieldKinds.forbidden) {\n\t\tif (lintConfiguration.rejectForbidden) {\n\t\t\terrors.push(\n\t\t\t\t`${describeField()} explicitly uses \"forbidden\" kind, which is not recommended.`,\n\t\t\t);\n\t\t}\n\t} // else if (kind !== counter) {\n\t// \terrors.push(\n\t// \t\t`${describeField()} explicitly uses \"counter\" kind, which is finished.`,\n\t// \t);\n\t// }\n}\n"]}
|