@fluidframework/tree 2.114.0 → 2.116.0-416006
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 +191 -0
- package/api-report/tree.alpha.api.md +108 -39
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/rebase/index.d.ts +1 -1
- package/dist/core/rebase/index.d.ts.map +1 -1
- package/dist/core/rebase/index.js +2 -1
- package/dist/core/rebase/index.js.map +1 -1
- package/dist/core/rebase/types.d.ts +110 -0
- package/dist/core/rebase/types.d.ts.map +1 -1
- package/dist/core/rebase/types.js +47 -1
- package/dist/core/rebase/types.js.map +1 -1
- package/dist/entrypoints/alpha.d.ts +1 -1
- package/dist/entrypoints/alpha.d.ts.map +1 -1
- package/dist/entrypoints/alpha.js +6 -4
- package/dist/entrypoints/alpha.js.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -6
- package/dist/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/dist/feature-libraries/chunked-forest/codec/codecs.js +16 -13
- package/dist/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -5
- package/dist/index.js.map +1 -1
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/dist/shared-tree/sharedTree.d.ts +5 -0
- package/dist/shared-tree/sharedTree.d.ts.map +1 -1
- package/dist/shared-tree/sharedTree.js +1 -1
- package/dist/shared-tree/sharedTree.js.map +1 -1
- package/dist/shared-tree/treeCheckout.d.ts +5 -0
- package/dist/shared-tree/treeCheckout.d.ts.map +1 -1
- package/dist/shared-tree/treeCheckout.js +58 -12
- package/dist/shared-tree/treeCheckout.js.map +1 -1
- package/dist/shared-tree-core/branch.d.ts +1 -0
- package/dist/shared-tree-core/branch.d.ts.map +1 -1
- package/dist/shared-tree-core/branch.js.map +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js +1 -1
- package/dist/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/dist/simple-tree/api/index.d.ts +1 -1
- package/dist/simple-tree/api/index.d.ts.map +1 -1
- package/dist/simple-tree/api/index.js +2 -3
- package/dist/simple-tree/api/index.js.map +1 -1
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts +3 -3
- package/dist/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaStatics.d.ts +6 -7
- package/dist/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/dist/simple-tree/api/schemaStatics.js.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.d.ts +20 -24
- package/dist/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/dist/simple-tree/api/treeNodeApi.js +48 -49
- package/dist/simple-tree/api/treeNodeApi.js.map +1 -1
- package/dist/simple-tree/core/treeNode.d.ts +5 -6
- package/dist/simple-tree/core/treeNode.d.ts.map +1 -1
- package/dist/simple-tree/core/treeNode.js +2 -4
- package/dist/simple-tree/core/treeNode.js.map +1 -1
- package/dist/simple-tree/core/withType.d.ts +20 -7
- package/dist/simple-tree/core/withType.d.ts.map +1 -1
- package/dist/simple-tree/core/withType.js +4 -7
- package/dist/simple-tree/core/withType.js.map +1 -1
- package/dist/simple-tree/index.d.ts +2 -2
- package/dist/simple-tree/index.d.ts.map +1 -1
- package/dist/simple-tree/index.js +3 -4
- package/dist/simple-tree/index.js.map +1 -1
- package/dist/simple-tree/leafNodeSchema.d.ts +6 -1
- package/dist/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/dist/simple-tree/leafNodeSchema.js +0 -1
- package/dist/simple-tree/leafNodeSchema.js.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts +32 -3
- package/dist/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/array/arrayNode.js +91 -10
- package/dist/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts +77 -0
- package/dist/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js +17 -1
- package/dist/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/object/objectNode.js +2 -2
- package/dist/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/dist/simple-tree/node-kinds/record/recordNode.js +2 -2
- package/dist/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/dist/text/codePointUtils.d.ts +2 -2
- package/dist/text/codePointUtils.js +2 -2
- package/dist/text/codePointUtils.js.map +1 -1
- package/dist/text/index.d.ts +3 -3
- package/dist/text/index.d.ts.map +1 -1
- package/dist/text/index.js +4 -4
- package/dist/text/index.js.map +1 -1
- package/dist/text/textDomain.d.ts +18 -18
- package/dist/text/textDomain.d.ts.map +1 -1
- package/dist/text/textDomain.js +8 -8
- package/dist/text/textDomain.js.map +1 -1
- package/dist/text/textDomainFormatted.d.ts +46 -42
- package/dist/text/textDomainFormatted.d.ts.map +1 -1
- package/dist/text/textDomainFormatted.js +32 -28
- package/dist/text/textDomainFormatted.js.map +1 -1
- package/dist/text/textDomainFormattedDefault.d.ts +18 -18
- package/dist/text/textDomainFormattedDefault.d.ts.map +1 -1
- package/dist/text/textDomainFormattedDefault.js +14 -17
- package/dist/text/textDomainFormattedDefault.js.map +1 -1
- package/dist/util/compressedIds.d.ts +22 -2
- package/dist/util/compressedIds.d.ts.map +1 -1
- package/dist/util/compressedIds.js +22 -1
- package/dist/util/compressedIds.js.map +1 -1
- package/lib/core/index.d.ts +1 -1
- package/lib/core/index.d.ts.map +1 -1
- package/lib/core/index.js +1 -1
- package/lib/core/index.js.map +1 -1
- package/lib/core/rebase/index.d.ts +1 -1
- package/lib/core/rebase/index.d.ts.map +1 -1
- package/lib/core/rebase/index.js +1 -1
- package/lib/core/rebase/index.js.map +1 -1
- package/lib/core/rebase/types.d.ts +110 -0
- package/lib/core/rebase/types.d.ts.map +1 -1
- package/lib/core/rebase/types.js +46 -0
- package/lib/core/rebase/types.js.map +1 -1
- package/lib/entrypoints/alpha.d.ts +1 -1
- package/lib/entrypoints/alpha.d.ts.map +1 -1
- package/lib/entrypoints/alpha.js +1 -1
- package/lib/entrypoints/alpha.js.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts +9 -6
- package/lib/feature-libraries/chunked-forest/codec/codecs.d.ts.map +1 -1
- package/lib/feature-libraries/chunked-forest/codec/codecs.js +16 -13
- package/lib/feature-libraries/chunked-forest/codec/codecs.js.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.d.ts.map +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/lib/shared-tree/sharedTree.d.ts +5 -0
- package/lib/shared-tree/sharedTree.d.ts.map +1 -1
- package/lib/shared-tree/sharedTree.js +1 -1
- package/lib/shared-tree/sharedTree.js.map +1 -1
- package/lib/shared-tree/treeCheckout.d.ts +5 -0
- package/lib/shared-tree/treeCheckout.d.ts.map +1 -1
- package/lib/shared-tree/treeCheckout.js +60 -14
- package/lib/shared-tree/treeCheckout.js.map +1 -1
- package/lib/shared-tree-core/branch.d.ts +1 -0
- package/lib/shared-tree-core/branch.d.ts.map +1 -1
- package/lib/shared-tree-core/branch.js.map +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js +1 -1
- package/lib/shared-tree-core/sharedTreeCore.js.map +1 -1
- package/lib/simple-tree/api/index.d.ts +1 -1
- package/lib/simple-tree/api/index.d.ts.map +1 -1
- package/lib/simple-tree/api/index.js +1 -1
- package/lib/simple-tree/api/index.js.map +1 -1
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts +3 -3
- package/lib/simple-tree/api/schemaFactoryAlpha.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaStatics.d.ts +6 -7
- package/lib/simple-tree/api/schemaStatics.d.ts.map +1 -1
- package/lib/simple-tree/api/schemaStatics.js.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.d.ts +20 -24
- package/lib/simple-tree/api/treeNodeApi.d.ts.map +1 -1
- package/lib/simple-tree/api/treeNodeApi.js +46 -46
- package/lib/simple-tree/api/treeNodeApi.js.map +1 -1
- package/lib/simple-tree/core/treeNode.d.ts +5 -6
- package/lib/simple-tree/core/treeNode.d.ts.map +1 -1
- package/lib/simple-tree/core/treeNode.js +2 -4
- package/lib/simple-tree/core/treeNode.js.map +1 -1
- package/lib/simple-tree/core/withType.d.ts +20 -7
- package/lib/simple-tree/core/withType.d.ts.map +1 -1
- package/lib/simple-tree/core/withType.js +4 -7
- package/lib/simple-tree/core/withType.js.map +1 -1
- package/lib/simple-tree/index.d.ts +2 -2
- package/lib/simple-tree/index.d.ts.map +1 -1
- package/lib/simple-tree/index.js +1 -1
- package/lib/simple-tree/index.js.map +1 -1
- package/lib/simple-tree/leafNodeSchema.d.ts +6 -1
- package/lib/simple-tree/leafNodeSchema.d.ts.map +1 -1
- package/lib/simple-tree/leafNodeSchema.js +0 -1
- package/lib/simple-tree/leafNodeSchema.js.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts +32 -3
- package/lib/simple-tree/node-kinds/array/arrayNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/array/arrayNode.js +93 -12
- package/lib/simple-tree/node-kinds/array/arrayNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts +77 -0
- package/lib/simple-tree/node-kinds/map/mapNode.d.ts.map +1 -1
- package/lib/simple-tree/node-kinds/map/mapNode.js +18 -2
- package/lib/simple-tree/node-kinds/map/mapNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/object/objectNode.js +3 -3
- package/lib/simple-tree/node-kinds/object/objectNode.js.map +1 -1
- package/lib/simple-tree/node-kinds/record/recordNode.js +3 -3
- package/lib/simple-tree/node-kinds/record/recordNode.js.map +1 -1
- package/lib/text/codePointUtils.d.ts +2 -2
- package/lib/text/codePointUtils.js +2 -2
- package/lib/text/codePointUtils.js.map +1 -1
- package/lib/text/index.d.ts +3 -3
- package/lib/text/index.d.ts.map +1 -1
- package/lib/text/index.js +3 -3
- package/lib/text/index.js.map +1 -1
- package/lib/text/textDomain.d.ts +18 -18
- package/lib/text/textDomain.d.ts.map +1 -1
- package/lib/text/textDomain.js +7 -7
- package/lib/text/textDomain.js.map +1 -1
- package/lib/text/textDomainFormatted.d.ts +46 -42
- package/lib/text/textDomainFormatted.d.ts.map +1 -1
- package/lib/text/textDomainFormatted.js +31 -27
- package/lib/text/textDomainFormatted.js.map +1 -1
- package/lib/text/textDomainFormattedDefault.d.ts +18 -18
- package/lib/text/textDomainFormattedDefault.d.ts.map +1 -1
- package/lib/text/textDomainFormattedDefault.js +14 -17
- package/lib/text/textDomainFormattedDefault.js.map +1 -1
- package/lib/util/compressedIds.d.ts +22 -2
- package/lib/util/compressedIds.d.ts.map +1 -1
- package/lib/util/compressedIds.js +22 -1
- package/lib/util/compressedIds.js.map +1 -1
- package/package.json +29 -22
- package/src/core/index.ts +2 -0
- package/src/core/rebase/index.ts +2 -0
- package/src/core/rebase/types.ts +113 -0
- package/src/entrypoints/alpha.ts +10 -6
- package/src/feature-libraries/chunked-forest/codec/codecs.ts +17 -14
- package/src/index.ts +7 -4
- package/src/packageVersion.ts +1 -1
- package/src/shared-tree/sharedTree.ts +6 -1
- package/src/shared-tree/treeCheckout.ts +81 -14
- package/src/shared-tree-core/branch.ts +1 -0
- package/src/shared-tree-core/sharedTreeCore.ts +1 -1
- package/src/simple-tree/api/index.ts +0 -1
- package/src/simple-tree/api/schemaStatics.ts +2 -2
- package/src/simple-tree/api/treeNodeApi.ts +64 -48
- package/src/simple-tree/core/treeNode.ts +13 -10
- package/src/simple-tree/core/withType.ts +20 -7
- package/src/simple-tree/index.ts +1 -2
- package/src/simple-tree/leafNodeSchema.ts +6 -1
- package/src/simple-tree/node-kinds/array/arrayNode.ts +109 -14
- package/src/simple-tree/node-kinds/map/mapNode.ts +113 -3
- package/src/simple-tree/node-kinds/object/objectNode.ts +3 -3
- package/src/simple-tree/node-kinds/record/recordNode.ts +3 -3
- package/src/text/README.md +1 -1
- package/src/text/codePointUtils.ts +2 -2
- package/src/text/index.ts +3 -3
- package/src/text/textDomain.ts +21 -21
- package/src/text/textDomainFormatted.ts +56 -52
- package/src/text/textDomainFormattedDefault.ts +14 -23
- package/src/util/compressedIds.ts +36 -3
|
@@ -7,14 +7,14 @@ import { createEmitter } from "@fluid-internal/client-utils";
|
|
|
7
7
|
import { assert, unreachableCase, fail } from "@fluidframework/core-utils/internal";
|
|
8
8
|
import { UsageError } from "@fluidframework/telemetry-utils/internal";
|
|
9
9
|
import { FluidClientVersion, FormatValidatorNoOp, } from "../codec/index.js";
|
|
10
|
-
import { CommitKind, RevertibleStatus, TreeStoredSchemaRepository, combineVisitors, makeDetachedFieldIndex, rebaseChange, rootFieldKey, tagChange, visitDelta, isAncestor, moveToDetachedField, LeafNodeStoredSchema, diffHistories, makeAnonChange, deltaFieldMapHasVisibleChanges, findCommonAncestor, rebaseBranch, } from "../core/index.js";
|
|
10
|
+
import { CommitKind, CommitOutcome, RevertibleStatus, TreeStoredSchemaRepository, combineVisitors, makeDetachedFieldIndex, rebaseChange, rootFieldKey, tagChange, visitDelta, isAncestor, moveToDetachedField, LeafNodeStoredSchema, diffHistories, makeAnonChange, deltaFieldMapHasVisibleChanges, findCommonAncestor, rebaseBranch, } from "../core/index.js";
|
|
11
11
|
import { allowsRepoSuperset, buildForest, createNodeIdentifierManager, defaultSchemaPolicy, fieldBatchCodecBuilder, TreeStatus, intoDelta, jsonableTreeFromCursor, } from "../feature-libraries/index.js";
|
|
12
12
|
import { SquashingTransactionStack, SharedTreeBranch, TransactionResult as InternalTransactionResult, } from "../shared-tree-core/index.js";
|
|
13
13
|
import { getInnerNode, getKernel, customFromCursorStored, } from "../simple-tree/index.js";
|
|
14
14
|
import { Breakable, breakingMethod, disposeSymbol, getOrCreate, hasSome, throwIfBroken, } from "../util/index.js";
|
|
15
15
|
import { SchematizingSimpleTreeView } from "./schematizingTreeView.js";
|
|
16
16
|
import { SharedTreeChangeEnricher } from "./sharedTreeChangeEnricher.js";
|
|
17
|
-
import { SharedTreeChangeFamily, hasSchemaChange } from "./sharedTreeChangeFamily.js";
|
|
17
|
+
import { ConstraintStatus, SharedTreeChangeFamily, getConstraintStatus, hasSchemaChange, } from "./sharedTreeChangeFamily.js";
|
|
18
18
|
import { extractTransactionChangeProcessor } from "./transactionPostProcessor.js";
|
|
19
19
|
import { SerializedChange } from "./serializedChange.js";
|
|
20
20
|
/**
|
|
@@ -191,6 +191,10 @@ let TreeCheckout = (() => {
|
|
|
191
191
|
this.disposeForksAfterTransaction = disposeForksAfterTransaction;
|
|
192
192
|
this.disposed = false;
|
|
193
193
|
this.views = new Set();
|
|
194
|
+
/**
|
|
195
|
+
* Event emitters for local commits.
|
|
196
|
+
*/
|
|
197
|
+
this.localCommitEventEmitters = new Map();
|
|
194
198
|
/**
|
|
195
199
|
* Revertibles maintained for automatic disposal
|
|
196
200
|
*/
|
|
@@ -203,6 +207,38 @@ let TreeCheckout = (() => {
|
|
|
203
207
|
this.revertibleCommitBranches = new Map();
|
|
204
208
|
_TreeCheckout_events.set(this, createEmitter());
|
|
205
209
|
this.events = __classPrivateFieldGet(this, _TreeCheckout_events, "f");
|
|
210
|
+
this.onCommitSequenced = (commit) => {
|
|
211
|
+
const emitter = this.localCommitEventEmitters.get(commit.revision);
|
|
212
|
+
if (emitter === undefined) {
|
|
213
|
+
// If the commit predates the creation of this checkout, there will be no emitter associated with the commit.
|
|
214
|
+
// In that case, we don't need to emit any events.
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
const constraintStatus = getConstraintStatus(commit.change);
|
|
218
|
+
let outcome;
|
|
219
|
+
switch (constraintStatus) {
|
|
220
|
+
case ConstraintStatus.Satisfied: {
|
|
221
|
+
outcome = CommitOutcome.FullyApplied;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
case ConstraintStatus.ImplicitViolation: {
|
|
225
|
+
outcome = CommitOutcome.FullyDropped;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
case ConstraintStatus.ExplicitViolation: {
|
|
229
|
+
outcome = CommitOutcome.NewContentOnly;
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
default: {
|
|
233
|
+
unreachableCase(constraintStatus);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
this.emitChangedLocked(() => {
|
|
237
|
+
emitter.emit("settled", outcome);
|
|
238
|
+
}, "a commit settled event callback");
|
|
239
|
+
// No more events will be emitted for this commit, so we can remove the emitter from the map.
|
|
240
|
+
this.localCommitEventEmitters.delete(commit.revision);
|
|
241
|
+
};
|
|
206
242
|
this.onAfterBranchChange = (event) => {
|
|
207
243
|
// The following logic allows revertibles to be generated for the change.
|
|
208
244
|
// Currently only appends (including merges and transaction commits) are supported.
|
|
@@ -231,6 +267,8 @@ let TreeCheckout = (() => {
|
|
|
231
267
|
return revertible;
|
|
232
268
|
};
|
|
233
269
|
let withinEventContext = true;
|
|
270
|
+
const events = createEmitter();
|
|
271
|
+
this.localCommitEventEmitters.set(commit.revision, events);
|
|
234
272
|
const metadata = {
|
|
235
273
|
kind,
|
|
236
274
|
isLocal: true,
|
|
@@ -241,6 +279,7 @@ let TreeCheckout = (() => {
|
|
|
241
279
|
getRevertible: (onDisposed) => getRevertible?.(onDisposed),
|
|
242
280
|
label: this.labelTreeNode?.label,
|
|
243
281
|
labels: buildLabelsSet(this.labelTreeNode),
|
|
282
|
+
events,
|
|
244
283
|
};
|
|
245
284
|
this.emitChangedLocked(() => {
|
|
246
285
|
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("changed", metadata, getRevertible);
|
|
@@ -266,7 +305,7 @@ let TreeCheckout = (() => {
|
|
|
266
305
|
}
|
|
267
306
|
};
|
|
268
307
|
this.onAfterChange = (event) => {
|
|
269
|
-
this.editLock.lock();
|
|
308
|
+
this.editLock.lock("a change event callback");
|
|
270
309
|
__classPrivateFieldGet(this, _TreeCheckout_events, "f").emit("beforeBatch", event);
|
|
271
310
|
if (event.change !== undefined) {
|
|
272
311
|
const revision = event.type === "rebase"
|
|
@@ -429,11 +468,13 @@ let TreeCheckout = (() => {
|
|
|
429
468
|
}
|
|
430
469
|
registerForBranchEvents() {
|
|
431
470
|
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.events.on("afterChange", this.onAfterBranchChange);
|
|
471
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.events.on("commitSequenced", this.onCommitSequenced);
|
|
432
472
|
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEvents.on("afterChange", this.onAfterChange);
|
|
433
473
|
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEvents.on("ancestryTrimmed", this.onAncestryTrimmed);
|
|
434
474
|
}
|
|
435
475
|
unregisterFromBranchEvents() {
|
|
436
476
|
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.events.off("afterChange", this.onAfterBranchChange);
|
|
477
|
+
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").branch.events.off("commitSequenced", this.onCommitSequenced);
|
|
437
478
|
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEvents.off("afterChange", this.onAfterChange);
|
|
438
479
|
__classPrivateFieldGet(this, _TreeCheckout_transaction, "f").activeBranchEvents.off("ancestryTrimmed", this.onAncestryTrimmed);
|
|
439
480
|
}
|
|
@@ -497,8 +538,8 @@ let TreeCheckout = (() => {
|
|
|
497
538
|
* Shared by both the local and remote `changed` emission paths in {@link TreeCheckout.onAfterBranchChange}.
|
|
498
539
|
* The `try`/`finally` ensures the lock is released even if a listener throws.
|
|
499
540
|
*/
|
|
500
|
-
emitChangedLocked(emit) {
|
|
501
|
-
this.editLock.lock();
|
|
541
|
+
emitChangedLocked(emit, reason = "a change event callback") {
|
|
542
|
+
this.editLock.lock(reason);
|
|
502
543
|
try {
|
|
503
544
|
emit();
|
|
504
545
|
}
|
|
@@ -1016,7 +1057,11 @@ class EditLock {
|
|
|
1016
1057
|
* Use {@link EditLock.editor} in place of the original editor to ensure that changes are monitored.
|
|
1017
1058
|
*/
|
|
1018
1059
|
constructor(editor) {
|
|
1019
|
-
|
|
1060
|
+
/**
|
|
1061
|
+
* The current status of the lock.
|
|
1062
|
+
* The `reason` string will be included in the error message if an attempt is made to edit the tree while the lock is held.
|
|
1063
|
+
*/
|
|
1064
|
+
this.status = { isLocked: false };
|
|
1020
1065
|
const checkLock = () => this.checkUnlocked("Editing the tree");
|
|
1021
1066
|
this.editor = {
|
|
1022
1067
|
get schema() {
|
|
@@ -1073,14 +1118,15 @@ class EditLock {
|
|
|
1073
1118
|
}
|
|
1074
1119
|
/**
|
|
1075
1120
|
* Prevent further changes from being made to {@link EditLock.editor} until {@link EditLock.unlock} is called.
|
|
1121
|
+
* @param reason - A string describing why the lock is being acquired. This will be included in the error message if an attempt is made to edit while the lock is held.
|
|
1076
1122
|
* @remarks May only be called when the lock is not already locked.
|
|
1077
1123
|
*/
|
|
1078
|
-
lock() {
|
|
1079
|
-
if (this.
|
|
1124
|
+
lock(reason) {
|
|
1125
|
+
if (this.status.isLocked) {
|
|
1080
1126
|
debugger;
|
|
1081
1127
|
}
|
|
1082
|
-
assert(!this.
|
|
1083
|
-
this.
|
|
1128
|
+
assert(!this.status.isLocked, 0xaa7 /* Checkout has already been locked */);
|
|
1129
|
+
this.status = { isLocked: true, reason };
|
|
1084
1130
|
}
|
|
1085
1131
|
/**
|
|
1086
1132
|
* Throws an error if the lock is currently locked.
|
|
@@ -1088,8 +1134,8 @@ class EditLock {
|
|
|
1088
1134
|
* This must start with a capital letter, as it shows up as the first part of the error message and we want it to look nice.
|
|
1089
1135
|
*/
|
|
1090
1136
|
checkUnlocked(action) {
|
|
1091
|
-
if (this.
|
|
1092
|
-
throw new UsageError(`${action} is forbidden during
|
|
1137
|
+
if (this.status.isLocked) {
|
|
1138
|
+
throw new UsageError(`${action} is forbidden during ${this.status.reason}`);
|
|
1093
1139
|
}
|
|
1094
1140
|
}
|
|
1095
1141
|
/**
|
|
@@ -1097,8 +1143,8 @@ class EditLock {
|
|
|
1097
1143
|
* @remarks May only be called when the lock is currently locked.
|
|
1098
1144
|
*/
|
|
1099
1145
|
unlock() {
|
|
1100
|
-
assert(this.
|
|
1101
|
-
this.
|
|
1146
|
+
assert(this.status.isLocked, 0xaa8 /* Checkout has not been locked */);
|
|
1147
|
+
this.status = { isLocked: false };
|
|
1102
1148
|
}
|
|
1103
1149
|
}
|
|
1104
1150
|
function verboseFromCursor(reader, schema) {
|