@fluidframework/tree 2.74.0-368706 → 2.74.0-370705

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.
Files changed (104) hide show
  1. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts +1 -0
  2. package/dist/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  3. package/dist/feature-libraries/default-schema/defaultEditBuilder.js +5 -1
  4. package/dist/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  5. package/dist/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  6. package/dist/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  7. package/dist/feature-libraries/default-schema/index.d.ts +1 -1
  8. package/dist/feature-libraries/default-schema/index.d.ts.map +1 -1
  9. package/dist/feature-libraries/default-schema/index.js +2 -1
  10. package/dist/feature-libraries/default-schema/index.js.map +1 -1
  11. package/dist/feature-libraries/index.d.ts +1 -1
  12. package/dist/feature-libraries/index.d.ts.map +1 -1
  13. package/dist/feature-libraries/index.js +2 -1
  14. package/dist/feature-libraries/index.js.map +1 -1
  15. package/dist/feature-libraries/modular-schema/index.d.ts +1 -1
  16. package/dist/feature-libraries/modular-schema/index.d.ts.map +1 -1
  17. package/dist/feature-libraries/modular-schema/index.js +2 -1
  18. package/dist/feature-libraries/modular-schema/index.js.map +1 -1
  19. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts +1 -0
  20. package/dist/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  21. package/dist/feature-libraries/modular-schema/modularChangeFamily.js +9 -1
  22. package/dist/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  23. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  24. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  25. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +31 -0
  26. package/dist/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  27. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  28. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  29. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js +57 -0
  30. package/dist/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  31. package/dist/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  32. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  33. package/dist/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  34. package/dist/packageVersion.d.ts +1 -1
  35. package/dist/packageVersion.js +1 -1
  36. package/dist/packageVersion.js.map +1 -1
  37. package/dist/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  38. package/dist/shared-tree/sharedTreeChangeEnricher.js +1 -1
  39. package/dist/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  40. package/dist/shared-tree/sharedTreeChangeFamily.d.ts +1 -1
  41. package/dist/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  42. package/dist/shared-tree/sharedTreeChangeFamily.js +8 -2
  43. package/dist/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  44. package/dist/shared-tree/sharedTreeEditBuilder.js +1 -1
  45. package/dist/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  46. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts +1 -0
  47. package/lib/feature-libraries/default-schema/defaultEditBuilder.d.ts.map +1 -1
  48. package/lib/feature-libraries/default-schema/defaultEditBuilder.js +4 -1
  49. package/lib/feature-libraries/default-schema/defaultEditBuilder.js.map +1 -1
  50. package/lib/feature-libraries/default-schema/defaultFieldKinds.js +1 -1
  51. package/lib/feature-libraries/default-schema/defaultFieldKinds.js.map +1 -1
  52. package/lib/feature-libraries/default-schema/index.d.ts +1 -1
  53. package/lib/feature-libraries/default-schema/index.d.ts.map +1 -1
  54. package/lib/feature-libraries/default-schema/index.js +1 -1
  55. package/lib/feature-libraries/default-schema/index.js.map +1 -1
  56. package/lib/feature-libraries/index.d.ts +1 -1
  57. package/lib/feature-libraries/index.d.ts.map +1 -1
  58. package/lib/feature-libraries/index.js +1 -1
  59. package/lib/feature-libraries/index.js.map +1 -1
  60. package/lib/feature-libraries/modular-schema/index.d.ts +1 -1
  61. package/lib/feature-libraries/modular-schema/index.d.ts.map +1 -1
  62. package/lib/feature-libraries/modular-schema/index.js +1 -1
  63. package/lib/feature-libraries/modular-schema/index.js.map +1 -1
  64. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts +1 -0
  65. package/lib/feature-libraries/modular-schema/modularChangeFamily.d.ts.map +1 -1
  66. package/lib/feature-libraries/modular-schema/modularChangeFamily.js +7 -0
  67. package/lib/feature-libraries/modular-schema/modularChangeFamily.js.map +1 -1
  68. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts +23 -0
  69. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.d.ts.map +1 -0
  70. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js +27 -0
  71. package/lib/feature-libraries/optional-field/optionalFieldChangeFormatV3.js.map +1 -0
  72. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts +12 -0
  73. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.d.ts.map +1 -0
  74. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js +53 -0
  75. package/lib/feature-libraries/optional-field/optionalFieldCodecV3.js.map +1 -0
  76. package/lib/feature-libraries/optional-field/optionalFieldCodecs.d.ts.map +1 -1
  77. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js +5 -1
  78. package/lib/feature-libraries/optional-field/optionalFieldCodecs.js.map +1 -1
  79. package/lib/packageVersion.d.ts +1 -1
  80. package/lib/packageVersion.js +1 -1
  81. package/lib/packageVersion.js.map +1 -1
  82. package/lib/shared-tree/sharedTreeChangeEnricher.d.ts.map +1 -1
  83. package/lib/shared-tree/sharedTreeChangeEnricher.js +2 -2
  84. package/lib/shared-tree/sharedTreeChangeEnricher.js.map +1 -1
  85. package/lib/shared-tree/sharedTreeChangeFamily.d.ts +1 -1
  86. package/lib/shared-tree/sharedTreeChangeFamily.d.ts.map +1 -1
  87. package/lib/shared-tree/sharedTreeChangeFamily.js +8 -2
  88. package/lib/shared-tree/sharedTreeChangeFamily.js.map +1 -1
  89. package/lib/shared-tree/sharedTreeEditBuilder.js +1 -1
  90. package/lib/shared-tree/sharedTreeEditBuilder.js.map +1 -1
  91. package/package.json +21 -21
  92. package/src/feature-libraries/default-schema/defaultEditBuilder.ts +5 -0
  93. package/src/feature-libraries/default-schema/defaultFieldKinds.ts +1 -1
  94. package/src/feature-libraries/default-schema/index.ts +1 -0
  95. package/src/feature-libraries/index.ts +1 -0
  96. package/src/feature-libraries/modular-schema/index.ts +1 -0
  97. package/src/feature-libraries/modular-schema/modularChangeFamily.ts +8 -0
  98. package/src/feature-libraries/optional-field/optionalFieldChangeFormatV3.ts +45 -0
  99. package/src/feature-libraries/optional-field/optionalFieldCodecV3.ts +94 -0
  100. package/src/feature-libraries/optional-field/optionalFieldCodecs.ts +5 -1
  101. package/src/packageVersion.ts +1 -1
  102. package/src/shared-tree/sharedTreeChangeEnricher.ts +2 -0
  103. package/src/shared-tree/sharedTreeChangeFamily.ts +8 -1
  104. package/src/shared-tree/sharedTreeEditBuilder.ts +1 -1
