@fluidframework/tree 2.52.0 → 2.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.cjs +14 -2
- package/CHANGELOG.md +125 -0
- package/api-report/tree.alpha.api.md +48 -41
- package/dist/alpha.d.ts +2 -1
- package/dist/core/tree/visitDelta.d.ts +1 -1
- package/dist/core/tree/visitDelta.d.ts.map +1 -1
- package/dist/core/tree/visitDelta.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.d.ts +1 -0
- package/dist/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/index.js +3 -1
- package/dist/feature-libraries/chunked-forest/index.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +2 -4
- package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js +3 -0
- package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
- package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts +4 -0
- package/dist/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/dist/feature-libraries/forest-summary/forestSummarizer.js +5 -5
- package/dist/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/dist/feature-libraries/index.d.ts +1 -1
- package/dist/feature-libraries/index.d.ts.map +1 -1
- package/dist/feature-libraries/index.js +4 -2
- package/dist/feature-libraries/index.js.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
- package/dist/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/dist/feature-libraries/modular-schema/genericFieldKind.js +1 -0
- package/dist/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/dist/feature-libraries/modular-schema/modularChangeCodecs.js +1 -0
- 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 +49 -20
- package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/dist/feature-libraries/optional-field/optionalField.js +3 -0
- package/dist/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
- package/dist/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
- package/dist/feature-libraries/sequence-field/types.d.ts +1 -1
- package/dist/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/dist/feature-libraries/sequence-field/types.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/jsonDomainSchema.d.ts +5 -3
- package/dist/jsonDomainSchema.d.ts.map +1 -1
- package/dist/jsonDomainSchema.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/independentView.d.ts.map +1 -1
- package/dist/shared-tree/independentView.js +1 -1
- package/dist/shared-tree/independentView.js.map +1 -1
- package/dist/shared-tree/index.d.ts +0 -1
- package/dist/shared-tree/index.d.ts.map +1 -1
- package/dist/shared-tree/index.js.map +1 -1
- package/dist/shared-tree/schematizeTree.d.ts +23 -60
- package/dist/shared-tree/schematizeTree.d.ts.map +1 -1
- package/dist/shared-tree/schematizeTree.js +59 -151
- package/dist/shared-tree/schematizeTree.js.map +1 -1
- package/dist/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/dist/shared-tree/schematizingTreeView.js +11 -11
- package/dist/shared-tree/schematizingTreeView.js.map +1 -1
- package/dist/shared-tree/treeAlpha.d.ts.map +1 -1
- package/dist/shared-tree/treeAlpha.js +9 -3
- package/dist/shared-tree/treeAlpha.js.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts +2 -1
- package/dist/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/dist/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/dist/simple-tree/api/configuration.d.ts +3 -0
- package/dist/simple-tree/api/configuration.d.ts.map +1 -1
- package/dist/simple-tree/api/configuration.js +5 -1
- package/dist/simple-tree/api/configuration.js.map +1 -1
- package/dist/simple-tree/api/create.d.ts +4 -4
- package/dist/simple-tree/api/create.d.ts.map +1 -1
- package/dist/simple-tree/api/create.js +3 -6
- package/dist/simple-tree/api/create.js.map +1 -1
- package/dist/simple-tree/api/discrepancies.d.ts +5 -9
- package/dist/simple-tree/api/discrepancies.d.ts.map +1 -1
- package/dist/simple-tree/api/discrepancies.js +11 -10
- package/dist/simple-tree/api/discrepancies.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +3 -2
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +3 -2
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaCompatibilityTester.js +3 -4
- package/dist/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/dist/simple-tree/api/schemaFactory.d.ts +9 -155
- package/dist/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactory.js +4 -47
- package/dist/simple-tree/api/schemaFactory.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.js +33 -11
- package/dist/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
- package/dist/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaFactoryRecursive.js +1 -7
- package/dist/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/dist/simple-tree/api/schemaStatics.d.ts +158 -0
- package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -0
- package/dist/simple-tree/api/schemaStatics.js +59 -0
- package/dist/simple-tree/api/schemaStatics.js.map +1 -0
- package/dist/simple-tree/api/storedSchema.d.ts +5 -3
- package/dist/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/dist/simple-tree/api/storedSchema.js +4 -2
- package/dist/simple-tree/api/storedSchema.js.map +1 -1
- package/dist/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/dist/simple-tree/api/treeBeta.js +12 -6
- package/dist/simple-tree/api/treeBeta.js.map +1 -1
- package/dist/simple-tree/core/allowedTypes.d.ts +46 -30
- package/dist/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/dist/simple-tree/core/allowedTypes.js +20 -12
- package/dist/simple-tree/core/allowedTypes.js.map +1 -1
- package/dist/simple-tree/core/index.d.ts +5 -3
- package/dist/simple-tree/core/index.d.ts.map +1 -1
- package/dist/simple-tree/core/index.js +6 -1
- package/dist/simple-tree/core/index.js.map +1 -1
- package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.js +7 -0
- package/dist/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
- package/dist/simple-tree/core/toStored.d.ts +32 -0
- package/dist/simple-tree/core/toStored.d.ts.map +1 -0
- package/dist/simple-tree/core/toStored.js +37 -0
- package/dist/simple-tree/core/toStored.js.map +1 -0
- package/dist/simple-tree/core/treeNode.d.ts +0 -3
- package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNode.js +3 -3
- package/dist/simple-tree/core/treeNode.js.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.d.ts +7 -2
- package/dist/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts +6 -1
- package/dist/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNodeValid.js +11 -6
- package/dist/simple-tree/core/treeNodeValid.js.map +1 -1
- package/dist/simple-tree/core/walkSchema.d.ts +19 -5
- package/dist/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/dist/simple-tree/core/walkSchema.js +4 -2
- package/dist/simple-tree/core/walkSchema.js.map +1 -1
- package/dist/simple-tree/createContext.d.ts.map +1 -1
- package/dist/simple-tree/createContext.js +1 -1
- package/dist/simple-tree/createContext.js.map +1 -1
- package/dist/simple-tree/fieldSchema.d.ts +2 -1
- package/dist/simple-tree/fieldSchema.d.ts.map +1 -1
- package/dist/simple-tree/fieldSchema.js +1 -1
- package/dist/simple-tree/fieldSchema.js.map +1 -1
- package/dist/simple-tree/index.d.ts +4 -4
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +9 -2
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +1 -0
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +18 -4
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +9 -2
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
- package/dist/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +37 -26
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +9 -2
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/simple-tree/prepareForInsertion.d.ts +5 -5
- package/dist/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/dist/simple-tree/prepareForInsertion.js +10 -10
- package/dist/simple-tree/prepareForInsertion.js.map +1 -1
- package/dist/simple-tree/simpleSchema.d.ts +6 -21
- package/dist/simple-tree/simpleSchema.d.ts.map +1 -1
- package/dist/simple-tree/simpleSchema.js.map +1 -1
- package/dist/simple-tree/toStoredSchema.d.ts +35 -11
- package/dist/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/dist/simple-tree/toStoredSchema.js +68 -33
- package/dist/simple-tree/toStoredSchema.js.map +1 -1
- package/dist/tableSchema.d.ts +25 -32
- package/dist/tableSchema.d.ts.map +1 -1
- package/dist/tableSchema.js +10 -24
- package/dist/tableSchema.js.map +1 -1
- package/docs/.attachments/cell-ordering/C-knows-of-ABC.png +0 -0
- package/docs/.attachments/cell-ordering/C-knows-of-C.png +0 -0
- package/docs/.attachments/cell-ordering/XvsA.png +0 -0
- package/docs/.attachments/cell-ordering/compose-a-b.png +0 -0
- package/docs/.attachments/cell-ordering/compose-a-ref-p1-b-ref-p2.png +0 -0
- package/docs/.attachments/cell-ordering/compose-b-no-ref-to-ca.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-ab-over-x.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-b-over-x.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-b2-over-x.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-b2.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-to-abprime.png +0 -0
- package/docs/.attachments/cell-ordering/rebase-to-bprime.png +0 -0
- package/docs/main/cell-ordering.md +638 -0
- package/lib/alpha.d.ts +2 -1
- package/lib/core/tree/visitDelta.d.ts +1 -1
- package/lib/core/tree/visitDelta.d.ts.map +1 -1
- package/lib/core/tree/visitDelta.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.d.ts +1 -0
- package/lib/feature-libraries/chunked-forest/index.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/index.js +1 -0
- package/lib/feature-libraries/chunked-forest/index.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +2 -4
- package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js +4 -1
- package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -0
- package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/default-schema/noChangeCodecs.js.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts +4 -0
- package/lib/feature-libraries/forest-summary/forestSummarizer.d.ts.map +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js +1 -1
- package/lib/feature-libraries/forest-summary/forestSummarizer.js.map +1 -1
- package/lib/feature-libraries/index.d.ts +1 -1
- package/lib/feature-libraries/index.d.ts.map +1 -1
- package/lib/feature-libraries/index.js +1 -1
- package/lib/feature-libraries/index.js.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts +7 -0
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js +1 -0
- package/lib/feature-libraries/modular-schema/fieldChangeHandler.js.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.d.ts.map +1 -1
- package/lib/feature-libraries/modular-schema/genericFieldKind.js +1 -0
- package/lib/feature-libraries/modular-schema/genericFieldKind.js.map +1 -1
- package/lib/feature-libraries/modular-schema/modularChangeCodecs.js +1 -0
- 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 +50 -21
- package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.d.ts.map +1 -1
- package/lib/feature-libraries/optional-field/optionalField.js +3 -0
- package/lib/feature-libraries/optional-field/optionalField.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts +1 -0
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js +4 -0
- package/lib/feature-libraries/sequence-field/sequenceFieldChangeRebaser.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV1.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV2.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecV3.js.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/sequenceFieldCodecs.js.map +1 -1
- package/lib/feature-libraries/sequence-field/types.d.ts +1 -1
- package/lib/feature-libraries/sequence-field/types.d.ts.map +1 -1
- package/lib/feature-libraries/sequence-field/types.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/jsonDomainSchema.d.ts +5 -3
- package/lib/jsonDomainSchema.d.ts.map +1 -1
- package/lib/jsonDomainSchema.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/independentView.d.ts.map +1 -1
- package/lib/shared-tree/independentView.js +2 -2
- package/lib/shared-tree/independentView.js.map +1 -1
- package/lib/shared-tree/index.d.ts +0 -1
- package/lib/shared-tree/index.d.ts.map +1 -1
- package/lib/shared-tree/index.js.map +1 -1
- package/lib/shared-tree/schematizeTree.d.ts +23 -60
- package/lib/shared-tree/schematizeTree.d.ts.map +1 -1
- package/lib/shared-tree/schematizeTree.js +60 -150
- package/lib/shared-tree/schematizeTree.js.map +1 -1
- package/lib/shared-tree/schematizingTreeView.d.ts.map +1 -1
- package/lib/shared-tree/schematizingTreeView.js +14 -14
- package/lib/shared-tree/schematizingTreeView.js.map +1 -1
- package/lib/shared-tree/treeAlpha.d.ts.map +1 -1
- package/lib/shared-tree/treeAlpha.js +10 -4
- package/lib/shared-tree/treeAlpha.js.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts +2 -1
- package/lib/shared-tree-core/defaultResubmitMachine.d.ts.map +1 -1
- package/lib/shared-tree-core/defaultResubmitMachine.js.map +1 -1
- package/lib/simple-tree/api/configuration.d.ts +3 -0
- package/lib/simple-tree/api/configuration.d.ts.map +1 -1
- package/lib/simple-tree/api/configuration.js +6 -2
- package/lib/simple-tree/api/configuration.js.map +1 -1
- package/lib/simple-tree/api/create.d.ts +4 -4
- package/lib/simple-tree/api/create.d.ts.map +1 -1
- package/lib/simple-tree/api/create.js +3 -6
- package/lib/simple-tree/api/create.js.map +1 -1
- package/lib/simple-tree/api/discrepancies.d.ts +5 -9
- package/lib/simple-tree/api/discrepancies.d.ts.map +1 -1
- package/lib/simple-tree/api/discrepancies.js +11 -10
- package/lib/simple-tree/api/discrepancies.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +3 -2
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +2 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaCompatibilityTester.js +4 -5
- package/lib/simple-tree/api/schemaCompatibilityTester.js.map +1 -1
- package/lib/simple-tree/api/schemaFactory.d.ts +9 -155
- package/lib/simple-tree/api/schemaFactory.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactory.js +2 -45
- package/lib/simple-tree/api/schemaFactory.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +157 -16
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js +23 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts +1 -3
- package/lib/simple-tree/api/schemaFactoryRecursive.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaFactoryRecursive.js +0 -5
- package/lib/simple-tree/api/schemaFactoryRecursive.js.map +1 -1
- package/lib/simple-tree/api/schemaStatics.d.ts +158 -0
- package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -0
- package/lib/simple-tree/api/schemaStatics.js +56 -0
- package/lib/simple-tree/api/schemaStatics.js.map +1 -0
- package/lib/simple-tree/api/storedSchema.d.ts +5 -3
- package/lib/simple-tree/api/storedSchema.d.ts.map +1 -1
- package/lib/simple-tree/api/storedSchema.js +6 -4
- package/lib/simple-tree/api/storedSchema.js.map +1 -1
- package/lib/simple-tree/api/treeBeta.d.ts.map +1 -1
- package/lib/simple-tree/api/treeBeta.js +8 -2
- package/lib/simple-tree/api/treeBeta.js.map +1 -1
- package/lib/simple-tree/core/allowedTypes.d.ts +46 -30
- package/lib/simple-tree/core/allowedTypes.d.ts.map +1 -1
- package/lib/simple-tree/core/allowedTypes.js +23 -12
- package/lib/simple-tree/core/allowedTypes.js.map +1 -1
- package/lib/simple-tree/core/index.d.ts +5 -3
- package/lib/simple-tree/core/index.d.ts.map +1 -1
- package/lib/simple-tree/core/index.js +3 -2
- package/lib/simple-tree/core/index.js.map +1 -1
- package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts +25 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.d.ts.map +1 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.js +6 -0
- package/lib/simple-tree/core/simpleNodeSchemaBase.js.map +1 -0
- package/lib/simple-tree/core/toStored.d.ts +32 -0
- package/lib/simple-tree/core/toStored.d.ts.map +1 -0
- package/lib/simple-tree/core/toStored.js +32 -0
- package/lib/simple-tree/core/toStored.js.map +1 -0
- package/lib/simple-tree/core/treeNode.d.ts +0 -3
- package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNode.js +3 -3
- package/lib/simple-tree/core/treeNode.js.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.d.ts +7 -2
- package/lib/simple-tree/core/treeNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeSchema.js.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts +6 -1
- package/lib/simple-tree/core/treeNodeValid.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNodeValid.js +9 -5
- package/lib/simple-tree/core/treeNodeValid.js.map +1 -1
- package/lib/simple-tree/core/walkSchema.d.ts +19 -5
- package/lib/simple-tree/core/walkSchema.d.ts.map +1 -1
- package/lib/simple-tree/core/walkSchema.js +4 -2
- package/lib/simple-tree/core/walkSchema.js.map +1 -1
- package/lib/simple-tree/createContext.d.ts.map +1 -1
- package/lib/simple-tree/createContext.js +2 -2
- package/lib/simple-tree/createContext.js.map +1 -1
- package/lib/simple-tree/fieldSchema.d.ts +2 -1
- package/lib/simple-tree/fieldSchema.d.ts.map +1 -1
- package/lib/simple-tree/fieldSchema.js +1 -1
- package/lib/simple-tree/fieldSchema.js.map +1 -1
- package/lib/simple-tree/index.d.ts +4 -4
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +2 -2
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +2 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +21 -7
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +12 -5
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts +2 -2
- package/lib/simple-tree/node-kinds/object/objectNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +16 -5
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +12 -5
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/simple-tree/prepareForInsertion.d.ts +5 -5
- package/lib/simple-tree/prepareForInsertion.d.ts.map +1 -1
- package/lib/simple-tree/prepareForInsertion.js +10 -10
- package/lib/simple-tree/prepareForInsertion.js.map +1 -1
- package/lib/simple-tree/simpleSchema.d.ts +6 -21
- package/lib/simple-tree/simpleSchema.d.ts.map +1 -1
- package/lib/simple-tree/simpleSchema.js.map +1 -1
- package/lib/simple-tree/toStoredSchema.d.ts +35 -11
- package/lib/simple-tree/toStoredSchema.d.ts.map +1 -1
- package/lib/simple-tree/toStoredSchema.js +67 -34
- package/lib/simple-tree/toStoredSchema.js.map +1 -1
- package/lib/tableSchema.d.ts +25 -32
- package/lib/tableSchema.d.ts.map +1 -1
- package/lib/tableSchema.js +11 -25
- package/lib/tableSchema.js.map +1 -1
- package/package.json +21 -21
- package/src/core/tree/visitDelta.ts +3 -1
- package/src/feature-libraries/chunked-forest/index.ts +1 -0
- package/src/feature-libraries/default-schema/defaultEditBuilder.ts +12 -5
- package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -0
- package/src/feature-libraries/default-schema/noChangeCodecs.ts +1 -1
- package/src/feature-libraries/forest-summary/forestSummarizer.ts +1 -1
- package/src/feature-libraries/index.ts +2 -0
- package/src/feature-libraries/modular-schema/fieldChangeHandler.ts +9 -0
- package/src/feature-libraries/modular-schema/genericFieldKind.ts +1 -0
- package/src/feature-libraries/modular-schema/modularChangeCodecs.ts +1 -0
- package/src/feature-libraries/modular-schema/modularChangeFamily.ts +61 -19
- package/src/feature-libraries/optional-field/optionalField.ts +4 -0
- package/src/feature-libraries/sequence-field/sequenceFieldChangeRebaser.ts +4 -0
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV1.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV2.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecV3.ts +4 -2
- package/src/feature-libraries/sequence-field/sequenceFieldCodecs.ts +1 -1
- package/src/feature-libraries/sequence-field/types.ts +1 -1
- package/src/index.ts +2 -1
- package/src/jsonDomainSchema.ts +4 -0
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/independentView.ts +6 -2
- package/src/shared-tree/index.ts +0 -2
- package/src/shared-tree/schematizeTree.ts +83 -199
- package/src/shared-tree/schematizingTreeView.ts +26 -12
- package/src/shared-tree/treeAlpha.ts +18 -4
- package/src/shared-tree-core/defaultResubmitMachine.ts +2 -1
- package/src/simple-tree/api/configuration.ts +10 -2
- package/src/simple-tree/api/create.ts +5 -10
- package/src/simple-tree/api/discrepancies.ts +18 -17
- package/src/simple-tree/api/index.ts +2 -3
- package/src/simple-tree/api/schemaCompatibilityTester.ts +5 -9
- package/src/simple-tree/api/schemaFactory.ts +6 -250
- package/src/simple-tree/api/schemaFactoryAlpha.ts +174 -1
- package/src/simple-tree/api/schemaFactoryRecursive.ts +1 -25
- package/src/simple-tree/api/schemaStatics.ts +291 -0
- package/src/simple-tree/api/storedSchema.ts +12 -5
- package/src/simple-tree/api/treeBeta.ts +9 -2
- package/src/simple-tree/core/allowedTypes.ts +71 -42
- package/src/simple-tree/core/index.ts +9 -1
- package/src/simple-tree/core/simpleNodeSchemaBase.ts +30 -0
- package/src/simple-tree/core/toStored.ts +58 -0
- package/src/simple-tree/core/treeNode.ts +3 -3
- package/src/simple-tree/core/treeNodeSchema.ts +8 -2
- package/src/simple-tree/core/treeNodeValid.ts +14 -5
- package/src/simple-tree/core/walkSchema.ts +23 -6
- package/src/simple-tree/createContext.ts +5 -2
- package/src/simple-tree/fieldSchema.ts +4 -2
- package/src/simple-tree/index.ts +15 -6
- package/src/simple-tree/leafNodeSchema.ts +2 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +58 -37
- package/src/simple-tree/node-kinds/map/mapNode.ts +26 -2
- package/src/simple-tree/node-kinds/object/objectNode.ts +37 -4
- package/src/simple-tree/node-kinds/record/recordNode.ts +23 -2
- package/src/simple-tree/prepareForInsertion.ts +12 -7
- package/src/simple-tree/simpleSchema.ts +6 -26
- package/src/simple-tree/toStoredSchema.ts +107 -44
- package/src/tableSchema.ts +40 -35
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { IFluidHandle } from "@fluidframework/core-interfaces";
|
|
7
|
+
import type {
|
|
8
|
+
ImplicitAllowedTypes,
|
|
9
|
+
ImplicitAnnotatedAllowedTypes,
|
|
10
|
+
UnannotateImplicitAllowedTypes,
|
|
11
|
+
} from "../core/index.js";
|
|
12
|
+
import { FieldKind, getDefaultProvider, createFieldSchema } from "../fieldSchema.js";
|
|
13
|
+
import type {
|
|
14
|
+
FieldProps,
|
|
15
|
+
FieldSchema,
|
|
16
|
+
DefaultProvider,
|
|
17
|
+
FieldPropsAlpha,
|
|
18
|
+
FieldSchemaAlpha,
|
|
19
|
+
} from "../fieldSchema.js";
|
|
20
|
+
import type { LeafSchema } from "../leafNodeSchema.js";
|
|
21
|
+
import {
|
|
22
|
+
stringSchema,
|
|
23
|
+
numberSchema,
|
|
24
|
+
booleanSchema,
|
|
25
|
+
nullSchema,
|
|
26
|
+
handleSchema,
|
|
27
|
+
} from "../leafNodeSchema.js";
|
|
28
|
+
import type { System_Unsafe, FieldSchemaAlphaUnsafe } from "./typesUnsafe.js";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Stateless APIs exposed via {@link SchemaFactory} as both instance properties and as statics.
|
|
32
|
+
* @privateRemarks
|
|
33
|
+
* We have no way to make linkable members which exist both as statics and instance properties since API-Extractor does not support this.
|
|
34
|
+
* As a workaround, we have this type as a third place which can be linked.
|
|
35
|
+
* @system @sealed @public
|
|
36
|
+
*/
|
|
37
|
+
export interface SchemaStatics {
|
|
38
|
+
/**
|
|
39
|
+
* {@link TreeNodeSchema} for holding a JavaScript `string`.
|
|
40
|
+
*
|
|
41
|
+
* @remarks
|
|
42
|
+
* Strings containing unpaired UTF-16 surrogate pair code units may not be handled correctly.
|
|
43
|
+
*
|
|
44
|
+
* These limitations come from the use of UTF-8 encoding of the strings, which requires them to be valid unicode.
|
|
45
|
+
* JavaScript does not make this requirement for its strings so not all possible JavaScript strings are supported.
|
|
46
|
+
* @privateRemarks
|
|
47
|
+
* TODO:
|
|
48
|
+
* We should be much more clear about what happens if you use problematic values.
|
|
49
|
+
* We should validate and/or normalize them when inserting content.
|
|
50
|
+
*/
|
|
51
|
+
readonly string: LeafSchema<"string", string>;
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* {@link TreeNodeSchema} for holding a JavaScript `number`.
|
|
55
|
+
*
|
|
56
|
+
* @remarks
|
|
57
|
+
* The number is a {@link https://en.wikipedia.org/wiki/Double-precision_floating-point_format | double-precision 64-bit binary format IEEE 754} value, however there are some exceptions:
|
|
58
|
+
*
|
|
59
|
+
* - `NaN`, and the infinities are converted to `null` (and may therefore only be used where `null` is allowed by the schema).
|
|
60
|
+
*
|
|
61
|
+
* - `-0` may be converted to `0` in some cases.
|
|
62
|
+
*
|
|
63
|
+
* These limitations match the limitations of JSON.
|
|
64
|
+
* @privateRemarks
|
|
65
|
+
* TODO:
|
|
66
|
+
* We should be much more clear about what happens if you use problematic values.
|
|
67
|
+
* We should validate and/or normalize them when inserting content.
|
|
68
|
+
*/
|
|
69
|
+
readonly number: LeafSchema<"number", number>;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* {@link TreeNodeSchema} for holding a boolean.
|
|
73
|
+
*/
|
|
74
|
+
readonly boolean: LeafSchema<"boolean", boolean>;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* {@link TreeNodeSchema} for JavaScript `null`.
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* There are good {@link https://www.npmjs.com/package/%40rushstack/eslint-plugin#rushstackno-new-null | reasons to avoid using null} in JavaScript, however sometimes it is desired.
|
|
81
|
+
* This {@link TreeNodeSchema} node provides the option to include nulls in trees when desired.
|
|
82
|
+
* Unless directly inter-operating with existing data using null, consider other approaches, like wrapping the value in an optional field, or using a more specifically named empty object node.
|
|
83
|
+
*/
|
|
84
|
+
// eslint-disable-next-line @rushstack/no-new-null
|
|
85
|
+
readonly null: LeafSchema<"null", null>;
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* {@link TreeNodeSchema} for holding an {@link @fluidframework/core-interfaces#(IFluidHandle:interface)}.
|
|
89
|
+
*/
|
|
90
|
+
readonly handle: LeafSchema<"handle", IFluidHandle>;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* {@link AllowedTypes} for holding any of the leaf types.
|
|
94
|
+
*/
|
|
95
|
+
readonly leaves: readonly [
|
|
96
|
+
SchemaStatics["string"],
|
|
97
|
+
SchemaStatics["number"],
|
|
98
|
+
SchemaStatics["boolean"],
|
|
99
|
+
SchemaStatics["null"],
|
|
100
|
+
SchemaStatics["handle"],
|
|
101
|
+
];
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Make a field optional instead of the default, which is required.
|
|
105
|
+
*
|
|
106
|
+
* @param t - The types allowed under the field.
|
|
107
|
+
* @param props - Optional properties to associate with the field.
|
|
108
|
+
*
|
|
109
|
+
* @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
|
|
110
|
+
* See {@link FieldSchemaMetadata.custom}.
|
|
111
|
+
*/
|
|
112
|
+
readonly optional: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(
|
|
113
|
+
t: T,
|
|
114
|
+
props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">,
|
|
115
|
+
) => FieldSchema<FieldKind.Optional, T, TCustomMetadata>;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Make a field explicitly required.
|
|
119
|
+
*
|
|
120
|
+
* @param t - The types allowed under the field.
|
|
121
|
+
* @param props - Optional properties to associate with the field.
|
|
122
|
+
*
|
|
123
|
+
* @remarks
|
|
124
|
+
* Fields are required by default, but this API can be used to make the required nature explicit in the schema,
|
|
125
|
+
* and allows associating custom {@link FieldProps | properties} with the field.
|
|
126
|
+
*
|
|
127
|
+
* @typeParam TCustomMetadata - Custom metadata properties to associate with the field.
|
|
128
|
+
* See {@link FieldSchemaMetadata.custom}.
|
|
129
|
+
*/
|
|
130
|
+
readonly required: <const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(
|
|
131
|
+
t: T,
|
|
132
|
+
props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">,
|
|
133
|
+
) => FieldSchema<FieldKind.Required, T, TCustomMetadata>;
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* {@link SchemaStatics.optional} except tweaked to work better for recursive types.
|
|
137
|
+
* Use with {@link ValidateRecursiveSchema} for improved type safety.
|
|
138
|
+
* @remarks
|
|
139
|
+
* This version of {@link SchemaStatics.optional} has fewer type constraints to work around TypeScript limitations, see {@link Unenforced}.
|
|
140
|
+
* See {@link ValidateRecursiveSchema} for additional information about using recursive schema.
|
|
141
|
+
*/
|
|
142
|
+
readonly optionalRecursive: <
|
|
143
|
+
const T extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
144
|
+
const TCustomMetadata = unknown,
|
|
145
|
+
>(
|
|
146
|
+
t: T,
|
|
147
|
+
props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">,
|
|
148
|
+
) => System_Unsafe.FieldSchemaUnsafe<FieldKind.Optional, T, TCustomMetadata>;
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* {@link SchemaStatics.required} except tweaked to work better for recursive types.
|
|
152
|
+
* Use with {@link ValidateRecursiveSchema} for improved type safety.
|
|
153
|
+
* @remarks
|
|
154
|
+
* This version of {@link SchemaStatics.required} has fewer type constraints to work around TypeScript limitations, see {@link Unenforced}.
|
|
155
|
+
* See {@link ValidateRecursiveSchema} for additional information about using recursive schema.
|
|
156
|
+
*/
|
|
157
|
+
readonly requiredRecursive: <
|
|
158
|
+
const T extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
159
|
+
const TCustomMetadata = unknown,
|
|
160
|
+
>(
|
|
161
|
+
t: T,
|
|
162
|
+
props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">,
|
|
163
|
+
) => System_Unsafe.FieldSchemaUnsafe<FieldKind.Required, T, TCustomMetadata>;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
const defaultOptionalProvider: DefaultProvider = getDefaultProvider(() => []);
|
|
167
|
+
|
|
168
|
+
// The following overloads for optional and required are used to get around the fact that
|
|
169
|
+
// the compiler can't infer that UnannotateImplicitAllowedTypes<T> is equal to T when T is known to extend ImplicitAllowedTypes
|
|
170
|
+
|
|
171
|
+
// #region Overloads for optional and required
|
|
172
|
+
function optional<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(
|
|
173
|
+
t: T,
|
|
174
|
+
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
175
|
+
): FieldSchemaAlpha<FieldKind.Optional, T, TCustomMetadata>;
|
|
176
|
+
|
|
177
|
+
function optional<
|
|
178
|
+
const T extends ImplicitAnnotatedAllowedTypes,
|
|
179
|
+
const TCustomMetadata = unknown,
|
|
180
|
+
>(
|
|
181
|
+
t: T,
|
|
182
|
+
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
183
|
+
): FieldSchemaAlpha<FieldKind.Optional, UnannotateImplicitAllowedTypes<T>, TCustomMetadata>;
|
|
184
|
+
|
|
185
|
+
function optional<
|
|
186
|
+
const T extends ImplicitAnnotatedAllowedTypes,
|
|
187
|
+
const TCustomMetadata = unknown,
|
|
188
|
+
>(
|
|
189
|
+
t: T,
|
|
190
|
+
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
191
|
+
): FieldSchemaAlpha<FieldKind.Optional, UnannotateImplicitAllowedTypes<T>, TCustomMetadata> {
|
|
192
|
+
return createFieldSchema(FieldKind.Optional, t, {
|
|
193
|
+
defaultProvider: defaultOptionalProvider,
|
|
194
|
+
...props,
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function required<const T extends ImplicitAllowedTypes, const TCustomMetadata = unknown>(
|
|
199
|
+
t: T,
|
|
200
|
+
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
201
|
+
): FieldSchemaAlpha<FieldKind.Required, T, TCustomMetadata>;
|
|
202
|
+
|
|
203
|
+
function required<
|
|
204
|
+
const T extends ImplicitAnnotatedAllowedTypes,
|
|
205
|
+
const TCustomMetadata = unknown,
|
|
206
|
+
>(
|
|
207
|
+
t: T,
|
|
208
|
+
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
209
|
+
): FieldSchemaAlpha<FieldKind.Required, UnannotateImplicitAllowedTypes<T>, TCustomMetadata>;
|
|
210
|
+
|
|
211
|
+
function required<
|
|
212
|
+
const T extends ImplicitAnnotatedAllowedTypes,
|
|
213
|
+
const TCustomMetadata = unknown,
|
|
214
|
+
>(
|
|
215
|
+
t: T,
|
|
216
|
+
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
217
|
+
): FieldSchemaAlpha<FieldKind.Required, UnannotateImplicitAllowedTypes<T>, TCustomMetadata> {
|
|
218
|
+
return createFieldSchema(FieldKind.Required, t, props);
|
|
219
|
+
}
|
|
220
|
+
// #endregion
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Implementation of {@link SchemaStatics}.
|
|
224
|
+
* @remarks
|
|
225
|
+
* Entries can use more specific types than {@link SchemaStatics} requires to be more useful for non-public consumers.
|
|
226
|
+
* Additional non-public members are in {@link schemaStatics}.
|
|
227
|
+
*/
|
|
228
|
+
export const schemaStaticsStable = {
|
|
229
|
+
string: stringSchema,
|
|
230
|
+
number: numberSchema,
|
|
231
|
+
boolean: booleanSchema,
|
|
232
|
+
null: nullSchema,
|
|
233
|
+
handle: handleSchema,
|
|
234
|
+
leaves: [stringSchema, numberSchema, booleanSchema, nullSchema, handleSchema],
|
|
235
|
+
|
|
236
|
+
optional,
|
|
237
|
+
|
|
238
|
+
required,
|
|
239
|
+
|
|
240
|
+
optionalRecursive: <
|
|
241
|
+
const T extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
242
|
+
const TCustomMetadata = unknown,
|
|
243
|
+
>(
|
|
244
|
+
t: T,
|
|
245
|
+
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
246
|
+
): FieldSchemaAlphaUnsafe<FieldKind.Optional, T, TCustomMetadata> => {
|
|
247
|
+
return createFieldSchemaUnsafe(FieldKind.Optional, t, {
|
|
248
|
+
defaultProvider: defaultOptionalProvider,
|
|
249
|
+
...props,
|
|
250
|
+
});
|
|
251
|
+
},
|
|
252
|
+
|
|
253
|
+
requiredRecursive: <
|
|
254
|
+
const T extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
255
|
+
const TCustomMetadata = unknown,
|
|
256
|
+
>(
|
|
257
|
+
t: T,
|
|
258
|
+
props?: Omit<FieldPropsAlpha<TCustomMetadata>, "defaultProvider">,
|
|
259
|
+
): FieldSchemaAlphaUnsafe<FieldKind.Required, T, TCustomMetadata> => {
|
|
260
|
+
return createFieldSchemaUnsafe(FieldKind.Required, t, props);
|
|
261
|
+
},
|
|
262
|
+
} as const satisfies SchemaStatics;
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Unstable extensions to {@link schemaStaticsStable}.
|
|
266
|
+
*/
|
|
267
|
+
export const schemaStatics = {
|
|
268
|
+
...schemaStaticsStable,
|
|
269
|
+
identifier: <const TCustomMetadata = unknown>(
|
|
270
|
+
props?: Omit<FieldProps<TCustomMetadata>, "defaultProvider">,
|
|
271
|
+
): FieldSchemaAlpha<FieldKind.Identifier, typeof stringSchema, TCustomMetadata> => {
|
|
272
|
+
return createFieldSchema(FieldKind.Identifier, stringSchema, props);
|
|
273
|
+
},
|
|
274
|
+
} as const;
|
|
275
|
+
|
|
276
|
+
function createFieldSchemaUnsafe<
|
|
277
|
+
Kind extends FieldKind,
|
|
278
|
+
Types extends System_Unsafe.ImplicitAllowedTypesUnsafe,
|
|
279
|
+
TCustomMetadata = unknown,
|
|
280
|
+
>(
|
|
281
|
+
kind: Kind,
|
|
282
|
+
allowedTypes: Types,
|
|
283
|
+
props?: FieldProps<TCustomMetadata>,
|
|
284
|
+
): FieldSchemaAlphaUnsafe<Kind, Types, TCustomMetadata> {
|
|
285
|
+
// At runtime, we still want this to be a FieldSchema instance, but we can't satisfy its extends clause, so just return it as an FieldSchemaUnsafe
|
|
286
|
+
return createFieldSchema(
|
|
287
|
+
kind,
|
|
288
|
+
allowedTypes as ImplicitAllowedTypes & Types,
|
|
289
|
+
props,
|
|
290
|
+
) as FieldSchemaAlphaUnsafe<Kind, Types, TCustomMetadata>;
|
|
291
|
+
}
|
|
@@ -12,9 +12,13 @@ import {
|
|
|
12
12
|
// eslint-disable-next-line import/no-internal-modules
|
|
13
13
|
} from "../../feature-libraries/schema-index/index.js";
|
|
14
14
|
import type { JsonCompatible } from "../../util/index.js";
|
|
15
|
-
import {
|
|
16
|
-
import
|
|
17
|
-
|
|
15
|
+
import type { SchemaUpgrade } from "../core/index.js";
|
|
16
|
+
import {
|
|
17
|
+
normalizeFieldSchema,
|
|
18
|
+
type ImplicitAnnotatedFieldSchema,
|
|
19
|
+
type ImplicitFieldSchema,
|
|
20
|
+
} from "../fieldSchema.js";
|
|
21
|
+
import { toStoredSchema } from "../toStoredSchema.js";
|
|
18
22
|
import { TreeViewConfigurationAlpha } from "./configuration.js";
|
|
19
23
|
|
|
20
24
|
import { SchemaCompatibilityTester } from "./schemaCompatibilityTester.js";
|
|
@@ -24,6 +28,8 @@ import type { SchemaCompatibilityStatus } from "./tree.js";
|
|
|
24
28
|
* Dumps the "persisted" schema subset of the provided `schema` into a deterministic JSON-compatible, semi-human-readable format.
|
|
25
29
|
*
|
|
26
30
|
* @param schema - The schema to dump.
|
|
31
|
+
* @param oldestCompatibleClient - The oldest client version which can read the schema: impacts the format used.
|
|
32
|
+
* @param includeStaged - filter for selecting which staged allowed types to include in the output.
|
|
27
33
|
*
|
|
28
34
|
* @remarks
|
|
29
35
|
* This can be used to help inspect schema for debugging, and to save a snapshot of schema to help detect and review changes to an applications schema.
|
|
@@ -51,10 +57,11 @@ import type { SchemaCompatibilityStatus } from "./tree.js";
|
|
|
51
57
|
* @alpha
|
|
52
58
|
*/
|
|
53
59
|
export function extractPersistedSchema(
|
|
54
|
-
schema:
|
|
60
|
+
schema: ImplicitAnnotatedFieldSchema,
|
|
55
61
|
oldestCompatibleClient: FluidClientVersion,
|
|
62
|
+
includeStaged: (upgrade: SchemaUpgrade) => boolean,
|
|
56
63
|
): JsonCompatible {
|
|
57
|
-
const stored =
|
|
64
|
+
const stored = toStoredSchema(schema, { includeStaged });
|
|
58
65
|
const schemaWriteVersion = clientVersionToSchemaVersion(oldestCompatibleClient);
|
|
59
66
|
return encodeTreeSchema(stored, schemaWriteVersion);
|
|
60
67
|
}
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import type { TreeFieldStoredSchema } from "../../core/index.js";
|
|
7
|
+
import { defaultSchemaPolicy, FieldKinds } from "../../feature-libraries/index.js";
|
|
8
|
+
import { brand } from "../../util/index.js";
|
|
7
9
|
import {
|
|
8
10
|
Context,
|
|
9
11
|
getKernel,
|
|
@@ -191,7 +193,12 @@ export const TreeBeta: TreeBeta = {
|
|
|
191
193
|
);
|
|
192
194
|
const context = new Context(flexContext, getUnhydratedContext(kernel.schema).schema);
|
|
193
195
|
|
|
194
|
-
|
|
196
|
+
const fieldSchema: TreeFieldStoredSchema = {
|
|
197
|
+
kind: FieldKinds.required.identifier,
|
|
198
|
+
types: new Set([brand(kernel.schema.identifier)]),
|
|
199
|
+
persistedMetadata: undefined,
|
|
200
|
+
};
|
|
201
|
+
return createFromCursor(kernel.schema, cursor, fieldSchema, context) as Unhydrated<
|
|
195
202
|
TreeFieldFromImplicitField<TSchema>
|
|
196
203
|
>;
|
|
197
204
|
},
|
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
|
|
6
6
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
getOrCreate,
|
|
10
|
+
isReadonlyArray,
|
|
11
|
+
type IsUnion,
|
|
12
|
+
type MakeNominal,
|
|
13
|
+
} from "../../util/index.js";
|
|
9
14
|
import { isLazy, type FlexListToUnion, type LazyItem } from "./flexList.js";
|
|
10
15
|
import {
|
|
11
16
|
NodeKind,
|
|
@@ -42,7 +47,10 @@ export type AllowedTypes = readonly LazyItem<TreeNodeSchema>[];
|
|
|
42
47
|
|
|
43
48
|
/**
|
|
44
49
|
* Stores annotations for an individual allowed type.
|
|
50
|
+
* @remarks
|
|
51
|
+
* Create using APIs on {@link SchemaFactoryAlpha}, like {@link SchemaStaticsAlpha.staged}.
|
|
45
52
|
* @alpha
|
|
53
|
+
* @sealed
|
|
46
54
|
*/
|
|
47
55
|
export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
|
|
48
56
|
/**
|
|
@@ -56,19 +64,12 @@ export interface AnnotatedAllowedType<T = LazyItem<TreeNodeSchema>> {
|
|
|
56
64
|
}
|
|
57
65
|
|
|
58
66
|
/**
|
|
59
|
-
*
|
|
67
|
+
* {@link AnnotatedAllowedTypes} but with the lazy schema references eagerly evaluated.
|
|
68
|
+
* @sealed
|
|
60
69
|
* @alpha
|
|
61
70
|
*/
|
|
62
|
-
export interface NormalizedAnnotatedAllowedTypes
|
|
63
|
-
|
|
64
|
-
* Annotations that apply to a set of allowed types.
|
|
65
|
-
*/
|
|
66
|
-
readonly metadata: AllowedTypesMetadata;
|
|
67
|
-
/**
|
|
68
|
-
* All the evaluated allowed types that the annotations apply to. The types themselves are also individually annotated.
|
|
69
|
-
*/
|
|
70
|
-
readonly types: readonly AnnotatedAllowedType<TreeNodeSchema>[];
|
|
71
|
-
}
|
|
71
|
+
export interface NormalizedAnnotatedAllowedTypes
|
|
72
|
+
extends AnnotatedAllowedTypes<TreeNodeSchema> {}
|
|
72
73
|
|
|
73
74
|
/**
|
|
74
75
|
* Checks if the input is an {@link AnnotatedAllowedTypes}.
|
|
@@ -86,8 +87,9 @@ export function isAnnotatedAllowedTypes(
|
|
|
86
87
|
/**
|
|
87
88
|
* Stores annotations for a set of allowed types.
|
|
88
89
|
* @alpha
|
|
90
|
+
* @sealed
|
|
89
91
|
*/
|
|
90
|
-
export interface AnnotatedAllowedTypes {
|
|
92
|
+
export interface AnnotatedAllowedTypes<T = LazyItem<TreeNodeSchema>> {
|
|
91
93
|
/**
|
|
92
94
|
* Annotations that apply to a set of allowed types.
|
|
93
95
|
*/
|
|
@@ -95,7 +97,7 @@ export interface AnnotatedAllowedTypes {
|
|
|
95
97
|
/**
|
|
96
98
|
* All the allowed types that the annotations apply to. The types themselves may also have individual annotations.
|
|
97
99
|
*/
|
|
98
|
-
readonly types: readonly
|
|
100
|
+
readonly types: readonly AnnotatedAllowedType<T>[];
|
|
99
101
|
}
|
|
100
102
|
|
|
101
103
|
/**
|
|
@@ -103,6 +105,7 @@ export interface AnnotatedAllowedTypes {
|
|
|
103
105
|
* @remarks
|
|
104
106
|
* Additional optionals may be added to this as non-breaking changes, so implementations of it should be simple object literals with no unlisted members.
|
|
105
107
|
* @alpha
|
|
108
|
+
* @input
|
|
106
109
|
*/
|
|
107
110
|
export interface AllowedTypesMetadata {
|
|
108
111
|
/**
|
|
@@ -127,6 +130,7 @@ export function isAnnotatedAllowedType(
|
|
|
127
130
|
* @remarks
|
|
128
131
|
* Additional optionals may be added to this as non-breaking changes, so implementations of it should be simple object literals with no unlisted members.
|
|
129
132
|
* @alpha
|
|
133
|
+
* @input
|
|
130
134
|
*/
|
|
131
135
|
export interface AllowedTypeMetadata {
|
|
132
136
|
/**
|
|
@@ -134,7 +138,34 @@ export interface AllowedTypeMetadata {
|
|
|
134
138
|
*/
|
|
135
139
|
readonly custom?: unknown;
|
|
136
140
|
|
|
137
|
-
|
|
141
|
+
/**
|
|
142
|
+
* If defined, indicates that an allowed type is {@link SchemaStaticsAlpha.staged | staged}.
|
|
143
|
+
*/
|
|
144
|
+
readonly stagedSchemaUpgrade?: SchemaUpgrade;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* Package internal {@link SchemaUpgrade} construction API.
|
|
149
|
+
*/
|
|
150
|
+
export let createSchemaUpgrade: () => SchemaUpgrade;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Unique token used to upgrade schemas and determine if a particular upgrade has been completed.
|
|
154
|
+
* @remarks
|
|
155
|
+
* Create using {@link SchemaStaticsAlpha.staged}.
|
|
156
|
+
* @privateRemarks
|
|
157
|
+
* TODO:#38722 implement runtime schema upgrades.
|
|
158
|
+
* Until then, the class purely behaves mostly as a placeholder.
|
|
159
|
+
* TODO: Consider allowing users to store a name for the upgrade to use in error messages.
|
|
160
|
+
* @sealed @alpha
|
|
161
|
+
*/
|
|
162
|
+
export class SchemaUpgrade {
|
|
163
|
+
protected _typeCheck!: MakeNominal;
|
|
164
|
+
static {
|
|
165
|
+
createSchemaUpgrade = () => new SchemaUpgrade();
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
private constructor() {}
|
|
138
169
|
}
|
|
139
170
|
|
|
140
171
|
/**
|
|
@@ -176,6 +207,7 @@ export type ImplicitAllowedTypes = AllowedTypes | TreeNodeSchema;
|
|
|
176
207
|
* Types of {@link TreeNode|TreeNodes} or {@link TreeLeafValue|TreeLeafValues} allowed at a location in a tree with
|
|
177
208
|
* additional metadata associated with the location they're allowed at.
|
|
178
209
|
* @alpha
|
|
210
|
+
* @input
|
|
179
211
|
*/
|
|
180
212
|
export type ImplicitAnnotatedAllowedTypes =
|
|
181
213
|
| TreeNodeSchema
|
|
@@ -191,12 +223,21 @@ export type UnannotateImplicitAllowedTypes<T extends ImplicitAnnotatedAllowedTyp
|
|
|
191
223
|
T extends AnnotatedAllowedTypes
|
|
192
224
|
? UnannotateAllowedTypes<T>
|
|
193
225
|
: T extends AnnotatedAllowedType
|
|
194
|
-
?
|
|
226
|
+
? UnannotateAllowedTypesList<[T]>
|
|
195
227
|
: T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[]
|
|
196
228
|
? UnannotateAllowedTypesList<T>
|
|
197
|
-
: T
|
|
229
|
+
: // This should able to just return `T` here, however doing so breaks generic code in ArrayNode.
|
|
230
|
+
T extends TreeNodeSchema
|
|
198
231
|
? T
|
|
199
|
-
:
|
|
232
|
+
: // Ideally this case would not be hit as it should be impossible.
|
|
233
|
+
// Due to limitations of TypeScript some generic code does depend on this case,
|
|
234
|
+
// so return a valid nonspecific schema in this otherwise unreachable case.
|
|
235
|
+
// This ensures that when this case is hit, the type system can still reason about it.
|
|
236
|
+
// It also ensures that if bugs cause this to matter in other cases, they will err on the side of restricting the API
|
|
237
|
+
// (due to non-specific schema) rather than being unsafe.
|
|
238
|
+
// This helps any such bugs be noticed more easily, be less likely to lead to runtime errors,
|
|
239
|
+
// and be more likely to be fixable as non-breaking changes.
|
|
240
|
+
ImplicitAllowedTypes;
|
|
200
241
|
|
|
201
242
|
/**
|
|
202
243
|
* Removes annotations from a list of allowed types that may contain annotations.
|
|
@@ -205,17 +246,9 @@ export type UnannotateImplicitAllowedTypes<T extends ImplicitAnnotatedAllowedTyp
|
|
|
205
246
|
export type UnannotateAllowedTypesList<
|
|
206
247
|
T extends readonly (AnnotatedAllowedType | LazyItem<TreeNodeSchema>)[],
|
|
207
248
|
> = {
|
|
208
|
-
[I in keyof T]:
|
|
249
|
+
[I in keyof T]: UnannotateAllowedType<T[I]>;
|
|
209
250
|
};
|
|
210
251
|
|
|
211
|
-
/**
|
|
212
|
-
* Removes annotations from an allowed type that may contain annotations.
|
|
213
|
-
* @system @alpha
|
|
214
|
-
*/
|
|
215
|
-
export type UnannotateAllowedTypeOrLazyItem<
|
|
216
|
-
T extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>,
|
|
217
|
-
> = T extends AnnotatedAllowedType<infer X> ? X : T;
|
|
218
|
-
|
|
219
252
|
/**
|
|
220
253
|
* Removes all annotations from a set of allowed types.
|
|
221
254
|
* @system @alpha
|
|
@@ -225,10 +258,15 @@ export type UnannotateAllowedTypes<T extends AnnotatedAllowedTypes> =
|
|
|
225
258
|
|
|
226
259
|
/**
|
|
227
260
|
* Removes annotations from an allowed type.
|
|
261
|
+
* @remarks
|
|
262
|
+
* If the input could be lazy
|
|
263
|
+
* (is a LazyItem or AnnotatedAllowedType<LazyItem> instead of just a TreeNodeSchema | AnnotatedAllowedType<TreeNodeSchema>)
|
|
264
|
+
* then the output of this will be a LazyItem and thus is not valid as an ImplicitAllowedTypes without wrapping it in an array.
|
|
265
|
+
* This can however be used on items within an AllowedTypes array.
|
|
228
266
|
* @system @alpha
|
|
229
267
|
*/
|
|
230
268
|
export type UnannotateAllowedType<T extends AnnotatedAllowedType | LazyItem<TreeNodeSchema>> =
|
|
231
|
-
T extends AnnotatedAllowedType<infer X> ?
|
|
269
|
+
T extends AnnotatedAllowedType<infer X> ? X : T;
|
|
232
270
|
|
|
233
271
|
/**
|
|
234
272
|
* Normalizes a {@link ImplicitAllowedTypes} to a set of {@link TreeNodeSchema}s, by eagerly evaluating any
|
|
@@ -258,22 +296,13 @@ export function normalizeAllowedTypes(
|
|
|
258
296
|
}
|
|
259
297
|
|
|
260
298
|
/**
|
|
261
|
-
* Normalizes an allowed type to an {@link AnnotatedAllowedType}, by adding empty annotations if they don't already exist
|
|
262
|
-
* and eagerly evaluating any lazy schema declarations.
|
|
263
|
-
*
|
|
264
|
-
* @remarks
|
|
265
|
-
* Note: this must only be called after all required schemas have been declared, otherwise evaluation of
|
|
266
|
-
* recursive schemas may fail.
|
|
267
|
-
* type is frozen and should not be modified after being passed in.
|
|
299
|
+
* Normalizes an allowed type to an {@link AnnotatedAllowedType}, by adding empty annotations if they don't already exist.
|
|
268
300
|
*/
|
|
269
|
-
export function normalizeToAnnotatedAllowedType<T extends TreeNodeSchema
|
|
270
|
-
type: T | AnnotatedAllowedType<T
|
|
301
|
+
export function normalizeToAnnotatedAllowedType<T extends LazyItem<TreeNodeSchema>>(
|
|
302
|
+
type: T | AnnotatedAllowedType<T>,
|
|
271
303
|
): AnnotatedAllowedType<T> {
|
|
272
304
|
return isAnnotatedAllowedType(type)
|
|
273
|
-
?
|
|
274
|
-
metadata: type.metadata,
|
|
275
|
-
type: evaluateLazySchema(type.type),
|
|
276
|
-
}
|
|
305
|
+
? type
|
|
277
306
|
: {
|
|
278
307
|
metadata: {},
|
|
279
308
|
type,
|
|
@@ -375,7 +404,7 @@ export function evaluateLazySchema<T extends TreeNodeSchema>(value: LazyItem<T>)
|
|
|
375
404
|
* Throws a UsageError if the provided schema is undefined, most likely due to being used before it was initialized.
|
|
376
405
|
*/
|
|
377
406
|
export function checkForUninitializedSchema(
|
|
378
|
-
schema: ImplicitAnnotatedAllowedTypes | LazyItem<TreeNodeSchema
|
|
407
|
+
schema: ImplicitAnnotatedAllowedTypes | LazyItem<TreeNodeSchema> | AnnotatedAllowedType,
|
|
379
408
|
): void {
|
|
380
409
|
if (schema === undefined) {
|
|
381
410
|
throw new UsageError(
|
|
@@ -57,6 +57,8 @@ export {
|
|
|
57
57
|
unannotateImplicitAllowedTypes,
|
|
58
58
|
markSchemaMostDerived,
|
|
59
59
|
evaluateLazySchema,
|
|
60
|
+
createSchemaUpgrade,
|
|
61
|
+
type SchemaUpgrade,
|
|
60
62
|
} from "./allowedTypes.js";
|
|
61
63
|
export type {
|
|
62
64
|
AnnotatedAllowedType,
|
|
@@ -73,7 +75,6 @@ export type {
|
|
|
73
75
|
UnannotateAllowedTypes,
|
|
74
76
|
UnannotateAllowedType,
|
|
75
77
|
UnannotateAllowedTypesList,
|
|
76
|
-
UnannotateAllowedTypeOrLazyItem,
|
|
77
78
|
AllowedTypeMetadata,
|
|
78
79
|
AnnotatedAllowedTypes,
|
|
79
80
|
} from "./allowedTypes.js";
|
|
@@ -101,4 +102,11 @@ export {
|
|
|
101
102
|
TreeNodeValid,
|
|
102
103
|
type MostDerivedData,
|
|
103
104
|
createTreeNodeSchemaPrivateData,
|
|
105
|
+
isClassBasedSchema,
|
|
104
106
|
} from "./treeNodeValid.js";
|
|
107
|
+
export type { SimpleNodeSchemaBase } from "./simpleNodeSchemaBase.js";
|
|
108
|
+
export {
|
|
109
|
+
type StoredSchemaGenerationOptions,
|
|
110
|
+
convertAllowedTypes,
|
|
111
|
+
allowedTypeFilter,
|
|
112
|
+
} from "./toStored.js";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import type { NodeKind, NodeSchemaMetadata } from "./treeNodeSchema.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Base interface for {@link TreeNodeSchema} and {@link SimpleNodeSchema} types.
|
|
10
|
+
* Once simple schema is stable this doesn't have a reason to be kept `@system`, but it could be.
|
|
11
|
+
* @system
|
|
12
|
+
* @public
|
|
13
|
+
* @sealed
|
|
14
|
+
*/
|
|
15
|
+
export interface SimpleNodeSchemaBase<
|
|
16
|
+
out TNodeKind extends NodeKind,
|
|
17
|
+
out TCustomMetadata = unknown,
|
|
18
|
+
> {
|
|
19
|
+
/**
|
|
20
|
+
* The {@link NodeKind}.
|
|
21
|
+
*
|
|
22
|
+
* @remarks can be used to type-switch between implementations.
|
|
23
|
+
*/
|
|
24
|
+
readonly kind: TNodeKind;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* User-provided {@link NodeSchemaMetadata} for this schema.
|
|
28
|
+
*/
|
|
29
|
+
readonly metadata: NodeSchemaMetadata<TCustomMetadata>;
|
|
30
|
+
}
|