@fluid-experimental/tree 2.116.0-416006 → 2.116.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @fluid-experimental/tree
2
2
 
3
+ ## 2.116.0
4
+
5
+ Dependency updates only.
6
+
3
7
  ## 2.115.0
4
8
 
5
9
  Dependency updates only.
package/README.md CHANGED
@@ -440,7 +440,7 @@ There are many ways to [contribute](https://github.com/microsoft/FluidFramework/
440
440
  - Review the [source code changes](https://github.com/microsoft/FluidFramework/pulls).
441
441
  - [Contribute bug fixes](https://github.com/microsoft/FluidFramework/blob/main/CONTRIBUTING.md).
442
442
 
443
- Detailed instructions for working in the repo can be found in the [Wiki](https://github.com/microsoft/FluidFramework/wiki).
443
+ Detailed instructions for working in the repo can be found in the [Wiki](https://github.com/microsoft/FluidFramework/blob/main/docs/content/Home.md).
444
444
 
445
445
  This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
446
446
  For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
@@ -451,9 +451,11 @@ Use of Microsoft trademarks or logos in modified versions of this project must n
451
451
 
452
452
  ## Help
453
453
 
454
- Not finding what you're looking for in this README? Check out [fluidframework.com](https://fluidframework.com/docs/).
454
+ Not finding what you're looking for in this README?
455
+ Check out [fluidframework.com](https://fluidframework.com/docs/).
455
456
 
456
- Still not finding what you're looking for? Please [file an issue](https://github.com/microsoft/FluidFramework/wiki/Submitting-Bugs-and-Feature-Requests).
457
+ Still not finding what you're looking for?
458
+ Please [file an issue](https://github.com/microsoft/FluidFramework/blob/main/docs/content/Contributing/Submitting-Bugs-and-Feature-Requests.md).
457
459
 
458
460
  Thank you!
459
461
 
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionInternal.d.ts","sourceRoot":"","sources":["../src/TransactionInternal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TransactionInternal.d.ts","sourceRoot":"","sources":["../src/TransactionInternal.ts"],"names":[],"mappings":"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"}
@@ -248,15 +248,16 @@ var TransactionInternal;
248
248
  */
249
249
  validateOnClose(state) {
250
250
  // Making the policy choice that storing a detached sequences in an edit but not using it is an error.
251
- return this.detached.size !== 0
252
- ? Common_js_1.Result.error({
251
+ for (const sequenceId of this.detached.keys()) {
252
+ return Common_js_1.Result.error({
253
253
  status: index_js_1.EditStatus.Malformed,
254
254
  failure: {
255
255
  kind: FailureKind.UnusedDetachedSequence,
256
- sequenceId: this.detached.keys().next().value,
256
+ sequenceId,
257
257
  },
258
- })
259
- : Common_js_1.Result.ok(state.view);
258
+ });
259
+ }
260
+ return Common_js_1.Result.ok(state.view);
260
261
  }
261
262
  /**
262
263
  * Applies a given change
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionInternal.js","sourceRoot":"","sources":["../src/TransactionInternal.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 { Result, assertWithMessage, copyPropertyIfDefined, fail } from './Common.js';\nimport {\n\tBadPlaceValidationResult,\n\tBadRangeValidationResult,\n\tPlaceValidationResult,\n\tRangeValidationResultKind,\n\tdetachRange,\n\tinsertIntoTrait,\n\tvalidateStablePlace,\n\tvalidateStableRange,\n} from './EditUtilities.js';\nimport { DetachedSequenceId, NodeId, TraitLabel, isDetachedSequenceId } from './Identifiers.js';\nimport { ReconciliationChange, ReconciliationPath } from './ReconciliationPath.js';\nimport { RevisionView, TransactionView } from './RevisionView.js';\nimport { TreeViewNode } from './TreeView.js';\nimport { rangeFromStableRange } from './TreeViewUtilities.js';\nimport {\n\tBuildInternal,\n\tBuildNodeInternal,\n\tChangeInternal,\n\tChangeTypeInternal,\n\tConstraintEffect,\n\tConstraintInternal,\n\tDetachInternal,\n\tEditStatus,\n\tInsertInternal,\n\tSetValueInternal,\n\tStablePlaceInternal,\n\tStableRangeInternal,\n} from './persisted-types/index.js';\n\n/**\n * Result of applying a transaction.\n * @internal\n */\nexport type EditingResult = FailedEditingResult | ValidEditingResult;\n\n/**\n * Basic result of applying a transaction.\n * @alpha\n */\nexport interface EditingResultBase {\n\t/**\n\t * The final status of the transaction.\n\t */\n\treadonly status: EditStatus;\n\t/**\n\t * The valid changes applied as part of the transaction.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied as part of the transaction.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n\t/**\n\t * The revision preceding the transaction.\n\t */\n\treadonly before: RevisionView;\n}\n\n/**\n * Result of applying an invalid or malformed transaction.\n * @internal\n */\nexport interface FailedEditingResult extends EditingResultBase {\n\t/**\n\t * {@inheritDoc EditingResultBase.status}\n\t */\n\treadonly status: EditStatus.Invalid | EditStatus.Malformed;\n\t/**\n\t * Information about what caused the transaction to fail.\n\t */\n\treadonly failure: TransactionInternal.Failure;\n\t/**\n\t * The valid changes applied as part of the transaction.\n\t * Those were ultimately abandoned due to the transaction failure.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied as part of the transaction.\n\t * Those were ultimately abandoned due to the transaction failure.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * Result of applying a valid transaction.\n * @alpha\n */\nexport interface ValidEditingResult extends EditingResultBase {\n\t/**\n\t * {@inheritDoc EditingResultBase.status}\n\t */\n\treadonly status: EditStatus.Applied;\n\t/**\n\t * The new revision produced by the transaction.\n\t */\n\treadonly after: RevisionView;\n}\n\n/**\n * The result of applying a change within a transaction.\n * @internal\n */\nexport type ChangeResult = Result<TransactionView, TransactionFailure>;\n\n/**\n * The ongoing state of a transaction.\n * @internal\n */\nexport type TransactionState = SucceedingTransactionState | FailingTransactionState;\n\n/**\n * The state of a transaction that has not encountered an error.\n * @alpha\n */\nexport interface SucceedingTransactionState {\n\t/**\n\t * The current status of the transaction.\n\t */\n\treadonly status: EditStatus.Applied;\n\t/**\n\t * The view reflecting the latest applied change.\n\t */\n\treadonly view: TransactionView;\n\t/**\n\t * The applied changes so far.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied so far.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * The state of a transaction that has encountered an error.\n * @internal\n */\nexport interface FailingTransactionState extends TransactionFailure {\n\t/**\n\t * The view reflecting the latest applied change.\n\t */\n\treadonly view: TransactionView;\n\t/**\n\t * The applied changes so far.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied so far.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * The failure state of a transaction.\n * @internal\n */\nexport interface TransactionFailure {\n\t/**\n\t * The status indicating the kind of failure encountered.\n\t */\n\treadonly status: EditStatus.Invalid | EditStatus.Malformed;\n\t/**\n\t * Information about what caused the transaction to fail.\n\t */\n\treadonly failure: TransactionInternal.Failure;\n}\n\n/**\n * A mutable transaction for applying sequences of changes to a TreeView.\n * Allows viewing the intermediate states.\n *\n * Contains necessary state to apply changes within an edit to a TreeView.\n *\n * May have any number of changes applied to make up the edit.\n * Use `close` to complete the transaction, returning the array of changes and an EditingResult showing the\n * results of applying the changes as an Edit to the initial TreeView (passed to the constructor).\n *\n * No data outside the Transaction is modified by Transaction:\n * the results from `close` must be used to actually submit an `Edit`.\n * @internal\n */\nexport class GenericTransaction {\n\tprivate readonly policy: GenericTransactionPolicy;\n\tprotected readonly before: RevisionView;\n\tprivate state: TransactionState;\n\tprivate open = true;\n\n\t/**\n\t * Create and open an edit of the provided `TreeView`. After applying 0 or more changes, this editor should be closed via `close()`.\n\t * @param view - the `TreeView` at which this edit begins. The first change will be applied against this view.\n\t */\n\tpublic constructor(view: RevisionView, policy: GenericTransactionPolicy) {\n\t\tthis.before = view;\n\t\tthis.policy = policy;\n\t\tthis.state = {\n\t\t\tview: view.openForTransaction(),\n\t\t\tstatus: EditStatus.Applied,\n\t\t\tchanges: [],\n\t\t\tsteps: [],\n\t\t};\n\t}\n\n\t/** Whether or not this transaction has been closed via `close()` */\n\tpublic get isOpen(): boolean {\n\t\treturn this.open;\n\t}\n\n\t/**\n\t * The most up-to-date `TreeView` for this edit. This is the state of the tree after all changes applied so far.\n\t */\n\tpublic get view(): TransactionView {\n\t\treturn this.state.view;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get status(): EditStatus {\n\t\treturn this.state.status;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get changes(): readonly ChangeInternal[] {\n\t\treturn this.state.changes;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get steps(): readonly ReconciliationChange[] {\n\t\treturn this.state.steps;\n\t}\n\n\t/**\n\t * Information about why the transaction failed. Defined if and only if `status` is invalid or malformed.\n\t */\n\tpublic get failure(): TransactionInternal.Failure | undefined {\n\t\treturn (this.state as FailingTransactionState).failure;\n\t}\n\n\t/** @returns the final `EditStatus` and `TreeView` after all changes are applied. */\n\tpublic close(): EditingResult {\n\t\tassert(this.open, 0x638 /* transaction has already been closed */);\n\t\tthis.open = false;\n\t\tif (this.state.status === EditStatus.Applied) {\n\t\t\tconst validation = this.policy.validateOnClose(this.state);\n\t\t\tif (Result.isOk(validation)) {\n\t\t\t\tif (validation.result !== this.view) {\n\t\t\t\t\tthis.state = { ...this.state, view: validation.result };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: EditStatus.Applied,\n\t\t\t\t\tsteps: this.steps,\n\t\t\t\t\tchanges: this.changes,\n\t\t\t\t\tbefore: this.before,\n\t\t\t\t\tafter: this.view.close(),\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.state = { ...this.state, ...validation.error };\n\t\t\treturn {\n\t\t\t\t...validation.error,\n\t\t\t\tsteps: this.steps,\n\t\t\t\tchanges: this.changes,\n\t\t\t\tbefore: this.before,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tstatus: this.state.status,\n\t\t\tfailure: this.state.failure,\n\t\t\tsteps: this.steps,\n\t\t\tchanges: this.changes,\n\t\t\tbefore: this.before,\n\t\t};\n\t}\n\n\t/**\n\t * A helper to apply a sequence of changes. Changes will be applied one after the other. If a change fails to apply,\n\t * the remaining changes in `changes` will be ignored.\n\t * @param changes - the sequence of changes to apply.\n\t * @param path - the reconciliation path for the first change.\n\t * @returns this\n\t */\n\tpublic applyChanges(changes: Iterable<ChangeInternal>, path: ReconciliationPath = []): this {\n\t\tconst iter = changes[Symbol.iterator]();\n\t\tconst firsChangeInternal = iter.next().value;\n\t\tlet iterResult = iter.next();\n\t\tif (iterResult.done === true) {\n\t\t\tfor (const change of changes) {\n\t\t\t\tif (this.applyChange(change, path).status !== EditStatus.Applied) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.applyChange(firsChangeInternal, path).status !== EditStatus.Applied) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst ongoingEdit = {\n\t\t\t0: this.steps[this.steps.length - 1],\n\t\t\tbefore: this.view,\n\t\t\tafter: this.view,\n\t\t\tlength: 1,\n\t\t};\n\n\t\t/**\n\t\t * We use a Proxy instead of `{ ...path, ...objectWithOngoingEdit }` to avoid eagerly demanding all parts of the path, which may\n\t\t * require extensive computation.\n\t\t */\n\t\tconst pathWithOngoingEdit = new Proxy(path, {\n\t\t\tget: (target: ReconciliationPath, prop: string): ReconciliationPath[number | 'length'] => {\n\t\t\t\tif (prop === 'length') {\n\t\t\t\t\treturn target.length + 1;\n\t\t\t\t}\n\t\t\t\treturn prop === String(target.length) ? ongoingEdit : target[prop];\n\t\t\t},\n\t\t});\n\n\t\twhile (iterResult.done !== true) {\n\t\t\tif (this.applyChange(iterResult.value, pathWithOngoingEdit).status !== EditStatus.Applied) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tongoingEdit[ongoingEdit.length] = this.steps[this.steps.length - 1];\n\t\t\tongoingEdit.length += 1;\n\t\t\tongoingEdit.after = this.view;\n\t\t\titerResult = iter.next();\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Attempt to apply the given change as part of this edit. This method should not be called if a previous change in this edit failed to\n\t * apply.\n\t * @param change - the change to apply\n\t * @param path - the reconciliation path for the change.\n\t * @returns this\n\t */\n\tpublic applyChange(change: ChangeInternal, path: ReconciliationPath = []): this {\n\t\tassert(this.open, 0x639 /* Editor must be open to apply changes. */);\n\t\tif (this.state.status !== EditStatus.Applied) {\n\t\t\tfail('Cannot apply change to an edit unless all previous changes have applied');\n\t\t}\n\t\tconst resolutionResult = this.policy.tryResolveChange(this.state, change, path);\n\t\tif (Result.isError(resolutionResult)) {\n\t\t\tthis.state = { ...this.state, ...resolutionResult.error };\n\t\t\treturn this;\n\t\t}\n\t\tconst resolvedChange = resolutionResult.result;\n\t\tconst changeResult = this.policy.dispatchChange(this.state, resolvedChange);\n\t\tthis.state = Result.isOk(changeResult)\n\t\t\t? {\n\t\t\t\t\tstatus: EditStatus.Applied,\n\t\t\t\t\tview: changeResult.result,\n\t\t\t\t\tchanges: this.changes.concat(change),\n\t\t\t\t\tsteps: this.steps.concat({ resolvedChange, after: changeResult.result }),\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t...this.state,\n\t\t\t\t\t...changeResult.error,\n\t\t\t\t};\n\t\treturn this;\n\t}\n}\n\n/**\n * An object that encapsulates the rules and state pertaining to a specific subclass of {@link GenericTransaction}.\n * The characteristics that define such a subclass (and an implementation of this interface) are:\n * - The type of change that can be applied\n * - How those changes impact the state of the tree\n * - How those changes are resolved in the face of concurrent changes\n * - What makes a transaction valid\n * - The kind of situations that might lead to a transaction failure\n *\n * Instances of this type are passed to the {@link GenericTransaction} constructor.\n * @internal\n */\nexport interface GenericTransactionPolicy {\n\t/**\n\t * Given a change, attempts to derive an equivalent change which can be applied to the current state even if the given change was issued\n\t * over a different state. This can be used to apply a sequence of changes that were issued concurrently, i.e., without knowledge of\n\t * each other.\n\t * @param state - The current state on which the returned change will be applied.\n\t * @param change - The original change issued.\n\t * @param path - The reconciliation path for the change.\n\t * @returns The change to be applied to the current state, or a failure if the change cannot be resolved.\n\t */\n\ttryResolveChange(\n\t\tstate: SucceedingTransactionState,\n\t\tchange: ChangeInternal,\n\t\tpath: ReconciliationPath\n\t): Result<ChangeInternal, TransactionFailure>;\n\n\t/**\n\t * Provides a new state given the current state and a change to apply.\n\t * @param state - The current state on which the change is applied.\n\t * @param change - The change to apply to the current state.\n\t * @returns The new state reflecting the applied change, or a failure.\n\t */\n\tdispatchChange(state: SucceedingTransactionState, change: ChangeInternal): ChangeResult;\n\n\t/**\n\t * Additional transaction validation when the transaction is closed.\n\t * @param state - The current state of the transaction.\n\t * @returns The new state reflecting the closed transaction, or a failure if the transaction cannot be closed.\n\t */\n\tvalidateOnClose(state: SucceedingTransactionState): ChangeResult;\n}\n\n/**\n * A mutable transaction for applying sequences of changes to a TreeView.\n * Allows viewing the intermediate states.\n *\n * Contains necessary state to apply changes within an edit to a TreeView.\n *\n * May have any number of changes applied to make up the edit.\n * Use `close` to complete the transaction, returning the array of changes and an EditingResult showing the\n * results of applying the changes as an Edit to the initial TreeView (passed to the constructor).\n *\n * No data outside the Transaction is modified by Transaction:\n * the results from `close` must be used to actually submit an `Edit`.\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace TransactionInternal {\n\t/**\n\t * Makes a new {@link GenericTransaction} that follows the {@link TransactionInternal.Policy} policy.\n\t * @internal\n\t */\n\texport function factory(view: RevisionView): GenericTransaction {\n\t\treturn new GenericTransaction(view, new Policy());\n\t}\n\n\ttype ValidState = SucceedingTransactionState;\n\n\t/**\n\t * The policy followed by a {@link TransactionInternal}.\n\t * @internal\n\t */\n\texport class Policy implements GenericTransactionPolicy {\n\t\t/**\n\t\t * Maps detached sequences of nodes to their NodeIds\n\t\t */\n\t\tprotected readonly detached: Map<DetachedSequenceId, readonly NodeId[]> = new Map();\n\n\t\t/**\n\t\t * Resolves change with Result.Ok\n\t\t *\n\t\t * @param state - Unused\n\t\t * @param change - Change to resolve\n\t\t * @returns Result.Ok which contains change\n\t\t */\n\t\tpublic tryResolveChange(state: ValidState, change: ChangeInternal): Result.Ok<ChangeInternal> {\n\t\t\treturn Result.ok(change);\n\t\t}\n\n\t\t/**\n\t\t * Validates the transaction when it is closed\n\t\t *\n\t\t * @param state - Current state\n\t\t * @returns a {@link ChangeResult} containing either the change result or a Failure\n\t\t */\n\t\tpublic validateOnClose(state: ValidState): ChangeResult {\n\t\t\t// Making the policy choice that storing a detached sequences in an edit but not using it is an error.\n\t\t\treturn this.detached.size !== 0\n\t\t\t\t? Result.error({\n\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\tkind: FailureKind.UnusedDetachedSequence,\n\t\t\t\t\t\t\tsequenceId: this.detached.keys().next().value,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t: Result.ok(state.view);\n\t\t}\n\n\t\t/**\n\t\t * Applies a given change\n\t\t *\n\t\t * @param state - Current state\n\t\t * @param change - Change to apply\n\t\t * @returns a {@link ChangeResult} containing either the change result or a Failure\n\t\t */\n\t\tpublic dispatchChange(state: ValidState, change: ChangeInternal): ChangeResult {\n\t\t\tswitch (change.type) {\n\t\t\t\tcase ChangeTypeInternal.Build:\n\t\t\t\t\treturn this.applyBuild(state, change);\n\t\t\t\tcase ChangeTypeInternal.Insert:\n\t\t\t\t\treturn this.applyInsert(state, change);\n\t\t\t\tcase ChangeTypeInternal.Detach:\n\t\t\t\t\treturn this.applyDetach(state, change);\n\t\t\t\tcase ChangeTypeInternal.Constraint:\n\t\t\t\t\treturn this.applyConstraint(state, change);\n\t\t\t\tcase ChangeTypeInternal.SetValue:\n\t\t\t\t\treturn this.applySetValue(state, change);\n\t\t\t\tdefault:\n\t\t\t\t\treturn fail('Attempted to apply unsupported change');\n\t\t\t}\n\t\t}\n\n\t\tprivate applyBuild(state: ValidState, change: BuildInternal): ChangeResult {\n\t\t\tif (this.detached.has(change.destination)) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceIdAlreadyInUse,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: change.destination,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet idAlreadyPresent: NodeId | undefined;\n\t\t\tlet duplicateIdInBuild: NodeId | undefined;\n\t\t\tlet invalidId: NodeId | undefined;\n\t\t\tlet detachedSequenceNotFound: DetachedSequenceId | undefined;\n\t\t\tconst map = new Map<NodeId, TreeViewNode>();\n\t\t\tconst newIds = this.createViewNodesForTree(\n\t\t\t\tchange.source,\n\t\t\t\t(id, viewNode) => {\n\t\t\t\t\tif (map.has(id)) {\n\t\t\t\t\t\tduplicateIdInBuild = id;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (state.view.hasNode(viewNode.identifier)) {\n\t\t\t\t\t\tidAlreadyPresent = id;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tmap.set(id, viewNode);\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\t(detachedId) => {\n\t\t\t\t\tdetachedSequenceNotFound = detachedId;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (idAlreadyPresent !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.IdAlreadyInUse, change, id: idAlreadyPresent },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (duplicateIdInBuild !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: { kind: FailureKind.DuplicateIdInBuild, change, id: duplicateIdInBuild },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (invalidId !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.UnknownId, change, id: invalidId },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (detachedSequenceNotFound !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceNotFound,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: detachedSequenceNotFound,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst view = state.view.addNodes(map.values());\n\t\t\tthis.detached.set(\n\t\t\t\tchange.destination,\n\t\t\t\tnewIds ?? fail('Unhandled failure case in Transaction.createViewNodesForTree')\n\t\t\t);\n\t\t\treturn Result.ok(view);\n\t\t}\n\n\t\tprivate applyInsert(state: ValidState, change: InsertInternal): ChangeResult {\n\t\t\tconst source = this.detached.get(change.source);\n\t\t\tif (source === undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceNotFound,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: change.source,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst validatedDestination = validateStablePlace(state.view, change.destination);\n\t\t\tif (validatedDestination.result !== PlaceValidationResult.Valid) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalidatedDestination.result === PlaceValidationResult.Malformed ? EditStatus.Malformed : EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.BadPlace,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tplace: change.destination,\n\t\t\t\t\t\tplaceFailure: validatedDestination.result,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.detached.delete(change.source);\n\t\t\tconst view = insertIntoTrait(state.view, source, validatedDestination);\n\t\t\treturn Result.ok(view);\n\t\t}\n\n\t\tprivate applyDetach(state: ValidState, change: DetachInternal): ChangeResult {\n\t\t\tconst validatedSource = validateStableRange(state.view, change.source);\n\t\t\tif (validatedSource.result !== RangeValidationResultKind.Valid) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalidatedSource.result === RangeValidationResultKind.PlacesInDifferentTraits ||\n\t\t\t\t\t\tvalidatedSource.result === RangeValidationResultKind.Inverted ||\n\t\t\t\t\t\tvalidatedSource.result.placeFailure !== PlaceValidationResult.Malformed\n\t\t\t\t\t\t\t? EditStatus.Invalid\n\t\t\t\t\t\t\t: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.BadRange,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\trange: change.source,\n\t\t\t\t\t\trangeFailure: validatedSource.result,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = detachRange(state.view, validatedSource);\n\t\t\tlet modifiedView = result.view;\n\t\t\tconst { detached } = result;\n\n\t\t\t// Store or dispose detached\n\t\t\tif (change.destination !== undefined) {\n\t\t\t\tif (this.detached.has(change.destination)) {\n\t\t\t\t\treturn Result.error({\n\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\tkind: FailureKind.DetachedSequenceIdAlreadyInUse,\n\t\t\t\t\t\t\tchange,\n\t\t\t\t\t\t\tsequenceId: change.destination,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.detached.set(change.destination, detached);\n\t\t\t} else {\n\t\t\t\tmodifiedView = modifiedView.deleteNodes(detached);\n\t\t\t}\n\t\t\treturn Result.ok(modifiedView);\n\t\t}\n\n\t\tprivate applyConstraint(state: ValidState, change: ConstraintInternal): ChangeResult {\n\t\t\t// TODO: Implement identityHash and contentHash\n\t\t\tassert(change.identityHash === undefined, 0x63a /* identityHash constraint is not implemented */);\n\t\t\tassert(change.contentHash === undefined, 0x63b /* contentHash constraint is not implemented */);\n\n\t\t\tconst validatedChange = validateStableRange(state.view, change.toConstrain);\n\t\t\tif (validatedChange.result !== RangeValidationResultKind.Valid) {\n\t\t\t\treturn validatedChange.result !== RangeValidationResultKind.PlacesInDifferentTraits &&\n\t\t\t\t\tvalidatedChange.result !== RangeValidationResultKind.Inverted &&\n\t\t\t\t\tvalidatedChange.result.placeFailure !== PlaceValidationResult.Malformed\n\t\t\t\t\t? change.effect === ConstraintEffect.ValidRetry\n\t\t\t\t\t\t? Result.ok(state.view)\n\t\t\t\t\t\t: Result.error({\n\t\t\t\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadRange,\n\t\t\t\t\t\t\t\t\t\trangeFailure: validatedChange.result,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t: Result.error({\n\t\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadRange,\n\t\t\t\t\t\t\t\t\trangeFailure: validatedChange.result,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst { start, end } = rangeFromStableRange(state.view, validatedChange);\n\t\t\tconst startIndex = state.view.findIndexWithinTrait(start);\n\t\t\tconst endIndex = state.view.findIndexWithinTrait(end);\n\n\t\t\tif (change.length !== undefined && change.length !== endIndex - startIndex) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadLength,\n\t\t\t\t\t\t\tactual: endIndex - startIndex,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (change.parentNode !== undefined && change.parentNode !== end.trait.parent) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadParent,\n\t\t\t\t\t\t\tactual: change.parentNode,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (change.label !== undefined && change.label !== end.trait.label) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadLabel,\n\t\t\t\t\t\t\tactual: end.trait.label,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Result.ok(state.view);\n\t\t}\n\n\t\tprivate applySetValue(state: ValidState, change: SetValueInternal): ChangeResult {\n\t\t\tif (!state.view.hasNode(change.nodeToModify)) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.UnknownId, change, id: change.nodeToModify },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst newView = state.view.setNodeValue(change.nodeToModify, change.payload);\n\t\t\treturn Result.ok(newView);\n\t\t}\n\n\t\t/**\n\t\t * Generates tree view nodes from the supplied edit nodes.\n\t\t * Invokes onCreateNode for each new node, and halts creation early if it returns true.\n\t\t * Invokes onInvalidDetachedId and halts early for any invalid detached IDs referenced in the edit node sequence.\n\t\t * @returns all the top-level node IDs in `sequence` (both from nodes and from detached sequences).\n\t\t */\n\t\tprotected createViewNodesForTree(\n\t\t\tsequence: Iterable<BuildNodeInternal>,\n\t\t\tonCreateNode: (stableId: NodeId, node: TreeViewNode) => boolean,\n\t\t\tonInvalidDetachedId: (sequenceId: DetachedSequenceId) => void\n\t\t): NodeId[] | undefined {\n\t\t\tconst topLevelIds: NodeId[] = [];\n\t\t\tconst unprocessed: BuildNodeInternal[] = [];\n\t\t\tfor (const buildNode of sequence) {\n\t\t\t\tif (isDetachedSequenceId(buildNode)) {\n\t\t\t\t\tconst detachedIds = this.getDetachedNodeIds(buildNode, onInvalidDetachedId);\n\t\t\t\t\tif (detachedIds === undefined) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\ttopLevelIds.push(...detachedIds);\n\t\t\t\t} else {\n\t\t\t\t\tunprocessed.push(buildNode);\n\t\t\t\t\ttopLevelIds.push(buildNode.identifier);\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (unprocessed.length > 0) {\n\t\t\t\tconst node = unprocessed.pop();\n\t\t\t\tassertWithMessage(node !== undefined && !isDetachedSequenceId(node));\n\t\t\t\tconst traits = new Map<TraitLabel, readonly NodeId[]>();\n\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\tfor (const key in node.traits) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(node.traits, key)) {\n\t\t\t\t\t\tconst children = node.traits[key];\n\t\t\t\t\t\tif (children.length > 0) {\n\t\t\t\t\t\t\tconst childIds: NodeId[] = [];\n\t\t\t\t\t\t\tfor (const child of children) {\n\t\t\t\t\t\t\t\tif (isDetachedSequenceId(child)) {\n\t\t\t\t\t\t\t\t\tconst detachedIds = this.getDetachedNodeIds(child, onInvalidDetachedId);\n\t\t\t\t\t\t\t\t\tif (detachedIds === undefined) {\n\t\t\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchildIds.push(...detachedIds);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tchildIds.push(child.identifier);\n\t\t\t\t\t\t\t\t\tunprocessed.push(child);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttraits.set(key as TraitLabel, childIds);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst newNode: TreeViewNode = {\n\t\t\t\t\tidentifier: node.identifier,\n\t\t\t\t\tdefinition: node.definition,\n\t\t\t\t\ttraits,\n\t\t\t\t};\n\t\t\t\tcopyPropertyIfDefined(node, newNode, 'payload');\n\t\t\t\tif (onCreateNode(node.identifier, newNode)) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn topLevelIds;\n\t\t}\n\n\t\tprivate getDetachedNodeIds(\n\t\t\tdetachedId: DetachedSequenceId,\n\t\t\tonInvalidDetachedId: (sequenceId: DetachedSequenceId) => void\n\t\t): readonly NodeId[] | undefined {\n\t\t\t// Retrieve the detached sequence from the void.\n\t\t\tconst detachedNodeIds = this.detached.get(detachedId);\n\t\t\tif (detachedNodeIds === undefined) {\n\t\t\t\tonInvalidDetachedId(detachedId);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// Since we have retrieved the sequence, remove it from the void to prevent a second tree from multi-parenting it later\n\t\t\tthis.detached.delete(detachedId);\n\t\t\treturn detachedNodeIds;\n\t\t}\n\t}\n\n\t/**\n\t * The kinds of failures that a transaction might encounter.\n\t * @alpha\n\t */\n\texport enum FailureKind {\n\t\t/**\n\t\t * Transaction has an unused DetachedSequenceId\n\t\t */\n\t\tUnusedDetachedSequence = 'UnusedDetachedSequence',\n\t\t/**\n\t\t * Transaction has a build operation using an already in use DetachedSequenceID.\n\t\t */\n\t\tDetachedSequenceIdAlreadyInUse = 'DetachedSequenceIdAlreadyInUse',\n\t\t/**\n\t\t * Transaction tries to operate on an unknown DetachedSequenceID\n\t\t */\n\t\tDetachedSequenceNotFound = 'DetachedSequenceNotFound',\n\t\t/**\n\t\t * Transaction has a build which uses a duplicated NodeId\n\t\t */\n\t\tDuplicateIdInBuild = 'DuplicateIdInBuild',\n\t\t/**\n\t\t * Transaction tries to build a node using an ID which is already used in the current state\n\t\t */\n\t\tIdAlreadyInUse = 'IdAlreadyInUse',\n\t\t/**\n\t\t * Transaction tries to set value of an unknown node\n\t\t */\n\t\tUnknownId = 'UnknownId',\n\t\t/**\n\t\t * Transaction tries to insert in an invalid Place\n\t\t */\n\t\tBadPlace = 'BadPlace',\n\t\t/**\n\t\t * Transaction tries to detach an invalid Range\n\t\t */\n\t\tBadRange = 'BadRange',\n\t\t/**\n\t\t * Transaction has an invalid constraint\n\t\t */\n\t\tConstraintViolation = 'ConstraintViolation',\n\t}\n\n\t/**\n\t * A failure encountered by a transaction.\n\t * @alpha\n\t */\n\texport type Failure =\n\t\t| UnusedDetachedSequenceFailure\n\t\t| DetachedSequenceIdAlreadyInUseFailure\n\t\t| DetachedSequenceNotFoundFailure\n\t\t| DuplicateIdInBuildFailure\n\t\t| IdAlreadyInUseFailure\n\t\t| UnknownIdFailure\n\t\t| BadPlaceFailure\n\t\t| BadRangeFailure\n\t\t| ConstraintViolationFailure;\n\n\t/**\n\t * Error returned when a transaction is closed while there is an unused detached sequence.\n\t * @alpha\n\t */\n\texport interface UnusedDetachedSequenceFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.UnusedDetachedSequence)\n\t\t */\n\t\treadonly kind: FailureKind.UnusedDetachedSequence;\n\t\t/**\n\t\t * The unused DetachedSequenceId\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a transaction encounters a build operation using an already in use DetachedSequenceID.\n\t * @alpha\n\t */\n\texport interface DetachedSequenceIdAlreadyInUseFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DetachedSequenceIdAlreadyInUse)\n\t\t */\n\t\treadonly kind: FailureKind.DetachedSequenceIdAlreadyInUse;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The DetachedSequenceId that is already in use\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a transaction tries to operate on an unknown DetachedSequenceID\n\t * @alpha\n\t */\n\texport interface DetachedSequenceNotFoundFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DetachedSequenceNotFound)\n\t\t */\n\t\treadonly kind: FailureKind.DetachedSequenceNotFound;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The DetachedSequenceId that wasn't found\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a build uses a duplicated NodeId\n\t * @alpha\n\t */\n\texport interface DuplicateIdInBuildFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DuplicateIdInBuild)\n\t\t */\n\t\treadonly kind: FailureKind.DuplicateIdInBuild;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * ID of duplicated node\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when a build node ID is already used in the current state\n\t * @alpha\n\t */\n\texport interface IdAlreadyInUseFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.IdAlreadyInUse)\n\t\t */\n\t\treadonly kind: FailureKind.IdAlreadyInUse;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * ID of already in use node\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when a change is attempted on an unknown NodeId\n\t * @alpha\n\t */\n\texport interface UnknownIdFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.UnknownId)\n\t\t */\n\t\treadonly kind: FailureKind.UnknownId;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The unknown ID\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when an insert change uses an invalid Place\n\t * @alpha\n\t */\n\texport interface BadPlaceFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.BadPlace)\n\t\t */\n\t\treadonly kind: FailureKind.BadPlace;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The faulting place\n\t\t */\n\t\treadonly place: StablePlaceInternal;\n\t\t/**\n\t\t * The reason for the failure\n\t\t */\n\t\treadonly placeFailure: BadPlaceValidationResult;\n\t}\n\n\t/**\n\t * Error thrown when a detach operation is given an invalid or malformed Range\n\t * @alpha\n\t */\n\texport interface BadRangeFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.BadRange)\n\t\t */\n\t\treadonly kind: FailureKind.BadRange;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * Faulting range\n\t\t */\n\t\treadonly range: StableRangeInternal;\n\t\t/**\n\t\t * The reason for the failure\n\t\t */\n\t\treadonly rangeFailure: BadRangeValidationResult;\n\t}\n\n\t/**\n\t * Error thrown when a constraint fails to apply\n\t * @alpha\n\t */\n\texport interface ConstraintViolationFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.ConstraintViolation)\n\t\t */\n\t\treadonly kind: FailureKind.ConstraintViolation;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly constraint: ConstraintInternal;\n\t\t/**\n\t\t * The first violation the constraint encounters (there may be others).\n\t\t */\n\t\treadonly violation: ConstraintViolationResult;\n\t}\n\n\t/**\n\t * The details of what kind of constraint was violated and caused a ConstraintViolationFailure error to occur\n\t * @alpha\n\t */\n\texport type ConstraintViolationResult =\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadRange;\n\t\t\t\treadonly rangeFailure: BadRangeValidationResult;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadLength;\n\t\t\t\treadonly actual: number;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadParent;\n\t\t\t\treadonly actual: NodeId;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadLabel;\n\t\t\t\treadonly actual: TraitLabel;\n\t\t };\n\n\t/**\n\t * Enum of possible kinds of constraint violations that can be encountered\n\t * @alpha\n\t */\n\texport enum ConstraintViolationKind {\n\t\t/**\n\t\t * The constraint failed because it applies to an invalid range\n\t\t */\n\t\tBadRange = 'BadRange',\n\t\t/**\n\t\t * The constraint failed because the length prescribed by the constraint does not match the length of range being constrained\n\t\t */\n\t\tBadLength = 'BadLength',\n\t\t/**\n\t\t * The constraint failed because the parent prescribed by the constraint does not match the actual parent of the range being constrained\n\t\t */\n\t\tBadParent = 'BadParent',\n\t\t/**\n\t\t * The constraint failed because the trait label prescribed by the constraint does not match the actual trait label of the range being constrained\n\t\t */\n\t\tBadLabel = 'BadLabel',\n\t}\n}\n"]}
1
+ {"version":3,"file":"TransactionInternal.js","sourceRoot":"","sources":["../src/TransactionInternal.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 { Result, assertWithMessage, copyPropertyIfDefined, fail } from './Common.js';\nimport {\n\tBadPlaceValidationResult,\n\tBadRangeValidationResult,\n\tPlaceValidationResult,\n\tRangeValidationResultKind,\n\tdetachRange,\n\tinsertIntoTrait,\n\tvalidateStablePlace,\n\tvalidateStableRange,\n} from './EditUtilities.js';\nimport { DetachedSequenceId, NodeId, TraitLabel, isDetachedSequenceId } from './Identifiers.js';\nimport { ReconciliationChange, ReconciliationPath } from './ReconciliationPath.js';\nimport { RevisionView, TransactionView } from './RevisionView.js';\nimport { TreeViewNode } from './TreeView.js';\nimport { rangeFromStableRange } from './TreeViewUtilities.js';\nimport {\n\tBuildInternal,\n\tBuildNodeInternal,\n\tChangeInternal,\n\tChangeTypeInternal,\n\tConstraintEffect,\n\tConstraintInternal,\n\tDetachInternal,\n\tEditStatus,\n\tInsertInternal,\n\tSetValueInternal,\n\tStablePlaceInternal,\n\tStableRangeInternal,\n} from './persisted-types/index.js';\n\n/**\n * Result of applying a transaction.\n * @internal\n */\nexport type EditingResult = FailedEditingResult | ValidEditingResult;\n\n/**\n * Basic result of applying a transaction.\n * @alpha\n */\nexport interface EditingResultBase {\n\t/**\n\t * The final status of the transaction.\n\t */\n\treadonly status: EditStatus;\n\t/**\n\t * The valid changes applied as part of the transaction.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied as part of the transaction.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n\t/**\n\t * The revision preceding the transaction.\n\t */\n\treadonly before: RevisionView;\n}\n\n/**\n * Result of applying an invalid or malformed transaction.\n * @internal\n */\nexport interface FailedEditingResult extends EditingResultBase {\n\t/**\n\t * {@inheritDoc EditingResultBase.status}\n\t */\n\treadonly status: EditStatus.Invalid | EditStatus.Malformed;\n\t/**\n\t * Information about what caused the transaction to fail.\n\t */\n\treadonly failure: TransactionInternal.Failure;\n\t/**\n\t * The valid changes applied as part of the transaction.\n\t * Those were ultimately abandoned due to the transaction failure.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied as part of the transaction.\n\t * Those were ultimately abandoned due to the transaction failure.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * Result of applying a valid transaction.\n * @alpha\n */\nexport interface ValidEditingResult extends EditingResultBase {\n\t/**\n\t * {@inheritDoc EditingResultBase.status}\n\t */\n\treadonly status: EditStatus.Applied;\n\t/**\n\t * The new revision produced by the transaction.\n\t */\n\treadonly after: RevisionView;\n}\n\n/**\n * The result of applying a change within a transaction.\n * @internal\n */\nexport type ChangeResult = Result<TransactionView, TransactionFailure>;\n\n/**\n * The ongoing state of a transaction.\n * @internal\n */\nexport type TransactionState = SucceedingTransactionState | FailingTransactionState;\n\n/**\n * The state of a transaction that has not encountered an error.\n * @alpha\n */\nexport interface SucceedingTransactionState {\n\t/**\n\t * The current status of the transaction.\n\t */\n\treadonly status: EditStatus.Applied;\n\t/**\n\t * The view reflecting the latest applied change.\n\t */\n\treadonly view: TransactionView;\n\t/**\n\t * The applied changes so far.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied so far.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * The state of a transaction that has encountered an error.\n * @internal\n */\nexport interface FailingTransactionState extends TransactionFailure {\n\t/**\n\t * The view reflecting the latest applied change.\n\t */\n\treadonly view: TransactionView;\n\t/**\n\t * The applied changes so far.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied so far.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * The failure state of a transaction.\n * @internal\n */\nexport interface TransactionFailure {\n\t/**\n\t * The status indicating the kind of failure encountered.\n\t */\n\treadonly status: EditStatus.Invalid | EditStatus.Malformed;\n\t/**\n\t * Information about what caused the transaction to fail.\n\t */\n\treadonly failure: TransactionInternal.Failure;\n}\n\n/**\n * A mutable transaction for applying sequences of changes to a TreeView.\n * Allows viewing the intermediate states.\n *\n * Contains necessary state to apply changes within an edit to a TreeView.\n *\n * May have any number of changes applied to make up the edit.\n * Use `close` to complete the transaction, returning the array of changes and an EditingResult showing the\n * results of applying the changes as an Edit to the initial TreeView (passed to the constructor).\n *\n * No data outside the Transaction is modified by Transaction:\n * the results from `close` must be used to actually submit an `Edit`.\n * @internal\n */\nexport class GenericTransaction {\n\tprivate readonly policy: GenericTransactionPolicy;\n\tprotected readonly before: RevisionView;\n\tprivate state: TransactionState;\n\tprivate open = true;\n\n\t/**\n\t * Create and open an edit of the provided `TreeView`. After applying 0 or more changes, this editor should be closed via `close()`.\n\t * @param view - the `TreeView` at which this edit begins. The first change will be applied against this view.\n\t */\n\tpublic constructor(view: RevisionView, policy: GenericTransactionPolicy) {\n\t\tthis.before = view;\n\t\tthis.policy = policy;\n\t\tthis.state = {\n\t\t\tview: view.openForTransaction(),\n\t\t\tstatus: EditStatus.Applied,\n\t\t\tchanges: [],\n\t\t\tsteps: [],\n\t\t};\n\t}\n\n\t/** Whether or not this transaction has been closed via `close()` */\n\tpublic get isOpen(): boolean {\n\t\treturn this.open;\n\t}\n\n\t/**\n\t * The most up-to-date `TreeView` for this edit. This is the state of the tree after all changes applied so far.\n\t */\n\tpublic get view(): TransactionView {\n\t\treturn this.state.view;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get status(): EditStatus {\n\t\treturn this.state.status;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get changes(): readonly ChangeInternal[] {\n\t\treturn this.state.changes;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get steps(): readonly ReconciliationChange[] {\n\t\treturn this.state.steps;\n\t}\n\n\t/**\n\t * Information about why the transaction failed. Defined if and only if `status` is invalid or malformed.\n\t */\n\tpublic get failure(): TransactionInternal.Failure | undefined {\n\t\treturn (this.state as FailingTransactionState).failure;\n\t}\n\n\t/** @returns the final `EditStatus` and `TreeView` after all changes are applied. */\n\tpublic close(): EditingResult {\n\t\tassert(this.open, 0x638 /* transaction has already been closed */);\n\t\tthis.open = false;\n\t\tif (this.state.status === EditStatus.Applied) {\n\t\t\tconst validation = this.policy.validateOnClose(this.state);\n\t\t\tif (Result.isOk(validation)) {\n\t\t\t\tif (validation.result !== this.view) {\n\t\t\t\t\tthis.state = { ...this.state, view: validation.result };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: EditStatus.Applied,\n\t\t\t\t\tsteps: this.steps,\n\t\t\t\t\tchanges: this.changes,\n\t\t\t\t\tbefore: this.before,\n\t\t\t\t\tafter: this.view.close(),\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.state = { ...this.state, ...validation.error };\n\t\t\treturn {\n\t\t\t\t...validation.error,\n\t\t\t\tsteps: this.steps,\n\t\t\t\tchanges: this.changes,\n\t\t\t\tbefore: this.before,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tstatus: this.state.status,\n\t\t\tfailure: this.state.failure,\n\t\t\tsteps: this.steps,\n\t\t\tchanges: this.changes,\n\t\t\tbefore: this.before,\n\t\t};\n\t}\n\n\t/**\n\t * A helper to apply a sequence of changes. Changes will be applied one after the other. If a change fails to apply,\n\t * the remaining changes in `changes` will be ignored.\n\t * @param changes - the sequence of changes to apply.\n\t * @param path - the reconciliation path for the first change.\n\t * @returns this\n\t */\n\tpublic applyChanges(changes: Iterable<ChangeInternal>, path: ReconciliationPath = []): this {\n\t\tconst iter = changes[Symbol.iterator]();\n\t\tconst firsChangeInternal = iter.next().value;\n\t\tlet iterResult = iter.next();\n\t\tif (iterResult.done === true) {\n\t\t\tfor (const change of changes) {\n\t\t\t\tif (this.applyChange(change, path).status !== EditStatus.Applied) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.applyChange(firsChangeInternal, path).status !== EditStatus.Applied) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst ongoingEdit = {\n\t\t\t0: this.steps[this.steps.length - 1],\n\t\t\tbefore: this.view,\n\t\t\tafter: this.view,\n\t\t\tlength: 1,\n\t\t};\n\n\t\t/**\n\t\t * We use a Proxy instead of `{ ...path, ...objectWithOngoingEdit }` to avoid eagerly demanding all parts of the path, which may\n\t\t * require extensive computation.\n\t\t */\n\t\tconst pathWithOngoingEdit = new Proxy(path, {\n\t\t\tget: (target: ReconciliationPath, prop: string): ReconciliationPath[number | 'length'] => {\n\t\t\t\tif (prop === 'length') {\n\t\t\t\t\treturn target.length + 1;\n\t\t\t\t}\n\t\t\t\treturn prop === String(target.length) ? ongoingEdit : target[prop];\n\t\t\t},\n\t\t});\n\n\t\twhile (iterResult.done !== true) {\n\t\t\tif (this.applyChange(iterResult.value, pathWithOngoingEdit).status !== EditStatus.Applied) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tongoingEdit[ongoingEdit.length] = this.steps[this.steps.length - 1];\n\t\t\tongoingEdit.length += 1;\n\t\t\tongoingEdit.after = this.view;\n\t\t\titerResult = iter.next();\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Attempt to apply the given change as part of this edit. This method should not be called if a previous change in this edit failed to\n\t * apply.\n\t * @param change - the change to apply\n\t * @param path - the reconciliation path for the change.\n\t * @returns this\n\t */\n\tpublic applyChange(change: ChangeInternal, path: ReconciliationPath = []): this {\n\t\tassert(this.open, 0x639 /* Editor must be open to apply changes. */);\n\t\tif (this.state.status !== EditStatus.Applied) {\n\t\t\tfail('Cannot apply change to an edit unless all previous changes have applied');\n\t\t}\n\t\tconst resolutionResult = this.policy.tryResolveChange(this.state, change, path);\n\t\tif (Result.isError(resolutionResult)) {\n\t\t\tthis.state = { ...this.state, ...resolutionResult.error };\n\t\t\treturn this;\n\t\t}\n\t\tconst resolvedChange = resolutionResult.result;\n\t\tconst changeResult = this.policy.dispatchChange(this.state, resolvedChange);\n\t\tthis.state = Result.isOk(changeResult)\n\t\t\t? {\n\t\t\t\t\tstatus: EditStatus.Applied,\n\t\t\t\t\tview: changeResult.result,\n\t\t\t\t\tchanges: this.changes.concat(change),\n\t\t\t\t\tsteps: this.steps.concat({ resolvedChange, after: changeResult.result }),\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t...this.state,\n\t\t\t\t\t...changeResult.error,\n\t\t\t\t};\n\t\treturn this;\n\t}\n}\n\n/**\n * An object that encapsulates the rules and state pertaining to a specific subclass of {@link GenericTransaction}.\n * The characteristics that define such a subclass (and an implementation of this interface) are:\n * - The type of change that can be applied\n * - How those changes impact the state of the tree\n * - How those changes are resolved in the face of concurrent changes\n * - What makes a transaction valid\n * - The kind of situations that might lead to a transaction failure\n *\n * Instances of this type are passed to the {@link GenericTransaction} constructor.\n * @internal\n */\nexport interface GenericTransactionPolicy {\n\t/**\n\t * Given a change, attempts to derive an equivalent change which can be applied to the current state even if the given change was issued\n\t * over a different state. This can be used to apply a sequence of changes that were issued concurrently, i.e., without knowledge of\n\t * each other.\n\t * @param state - The current state on which the returned change will be applied.\n\t * @param change - The original change issued.\n\t * @param path - The reconciliation path for the change.\n\t * @returns The change to be applied to the current state, or a failure if the change cannot be resolved.\n\t */\n\ttryResolveChange(\n\t\tstate: SucceedingTransactionState,\n\t\tchange: ChangeInternal,\n\t\tpath: ReconciliationPath\n\t): Result<ChangeInternal, TransactionFailure>;\n\n\t/**\n\t * Provides a new state given the current state and a change to apply.\n\t * @param state - The current state on which the change is applied.\n\t * @param change - The change to apply to the current state.\n\t * @returns The new state reflecting the applied change, or a failure.\n\t */\n\tdispatchChange(state: SucceedingTransactionState, change: ChangeInternal): ChangeResult;\n\n\t/**\n\t * Additional transaction validation when the transaction is closed.\n\t * @param state - The current state of the transaction.\n\t * @returns The new state reflecting the closed transaction, or a failure if the transaction cannot be closed.\n\t */\n\tvalidateOnClose(state: SucceedingTransactionState): ChangeResult;\n}\n\n/**\n * A mutable transaction for applying sequences of changes to a TreeView.\n * Allows viewing the intermediate states.\n *\n * Contains necessary state to apply changes within an edit to a TreeView.\n *\n * May have any number of changes applied to make up the edit.\n * Use `close` to complete the transaction, returning the array of changes and an EditingResult showing the\n * results of applying the changes as an Edit to the initial TreeView (passed to the constructor).\n *\n * No data outside the Transaction is modified by Transaction:\n * the results from `close` must be used to actually submit an `Edit`.\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace TransactionInternal {\n\t/**\n\t * Makes a new {@link GenericTransaction} that follows the {@link TransactionInternal.Policy} policy.\n\t * @internal\n\t */\n\texport function factory(view: RevisionView): GenericTransaction {\n\t\treturn new GenericTransaction(view, new Policy());\n\t}\n\n\ttype ValidState = SucceedingTransactionState;\n\n\t/**\n\t * The policy followed by a {@link TransactionInternal}.\n\t * @internal\n\t */\n\texport class Policy implements GenericTransactionPolicy {\n\t\t/**\n\t\t * Maps detached sequences of nodes to their NodeIds\n\t\t */\n\t\tprotected readonly detached: Map<DetachedSequenceId, readonly NodeId[]> = new Map();\n\n\t\t/**\n\t\t * Resolves change with Result.Ok\n\t\t *\n\t\t * @param state - Unused\n\t\t * @param change - Change to resolve\n\t\t * @returns Result.Ok which contains change\n\t\t */\n\t\tpublic tryResolveChange(state: ValidState, change: ChangeInternal): Result.Ok<ChangeInternal> {\n\t\t\treturn Result.ok(change);\n\t\t}\n\n\t\t/**\n\t\t * Validates the transaction when it is closed\n\t\t *\n\t\t * @param state - Current state\n\t\t * @returns a {@link ChangeResult} containing either the change result or a Failure\n\t\t */\n\t\tpublic validateOnClose(state: ValidState): ChangeResult {\n\t\t\t// Making the policy choice that storing a detached sequences in an edit but not using it is an error.\n\t\t\tfor (const sequenceId of this.detached.keys()) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.UnusedDetachedSequence,\n\t\t\t\t\t\tsequenceId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn Result.ok(state.view);\n\t\t}\n\n\t\t/**\n\t\t * Applies a given change\n\t\t *\n\t\t * @param state - Current state\n\t\t * @param change - Change to apply\n\t\t * @returns a {@link ChangeResult} containing either the change result or a Failure\n\t\t */\n\t\tpublic dispatchChange(state: ValidState, change: ChangeInternal): ChangeResult {\n\t\t\tswitch (change.type) {\n\t\t\t\tcase ChangeTypeInternal.Build:\n\t\t\t\t\treturn this.applyBuild(state, change);\n\t\t\t\tcase ChangeTypeInternal.Insert:\n\t\t\t\t\treturn this.applyInsert(state, change);\n\t\t\t\tcase ChangeTypeInternal.Detach:\n\t\t\t\t\treturn this.applyDetach(state, change);\n\t\t\t\tcase ChangeTypeInternal.Constraint:\n\t\t\t\t\treturn this.applyConstraint(state, change);\n\t\t\t\tcase ChangeTypeInternal.SetValue:\n\t\t\t\t\treturn this.applySetValue(state, change);\n\t\t\t\tdefault:\n\t\t\t\t\treturn fail('Attempted to apply unsupported change');\n\t\t\t}\n\t\t}\n\n\t\tprivate applyBuild(state: ValidState, change: BuildInternal): ChangeResult {\n\t\t\tif (this.detached.has(change.destination)) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceIdAlreadyInUse,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: change.destination,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet idAlreadyPresent: NodeId | undefined;\n\t\t\tlet duplicateIdInBuild: NodeId | undefined;\n\t\t\tlet invalidId: NodeId | undefined;\n\t\t\tlet detachedSequenceNotFound: DetachedSequenceId | undefined;\n\t\t\tconst map = new Map<NodeId, TreeViewNode>();\n\t\t\tconst newIds = this.createViewNodesForTree(\n\t\t\t\tchange.source,\n\t\t\t\t(id, viewNode) => {\n\t\t\t\t\tif (map.has(id)) {\n\t\t\t\t\t\tduplicateIdInBuild = id;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (state.view.hasNode(viewNode.identifier)) {\n\t\t\t\t\t\tidAlreadyPresent = id;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tmap.set(id, viewNode);\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\t(detachedId) => {\n\t\t\t\t\tdetachedSequenceNotFound = detachedId;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (idAlreadyPresent !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.IdAlreadyInUse, change, id: idAlreadyPresent },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (duplicateIdInBuild !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: { kind: FailureKind.DuplicateIdInBuild, change, id: duplicateIdInBuild },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (invalidId !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.UnknownId, change, id: invalidId },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (detachedSequenceNotFound !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceNotFound,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: detachedSequenceNotFound,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst view = state.view.addNodes(map.values());\n\t\t\tthis.detached.set(\n\t\t\t\tchange.destination,\n\t\t\t\tnewIds ?? fail('Unhandled failure case in Transaction.createViewNodesForTree')\n\t\t\t);\n\t\t\treturn Result.ok(view);\n\t\t}\n\n\t\tprivate applyInsert(state: ValidState, change: InsertInternal): ChangeResult {\n\t\t\tconst source = this.detached.get(change.source);\n\t\t\tif (source === undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceNotFound,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: change.source,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst validatedDestination = validateStablePlace(state.view, change.destination);\n\t\t\tif (validatedDestination.result !== PlaceValidationResult.Valid) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalidatedDestination.result === PlaceValidationResult.Malformed ? EditStatus.Malformed : EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.BadPlace,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tplace: change.destination,\n\t\t\t\t\t\tplaceFailure: validatedDestination.result,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.detached.delete(change.source);\n\t\t\tconst view = insertIntoTrait(state.view, source, validatedDestination);\n\t\t\treturn Result.ok(view);\n\t\t}\n\n\t\tprivate applyDetach(state: ValidState, change: DetachInternal): ChangeResult {\n\t\t\tconst validatedSource = validateStableRange(state.view, change.source);\n\t\t\tif (validatedSource.result !== RangeValidationResultKind.Valid) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalidatedSource.result === RangeValidationResultKind.PlacesInDifferentTraits ||\n\t\t\t\t\t\tvalidatedSource.result === RangeValidationResultKind.Inverted ||\n\t\t\t\t\t\tvalidatedSource.result.placeFailure !== PlaceValidationResult.Malformed\n\t\t\t\t\t\t\t? EditStatus.Invalid\n\t\t\t\t\t\t\t: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.BadRange,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\trange: change.source,\n\t\t\t\t\t\trangeFailure: validatedSource.result,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = detachRange(state.view, validatedSource);\n\t\t\tlet modifiedView = result.view;\n\t\t\tconst { detached } = result;\n\n\t\t\t// Store or dispose detached\n\t\t\tif (change.destination !== undefined) {\n\t\t\t\tif (this.detached.has(change.destination)) {\n\t\t\t\t\treturn Result.error({\n\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\tkind: FailureKind.DetachedSequenceIdAlreadyInUse,\n\t\t\t\t\t\t\tchange,\n\t\t\t\t\t\t\tsequenceId: change.destination,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.detached.set(change.destination, detached);\n\t\t\t} else {\n\t\t\t\tmodifiedView = modifiedView.deleteNodes(detached);\n\t\t\t}\n\t\t\treturn Result.ok(modifiedView);\n\t\t}\n\n\t\tprivate applyConstraint(state: ValidState, change: ConstraintInternal): ChangeResult {\n\t\t\t// TODO: Implement identityHash and contentHash\n\t\t\tassert(change.identityHash === undefined, 0x63a /* identityHash constraint is not implemented */);\n\t\t\tassert(change.contentHash === undefined, 0x63b /* contentHash constraint is not implemented */);\n\n\t\t\tconst validatedChange = validateStableRange(state.view, change.toConstrain);\n\t\t\tif (validatedChange.result !== RangeValidationResultKind.Valid) {\n\t\t\t\treturn validatedChange.result !== RangeValidationResultKind.PlacesInDifferentTraits &&\n\t\t\t\t\tvalidatedChange.result !== RangeValidationResultKind.Inverted &&\n\t\t\t\t\tvalidatedChange.result.placeFailure !== PlaceValidationResult.Malformed\n\t\t\t\t\t? change.effect === ConstraintEffect.ValidRetry\n\t\t\t\t\t\t? Result.ok(state.view)\n\t\t\t\t\t\t: Result.error({\n\t\t\t\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadRange,\n\t\t\t\t\t\t\t\t\t\trangeFailure: validatedChange.result,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t: Result.error({\n\t\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadRange,\n\t\t\t\t\t\t\t\t\trangeFailure: validatedChange.result,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst { start, end } = rangeFromStableRange(state.view, validatedChange);\n\t\t\tconst startIndex = state.view.findIndexWithinTrait(start);\n\t\t\tconst endIndex = state.view.findIndexWithinTrait(end);\n\n\t\t\tif (change.length !== undefined && change.length !== endIndex - startIndex) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadLength,\n\t\t\t\t\t\t\tactual: endIndex - startIndex,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (change.parentNode !== undefined && change.parentNode !== end.trait.parent) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadParent,\n\t\t\t\t\t\t\tactual: change.parentNode,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (change.label !== undefined && change.label !== end.trait.label) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadLabel,\n\t\t\t\t\t\t\tactual: end.trait.label,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Result.ok(state.view);\n\t\t}\n\n\t\tprivate applySetValue(state: ValidState, change: SetValueInternal): ChangeResult {\n\t\t\tif (!state.view.hasNode(change.nodeToModify)) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.UnknownId, change, id: change.nodeToModify },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst newView = state.view.setNodeValue(change.nodeToModify, change.payload);\n\t\t\treturn Result.ok(newView);\n\t\t}\n\n\t\t/**\n\t\t * Generates tree view nodes from the supplied edit nodes.\n\t\t * Invokes onCreateNode for each new node, and halts creation early if it returns true.\n\t\t * Invokes onInvalidDetachedId and halts early for any invalid detached IDs referenced in the edit node sequence.\n\t\t * @returns all the top-level node IDs in `sequence` (both from nodes and from detached sequences).\n\t\t */\n\t\tprotected createViewNodesForTree(\n\t\t\tsequence: Iterable<BuildNodeInternal>,\n\t\t\tonCreateNode: (stableId: NodeId, node: TreeViewNode) => boolean,\n\t\t\tonInvalidDetachedId: (sequenceId: DetachedSequenceId) => void\n\t\t): NodeId[] | undefined {\n\t\t\tconst topLevelIds: NodeId[] = [];\n\t\t\tconst unprocessed: BuildNodeInternal[] = [];\n\t\t\tfor (const buildNode of sequence) {\n\t\t\t\tif (isDetachedSequenceId(buildNode)) {\n\t\t\t\t\tconst detachedIds = this.getDetachedNodeIds(buildNode, onInvalidDetachedId);\n\t\t\t\t\tif (detachedIds === undefined) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\ttopLevelIds.push(...detachedIds);\n\t\t\t\t} else {\n\t\t\t\t\tunprocessed.push(buildNode);\n\t\t\t\t\ttopLevelIds.push(buildNode.identifier);\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (unprocessed.length > 0) {\n\t\t\t\tconst node = unprocessed.pop();\n\t\t\t\tassertWithMessage(node !== undefined && !isDetachedSequenceId(node));\n\t\t\t\tconst traits = new Map<TraitLabel, readonly NodeId[]>();\n\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\tfor (const key in node.traits) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(node.traits, key)) {\n\t\t\t\t\t\tconst children = node.traits[key];\n\t\t\t\t\t\tif (children.length > 0) {\n\t\t\t\t\t\t\tconst childIds: NodeId[] = [];\n\t\t\t\t\t\t\tfor (const child of children) {\n\t\t\t\t\t\t\t\tif (isDetachedSequenceId(child)) {\n\t\t\t\t\t\t\t\t\tconst detachedIds = this.getDetachedNodeIds(child, onInvalidDetachedId);\n\t\t\t\t\t\t\t\t\tif (detachedIds === undefined) {\n\t\t\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchildIds.push(...detachedIds);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tchildIds.push(child.identifier);\n\t\t\t\t\t\t\t\t\tunprocessed.push(child);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttraits.set(key as TraitLabel, childIds);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst newNode: TreeViewNode = {\n\t\t\t\t\tidentifier: node.identifier,\n\t\t\t\t\tdefinition: node.definition,\n\t\t\t\t\ttraits,\n\t\t\t\t};\n\t\t\t\tcopyPropertyIfDefined(node, newNode, 'payload');\n\t\t\t\tif (onCreateNode(node.identifier, newNode)) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn topLevelIds;\n\t\t}\n\n\t\tprivate getDetachedNodeIds(\n\t\t\tdetachedId: DetachedSequenceId,\n\t\t\tonInvalidDetachedId: (sequenceId: DetachedSequenceId) => void\n\t\t): readonly NodeId[] | undefined {\n\t\t\t// Retrieve the detached sequence from the void.\n\t\t\tconst detachedNodeIds = this.detached.get(detachedId);\n\t\t\tif (detachedNodeIds === undefined) {\n\t\t\t\tonInvalidDetachedId(detachedId);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// Since we have retrieved the sequence, remove it from the void to prevent a second tree from multi-parenting it later\n\t\t\tthis.detached.delete(detachedId);\n\t\t\treturn detachedNodeIds;\n\t\t}\n\t}\n\n\t/**\n\t * The kinds of failures that a transaction might encounter.\n\t * @alpha\n\t */\n\texport enum FailureKind {\n\t\t/**\n\t\t * Transaction has an unused DetachedSequenceId\n\t\t */\n\t\tUnusedDetachedSequence = 'UnusedDetachedSequence',\n\t\t/**\n\t\t * Transaction has a build operation using an already in use DetachedSequenceID.\n\t\t */\n\t\tDetachedSequenceIdAlreadyInUse = 'DetachedSequenceIdAlreadyInUse',\n\t\t/**\n\t\t * Transaction tries to operate on an unknown DetachedSequenceID\n\t\t */\n\t\tDetachedSequenceNotFound = 'DetachedSequenceNotFound',\n\t\t/**\n\t\t * Transaction has a build which uses a duplicated NodeId\n\t\t */\n\t\tDuplicateIdInBuild = 'DuplicateIdInBuild',\n\t\t/**\n\t\t * Transaction tries to build a node using an ID which is already used in the current state\n\t\t */\n\t\tIdAlreadyInUse = 'IdAlreadyInUse',\n\t\t/**\n\t\t * Transaction tries to set value of an unknown node\n\t\t */\n\t\tUnknownId = 'UnknownId',\n\t\t/**\n\t\t * Transaction tries to insert in an invalid Place\n\t\t */\n\t\tBadPlace = 'BadPlace',\n\t\t/**\n\t\t * Transaction tries to detach an invalid Range\n\t\t */\n\t\tBadRange = 'BadRange',\n\t\t/**\n\t\t * Transaction has an invalid constraint\n\t\t */\n\t\tConstraintViolation = 'ConstraintViolation',\n\t}\n\n\t/**\n\t * A failure encountered by a transaction.\n\t * @alpha\n\t */\n\texport type Failure =\n\t\t| UnusedDetachedSequenceFailure\n\t\t| DetachedSequenceIdAlreadyInUseFailure\n\t\t| DetachedSequenceNotFoundFailure\n\t\t| DuplicateIdInBuildFailure\n\t\t| IdAlreadyInUseFailure\n\t\t| UnknownIdFailure\n\t\t| BadPlaceFailure\n\t\t| BadRangeFailure\n\t\t| ConstraintViolationFailure;\n\n\t/**\n\t * Error returned when a transaction is closed while there is an unused detached sequence.\n\t * @alpha\n\t */\n\texport interface UnusedDetachedSequenceFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.UnusedDetachedSequence)\n\t\t */\n\t\treadonly kind: FailureKind.UnusedDetachedSequence;\n\t\t/**\n\t\t * The unused DetachedSequenceId\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a transaction encounters a build operation using an already in use DetachedSequenceID.\n\t * @alpha\n\t */\n\texport interface DetachedSequenceIdAlreadyInUseFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DetachedSequenceIdAlreadyInUse)\n\t\t */\n\t\treadonly kind: FailureKind.DetachedSequenceIdAlreadyInUse;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The DetachedSequenceId that is already in use\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a transaction tries to operate on an unknown DetachedSequenceID\n\t * @alpha\n\t */\n\texport interface DetachedSequenceNotFoundFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DetachedSequenceNotFound)\n\t\t */\n\t\treadonly kind: FailureKind.DetachedSequenceNotFound;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The DetachedSequenceId that wasn't found\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a build uses a duplicated NodeId\n\t * @alpha\n\t */\n\texport interface DuplicateIdInBuildFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DuplicateIdInBuild)\n\t\t */\n\t\treadonly kind: FailureKind.DuplicateIdInBuild;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * ID of duplicated node\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when a build node ID is already used in the current state\n\t * @alpha\n\t */\n\texport interface IdAlreadyInUseFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.IdAlreadyInUse)\n\t\t */\n\t\treadonly kind: FailureKind.IdAlreadyInUse;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * ID of already in use node\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when a change is attempted on an unknown NodeId\n\t * @alpha\n\t */\n\texport interface UnknownIdFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.UnknownId)\n\t\t */\n\t\treadonly kind: FailureKind.UnknownId;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The unknown ID\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when an insert change uses an invalid Place\n\t * @alpha\n\t */\n\texport interface BadPlaceFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.BadPlace)\n\t\t */\n\t\treadonly kind: FailureKind.BadPlace;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The faulting place\n\t\t */\n\t\treadonly place: StablePlaceInternal;\n\t\t/**\n\t\t * The reason for the failure\n\t\t */\n\t\treadonly placeFailure: BadPlaceValidationResult;\n\t}\n\n\t/**\n\t * Error thrown when a detach operation is given an invalid or malformed Range\n\t * @alpha\n\t */\n\texport interface BadRangeFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.BadRange)\n\t\t */\n\t\treadonly kind: FailureKind.BadRange;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * Faulting range\n\t\t */\n\t\treadonly range: StableRangeInternal;\n\t\t/**\n\t\t * The reason for the failure\n\t\t */\n\t\treadonly rangeFailure: BadRangeValidationResult;\n\t}\n\n\t/**\n\t * Error thrown when a constraint fails to apply\n\t * @alpha\n\t */\n\texport interface ConstraintViolationFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.ConstraintViolation)\n\t\t */\n\t\treadonly kind: FailureKind.ConstraintViolation;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly constraint: ConstraintInternal;\n\t\t/**\n\t\t * The first violation the constraint encounters (there may be others).\n\t\t */\n\t\treadonly violation: ConstraintViolationResult;\n\t}\n\n\t/**\n\t * The details of what kind of constraint was violated and caused a ConstraintViolationFailure error to occur\n\t * @alpha\n\t */\n\texport type ConstraintViolationResult =\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadRange;\n\t\t\t\treadonly rangeFailure: BadRangeValidationResult;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadLength;\n\t\t\t\treadonly actual: number;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadParent;\n\t\t\t\treadonly actual: NodeId;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadLabel;\n\t\t\t\treadonly actual: TraitLabel;\n\t\t };\n\n\t/**\n\t * Enum of possible kinds of constraint violations that can be encountered\n\t * @alpha\n\t */\n\texport enum ConstraintViolationKind {\n\t\t/**\n\t\t * The constraint failed because it applies to an invalid range\n\t\t */\n\t\tBadRange = 'BadRange',\n\t\t/**\n\t\t * The constraint failed because the length prescribed by the constraint does not match the length of range being constrained\n\t\t */\n\t\tBadLength = 'BadLength',\n\t\t/**\n\t\t * The constraint failed because the parent prescribed by the constraint does not match the actual parent of the range being constrained\n\t\t */\n\t\tBadParent = 'BadParent',\n\t\t/**\n\t\t * The constraint failed because the trait label prescribed by the constraint does not match the actual trait label of the range being constrained\n\t\t */\n\t\tBadLabel = 'BadLabel',\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionInternal.d.ts","sourceRoot":"","sources":["../src/TransactionInternal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,MAAM,EAAkD,MAAM,aAAa,CAAC;AACrF,OAAO,EACN,wBAAwB,EACxB,wBAAwB,EAOxB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,UAAU,EAAwB,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAEN,iBAAiB,EACjB,cAAc,EAGd,kBAAkB,EAElB,UAAU,EAGV,mBAAmB,EACnB,mBAAmB,EACnB,MAAM,4BAA4B,CAAC;AAEpC;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;AAErE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;IAChD;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAoB,SAAQ,iBAAiB;IAC7D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;IAC3D;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC;IAC9C;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAmB,SAAQ,iBAAiB;IAC5D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;IACpC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;AAEvE;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,GAAG,uBAAuB,CAAC;AAEpF;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IAC1C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC;IACpC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAwB,SAAQ,kBAAkB;IAClE;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IAC5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CAChD;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC;IAC3D;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC;CAC9C;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IACxC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,IAAI,CAAQ;IAEpB;;;OAGG;gBACgB,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,wBAAwB;IAWvE,oEAAoE;IACpE,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;OAEG;IACH,IAAW,IAAI,IAAI,eAAe,CAEjC;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,UAAU,CAE9B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,SAAS,cAAc,EAAE,CAE9C;IAED;;OAEG;IACH,IAAW,KAAK,IAAI,SAAS,oBAAoB,EAAE,CAElD;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,mBAAmB,CAAC,OAAO,GAAG,SAAS,CAE5D;IAED,oFAAoF;IAC7E,KAAK,IAAI,aAAa;IAkC7B;;;;;;OAMG;IACI,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,cAAc,CAAC,EAAE,IAAI,GAAE,kBAAuB,GAAG,IAAI;IAkD3F;;;;;;OAMG;IACI,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,GAAE,kBAAuB,GAAG,IAAI;CAyB/E;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,wBAAwB;IACxC;;;;;;;;OAQG;IACH,gBAAgB,CACf,KAAK,EAAE,0BAA0B,EACjC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,kBAAkB,GACtB,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAE9C;;;;;OAKG;IACH,cAAc,CAAC,KAAK,EAAE,0BAA0B,EAAE,MAAM,EAAE,cAAc,GAAG,YAAY,CAAC;IAExF;;;;OAIG;IACH,eAAe,CAAC,KAAK,EAAE,0BAA0B,GAAG,YAAY,CAAC;CACjE;AAED;;;;;;;;;;;;;GAaG;AAEH,yBAAiB,mBAAmB,CAAC;IACpC;;;OAGG;IACH,MAAM,UAAU,OAAO,CAAC,IAAI,EAAE,YAAY,GAAG,kBAAkB,CAE9D;IAED,KAAK,UAAU,GAAG,0BAA0B,CAAC;IAE7C;;;OAGG;IACH,MAAM,OAAO,MAAO,YAAW,wBAAwB;QACtD;;WAEG;QACH,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC,CAAa;QAEpF;;;;;;WAMG;QACI,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,EAAE,CAAC,cAAc,CAAC;QAI7F;;;;;WAKG;QACI,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY;QAavD;;;;;;WAMG;QACI,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,GAAG,YAAY;QAiB9E,OAAO,CAAC,UAAU;QAyElB,OAAO,CAAC,WAAW;QAgCnB,OAAO,CAAC,WAAW;QA0CnB,OAAO,CAAC,eAAe;QAqFvB,OAAO,CAAC,aAAa;QAYrB;;;;;WAKG;QACH,SAAS,CAAC,sBAAsB,CAC/B,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACrC,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,KAAK,OAAO,EAC/D,mBAAmB,EAAE,CAAC,UAAU,EAAE,kBAAkB,KAAK,IAAI,GAC3D,MAAM,EAAE,GAAG,SAAS;QAsDvB,OAAO,CAAC,kBAAkB;KAc1B;IAED;;;OAGG;IACH,MAAM,MAAM,WAAW;QACtB;;WAEG;QACH,sBAAsB,2BAA2B;QACjD;;WAEG;QACH,8BAA8B,mCAAmC;QACjE;;WAEG;QACH,wBAAwB,6BAA6B;QACrD;;WAEG;QACH,kBAAkB,uBAAuB;QACzC;;WAEG;QACH,cAAc,mBAAmB;QACjC;;WAEG;QACH,SAAS,cAAc;QACvB;;WAEG;QACH,QAAQ,aAAa;QACrB;;WAEG;QACH,QAAQ,aAAa;QACrB;;WAEG;QACH,mBAAmB,wBAAwB;KAC3C;IAED;;;OAGG;IACH,MAAM,MAAM,OAAO,GAChB,6BAA6B,GAC7B,qCAAqC,GACrC,+BAA+B,GAC/B,yBAAyB,GACzB,qBAAqB,GACrB,gBAAgB,GAChB,eAAe,GACf,eAAe,GACf,0BAA0B,CAAC;IAE9B;;;OAGG;IACH,MAAM,WAAW,6BAA6B;QAC7C;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,sBAAsB,CAAC;QAClD;;WAEG;QACH,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;KACxC;IAED;;;OAGG;IACH,MAAM,WAAW,qCAAqC;QACrD;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,8BAA8B,CAAC;QAC1D;;WAEG;QACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC;;WAEG;QACH,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;KACxC;IAED;;;OAGG;IACH,MAAM,WAAW,+BAA+B;QAC/C;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,wBAAwB,CAAC;QACpD;;WAEG;QACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC;;WAEG;QACH,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;KACxC;IAED;;;OAGG;IACH,MAAM,WAAW,yBAAyB;QACzC;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,kBAAkB,CAAC;QAC9C;;WAEG;QACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC;;WAEG;QACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;KACpB;IAED;;;OAGG;IACH,MAAM,WAAW,qBAAqB;QACrC;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC;QAC1C;;WAEG;QACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC;;WAEG;QACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;KACpB;IAED;;;OAGG;IACH,MAAM,WAAW,gBAAgB;QAChC;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,SAAS,CAAC;QACrC;;WAEG;QACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC;;WAEG;QACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;KACpB;IAED;;;OAGG;IACH,MAAM,WAAW,eAAe;QAC/B;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;QACpC;;WAEG;QACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC;;WAEG;QACH,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACpC;;WAEG;QACH,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAChD;IAED;;;OAGG;IACH,MAAM,WAAW,eAAe;QAC/B;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC;QACpC;;WAEG;QACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;QAChC;;WAEG;QACH,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;QACpC;;WAEG;QACH,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAChD;IAED;;;OAGG;IACH,MAAM,WAAW,0BAA0B;QAC1C;;WAEG;QACH,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,mBAAmB,CAAC;QAC/C;;WAEG;QACH,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;QACxC;;WAEG;QACH,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC;KAC9C;IAED;;;OAGG;IACH,MAAM,MAAM,yBAAyB,GAClC;QACA,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC,QAAQ,CAAC;QAChD,QAAQ,CAAC,YAAY,EAAE,wBAAwB,CAAC;KAC/C,GACD;QACA,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC,SAAS,CAAC;QACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACvB,GACD;QACA,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC,SAAS,CAAC;QACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACvB,GACD;QACA,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC,QAAQ,CAAC;QAChD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;KAC3B,CAAC;IAEL;;;OAGG;IACH,MAAM,MAAM,uBAAuB;QAClC;;WAEG;QACH,QAAQ,aAAa;QACrB;;WAEG;QACH,SAAS,cAAc;QACvB;;WAEG;QACH,SAAS,cAAc;QACvB;;WAEG;QACH,QAAQ,aAAa;KACrB;;CACD"}
1
+ {"version":3,"file":"TransactionInternal.d.ts","sourceRoot":"","sources":["../src/TransactionInternal.ts"],"names":[],"mappings":"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"}
@@ -244,15 +244,16 @@ export var TransactionInternal;
244
244
  */
245
245
  validateOnClose(state) {
246
246
  // Making the policy choice that storing a detached sequences in an edit but not using it is an error.
247
- return this.detached.size !== 0
248
- ? Result.error({
247
+ for (const sequenceId of this.detached.keys()) {
248
+ return Result.error({
249
249
  status: EditStatus.Malformed,
250
250
  failure: {
251
251
  kind: FailureKind.UnusedDetachedSequence,
252
- sequenceId: this.detached.keys().next().value,
252
+ sequenceId,
253
253
  },
254
- })
255
- : Result.ok(state.view);
254
+ });
255
+ }
256
+ return Result.ok(state.view);
256
257
  }
257
258
  /**
258
259
  * Applies a given change
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionInternal.js","sourceRoot":"","sources":["../src/TransactionInternal.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 { Result, assertWithMessage, copyPropertyIfDefined, fail } from './Common.js';\nimport {\n\tBadPlaceValidationResult,\n\tBadRangeValidationResult,\n\tPlaceValidationResult,\n\tRangeValidationResultKind,\n\tdetachRange,\n\tinsertIntoTrait,\n\tvalidateStablePlace,\n\tvalidateStableRange,\n} from './EditUtilities.js';\nimport { DetachedSequenceId, NodeId, TraitLabel, isDetachedSequenceId } from './Identifiers.js';\nimport { ReconciliationChange, ReconciliationPath } from './ReconciliationPath.js';\nimport { RevisionView, TransactionView } from './RevisionView.js';\nimport { TreeViewNode } from './TreeView.js';\nimport { rangeFromStableRange } from './TreeViewUtilities.js';\nimport {\n\tBuildInternal,\n\tBuildNodeInternal,\n\tChangeInternal,\n\tChangeTypeInternal,\n\tConstraintEffect,\n\tConstraintInternal,\n\tDetachInternal,\n\tEditStatus,\n\tInsertInternal,\n\tSetValueInternal,\n\tStablePlaceInternal,\n\tStableRangeInternal,\n} from './persisted-types/index.js';\n\n/**\n * Result of applying a transaction.\n * @internal\n */\nexport type EditingResult = FailedEditingResult | ValidEditingResult;\n\n/**\n * Basic result of applying a transaction.\n * @alpha\n */\nexport interface EditingResultBase {\n\t/**\n\t * The final status of the transaction.\n\t */\n\treadonly status: EditStatus;\n\t/**\n\t * The valid changes applied as part of the transaction.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied as part of the transaction.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n\t/**\n\t * The revision preceding the transaction.\n\t */\n\treadonly before: RevisionView;\n}\n\n/**\n * Result of applying an invalid or malformed transaction.\n * @internal\n */\nexport interface FailedEditingResult extends EditingResultBase {\n\t/**\n\t * {@inheritDoc EditingResultBase.status}\n\t */\n\treadonly status: EditStatus.Invalid | EditStatus.Malformed;\n\t/**\n\t * Information about what caused the transaction to fail.\n\t */\n\treadonly failure: TransactionInternal.Failure;\n\t/**\n\t * The valid changes applied as part of the transaction.\n\t * Those were ultimately abandoned due to the transaction failure.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied as part of the transaction.\n\t * Those were ultimately abandoned due to the transaction failure.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * Result of applying a valid transaction.\n * @alpha\n */\nexport interface ValidEditingResult extends EditingResultBase {\n\t/**\n\t * {@inheritDoc EditingResultBase.status}\n\t */\n\treadonly status: EditStatus.Applied;\n\t/**\n\t * The new revision produced by the transaction.\n\t */\n\treadonly after: RevisionView;\n}\n\n/**\n * The result of applying a change within a transaction.\n * @internal\n */\nexport type ChangeResult = Result<TransactionView, TransactionFailure>;\n\n/**\n * The ongoing state of a transaction.\n * @internal\n */\nexport type TransactionState = SucceedingTransactionState | FailingTransactionState;\n\n/**\n * The state of a transaction that has not encountered an error.\n * @alpha\n */\nexport interface SucceedingTransactionState {\n\t/**\n\t * The current status of the transaction.\n\t */\n\treadonly status: EditStatus.Applied;\n\t/**\n\t * The view reflecting the latest applied change.\n\t */\n\treadonly view: TransactionView;\n\t/**\n\t * The applied changes so far.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied so far.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * The state of a transaction that has encountered an error.\n * @internal\n */\nexport interface FailingTransactionState extends TransactionFailure {\n\t/**\n\t * The view reflecting the latest applied change.\n\t */\n\treadonly view: TransactionView;\n\t/**\n\t * The applied changes so far.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied so far.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * The failure state of a transaction.\n * @internal\n */\nexport interface TransactionFailure {\n\t/**\n\t * The status indicating the kind of failure encountered.\n\t */\n\treadonly status: EditStatus.Invalid | EditStatus.Malformed;\n\t/**\n\t * Information about what caused the transaction to fail.\n\t */\n\treadonly failure: TransactionInternal.Failure;\n}\n\n/**\n * A mutable transaction for applying sequences of changes to a TreeView.\n * Allows viewing the intermediate states.\n *\n * Contains necessary state to apply changes within an edit to a TreeView.\n *\n * May have any number of changes applied to make up the edit.\n * Use `close` to complete the transaction, returning the array of changes and an EditingResult showing the\n * results of applying the changes as an Edit to the initial TreeView (passed to the constructor).\n *\n * No data outside the Transaction is modified by Transaction:\n * the results from `close` must be used to actually submit an `Edit`.\n * @internal\n */\nexport class GenericTransaction {\n\tprivate readonly policy: GenericTransactionPolicy;\n\tprotected readonly before: RevisionView;\n\tprivate state: TransactionState;\n\tprivate open = true;\n\n\t/**\n\t * Create and open an edit of the provided `TreeView`. After applying 0 or more changes, this editor should be closed via `close()`.\n\t * @param view - the `TreeView` at which this edit begins. The first change will be applied against this view.\n\t */\n\tpublic constructor(view: RevisionView, policy: GenericTransactionPolicy) {\n\t\tthis.before = view;\n\t\tthis.policy = policy;\n\t\tthis.state = {\n\t\t\tview: view.openForTransaction(),\n\t\t\tstatus: EditStatus.Applied,\n\t\t\tchanges: [],\n\t\t\tsteps: [],\n\t\t};\n\t}\n\n\t/** Whether or not this transaction has been closed via `close()` */\n\tpublic get isOpen(): boolean {\n\t\treturn this.open;\n\t}\n\n\t/**\n\t * The most up-to-date `TreeView` for this edit. This is the state of the tree after all changes applied so far.\n\t */\n\tpublic get view(): TransactionView {\n\t\treturn this.state.view;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get status(): EditStatus {\n\t\treturn this.state.status;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get changes(): readonly ChangeInternal[] {\n\t\treturn this.state.changes;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get steps(): readonly ReconciliationChange[] {\n\t\treturn this.state.steps;\n\t}\n\n\t/**\n\t * Information about why the transaction failed. Defined if and only if `status` is invalid or malformed.\n\t */\n\tpublic get failure(): TransactionInternal.Failure | undefined {\n\t\treturn (this.state as FailingTransactionState).failure;\n\t}\n\n\t/** @returns the final `EditStatus` and `TreeView` after all changes are applied. */\n\tpublic close(): EditingResult {\n\t\tassert(this.open, 0x638 /* transaction has already been closed */);\n\t\tthis.open = false;\n\t\tif (this.state.status === EditStatus.Applied) {\n\t\t\tconst validation = this.policy.validateOnClose(this.state);\n\t\t\tif (Result.isOk(validation)) {\n\t\t\t\tif (validation.result !== this.view) {\n\t\t\t\t\tthis.state = { ...this.state, view: validation.result };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: EditStatus.Applied,\n\t\t\t\t\tsteps: this.steps,\n\t\t\t\t\tchanges: this.changes,\n\t\t\t\t\tbefore: this.before,\n\t\t\t\t\tafter: this.view.close(),\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.state = { ...this.state, ...validation.error };\n\t\t\treturn {\n\t\t\t\t...validation.error,\n\t\t\t\tsteps: this.steps,\n\t\t\t\tchanges: this.changes,\n\t\t\t\tbefore: this.before,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tstatus: this.state.status,\n\t\t\tfailure: this.state.failure,\n\t\t\tsteps: this.steps,\n\t\t\tchanges: this.changes,\n\t\t\tbefore: this.before,\n\t\t};\n\t}\n\n\t/**\n\t * A helper to apply a sequence of changes. Changes will be applied one after the other. If a change fails to apply,\n\t * the remaining changes in `changes` will be ignored.\n\t * @param changes - the sequence of changes to apply.\n\t * @param path - the reconciliation path for the first change.\n\t * @returns this\n\t */\n\tpublic applyChanges(changes: Iterable<ChangeInternal>, path: ReconciliationPath = []): this {\n\t\tconst iter = changes[Symbol.iterator]();\n\t\tconst firsChangeInternal = iter.next().value;\n\t\tlet iterResult = iter.next();\n\t\tif (iterResult.done === true) {\n\t\t\tfor (const change of changes) {\n\t\t\t\tif (this.applyChange(change, path).status !== EditStatus.Applied) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.applyChange(firsChangeInternal, path).status !== EditStatus.Applied) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst ongoingEdit = {\n\t\t\t0: this.steps[this.steps.length - 1],\n\t\t\tbefore: this.view,\n\t\t\tafter: this.view,\n\t\t\tlength: 1,\n\t\t};\n\n\t\t/**\n\t\t * We use a Proxy instead of `{ ...path, ...objectWithOngoingEdit }` to avoid eagerly demanding all parts of the path, which may\n\t\t * require extensive computation.\n\t\t */\n\t\tconst pathWithOngoingEdit = new Proxy(path, {\n\t\t\tget: (target: ReconciliationPath, prop: string): ReconciliationPath[number | 'length'] => {\n\t\t\t\tif (prop === 'length') {\n\t\t\t\t\treturn target.length + 1;\n\t\t\t\t}\n\t\t\t\treturn prop === String(target.length) ? ongoingEdit : target[prop];\n\t\t\t},\n\t\t});\n\n\t\twhile (iterResult.done !== true) {\n\t\t\tif (this.applyChange(iterResult.value, pathWithOngoingEdit).status !== EditStatus.Applied) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tongoingEdit[ongoingEdit.length] = this.steps[this.steps.length - 1];\n\t\t\tongoingEdit.length += 1;\n\t\t\tongoingEdit.after = this.view;\n\t\t\titerResult = iter.next();\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Attempt to apply the given change as part of this edit. This method should not be called if a previous change in this edit failed to\n\t * apply.\n\t * @param change - the change to apply\n\t * @param path - the reconciliation path for the change.\n\t * @returns this\n\t */\n\tpublic applyChange(change: ChangeInternal, path: ReconciliationPath = []): this {\n\t\tassert(this.open, 0x639 /* Editor must be open to apply changes. */);\n\t\tif (this.state.status !== EditStatus.Applied) {\n\t\t\tfail('Cannot apply change to an edit unless all previous changes have applied');\n\t\t}\n\t\tconst resolutionResult = this.policy.tryResolveChange(this.state, change, path);\n\t\tif (Result.isError(resolutionResult)) {\n\t\t\tthis.state = { ...this.state, ...resolutionResult.error };\n\t\t\treturn this;\n\t\t}\n\t\tconst resolvedChange = resolutionResult.result;\n\t\tconst changeResult = this.policy.dispatchChange(this.state, resolvedChange);\n\t\tthis.state = Result.isOk(changeResult)\n\t\t\t? {\n\t\t\t\t\tstatus: EditStatus.Applied,\n\t\t\t\t\tview: changeResult.result,\n\t\t\t\t\tchanges: this.changes.concat(change),\n\t\t\t\t\tsteps: this.steps.concat({ resolvedChange, after: changeResult.result }),\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t...this.state,\n\t\t\t\t\t...changeResult.error,\n\t\t\t\t};\n\t\treturn this;\n\t}\n}\n\n/**\n * An object that encapsulates the rules and state pertaining to a specific subclass of {@link GenericTransaction}.\n * The characteristics that define such a subclass (and an implementation of this interface) are:\n * - The type of change that can be applied\n * - How those changes impact the state of the tree\n * - How those changes are resolved in the face of concurrent changes\n * - What makes a transaction valid\n * - The kind of situations that might lead to a transaction failure\n *\n * Instances of this type are passed to the {@link GenericTransaction} constructor.\n * @internal\n */\nexport interface GenericTransactionPolicy {\n\t/**\n\t * Given a change, attempts to derive an equivalent change which can be applied to the current state even if the given change was issued\n\t * over a different state. This can be used to apply a sequence of changes that were issued concurrently, i.e., without knowledge of\n\t * each other.\n\t * @param state - The current state on which the returned change will be applied.\n\t * @param change - The original change issued.\n\t * @param path - The reconciliation path for the change.\n\t * @returns The change to be applied to the current state, or a failure if the change cannot be resolved.\n\t */\n\ttryResolveChange(\n\t\tstate: SucceedingTransactionState,\n\t\tchange: ChangeInternal,\n\t\tpath: ReconciliationPath\n\t): Result<ChangeInternal, TransactionFailure>;\n\n\t/**\n\t * Provides a new state given the current state and a change to apply.\n\t * @param state - The current state on which the change is applied.\n\t * @param change - The change to apply to the current state.\n\t * @returns The new state reflecting the applied change, or a failure.\n\t */\n\tdispatchChange(state: SucceedingTransactionState, change: ChangeInternal): ChangeResult;\n\n\t/**\n\t * Additional transaction validation when the transaction is closed.\n\t * @param state - The current state of the transaction.\n\t * @returns The new state reflecting the closed transaction, or a failure if the transaction cannot be closed.\n\t */\n\tvalidateOnClose(state: SucceedingTransactionState): ChangeResult;\n}\n\n/**\n * A mutable transaction for applying sequences of changes to a TreeView.\n * Allows viewing the intermediate states.\n *\n * Contains necessary state to apply changes within an edit to a TreeView.\n *\n * May have any number of changes applied to make up the edit.\n * Use `close` to complete the transaction, returning the array of changes and an EditingResult showing the\n * results of applying the changes as an Edit to the initial TreeView (passed to the constructor).\n *\n * No data outside the Transaction is modified by Transaction:\n * the results from `close` must be used to actually submit an `Edit`.\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace TransactionInternal {\n\t/**\n\t * Makes a new {@link GenericTransaction} that follows the {@link TransactionInternal.Policy} policy.\n\t * @internal\n\t */\n\texport function factory(view: RevisionView): GenericTransaction {\n\t\treturn new GenericTransaction(view, new Policy());\n\t}\n\n\ttype ValidState = SucceedingTransactionState;\n\n\t/**\n\t * The policy followed by a {@link TransactionInternal}.\n\t * @internal\n\t */\n\texport class Policy implements GenericTransactionPolicy {\n\t\t/**\n\t\t * Maps detached sequences of nodes to their NodeIds\n\t\t */\n\t\tprotected readonly detached: Map<DetachedSequenceId, readonly NodeId[]> = new Map();\n\n\t\t/**\n\t\t * Resolves change with Result.Ok\n\t\t *\n\t\t * @param state - Unused\n\t\t * @param change - Change to resolve\n\t\t * @returns Result.Ok which contains change\n\t\t */\n\t\tpublic tryResolveChange(state: ValidState, change: ChangeInternal): Result.Ok<ChangeInternal> {\n\t\t\treturn Result.ok(change);\n\t\t}\n\n\t\t/**\n\t\t * Validates the transaction when it is closed\n\t\t *\n\t\t * @param state - Current state\n\t\t * @returns a {@link ChangeResult} containing either the change result or a Failure\n\t\t */\n\t\tpublic validateOnClose(state: ValidState): ChangeResult {\n\t\t\t// Making the policy choice that storing a detached sequences in an edit but not using it is an error.\n\t\t\treturn this.detached.size !== 0\n\t\t\t\t? Result.error({\n\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\tkind: FailureKind.UnusedDetachedSequence,\n\t\t\t\t\t\t\tsequenceId: this.detached.keys().next().value,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t: Result.ok(state.view);\n\t\t}\n\n\t\t/**\n\t\t * Applies a given change\n\t\t *\n\t\t * @param state - Current state\n\t\t * @param change - Change to apply\n\t\t * @returns a {@link ChangeResult} containing either the change result or a Failure\n\t\t */\n\t\tpublic dispatchChange(state: ValidState, change: ChangeInternal): ChangeResult {\n\t\t\tswitch (change.type) {\n\t\t\t\tcase ChangeTypeInternal.Build:\n\t\t\t\t\treturn this.applyBuild(state, change);\n\t\t\t\tcase ChangeTypeInternal.Insert:\n\t\t\t\t\treturn this.applyInsert(state, change);\n\t\t\t\tcase ChangeTypeInternal.Detach:\n\t\t\t\t\treturn this.applyDetach(state, change);\n\t\t\t\tcase ChangeTypeInternal.Constraint:\n\t\t\t\t\treturn this.applyConstraint(state, change);\n\t\t\t\tcase ChangeTypeInternal.SetValue:\n\t\t\t\t\treturn this.applySetValue(state, change);\n\t\t\t\tdefault:\n\t\t\t\t\treturn fail('Attempted to apply unsupported change');\n\t\t\t}\n\t\t}\n\n\t\tprivate applyBuild(state: ValidState, change: BuildInternal): ChangeResult {\n\t\t\tif (this.detached.has(change.destination)) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceIdAlreadyInUse,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: change.destination,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet idAlreadyPresent: NodeId | undefined;\n\t\t\tlet duplicateIdInBuild: NodeId | undefined;\n\t\t\tlet invalidId: NodeId | undefined;\n\t\t\tlet detachedSequenceNotFound: DetachedSequenceId | undefined;\n\t\t\tconst map = new Map<NodeId, TreeViewNode>();\n\t\t\tconst newIds = this.createViewNodesForTree(\n\t\t\t\tchange.source,\n\t\t\t\t(id, viewNode) => {\n\t\t\t\t\tif (map.has(id)) {\n\t\t\t\t\t\tduplicateIdInBuild = id;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (state.view.hasNode(viewNode.identifier)) {\n\t\t\t\t\t\tidAlreadyPresent = id;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tmap.set(id, viewNode);\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\t(detachedId) => {\n\t\t\t\t\tdetachedSequenceNotFound = detachedId;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (idAlreadyPresent !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.IdAlreadyInUse, change, id: idAlreadyPresent },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (duplicateIdInBuild !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: { kind: FailureKind.DuplicateIdInBuild, change, id: duplicateIdInBuild },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (invalidId !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.UnknownId, change, id: invalidId },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (detachedSequenceNotFound !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceNotFound,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: detachedSequenceNotFound,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst view = state.view.addNodes(map.values());\n\t\t\tthis.detached.set(\n\t\t\t\tchange.destination,\n\t\t\t\tnewIds ?? fail('Unhandled failure case in Transaction.createViewNodesForTree')\n\t\t\t);\n\t\t\treturn Result.ok(view);\n\t\t}\n\n\t\tprivate applyInsert(state: ValidState, change: InsertInternal): ChangeResult {\n\t\t\tconst source = this.detached.get(change.source);\n\t\t\tif (source === undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceNotFound,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: change.source,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst validatedDestination = validateStablePlace(state.view, change.destination);\n\t\t\tif (validatedDestination.result !== PlaceValidationResult.Valid) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalidatedDestination.result === PlaceValidationResult.Malformed ? EditStatus.Malformed : EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.BadPlace,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tplace: change.destination,\n\t\t\t\t\t\tplaceFailure: validatedDestination.result,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.detached.delete(change.source);\n\t\t\tconst view = insertIntoTrait(state.view, source, validatedDestination);\n\t\t\treturn Result.ok(view);\n\t\t}\n\n\t\tprivate applyDetach(state: ValidState, change: DetachInternal): ChangeResult {\n\t\t\tconst validatedSource = validateStableRange(state.view, change.source);\n\t\t\tif (validatedSource.result !== RangeValidationResultKind.Valid) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalidatedSource.result === RangeValidationResultKind.PlacesInDifferentTraits ||\n\t\t\t\t\t\tvalidatedSource.result === RangeValidationResultKind.Inverted ||\n\t\t\t\t\t\tvalidatedSource.result.placeFailure !== PlaceValidationResult.Malformed\n\t\t\t\t\t\t\t? EditStatus.Invalid\n\t\t\t\t\t\t\t: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.BadRange,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\trange: change.source,\n\t\t\t\t\t\trangeFailure: validatedSource.result,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = detachRange(state.view, validatedSource);\n\t\t\tlet modifiedView = result.view;\n\t\t\tconst { detached } = result;\n\n\t\t\t// Store or dispose detached\n\t\t\tif (change.destination !== undefined) {\n\t\t\t\tif (this.detached.has(change.destination)) {\n\t\t\t\t\treturn Result.error({\n\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\tkind: FailureKind.DetachedSequenceIdAlreadyInUse,\n\t\t\t\t\t\t\tchange,\n\t\t\t\t\t\t\tsequenceId: change.destination,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.detached.set(change.destination, detached);\n\t\t\t} else {\n\t\t\t\tmodifiedView = modifiedView.deleteNodes(detached);\n\t\t\t}\n\t\t\treturn Result.ok(modifiedView);\n\t\t}\n\n\t\tprivate applyConstraint(state: ValidState, change: ConstraintInternal): ChangeResult {\n\t\t\t// TODO: Implement identityHash and contentHash\n\t\t\tassert(change.identityHash === undefined, 0x63a /* identityHash constraint is not implemented */);\n\t\t\tassert(change.contentHash === undefined, 0x63b /* contentHash constraint is not implemented */);\n\n\t\t\tconst validatedChange = validateStableRange(state.view, change.toConstrain);\n\t\t\tif (validatedChange.result !== RangeValidationResultKind.Valid) {\n\t\t\t\treturn validatedChange.result !== RangeValidationResultKind.PlacesInDifferentTraits &&\n\t\t\t\t\tvalidatedChange.result !== RangeValidationResultKind.Inverted &&\n\t\t\t\t\tvalidatedChange.result.placeFailure !== PlaceValidationResult.Malformed\n\t\t\t\t\t? change.effect === ConstraintEffect.ValidRetry\n\t\t\t\t\t\t? Result.ok(state.view)\n\t\t\t\t\t\t: Result.error({\n\t\t\t\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadRange,\n\t\t\t\t\t\t\t\t\t\trangeFailure: validatedChange.result,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t: Result.error({\n\t\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadRange,\n\t\t\t\t\t\t\t\t\trangeFailure: validatedChange.result,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst { start, end } = rangeFromStableRange(state.view, validatedChange);\n\t\t\tconst startIndex = state.view.findIndexWithinTrait(start);\n\t\t\tconst endIndex = state.view.findIndexWithinTrait(end);\n\n\t\t\tif (change.length !== undefined && change.length !== endIndex - startIndex) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadLength,\n\t\t\t\t\t\t\tactual: endIndex - startIndex,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (change.parentNode !== undefined && change.parentNode !== end.trait.parent) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadParent,\n\t\t\t\t\t\t\tactual: change.parentNode,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (change.label !== undefined && change.label !== end.trait.label) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadLabel,\n\t\t\t\t\t\t\tactual: end.trait.label,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Result.ok(state.view);\n\t\t}\n\n\t\tprivate applySetValue(state: ValidState, change: SetValueInternal): ChangeResult {\n\t\t\tif (!state.view.hasNode(change.nodeToModify)) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.UnknownId, change, id: change.nodeToModify },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst newView = state.view.setNodeValue(change.nodeToModify, change.payload);\n\t\t\treturn Result.ok(newView);\n\t\t}\n\n\t\t/**\n\t\t * Generates tree view nodes from the supplied edit nodes.\n\t\t * Invokes onCreateNode for each new node, and halts creation early if it returns true.\n\t\t * Invokes onInvalidDetachedId and halts early for any invalid detached IDs referenced in the edit node sequence.\n\t\t * @returns all the top-level node IDs in `sequence` (both from nodes and from detached sequences).\n\t\t */\n\t\tprotected createViewNodesForTree(\n\t\t\tsequence: Iterable<BuildNodeInternal>,\n\t\t\tonCreateNode: (stableId: NodeId, node: TreeViewNode) => boolean,\n\t\t\tonInvalidDetachedId: (sequenceId: DetachedSequenceId) => void\n\t\t): NodeId[] | undefined {\n\t\t\tconst topLevelIds: NodeId[] = [];\n\t\t\tconst unprocessed: BuildNodeInternal[] = [];\n\t\t\tfor (const buildNode of sequence) {\n\t\t\t\tif (isDetachedSequenceId(buildNode)) {\n\t\t\t\t\tconst detachedIds = this.getDetachedNodeIds(buildNode, onInvalidDetachedId);\n\t\t\t\t\tif (detachedIds === undefined) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\ttopLevelIds.push(...detachedIds);\n\t\t\t\t} else {\n\t\t\t\t\tunprocessed.push(buildNode);\n\t\t\t\t\ttopLevelIds.push(buildNode.identifier);\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (unprocessed.length > 0) {\n\t\t\t\tconst node = unprocessed.pop();\n\t\t\t\tassertWithMessage(node !== undefined && !isDetachedSequenceId(node));\n\t\t\t\tconst traits = new Map<TraitLabel, readonly NodeId[]>();\n\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\tfor (const key in node.traits) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(node.traits, key)) {\n\t\t\t\t\t\tconst children = node.traits[key];\n\t\t\t\t\t\tif (children.length > 0) {\n\t\t\t\t\t\t\tconst childIds: NodeId[] = [];\n\t\t\t\t\t\t\tfor (const child of children) {\n\t\t\t\t\t\t\t\tif (isDetachedSequenceId(child)) {\n\t\t\t\t\t\t\t\t\tconst detachedIds = this.getDetachedNodeIds(child, onInvalidDetachedId);\n\t\t\t\t\t\t\t\t\tif (detachedIds === undefined) {\n\t\t\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchildIds.push(...detachedIds);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tchildIds.push(child.identifier);\n\t\t\t\t\t\t\t\t\tunprocessed.push(child);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttraits.set(key as TraitLabel, childIds);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst newNode: TreeViewNode = {\n\t\t\t\t\tidentifier: node.identifier,\n\t\t\t\t\tdefinition: node.definition,\n\t\t\t\t\ttraits,\n\t\t\t\t};\n\t\t\t\tcopyPropertyIfDefined(node, newNode, 'payload');\n\t\t\t\tif (onCreateNode(node.identifier, newNode)) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn topLevelIds;\n\t\t}\n\n\t\tprivate getDetachedNodeIds(\n\t\t\tdetachedId: DetachedSequenceId,\n\t\t\tonInvalidDetachedId: (sequenceId: DetachedSequenceId) => void\n\t\t): readonly NodeId[] | undefined {\n\t\t\t// Retrieve the detached sequence from the void.\n\t\t\tconst detachedNodeIds = this.detached.get(detachedId);\n\t\t\tif (detachedNodeIds === undefined) {\n\t\t\t\tonInvalidDetachedId(detachedId);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// Since we have retrieved the sequence, remove it from the void to prevent a second tree from multi-parenting it later\n\t\t\tthis.detached.delete(detachedId);\n\t\t\treturn detachedNodeIds;\n\t\t}\n\t}\n\n\t/**\n\t * The kinds of failures that a transaction might encounter.\n\t * @alpha\n\t */\n\texport enum FailureKind {\n\t\t/**\n\t\t * Transaction has an unused DetachedSequenceId\n\t\t */\n\t\tUnusedDetachedSequence = 'UnusedDetachedSequence',\n\t\t/**\n\t\t * Transaction has a build operation using an already in use DetachedSequenceID.\n\t\t */\n\t\tDetachedSequenceIdAlreadyInUse = 'DetachedSequenceIdAlreadyInUse',\n\t\t/**\n\t\t * Transaction tries to operate on an unknown DetachedSequenceID\n\t\t */\n\t\tDetachedSequenceNotFound = 'DetachedSequenceNotFound',\n\t\t/**\n\t\t * Transaction has a build which uses a duplicated NodeId\n\t\t */\n\t\tDuplicateIdInBuild = 'DuplicateIdInBuild',\n\t\t/**\n\t\t * Transaction tries to build a node using an ID which is already used in the current state\n\t\t */\n\t\tIdAlreadyInUse = 'IdAlreadyInUse',\n\t\t/**\n\t\t * Transaction tries to set value of an unknown node\n\t\t */\n\t\tUnknownId = 'UnknownId',\n\t\t/**\n\t\t * Transaction tries to insert in an invalid Place\n\t\t */\n\t\tBadPlace = 'BadPlace',\n\t\t/**\n\t\t * Transaction tries to detach an invalid Range\n\t\t */\n\t\tBadRange = 'BadRange',\n\t\t/**\n\t\t * Transaction has an invalid constraint\n\t\t */\n\t\tConstraintViolation = 'ConstraintViolation',\n\t}\n\n\t/**\n\t * A failure encountered by a transaction.\n\t * @alpha\n\t */\n\texport type Failure =\n\t\t| UnusedDetachedSequenceFailure\n\t\t| DetachedSequenceIdAlreadyInUseFailure\n\t\t| DetachedSequenceNotFoundFailure\n\t\t| DuplicateIdInBuildFailure\n\t\t| IdAlreadyInUseFailure\n\t\t| UnknownIdFailure\n\t\t| BadPlaceFailure\n\t\t| BadRangeFailure\n\t\t| ConstraintViolationFailure;\n\n\t/**\n\t * Error returned when a transaction is closed while there is an unused detached sequence.\n\t * @alpha\n\t */\n\texport interface UnusedDetachedSequenceFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.UnusedDetachedSequence)\n\t\t */\n\t\treadonly kind: FailureKind.UnusedDetachedSequence;\n\t\t/**\n\t\t * The unused DetachedSequenceId\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a transaction encounters a build operation using an already in use DetachedSequenceID.\n\t * @alpha\n\t */\n\texport interface DetachedSequenceIdAlreadyInUseFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DetachedSequenceIdAlreadyInUse)\n\t\t */\n\t\treadonly kind: FailureKind.DetachedSequenceIdAlreadyInUse;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The DetachedSequenceId that is already in use\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a transaction tries to operate on an unknown DetachedSequenceID\n\t * @alpha\n\t */\n\texport interface DetachedSequenceNotFoundFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DetachedSequenceNotFound)\n\t\t */\n\t\treadonly kind: FailureKind.DetachedSequenceNotFound;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The DetachedSequenceId that wasn't found\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a build uses a duplicated NodeId\n\t * @alpha\n\t */\n\texport interface DuplicateIdInBuildFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DuplicateIdInBuild)\n\t\t */\n\t\treadonly kind: FailureKind.DuplicateIdInBuild;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * ID of duplicated node\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when a build node ID is already used in the current state\n\t * @alpha\n\t */\n\texport interface IdAlreadyInUseFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.IdAlreadyInUse)\n\t\t */\n\t\treadonly kind: FailureKind.IdAlreadyInUse;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * ID of already in use node\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when a change is attempted on an unknown NodeId\n\t * @alpha\n\t */\n\texport interface UnknownIdFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.UnknownId)\n\t\t */\n\t\treadonly kind: FailureKind.UnknownId;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The unknown ID\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when an insert change uses an invalid Place\n\t * @alpha\n\t */\n\texport interface BadPlaceFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.BadPlace)\n\t\t */\n\t\treadonly kind: FailureKind.BadPlace;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The faulting place\n\t\t */\n\t\treadonly place: StablePlaceInternal;\n\t\t/**\n\t\t * The reason for the failure\n\t\t */\n\t\treadonly placeFailure: BadPlaceValidationResult;\n\t}\n\n\t/**\n\t * Error thrown when a detach operation is given an invalid or malformed Range\n\t * @alpha\n\t */\n\texport interface BadRangeFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.BadRange)\n\t\t */\n\t\treadonly kind: FailureKind.BadRange;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * Faulting range\n\t\t */\n\t\treadonly range: StableRangeInternal;\n\t\t/**\n\t\t * The reason for the failure\n\t\t */\n\t\treadonly rangeFailure: BadRangeValidationResult;\n\t}\n\n\t/**\n\t * Error thrown when a constraint fails to apply\n\t * @alpha\n\t */\n\texport interface ConstraintViolationFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.ConstraintViolation)\n\t\t */\n\t\treadonly kind: FailureKind.ConstraintViolation;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly constraint: ConstraintInternal;\n\t\t/**\n\t\t * The first violation the constraint encounters (there may be others).\n\t\t */\n\t\treadonly violation: ConstraintViolationResult;\n\t}\n\n\t/**\n\t * The details of what kind of constraint was violated and caused a ConstraintViolationFailure error to occur\n\t * @alpha\n\t */\n\texport type ConstraintViolationResult =\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadRange;\n\t\t\t\treadonly rangeFailure: BadRangeValidationResult;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadLength;\n\t\t\t\treadonly actual: number;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadParent;\n\t\t\t\treadonly actual: NodeId;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadLabel;\n\t\t\t\treadonly actual: TraitLabel;\n\t\t };\n\n\t/**\n\t * Enum of possible kinds of constraint violations that can be encountered\n\t * @alpha\n\t */\n\texport enum ConstraintViolationKind {\n\t\t/**\n\t\t * The constraint failed because it applies to an invalid range\n\t\t */\n\t\tBadRange = 'BadRange',\n\t\t/**\n\t\t * The constraint failed because the length prescribed by the constraint does not match the length of range being constrained\n\t\t */\n\t\tBadLength = 'BadLength',\n\t\t/**\n\t\t * The constraint failed because the parent prescribed by the constraint does not match the actual parent of the range being constrained\n\t\t */\n\t\tBadParent = 'BadParent',\n\t\t/**\n\t\t * The constraint failed because the trait label prescribed by the constraint does not match the actual trait label of the range being constrained\n\t\t */\n\t\tBadLabel = 'BadLabel',\n\t}\n}\n"]}
1
+ {"version":3,"file":"TransactionInternal.js","sourceRoot":"","sources":["../src/TransactionInternal.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 { Result, assertWithMessage, copyPropertyIfDefined, fail } from './Common.js';\nimport {\n\tBadPlaceValidationResult,\n\tBadRangeValidationResult,\n\tPlaceValidationResult,\n\tRangeValidationResultKind,\n\tdetachRange,\n\tinsertIntoTrait,\n\tvalidateStablePlace,\n\tvalidateStableRange,\n} from './EditUtilities.js';\nimport { DetachedSequenceId, NodeId, TraitLabel, isDetachedSequenceId } from './Identifiers.js';\nimport { ReconciliationChange, ReconciliationPath } from './ReconciliationPath.js';\nimport { RevisionView, TransactionView } from './RevisionView.js';\nimport { TreeViewNode } from './TreeView.js';\nimport { rangeFromStableRange } from './TreeViewUtilities.js';\nimport {\n\tBuildInternal,\n\tBuildNodeInternal,\n\tChangeInternal,\n\tChangeTypeInternal,\n\tConstraintEffect,\n\tConstraintInternal,\n\tDetachInternal,\n\tEditStatus,\n\tInsertInternal,\n\tSetValueInternal,\n\tStablePlaceInternal,\n\tStableRangeInternal,\n} from './persisted-types/index.js';\n\n/**\n * Result of applying a transaction.\n * @internal\n */\nexport type EditingResult = FailedEditingResult | ValidEditingResult;\n\n/**\n * Basic result of applying a transaction.\n * @alpha\n */\nexport interface EditingResultBase {\n\t/**\n\t * The final status of the transaction.\n\t */\n\treadonly status: EditStatus;\n\t/**\n\t * The valid changes applied as part of the transaction.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied as part of the transaction.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n\t/**\n\t * The revision preceding the transaction.\n\t */\n\treadonly before: RevisionView;\n}\n\n/**\n * Result of applying an invalid or malformed transaction.\n * @internal\n */\nexport interface FailedEditingResult extends EditingResultBase {\n\t/**\n\t * {@inheritDoc EditingResultBase.status}\n\t */\n\treadonly status: EditStatus.Invalid | EditStatus.Malformed;\n\t/**\n\t * Information about what caused the transaction to fail.\n\t */\n\treadonly failure: TransactionInternal.Failure;\n\t/**\n\t * The valid changes applied as part of the transaction.\n\t * Those were ultimately abandoned due to the transaction failure.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied as part of the transaction.\n\t * Those were ultimately abandoned due to the transaction failure.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * Result of applying a valid transaction.\n * @alpha\n */\nexport interface ValidEditingResult extends EditingResultBase {\n\t/**\n\t * {@inheritDoc EditingResultBase.status}\n\t */\n\treadonly status: EditStatus.Applied;\n\t/**\n\t * The new revision produced by the transaction.\n\t */\n\treadonly after: RevisionView;\n}\n\n/**\n * The result of applying a change within a transaction.\n * @internal\n */\nexport type ChangeResult = Result<TransactionView, TransactionFailure>;\n\n/**\n * The ongoing state of a transaction.\n * @internal\n */\nexport type TransactionState = SucceedingTransactionState | FailingTransactionState;\n\n/**\n * The state of a transaction that has not encountered an error.\n * @alpha\n */\nexport interface SucceedingTransactionState {\n\t/**\n\t * The current status of the transaction.\n\t */\n\treadonly status: EditStatus.Applied;\n\t/**\n\t * The view reflecting the latest applied change.\n\t */\n\treadonly view: TransactionView;\n\t/**\n\t * The applied changes so far.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied so far.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * The state of a transaction that has encountered an error.\n * @internal\n */\nexport interface FailingTransactionState extends TransactionFailure {\n\t/**\n\t * The view reflecting the latest applied change.\n\t */\n\treadonly view: TransactionView;\n\t/**\n\t * The applied changes so far.\n\t */\n\treadonly changes: readonly ChangeInternal[];\n\t/**\n\t * The editing steps applied so far.\n\t */\n\treadonly steps: readonly ReconciliationChange[];\n}\n\n/**\n * The failure state of a transaction.\n * @internal\n */\nexport interface TransactionFailure {\n\t/**\n\t * The status indicating the kind of failure encountered.\n\t */\n\treadonly status: EditStatus.Invalid | EditStatus.Malformed;\n\t/**\n\t * Information about what caused the transaction to fail.\n\t */\n\treadonly failure: TransactionInternal.Failure;\n}\n\n/**\n * A mutable transaction for applying sequences of changes to a TreeView.\n * Allows viewing the intermediate states.\n *\n * Contains necessary state to apply changes within an edit to a TreeView.\n *\n * May have any number of changes applied to make up the edit.\n * Use `close` to complete the transaction, returning the array of changes and an EditingResult showing the\n * results of applying the changes as an Edit to the initial TreeView (passed to the constructor).\n *\n * No data outside the Transaction is modified by Transaction:\n * the results from `close` must be used to actually submit an `Edit`.\n * @internal\n */\nexport class GenericTransaction {\n\tprivate readonly policy: GenericTransactionPolicy;\n\tprotected readonly before: RevisionView;\n\tprivate state: TransactionState;\n\tprivate open = true;\n\n\t/**\n\t * Create and open an edit of the provided `TreeView`. After applying 0 or more changes, this editor should be closed via `close()`.\n\t * @param view - the `TreeView` at which this edit begins. The first change will be applied against this view.\n\t */\n\tpublic constructor(view: RevisionView, policy: GenericTransactionPolicy) {\n\t\tthis.before = view;\n\t\tthis.policy = policy;\n\t\tthis.state = {\n\t\t\tview: view.openForTransaction(),\n\t\t\tstatus: EditStatus.Applied,\n\t\t\tchanges: [],\n\t\t\tsteps: [],\n\t\t};\n\t}\n\n\t/** Whether or not this transaction has been closed via `close()` */\n\tpublic get isOpen(): boolean {\n\t\treturn this.open;\n\t}\n\n\t/**\n\t * The most up-to-date `TreeView` for this edit. This is the state of the tree after all changes applied so far.\n\t */\n\tpublic get view(): TransactionView {\n\t\treturn this.state.view;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get status(): EditStatus {\n\t\treturn this.state.status;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get changes(): readonly ChangeInternal[] {\n\t\treturn this.state.changes;\n\t}\n\n\t/**\n\t * The status code of the most recent attempted change.\n\t */\n\tpublic get steps(): readonly ReconciliationChange[] {\n\t\treturn this.state.steps;\n\t}\n\n\t/**\n\t * Information about why the transaction failed. Defined if and only if `status` is invalid or malformed.\n\t */\n\tpublic get failure(): TransactionInternal.Failure | undefined {\n\t\treturn (this.state as FailingTransactionState).failure;\n\t}\n\n\t/** @returns the final `EditStatus` and `TreeView` after all changes are applied. */\n\tpublic close(): EditingResult {\n\t\tassert(this.open, 0x638 /* transaction has already been closed */);\n\t\tthis.open = false;\n\t\tif (this.state.status === EditStatus.Applied) {\n\t\t\tconst validation = this.policy.validateOnClose(this.state);\n\t\t\tif (Result.isOk(validation)) {\n\t\t\t\tif (validation.result !== this.view) {\n\t\t\t\t\tthis.state = { ...this.state, view: validation.result };\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tstatus: EditStatus.Applied,\n\t\t\t\t\tsteps: this.steps,\n\t\t\t\t\tchanges: this.changes,\n\t\t\t\t\tbefore: this.before,\n\t\t\t\t\tafter: this.view.close(),\n\t\t\t\t};\n\t\t\t}\n\t\t\tthis.state = { ...this.state, ...validation.error };\n\t\t\treturn {\n\t\t\t\t...validation.error,\n\t\t\t\tsteps: this.steps,\n\t\t\t\tchanges: this.changes,\n\t\t\t\tbefore: this.before,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tstatus: this.state.status,\n\t\t\tfailure: this.state.failure,\n\t\t\tsteps: this.steps,\n\t\t\tchanges: this.changes,\n\t\t\tbefore: this.before,\n\t\t};\n\t}\n\n\t/**\n\t * A helper to apply a sequence of changes. Changes will be applied one after the other. If a change fails to apply,\n\t * the remaining changes in `changes` will be ignored.\n\t * @param changes - the sequence of changes to apply.\n\t * @param path - the reconciliation path for the first change.\n\t * @returns this\n\t */\n\tpublic applyChanges(changes: Iterable<ChangeInternal>, path: ReconciliationPath = []): this {\n\t\tconst iter = changes[Symbol.iterator]();\n\t\tconst firsChangeInternal = iter.next().value;\n\t\tlet iterResult = iter.next();\n\t\tif (iterResult.done === true) {\n\t\t\tfor (const change of changes) {\n\t\t\t\tif (this.applyChange(change, path).status !== EditStatus.Applied) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\n\t\tif (this.applyChange(firsChangeInternal, path).status !== EditStatus.Applied) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst ongoingEdit = {\n\t\t\t0: this.steps[this.steps.length - 1],\n\t\t\tbefore: this.view,\n\t\t\tafter: this.view,\n\t\t\tlength: 1,\n\t\t};\n\n\t\t/**\n\t\t * We use a Proxy instead of `{ ...path, ...objectWithOngoingEdit }` to avoid eagerly demanding all parts of the path, which may\n\t\t * require extensive computation.\n\t\t */\n\t\tconst pathWithOngoingEdit = new Proxy(path, {\n\t\t\tget: (target: ReconciliationPath, prop: string): ReconciliationPath[number | 'length'] => {\n\t\t\t\tif (prop === 'length') {\n\t\t\t\t\treturn target.length + 1;\n\t\t\t\t}\n\t\t\t\treturn prop === String(target.length) ? ongoingEdit : target[prop];\n\t\t\t},\n\t\t});\n\n\t\twhile (iterResult.done !== true) {\n\t\t\tif (this.applyChange(iterResult.value, pathWithOngoingEdit).status !== EditStatus.Applied) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tongoingEdit[ongoingEdit.length] = this.steps[this.steps.length - 1];\n\t\t\tongoingEdit.length += 1;\n\t\t\tongoingEdit.after = this.view;\n\t\t\titerResult = iter.next();\n\t\t}\n\t\treturn this;\n\t}\n\n\t/**\n\t * Attempt to apply the given change as part of this edit. This method should not be called if a previous change in this edit failed to\n\t * apply.\n\t * @param change - the change to apply\n\t * @param path - the reconciliation path for the change.\n\t * @returns this\n\t */\n\tpublic applyChange(change: ChangeInternal, path: ReconciliationPath = []): this {\n\t\tassert(this.open, 0x639 /* Editor must be open to apply changes. */);\n\t\tif (this.state.status !== EditStatus.Applied) {\n\t\t\tfail('Cannot apply change to an edit unless all previous changes have applied');\n\t\t}\n\t\tconst resolutionResult = this.policy.tryResolveChange(this.state, change, path);\n\t\tif (Result.isError(resolutionResult)) {\n\t\t\tthis.state = { ...this.state, ...resolutionResult.error };\n\t\t\treturn this;\n\t\t}\n\t\tconst resolvedChange = resolutionResult.result;\n\t\tconst changeResult = this.policy.dispatchChange(this.state, resolvedChange);\n\t\tthis.state = Result.isOk(changeResult)\n\t\t\t? {\n\t\t\t\t\tstatus: EditStatus.Applied,\n\t\t\t\t\tview: changeResult.result,\n\t\t\t\t\tchanges: this.changes.concat(change),\n\t\t\t\t\tsteps: this.steps.concat({ resolvedChange, after: changeResult.result }),\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\t...this.state,\n\t\t\t\t\t...changeResult.error,\n\t\t\t\t};\n\t\treturn this;\n\t}\n}\n\n/**\n * An object that encapsulates the rules and state pertaining to a specific subclass of {@link GenericTransaction}.\n * The characteristics that define such a subclass (and an implementation of this interface) are:\n * - The type of change that can be applied\n * - How those changes impact the state of the tree\n * - How those changes are resolved in the face of concurrent changes\n * - What makes a transaction valid\n * - The kind of situations that might lead to a transaction failure\n *\n * Instances of this type are passed to the {@link GenericTransaction} constructor.\n * @internal\n */\nexport interface GenericTransactionPolicy {\n\t/**\n\t * Given a change, attempts to derive an equivalent change which can be applied to the current state even if the given change was issued\n\t * over a different state. This can be used to apply a sequence of changes that were issued concurrently, i.e., without knowledge of\n\t * each other.\n\t * @param state - The current state on which the returned change will be applied.\n\t * @param change - The original change issued.\n\t * @param path - The reconciliation path for the change.\n\t * @returns The change to be applied to the current state, or a failure if the change cannot be resolved.\n\t */\n\ttryResolveChange(\n\t\tstate: SucceedingTransactionState,\n\t\tchange: ChangeInternal,\n\t\tpath: ReconciliationPath\n\t): Result<ChangeInternal, TransactionFailure>;\n\n\t/**\n\t * Provides a new state given the current state and a change to apply.\n\t * @param state - The current state on which the change is applied.\n\t * @param change - The change to apply to the current state.\n\t * @returns The new state reflecting the applied change, or a failure.\n\t */\n\tdispatchChange(state: SucceedingTransactionState, change: ChangeInternal): ChangeResult;\n\n\t/**\n\t * Additional transaction validation when the transaction is closed.\n\t * @param state - The current state of the transaction.\n\t * @returns The new state reflecting the closed transaction, or a failure if the transaction cannot be closed.\n\t */\n\tvalidateOnClose(state: SucceedingTransactionState): ChangeResult;\n}\n\n/**\n * A mutable transaction for applying sequences of changes to a TreeView.\n * Allows viewing the intermediate states.\n *\n * Contains necessary state to apply changes within an edit to a TreeView.\n *\n * May have any number of changes applied to make up the edit.\n * Use `close` to complete the transaction, returning the array of changes and an EditingResult showing the\n * results of applying the changes as an Edit to the initial TreeView (passed to the constructor).\n *\n * No data outside the Transaction is modified by Transaction:\n * the results from `close` must be used to actually submit an `Edit`.\n * @alpha\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport namespace TransactionInternal {\n\t/**\n\t * Makes a new {@link GenericTransaction} that follows the {@link TransactionInternal.Policy} policy.\n\t * @internal\n\t */\n\texport function factory(view: RevisionView): GenericTransaction {\n\t\treturn new GenericTransaction(view, new Policy());\n\t}\n\n\ttype ValidState = SucceedingTransactionState;\n\n\t/**\n\t * The policy followed by a {@link TransactionInternal}.\n\t * @internal\n\t */\n\texport class Policy implements GenericTransactionPolicy {\n\t\t/**\n\t\t * Maps detached sequences of nodes to their NodeIds\n\t\t */\n\t\tprotected readonly detached: Map<DetachedSequenceId, readonly NodeId[]> = new Map();\n\n\t\t/**\n\t\t * Resolves change with Result.Ok\n\t\t *\n\t\t * @param state - Unused\n\t\t * @param change - Change to resolve\n\t\t * @returns Result.Ok which contains change\n\t\t */\n\t\tpublic tryResolveChange(state: ValidState, change: ChangeInternal): Result.Ok<ChangeInternal> {\n\t\t\treturn Result.ok(change);\n\t\t}\n\n\t\t/**\n\t\t * Validates the transaction when it is closed\n\t\t *\n\t\t * @param state - Current state\n\t\t * @returns a {@link ChangeResult} containing either the change result or a Failure\n\t\t */\n\t\tpublic validateOnClose(state: ValidState): ChangeResult {\n\t\t\t// Making the policy choice that storing a detached sequences in an edit but not using it is an error.\n\t\t\tfor (const sequenceId of this.detached.keys()) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.UnusedDetachedSequence,\n\t\t\t\t\t\tsequenceId,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn Result.ok(state.view);\n\t\t}\n\n\t\t/**\n\t\t * Applies a given change\n\t\t *\n\t\t * @param state - Current state\n\t\t * @param change - Change to apply\n\t\t * @returns a {@link ChangeResult} containing either the change result or a Failure\n\t\t */\n\t\tpublic dispatchChange(state: ValidState, change: ChangeInternal): ChangeResult {\n\t\t\tswitch (change.type) {\n\t\t\t\tcase ChangeTypeInternal.Build:\n\t\t\t\t\treturn this.applyBuild(state, change);\n\t\t\t\tcase ChangeTypeInternal.Insert:\n\t\t\t\t\treturn this.applyInsert(state, change);\n\t\t\t\tcase ChangeTypeInternal.Detach:\n\t\t\t\t\treturn this.applyDetach(state, change);\n\t\t\t\tcase ChangeTypeInternal.Constraint:\n\t\t\t\t\treturn this.applyConstraint(state, change);\n\t\t\t\tcase ChangeTypeInternal.SetValue:\n\t\t\t\t\treturn this.applySetValue(state, change);\n\t\t\t\tdefault:\n\t\t\t\t\treturn fail('Attempted to apply unsupported change');\n\t\t\t}\n\t\t}\n\n\t\tprivate applyBuild(state: ValidState, change: BuildInternal): ChangeResult {\n\t\t\tif (this.detached.has(change.destination)) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceIdAlreadyInUse,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: change.destination,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlet idAlreadyPresent: NodeId | undefined;\n\t\t\tlet duplicateIdInBuild: NodeId | undefined;\n\t\t\tlet invalidId: NodeId | undefined;\n\t\t\tlet detachedSequenceNotFound: DetachedSequenceId | undefined;\n\t\t\tconst map = new Map<NodeId, TreeViewNode>();\n\t\t\tconst newIds = this.createViewNodesForTree(\n\t\t\t\tchange.source,\n\t\t\t\t(id, viewNode) => {\n\t\t\t\t\tif (map.has(id)) {\n\t\t\t\t\t\tduplicateIdInBuild = id;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tif (state.view.hasNode(viewNode.identifier)) {\n\t\t\t\t\t\tidAlreadyPresent = id;\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tmap.set(id, viewNode);\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\t(detachedId) => {\n\t\t\t\t\tdetachedSequenceNotFound = detachedId;\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tif (idAlreadyPresent !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.IdAlreadyInUse, change, id: idAlreadyPresent },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (duplicateIdInBuild !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: { kind: FailureKind.DuplicateIdInBuild, change, id: duplicateIdInBuild },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (invalidId !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.UnknownId, change, id: invalidId },\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (detachedSequenceNotFound !== undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceNotFound,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: detachedSequenceNotFound,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst view = state.view.addNodes(map.values());\n\t\t\tthis.detached.set(\n\t\t\t\tchange.destination,\n\t\t\t\tnewIds ?? fail('Unhandled failure case in Transaction.createViewNodesForTree')\n\t\t\t);\n\t\t\treturn Result.ok(view);\n\t\t}\n\n\t\tprivate applyInsert(state: ValidState, change: InsertInternal): ChangeResult {\n\t\t\tconst source = this.detached.get(change.source);\n\t\t\tif (source === undefined) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.DetachedSequenceNotFound,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tsequenceId: change.source,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst validatedDestination = validateStablePlace(state.view, change.destination);\n\t\t\tif (validatedDestination.result !== PlaceValidationResult.Valid) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalidatedDestination.result === PlaceValidationResult.Malformed ? EditStatus.Malformed : EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.BadPlace,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\tplace: change.destination,\n\t\t\t\t\t\tplaceFailure: validatedDestination.result,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.detached.delete(change.source);\n\t\t\tconst view = insertIntoTrait(state.view, source, validatedDestination);\n\t\t\treturn Result.ok(view);\n\t\t}\n\n\t\tprivate applyDetach(state: ValidState, change: DetachInternal): ChangeResult {\n\t\t\tconst validatedSource = validateStableRange(state.view, change.source);\n\t\t\tif (validatedSource.result !== RangeValidationResultKind.Valid) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus:\n\t\t\t\t\t\tvalidatedSource.result === RangeValidationResultKind.PlacesInDifferentTraits ||\n\t\t\t\t\t\tvalidatedSource.result === RangeValidationResultKind.Inverted ||\n\t\t\t\t\t\tvalidatedSource.result.placeFailure !== PlaceValidationResult.Malformed\n\t\t\t\t\t\t\t? EditStatus.Invalid\n\t\t\t\t\t\t\t: EditStatus.Malformed,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.BadRange,\n\t\t\t\t\t\tchange,\n\t\t\t\t\t\trange: change.source,\n\t\t\t\t\t\trangeFailure: validatedSource.result,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst result = detachRange(state.view, validatedSource);\n\t\t\tlet modifiedView = result.view;\n\t\t\tconst { detached } = result;\n\n\t\t\t// Store or dispose detached\n\t\t\tif (change.destination !== undefined) {\n\t\t\t\tif (this.detached.has(change.destination)) {\n\t\t\t\t\treturn Result.error({\n\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\tkind: FailureKind.DetachedSequenceIdAlreadyInUse,\n\t\t\t\t\t\t\tchange,\n\t\t\t\t\t\t\tsequenceId: change.destination,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthis.detached.set(change.destination, detached);\n\t\t\t} else {\n\t\t\t\tmodifiedView = modifiedView.deleteNodes(detached);\n\t\t\t}\n\t\t\treturn Result.ok(modifiedView);\n\t\t}\n\n\t\tprivate applyConstraint(state: ValidState, change: ConstraintInternal): ChangeResult {\n\t\t\t// TODO: Implement identityHash and contentHash\n\t\t\tassert(change.identityHash === undefined, 0x63a /* identityHash constraint is not implemented */);\n\t\t\tassert(change.contentHash === undefined, 0x63b /* contentHash constraint is not implemented */);\n\n\t\t\tconst validatedChange = validateStableRange(state.view, change.toConstrain);\n\t\t\tif (validatedChange.result !== RangeValidationResultKind.Valid) {\n\t\t\t\treturn validatedChange.result !== RangeValidationResultKind.PlacesInDifferentTraits &&\n\t\t\t\t\tvalidatedChange.result !== RangeValidationResultKind.Inverted &&\n\t\t\t\t\tvalidatedChange.result.placeFailure !== PlaceValidationResult.Malformed\n\t\t\t\t\t? change.effect === ConstraintEffect.ValidRetry\n\t\t\t\t\t\t? Result.ok(state.view)\n\t\t\t\t\t\t: Result.error({\n\t\t\t\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadRange,\n\t\t\t\t\t\t\t\t\t\trangeFailure: validatedChange.result,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t})\n\t\t\t\t\t: Result.error({\n\t\t\t\t\t\t\tstatus: EditStatus.Malformed,\n\t\t\t\t\t\t\tfailure: {\n\t\t\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadRange,\n\t\t\t\t\t\t\t\t\trangeFailure: validatedChange.result,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst { start, end } = rangeFromStableRange(state.view, validatedChange);\n\t\t\tconst startIndex = state.view.findIndexWithinTrait(start);\n\t\t\tconst endIndex = state.view.findIndexWithinTrait(end);\n\n\t\t\tif (change.length !== undefined && change.length !== endIndex - startIndex) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadLength,\n\t\t\t\t\t\t\tactual: endIndex - startIndex,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (change.parentNode !== undefined && change.parentNode !== end.trait.parent) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadParent,\n\t\t\t\t\t\t\tactual: change.parentNode,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (change.label !== undefined && change.label !== end.trait.label) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: {\n\t\t\t\t\t\tkind: FailureKind.ConstraintViolation,\n\t\t\t\t\t\tconstraint: change,\n\t\t\t\t\t\tviolation: {\n\t\t\t\t\t\t\tkind: ConstraintViolationKind.BadLabel,\n\t\t\t\t\t\t\tactual: end.trait.label,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t}\n\n\t\t\treturn Result.ok(state.view);\n\t\t}\n\n\t\tprivate applySetValue(state: ValidState, change: SetValueInternal): ChangeResult {\n\t\t\tif (!state.view.hasNode(change.nodeToModify)) {\n\t\t\t\treturn Result.error({\n\t\t\t\t\tstatus: EditStatus.Invalid,\n\t\t\t\t\tfailure: { kind: FailureKind.UnknownId, change, id: change.nodeToModify },\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst newView = state.view.setNodeValue(change.nodeToModify, change.payload);\n\t\t\treturn Result.ok(newView);\n\t\t}\n\n\t\t/**\n\t\t * Generates tree view nodes from the supplied edit nodes.\n\t\t * Invokes onCreateNode for each new node, and halts creation early if it returns true.\n\t\t * Invokes onInvalidDetachedId and halts early for any invalid detached IDs referenced in the edit node sequence.\n\t\t * @returns all the top-level node IDs in `sequence` (both from nodes and from detached sequences).\n\t\t */\n\t\tprotected createViewNodesForTree(\n\t\t\tsequence: Iterable<BuildNodeInternal>,\n\t\t\tonCreateNode: (stableId: NodeId, node: TreeViewNode) => boolean,\n\t\t\tonInvalidDetachedId: (sequenceId: DetachedSequenceId) => void\n\t\t): NodeId[] | undefined {\n\t\t\tconst topLevelIds: NodeId[] = [];\n\t\t\tconst unprocessed: BuildNodeInternal[] = [];\n\t\t\tfor (const buildNode of sequence) {\n\t\t\t\tif (isDetachedSequenceId(buildNode)) {\n\t\t\t\t\tconst detachedIds = this.getDetachedNodeIds(buildNode, onInvalidDetachedId);\n\t\t\t\t\tif (detachedIds === undefined) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t\ttopLevelIds.push(...detachedIds);\n\t\t\t\t} else {\n\t\t\t\t\tunprocessed.push(buildNode);\n\t\t\t\t\ttopLevelIds.push(buildNode.identifier);\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (unprocessed.length > 0) {\n\t\t\t\tconst node = unprocessed.pop();\n\t\t\t\tassertWithMessage(node !== undefined && !isDetachedSequenceId(node));\n\t\t\t\tconst traits = new Map<TraitLabel, readonly NodeId[]>();\n\t\t\t\t// eslint-disable-next-line no-restricted-syntax\n\t\t\t\tfor (const key in node.traits) {\n\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(node.traits, key)) {\n\t\t\t\t\t\tconst children = node.traits[key];\n\t\t\t\t\t\tif (children.length > 0) {\n\t\t\t\t\t\t\tconst childIds: NodeId[] = [];\n\t\t\t\t\t\t\tfor (const child of children) {\n\t\t\t\t\t\t\t\tif (isDetachedSequenceId(child)) {\n\t\t\t\t\t\t\t\t\tconst detachedIds = this.getDetachedNodeIds(child, onInvalidDetachedId);\n\t\t\t\t\t\t\t\t\tif (detachedIds === undefined) {\n\t\t\t\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tchildIds.push(...detachedIds);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tchildIds.push(child.identifier);\n\t\t\t\t\t\t\t\t\tunprocessed.push(child);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttraits.set(key as TraitLabel, childIds);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconst newNode: TreeViewNode = {\n\t\t\t\t\tidentifier: node.identifier,\n\t\t\t\t\tdefinition: node.definition,\n\t\t\t\t\ttraits,\n\t\t\t\t};\n\t\t\t\tcopyPropertyIfDefined(node, newNode, 'payload');\n\t\t\t\tif (onCreateNode(node.identifier, newNode)) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn topLevelIds;\n\t\t}\n\n\t\tprivate getDetachedNodeIds(\n\t\t\tdetachedId: DetachedSequenceId,\n\t\t\tonInvalidDetachedId: (sequenceId: DetachedSequenceId) => void\n\t\t): readonly NodeId[] | undefined {\n\t\t\t// Retrieve the detached sequence from the void.\n\t\t\tconst detachedNodeIds = this.detached.get(detachedId);\n\t\t\tif (detachedNodeIds === undefined) {\n\t\t\t\tonInvalidDetachedId(detachedId);\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\t// Since we have retrieved the sequence, remove it from the void to prevent a second tree from multi-parenting it later\n\t\t\tthis.detached.delete(detachedId);\n\t\t\treturn detachedNodeIds;\n\t\t}\n\t}\n\n\t/**\n\t * The kinds of failures that a transaction might encounter.\n\t * @alpha\n\t */\n\texport enum FailureKind {\n\t\t/**\n\t\t * Transaction has an unused DetachedSequenceId\n\t\t */\n\t\tUnusedDetachedSequence = 'UnusedDetachedSequence',\n\t\t/**\n\t\t * Transaction has a build operation using an already in use DetachedSequenceID.\n\t\t */\n\t\tDetachedSequenceIdAlreadyInUse = 'DetachedSequenceIdAlreadyInUse',\n\t\t/**\n\t\t * Transaction tries to operate on an unknown DetachedSequenceID\n\t\t */\n\t\tDetachedSequenceNotFound = 'DetachedSequenceNotFound',\n\t\t/**\n\t\t * Transaction has a build which uses a duplicated NodeId\n\t\t */\n\t\tDuplicateIdInBuild = 'DuplicateIdInBuild',\n\t\t/**\n\t\t * Transaction tries to build a node using an ID which is already used in the current state\n\t\t */\n\t\tIdAlreadyInUse = 'IdAlreadyInUse',\n\t\t/**\n\t\t * Transaction tries to set value of an unknown node\n\t\t */\n\t\tUnknownId = 'UnknownId',\n\t\t/**\n\t\t * Transaction tries to insert in an invalid Place\n\t\t */\n\t\tBadPlace = 'BadPlace',\n\t\t/**\n\t\t * Transaction tries to detach an invalid Range\n\t\t */\n\t\tBadRange = 'BadRange',\n\t\t/**\n\t\t * Transaction has an invalid constraint\n\t\t */\n\t\tConstraintViolation = 'ConstraintViolation',\n\t}\n\n\t/**\n\t * A failure encountered by a transaction.\n\t * @alpha\n\t */\n\texport type Failure =\n\t\t| UnusedDetachedSequenceFailure\n\t\t| DetachedSequenceIdAlreadyInUseFailure\n\t\t| DetachedSequenceNotFoundFailure\n\t\t| DuplicateIdInBuildFailure\n\t\t| IdAlreadyInUseFailure\n\t\t| UnknownIdFailure\n\t\t| BadPlaceFailure\n\t\t| BadRangeFailure\n\t\t| ConstraintViolationFailure;\n\n\t/**\n\t * Error returned when a transaction is closed while there is an unused detached sequence.\n\t * @alpha\n\t */\n\texport interface UnusedDetachedSequenceFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.UnusedDetachedSequence)\n\t\t */\n\t\treadonly kind: FailureKind.UnusedDetachedSequence;\n\t\t/**\n\t\t * The unused DetachedSequenceId\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a transaction encounters a build operation using an already in use DetachedSequenceID.\n\t * @alpha\n\t */\n\texport interface DetachedSequenceIdAlreadyInUseFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DetachedSequenceIdAlreadyInUse)\n\t\t */\n\t\treadonly kind: FailureKind.DetachedSequenceIdAlreadyInUse;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The DetachedSequenceId that is already in use\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a transaction tries to operate on an unknown DetachedSequenceID\n\t * @alpha\n\t */\n\texport interface DetachedSequenceNotFoundFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DetachedSequenceNotFound)\n\t\t */\n\t\treadonly kind: FailureKind.DetachedSequenceNotFound;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The DetachedSequenceId that wasn't found\n\t\t */\n\t\treadonly sequenceId: DetachedSequenceId;\n\t}\n\n\t/**\n\t * Error thrown when a build uses a duplicated NodeId\n\t * @alpha\n\t */\n\texport interface DuplicateIdInBuildFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.DuplicateIdInBuild)\n\t\t */\n\t\treadonly kind: FailureKind.DuplicateIdInBuild;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * ID of duplicated node\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when a build node ID is already used in the current state\n\t * @alpha\n\t */\n\texport interface IdAlreadyInUseFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.IdAlreadyInUse)\n\t\t */\n\t\treadonly kind: FailureKind.IdAlreadyInUse;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * ID of already in use node\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when a change is attempted on an unknown NodeId\n\t * @alpha\n\t */\n\texport interface UnknownIdFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.UnknownId)\n\t\t */\n\t\treadonly kind: FailureKind.UnknownId;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The unknown ID\n\t\t */\n\t\treadonly id: NodeId;\n\t}\n\n\t/**\n\t * Error thrown when an insert change uses an invalid Place\n\t * @alpha\n\t */\n\texport interface BadPlaceFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.BadPlace)\n\t\t */\n\t\treadonly kind: FailureKind.BadPlace;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * The faulting place\n\t\t */\n\t\treadonly place: StablePlaceInternal;\n\t\t/**\n\t\t * The reason for the failure\n\t\t */\n\t\treadonly placeFailure: BadPlaceValidationResult;\n\t}\n\n\t/**\n\t * Error thrown when a detach operation is given an invalid or malformed Range\n\t * @alpha\n\t */\n\texport interface BadRangeFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.BadRange)\n\t\t */\n\t\treadonly kind: FailureKind.BadRange;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly change: ChangeInternal;\n\t\t/**\n\t\t * Faulting range\n\t\t */\n\t\treadonly range: StableRangeInternal;\n\t\t/**\n\t\t * The reason for the failure\n\t\t */\n\t\treadonly rangeFailure: BadRangeValidationResult;\n\t}\n\n\t/**\n\t * Error thrown when a constraint fails to apply\n\t * @alpha\n\t */\n\texport interface ConstraintViolationFailure {\n\t\t/**\n\t\t * Failure kind (will always be FailureKind.ConstraintViolation)\n\t\t */\n\t\treadonly kind: FailureKind.ConstraintViolation;\n\t\t/**\n\t\t * Faulting Change\n\t\t */\n\t\treadonly constraint: ConstraintInternal;\n\t\t/**\n\t\t * The first violation the constraint encounters (there may be others).\n\t\t */\n\t\treadonly violation: ConstraintViolationResult;\n\t}\n\n\t/**\n\t * The details of what kind of constraint was violated and caused a ConstraintViolationFailure error to occur\n\t * @alpha\n\t */\n\texport type ConstraintViolationResult =\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadRange;\n\t\t\t\treadonly rangeFailure: BadRangeValidationResult;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadLength;\n\t\t\t\treadonly actual: number;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadParent;\n\t\t\t\treadonly actual: NodeId;\n\t\t }\n\t\t| {\n\t\t\t\treadonly kind: ConstraintViolationKind.BadLabel;\n\t\t\t\treadonly actual: TraitLabel;\n\t\t };\n\n\t/**\n\t * Enum of possible kinds of constraint violations that can be encountered\n\t * @alpha\n\t */\n\texport enum ConstraintViolationKind {\n\t\t/**\n\t\t * The constraint failed because it applies to an invalid range\n\t\t */\n\t\tBadRange = 'BadRange',\n\t\t/**\n\t\t * The constraint failed because the length prescribed by the constraint does not match the length of range being constrained\n\t\t */\n\t\tBadLength = 'BadLength',\n\t\t/**\n\t\t * The constraint failed because the parent prescribed by the constraint does not match the actual parent of the range being constrained\n\t\t */\n\t\tBadParent = 'BadParent',\n\t\t/**\n\t\t * The constraint failed because the trait label prescribed by the constraint does not match the actual trait label of the range being constrained\n\t\t */\n\t\tBadLabel = 'BadLabel',\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluid-experimental/tree",
3
- "version": "2.116.0-416006",
3
+ "version": "2.116.0",
4
4
  "description": "Distributed tree",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -27,18 +27,18 @@
27
27
  "main": "lib/index.js",
28
28
  "types": "lib/index.d.ts",
29
29
  "dependencies": {
30
- "@fluid-internal/client-utils": "2.116.0-416006",
31
- "@fluidframework/container-definitions": "2.116.0-416006",
32
- "@fluidframework/core-interfaces": "2.116.0-416006",
33
- "@fluidframework/core-utils": "2.116.0-416006",
34
- "@fluidframework/datastore-definitions": "2.116.0-416006",
35
- "@fluidframework/driver-definitions": "2.116.0-416006",
36
- "@fluidframework/id-compressor": "2.116.0-416006",
37
- "@fluidframework/runtime-definitions": "2.116.0-416006",
38
- "@fluidframework/runtime-utils": "2.116.0-416006",
39
- "@fluidframework/shared-object-base": "2.116.0-416006",
40
- "@fluidframework/telemetry-utils": "2.116.0-416006",
41
- "@fluidframework/tree": "2.116.0-416006",
30
+ "@fluid-internal/client-utils": "~2.116.0",
31
+ "@fluidframework/container-definitions": "~2.116.0",
32
+ "@fluidframework/core-interfaces": "~2.116.0",
33
+ "@fluidframework/core-utils": "~2.116.0",
34
+ "@fluidframework/datastore-definitions": "~2.116.0",
35
+ "@fluidframework/driver-definitions": "~2.116.0",
36
+ "@fluidframework/id-compressor": "~2.116.0",
37
+ "@fluidframework/runtime-definitions": "~2.116.0",
38
+ "@fluidframework/runtime-utils": "~2.116.0",
39
+ "@fluidframework/shared-object-base": "~2.116.0",
40
+ "@fluidframework/telemetry-utils": "~2.116.0",
41
+ "@fluidframework/tree": "~2.116.0",
42
42
  "@tylerbu/sorted-btree-es6": "^2.1.1",
43
43
  "buffer": "^6.0.3",
44
44
  "denque": "^1.5.1",
@@ -46,22 +46,22 @@
46
46
  "uuid": "^11.1.0"
47
47
  },
48
48
  "devDependencies": {
49
- "@arethetypeswrong/cli": "^0.18.2",
49
+ "@arethetypeswrong/cli": "^0.18.5",
50
50
  "@biomejs/biome": "~2.4.5",
51
- "@fluid-internal/mocha-test-setup": "2.116.0-416006",
52
- "@fluid-private/stochastic-test-utils": "2.116.0-416006",
53
- "@fluid-private/test-drivers": "2.116.0-416006",
51
+ "@fluid-internal/mocha-test-setup": "~2.116.0",
52
+ "@fluid-private/stochastic-test-utils": "~2.116.0",
53
+ "@fluid-private/test-drivers": "~2.116.0",
54
54
  "@fluid-tools/benchmark": "^0.59.0",
55
55
  "@fluidframework/build-common": "^2.0.3",
56
- "@fluidframework/build-tools": "^0.65.0",
57
- "@fluidframework/container-definitions": "2.116.0-416006",
58
- "@fluidframework/container-loader": "2.116.0-416006",
59
- "@fluidframework/container-runtime": "2.116.0-416006",
60
- "@fluidframework/eslint-config-fluid": "^13.0.0",
61
- "@fluidframework/runtime-utils": "2.116.0-416006",
62
- "@fluidframework/test-runtime-utils": "2.116.0-416006",
63
- "@fluidframework/test-utils": "2.116.0-416006",
64
- "@fluidframework/undo-redo": "2.116.0-416006",
56
+ "@fluidframework/build-tools": "^0.67.0",
57
+ "@fluidframework/container-definitions": "~2.116.0",
58
+ "@fluidframework/container-loader": "~2.116.0",
59
+ "@fluidframework/container-runtime": "~2.116.0",
60
+ "@fluidframework/eslint-config-fluid": "^14.0.0",
61
+ "@fluidframework/runtime-utils": "~2.116.0",
62
+ "@fluidframework/test-runtime-utils": "~2.116.0",
63
+ "@fluidframework/test-utils": "~2.116.0",
64
+ "@fluidframework/undo-redo": "~2.116.0",
65
65
  "@microsoft/api-extractor": "7.58.1",
66
66
  "@types/chai": "^4.0.0",
67
67
  "@types/lru-cache": "^5.1.0",
@@ -474,15 +474,16 @@ export namespace TransactionInternal {
474
474
  */
475
475
  public validateOnClose(state: ValidState): ChangeResult {
476
476
  // Making the policy choice that storing a detached sequences in an edit but not using it is an error.
477
- return this.detached.size !== 0
478
- ? Result.error({
479
- status: EditStatus.Malformed,
480
- failure: {
481
- kind: FailureKind.UnusedDetachedSequence,
482
- sequenceId: this.detached.keys().next().value,
483
- },
484
- })
485
- : Result.ok(state.view);
477
+ for (const sequenceId of this.detached.keys()) {
478
+ return Result.error({
479
+ status: EditStatus.Malformed,
480
+ failure: {
481
+ kind: FailureKind.UnusedDetachedSequence,
482
+ sequenceId,
483
+ },
484
+ });
485
+ }
486
+ return Result.ok(state.view);
486
487
  }
487
488
 
488
489
  /**