@@ -0,0 +1,45 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { type ObjectOptions, type Static, type TSchema, Type } from "@sinclair/typebox";
7
+
8
+ import { EncodedChangeAtomId } from "../modular-schema/index.js";
9
+
10
+ const noAdditionalProps: ObjectOptions = { additionalProperties: false };
11
+
12
+ // Type is intentionally derived.
13
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
14
+ export const EncodedOptionalChangeset = <Schema extends TSchema>(tNodeChange: Schema) =>
15
+ Type.Object(
16
+ {
17
+ // Nested changes
18
+ c: Type.Optional(tNodeChange),
19
+
20
+ // How to replace the current value of the field.
21
+ r: Type.Optional(EncodedReplace),
22
+
23
+ // Node detach
24
+ d: Type.Optional(EncodedChangeAtomId),
25
+ },
26
+ noAdditionalProps,
27
+ );
28
+
29
+ export type EncodedOptionalChangeset<Schema extends TSchema> = Static<
30
+ ReturnType<typeof EncodedOptionalChangeset<Schema>>
31
+ >;
32
+
33
+ const EncodedReplace = Type.Object(
34
+ {
35
+ // Whether the field is empty in the input context of this change.
36
+ e: Type.Boolean(),
37
+ // The ID for the node to put in this field, or undefined if the field should be emptied.
38
+ // Will be "self" when the intention is to keep the current node in this field.
39
+ s: Type.Optional(EncodedChangeAtomId),
40
+ // An ID to associate with the node (if any) which is detached by this edit.
41
+ d: EncodedChangeAtomId,
42
+ },
43
+ noAdditionalProps,
44
+ );
45
+ export type EncodedReplace = Static<typeof EncodedReplace>;
@@ -0,0 +1,94 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import type { TAnySchema } from "@sinclair/typebox";
7
+
8
+ import type { IJsonCodec } from "../../codec/index.js";
9
+ import type {
10
+ ChangeEncodingContext,
11
+ EncodedRevisionTag,
12
+ RevisionTag,
13
+ } from "../../core/index.js";
14
+ import type { Mutable } from "../../util/index.js";
15
+ import { makeChangeAtomIdCodec } from "../changeAtomIdCodec.js";
16
+ import {
17
+ EncodedNodeChangeset,
18
+ type FieldChangeEncodingContext,
19
+ } from "../modular-schema/index.js";
20
+
21
+ import { EncodedOptionalChangeset } from "./optionalFieldChangeFormatV3.js";
22
+ import type { OptionalChangeset, Replace } from "./optionalFieldChangeTypes.js";
23
+
24
+ export function makeOptionalFieldCodec(
25
+ revisionTagCodec: IJsonCodec<
26
+ RevisionTag,
27
+ EncodedRevisionTag,
28
+ EncodedRevisionTag,
29
+ ChangeEncodingContext
30
+ >,
31
+ ): IJsonCodec<
32
+ OptionalChangeset,
33
+ EncodedOptionalChangeset<TAnySchema>,
34
+ EncodedOptionalChangeset<TAnySchema>,
35
+ FieldChangeEncodingContext
36
+ > {
37
+ const changeAtomIdCodec = makeChangeAtomIdCodec(revisionTagCodec);
38
+
39
+ return {
40
+ encode: (change: OptionalChangeset, context: FieldChangeEncodingContext) => {
41
+ const encoded: EncodedOptionalChangeset<TAnySchema> = {};
42
+
43
+ if (change.valueReplace !== undefined) {
44
+ encoded.r = {
45
+ e: change.valueReplace.isEmpty,
46
+ d: changeAtomIdCodec.encode(change.valueReplace.dst, context.baseContext),
47
+ };
48
+
49
+ if (change.valueReplace.src !== undefined) {
50
+ encoded.r.s = changeAtomIdCodec.encode(change.valueReplace.src, context.baseContext);
51
+ }
52
+ }
53
+
54
+ if (change.nodeDetach !== undefined) {
55
+ encoded.d = changeAtomIdCodec.encode(change.nodeDetach, context.baseContext);
56
+ }
57
+
58
+ if (change.childChange !== undefined) {
59
+ encoded.c = context.encodeNode(change.childChange);
60
+ }
61
+
62
+ return encoded;
63
+ },
64
+
65
+ decode: (
66
+ encoded: EncodedOptionalChangeset<TAnySchema>,
67
+ context: FieldChangeEncodingContext,
68
+ ) => {
69
+ const decoded: Mutable<OptionalChangeset> = {};
70
+
71
+ if (encoded.r !== undefined) {
72
+ const replace: Mutable<Replace> = {
73
+ isEmpty: encoded.r.e,
74
+ dst: changeAtomIdCodec.decode(encoded.r.d, context.baseContext),
75
+ };
76
+ if (encoded.r.s !== undefined) {
77
+ replace.src = changeAtomIdCodec.decode(encoded.r.s, context.baseContext);
78
+ }
79
+ decoded.valueReplace = replace;
80
+ }
81
+
82
+ if (encoded.d !== undefined) {
83
+ decoded.nodeDetach = changeAtomIdCodec.decode(encoded.d, context.baseContext);
84
+ }
85
+
86
+ if (encoded.c !== undefined) {
87
+ decoded.childChange = context.decodeNode(encoded.c);
88
+ }
89
+
90
+ return decoded;
91
+ },
92
+ encodedSchema: EncodedOptionalChangeset(EncodedNodeChangeset),
93
+ };
94
+ }
@@ -13,6 +13,7 @@ import type { FieldChangeEncodingContext } from "../modular-schema/index.js";
13
13
 
14
14
  import type { OptionalChangeset } from "./optionalFieldChangeTypes.js";
15
15
  import { makeOptionalFieldCodec as makeV2Codec } from "./optionalFieldCodecV2.js";
16
+ import { makeOptionalFieldCodec as makeV3Codec } from "./optionalFieldCodecV3.js";
16
17
 
17
18
  export const makeOptionalFieldCodecFamily = (
18
19
  revisionTagCodec: IJsonCodec<
@@ -22,4 +23,7 @@ export const makeOptionalFieldCodecFamily = (
22
23
  ChangeEncodingContext
23
24
  >,
24
25
  ): ICodecFamily<OptionalChangeset, FieldChangeEncodingContext> =>
25
- makeCodecFamily([[2, makeV2Codec(revisionTagCodec)]]);
26
+ makeCodecFamily([
27
+ [2, makeV2Codec(revisionTagCodec)],
28
+ [3, makeV3Codec(revisionTagCodec)],
29
+ ]);
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/tree";
9
- export const pkgVersion = "2.74.0-368706";
9
+ export const pkgVersion = "2.74.0-370705";
@@ -20,6 +20,7 @@ import {
20
20
  type TreeChunk,
21
21
  chunkTree,
22
22
  defaultChunkPolicy,
23
+ getBuildsIds,
23
24
  intoDelta,
24
25
  relevantRemovedRoots,
25
26
  updateRefreshers as updateDataChangeRefreshers,
@@ -62,6 +63,7 @@ export class SharedTreeReadonlyChangeEnricher
62
63
  public updateChangeEnrichments(change: SharedTreeChange): SharedTreeChange {
63
64
  return updateRefreshers(
64
65
  change,
66
+ getBuildsIds,
65
67
  this.getDetachedRoot,
66
68
  relevantRemovedRoots,
67
69
  updateDataChangeRefreshers,
@@ -262,6 +262,7 @@ function mapDataChanges(
262
262
  */
263
263
  export function updateRefreshers(
264
264
  change: SharedTreeChange,
265
+ buildsFromDataChange: (taggedChange: ModularChangeset) => Iterable<DeltaDetachedNodeId>,
265
266
  getDetachedNode: (id: DeltaDetachedNodeId) => TreeChunk | undefined,
266
267
  relevantRemovedRootsFromDataChange: (
267
268
  taggedChange: ModularChangeset,
@@ -308,13 +309,19 @@ export function updateRefreshers(
308
309
  }
309
310
  let isFirstDataChange = true;
310
311
  return mapDataChanges(change, (dataChange) => {
312
+ const builtRoots = buildsFromDataChange(dataChange);
313
+ for (const id of builtRoots) {
314
+ // Detached root IDs that are used for builds are only ever used by a single node,
315
+ // so there is no risk of excluding needed refreshers by adding them to the list of already included roots.
316
+ addToNestedSet(includedRoots, id.major, id.minor);
317
+ }
311
318
  const removedRoots = relevantRemovedRootsFromDataChange(dataChange);
312
319
  if (isFirstDataChange) {
313
320
  isFirstDataChange = false;
314
321
  return updateDataChangeRefreshers(
315
322
  dataChange,
316
323
  getAndRememberDetachedNode,
317
- removedRoots,
324
+ filterIncludedRoots(removedRoots),
318
325
  true,
319
326
  );
320
327
  } else {
@@ -86,7 +86,7 @@ export class IdBasedSharedTreeEditBuilder
86
86
 
87
87
  this.schema = {
88
88
  setStoredSchema: (oldSchema, newSchema) => {
89
- this.changeReceiver({
89
+ changeReceiver({
90
90
  revision: mintRevisionTag(),
91
91
  change: {
92
92
  changes: [