@fluidframework/runtime-utils 2.0.0-dev.2.3.0.115467 → 2.0.0-dev.4.1.0.148229

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 (122) hide show
  1. package/.eslintrc.js +5 -7
  2. package/.mocharc.js +2 -2
  3. package/api-extractor.json +2 -2
  4. package/dist/dataStoreHandleContextUtils.d.ts.map +1 -1
  5. package/dist/dataStoreHandleContextUtils.js +3 -1
  6. package/dist/dataStoreHandleContextUtils.js.map +1 -1
  7. package/dist/dataStoreHelpers.d.ts +3 -1
  8. package/dist/dataStoreHelpers.d.ts.map +1 -1
  9. package/dist/dataStoreHelpers.js +27 -8
  10. package/dist/dataStoreHelpers.js.map +1 -1
  11. package/dist/index.d.ts +2 -2
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +4 -4
  14. package/dist/index.js.map +1 -1
  15. package/dist/objectstoragepartition.d.ts.map +1 -1
  16. package/dist/objectstoragepartition.js.map +1 -1
  17. package/dist/objectstorageutils.d.ts.map +1 -1
  18. package/dist/objectstorageutils.js.map +1 -1
  19. package/dist/packageVersion.d.ts +1 -1
  20. package/dist/packageVersion.js +1 -1
  21. package/dist/packageVersion.js.map +1 -1
  22. package/dist/requestParser.d.ts.map +1 -1
  23. package/dist/requestParser.js.map +1 -1
  24. package/dist/runtimeFactoryHelper.d.ts +1 -1
  25. package/dist/runtimeFactoryHelper.d.ts.map +1 -1
  26. package/dist/runtimeFactoryHelper.js +7 -6
  27. package/dist/runtimeFactoryHelper.js.map +1 -1
  28. package/dist/summaryUtils.d.ts +33 -1
  29. package/dist/summaryUtils.d.ts.map +1 -1
  30. package/dist/summaryUtils.js +86 -3
  31. package/dist/summaryUtils.js.map +1 -1
  32. package/dist/unpackUsedRoutes.d.ts +11 -0
  33. package/dist/unpackUsedRoutes.d.ts.map +1 -0
  34. package/dist/unpackUsedRoutes.js +33 -0
  35. package/dist/unpackUsedRoutes.js.map +1 -0
  36. package/dist/utils.d.ts.map +1 -1
  37. package/dist/utils.js.map +1 -1
  38. package/lib/dataStoreHandleContextUtils.d.ts.map +1 -1
  39. package/lib/dataStoreHandleContextUtils.js +3 -1
  40. package/lib/dataStoreHandleContextUtils.js.map +1 -1
  41. package/lib/dataStoreHelpers.d.ts +3 -1
  42. package/lib/dataStoreHelpers.d.ts.map +1 -1
  43. package/lib/dataStoreHelpers.js +27 -8
  44. package/lib/dataStoreHelpers.js.map +1 -1
  45. package/lib/index.d.ts +2 -2
  46. package/lib/index.d.ts.map +1 -1
  47. package/lib/index.js +2 -2
  48. package/lib/index.js.map +1 -1
  49. package/lib/objectstoragepartition.d.ts.map +1 -1
  50. package/lib/objectstoragepartition.js.map +1 -1
  51. package/lib/objectstorageutils.d.ts.map +1 -1
  52. package/lib/objectstorageutils.js.map +1 -1
  53. package/lib/packageVersion.d.ts +1 -1
  54. package/lib/packageVersion.js +1 -1
  55. package/lib/packageVersion.js.map +1 -1
  56. package/lib/requestParser.d.ts.map +1 -1
  57. package/lib/requestParser.js.map +1 -1
  58. package/lib/runtimeFactoryHelper.d.ts +1 -1
  59. package/lib/runtimeFactoryHelper.d.ts.map +1 -1
  60. package/lib/runtimeFactoryHelper.js +7 -6
  61. package/lib/runtimeFactoryHelper.js.map +1 -1
  62. package/lib/summaryUtils.d.ts +33 -1
  63. package/lib/summaryUtils.d.ts.map +1 -1
  64. package/lib/summaryUtils.js +84 -2
  65. package/lib/summaryUtils.js.map +1 -1
  66. package/lib/unpackUsedRoutes.d.ts +11 -0
  67. package/lib/unpackUsedRoutes.d.ts.map +1 -0
  68. package/lib/unpackUsedRoutes.js +29 -0
  69. package/lib/unpackUsedRoutes.js.map +1 -0
  70. package/lib/utils.d.ts.map +1 -1
  71. package/lib/utils.js.map +1 -1
  72. package/package.json +54 -55
  73. package/prettier.config.cjs +1 -1
  74. package/src/dataStoreHandleContextUtils.ts +23 -16
  75. package/src/dataStoreHelpers.ts +104 -82
  76. package/src/index.ts +3 -9
  77. package/src/objectstoragepartition.ts +13 -13
  78. package/src/objectstorageutils.ts +31 -28
  79. package/src/packageVersion.ts +1 -1
  80. package/src/requestParser.ts +80 -82
  81. package/src/runtimeFactoryHelper.ts +24 -22
  82. package/src/summaryUtils.ts +393 -291
  83. package/src/unpackUsedRoutes.ts +30 -0
  84. package/src/utils.ts +6 -6
  85. package/tsconfig.esnext.json +6 -6
  86. package/tsconfig.json +8 -12
  87. package/dist/summarizerNode/index.d.ts +0 -8
  88. package/dist/summarizerNode/index.d.ts.map +0 -1
  89. package/dist/summarizerNode/index.js +0 -12
  90. package/dist/summarizerNode/index.js.map +0 -1
  91. package/dist/summarizerNode/summarizerNode.d.ts +0 -140
  92. package/dist/summarizerNode/summarizerNode.d.ts.map +0 -1
  93. package/dist/summarizerNode/summarizerNode.js +0 -439
  94. package/dist/summarizerNode/summarizerNode.js.map +0 -1
  95. package/dist/summarizerNode/summarizerNodeUtils.d.ts +0 -128
  96. package/dist/summarizerNode/summarizerNodeUtils.d.ts.map +0 -1
  97. package/dist/summarizerNode/summarizerNodeUtils.js +0 -132
  98. package/dist/summarizerNode/summarizerNodeUtils.js.map +0 -1
  99. package/dist/summarizerNode/summarizerNodeWithGc.d.ts +0 -131
  100. package/dist/summarizerNode/summarizerNodeWithGc.d.ts.map +0 -1
  101. package/dist/summarizerNode/summarizerNodeWithGc.js +0 -275
  102. package/dist/summarizerNode/summarizerNodeWithGc.js.map +0 -1
  103. package/lib/summarizerNode/index.d.ts +0 -8
  104. package/lib/summarizerNode/index.d.ts.map +0 -1
  105. package/lib/summarizerNode/index.js +0 -7
  106. package/lib/summarizerNode/index.js.map +0 -1
  107. package/lib/summarizerNode/summarizerNode.d.ts +0 -140
  108. package/lib/summarizerNode/summarizerNode.d.ts.map +0 -1
  109. package/lib/summarizerNode/summarizerNode.js +0 -434
  110. package/lib/summarizerNode/summarizerNode.js.map +0 -1
  111. package/lib/summarizerNode/summarizerNodeUtils.d.ts +0 -128
  112. package/lib/summarizerNode/summarizerNodeUtils.d.ts.map +0 -1
  113. package/lib/summarizerNode/summarizerNodeUtils.js +0 -125
  114. package/lib/summarizerNode/summarizerNodeUtils.js.map +0 -1
  115. package/lib/summarizerNode/summarizerNodeWithGc.d.ts +0 -131
  116. package/lib/summarizerNode/summarizerNodeWithGc.d.ts.map +0 -1
  117. package/lib/summarizerNode/summarizerNodeWithGc.js +0 -270
  118. package/lib/summarizerNode/summarizerNodeWithGc.js.map +0 -1
  119. package/src/summarizerNode/index.ts +0 -8
  120. package/src/summarizerNode/summarizerNode.ts +0 -593
  121. package/src/summarizerNode/summarizerNodeUtils.ts +0 -216
  122. package/src/summarizerNode/summarizerNodeWithGc.ts +0 -432
@@ -0,0 +1,30 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+
6
+ import { assert } from "@fluidframework/common-utils";
7
+
8
+ /**
9
+ * Helper function that unpacks the used routes of children from a given node's used routes.
10
+ * @param usedRoutes - The used routes of a node.
11
+ * @returns A map of used routes of each children of the the given node.
12
+ */
13
+ export function unpackChildNodesUsedRoutes(usedRoutes: string[]) {
14
+ // Remove the node's self used route, if any, and generate the children used routes.
15
+ const filteredUsedRoutes = usedRoutes.filter((route) => route !== "" && route !== "/");
16
+ const childUsedRoutesMap: Map<string, string[]> = new Map();
17
+ for (const route of filteredUsedRoutes) {
18
+ assert(route.startsWith("/"), "Used route should always be an absolute route");
19
+ const childId = route.split("/")[1];
20
+ const childUsedRoute = route.slice(childId.length + 1);
21
+
22
+ const childUsedRoutes = childUsedRoutesMap.get(childId);
23
+ if (childUsedRoutes !== undefined) {
24
+ childUsedRoutes.push(childUsedRoute);
25
+ } else {
26
+ childUsedRoutesMap.set(childId, [childUsedRoute]);
27
+ }
28
+ }
29
+ return childUsedRoutesMap;
30
+ }
package/src/utils.ts CHANGED
@@ -14,11 +14,11 @@ export type ReadAndParseBlob = <T>(id: string) => Promise<T>;
14
14
  * @param readAndParseBlob - function to read blob contents from storage
15
15
  * and parse the result from JSON.
16
16
  */
17
- export async function seqFromTree(
18
- tree: ISnapshotTree,
19
- readAndParseBlob: ReadAndParseBlob,
17
+ export async function seqFromTree(
18
+ tree: ISnapshotTree,
19
+ readAndParseBlob: ReadAndParseBlob,
20
20
  ): Promise<number> {
21
- const attributesHash = tree.trees[".protocol"].blobs.attributes;
22
- const attrib = await readAndParseBlob<IDocumentAttributes>(attributesHash);
23
- return attrib.sequenceNumber;
21
+ const attributesHash = tree.trees[".protocol"].blobs.attributes;
22
+ const attrib = await readAndParseBlob<IDocumentAttributes>(attributesHash);
23
+ return attrib.sequenceNumber;
24
24
  }
@@ -1,7 +1,7 @@
1
1
  {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "./lib",
5
- "module": "esnext"
6
- },
7
- }
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./lib",
5
+ "module": "esnext",
6
+ },
7
+ }
package/tsconfig.json CHANGED
@@ -1,14 +1,10 @@
1
1
  {
2
- "extends": "@fluidframework/build-common/ts-common-config.json",
3
- "exclude": [
4
- "src/test/**/*"
5
- ],
6
- "compilerOptions": {
7
- "rootDir": "./src",
8
- "outDir": "./dist",
9
- "composite": true
10
- },
11
- "include": [
12
- "src/**/*"
13
- ]
2
+ "extends": "@fluidframework/build-common/ts-common-config.json",
3
+ "exclude": ["src/test/**/*"],
4
+ "compilerOptions": {
5
+ "rootDir": "./src",
6
+ "outDir": "./dist",
7
+ "composite": true,
8
+ },
9
+ "include": ["src/**/*"],
14
10
  }
@@ -1,8 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- export { ISummarizerNodeRootContract, RefreshSummaryResult } from "./summarizerNodeUtils";
6
- export { IRootSummarizerNode, createRootSummarizerNode } from "./summarizerNode";
7
- export { IRootSummarizerNodeWithGC, createRootSummarizerNodeWithGC } from "./summarizerNodeWithGc";
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/summarizerNode/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,2BAA2B,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- /*!
3
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
- * Licensed under the MIT License.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.createRootSummarizerNodeWithGC = exports.createRootSummarizerNode = void 0;
8
- var summarizerNode_1 = require("./summarizerNode");
9
- Object.defineProperty(exports, "createRootSummarizerNode", { enumerable: true, get: function () { return summarizerNode_1.createRootSummarizerNode; } });
10
- var summarizerNodeWithGc_1 = require("./summarizerNodeWithGc");
11
- Object.defineProperty(exports, "createRootSummarizerNodeWithGC", { enumerable: true, get: function () { return summarizerNodeWithGc_1.createRootSummarizerNodeWithGC; } });
12
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/summarizerNode/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,mDAAiF;AAAnD,0HAAA,wBAAwB,OAAA;AACtD,+DAAmG;AAA/D,sIAAA,8BAA8B,OAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport { ISummarizerNodeRootContract, RefreshSummaryResult } from \"./summarizerNodeUtils\";\nexport { IRootSummarizerNode, createRootSummarizerNode } from \"./summarizerNode\";\nexport { IRootSummarizerNodeWithGC, createRootSummarizerNodeWithGC } from \"./summarizerNodeWithGc\";\n"]}
@@ -1,140 +0,0 @@
1
- /*!
2
- * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
- * Licensed under the MIT License.
4
- */
5
- import { ISummarizerNode, ISummarizerNodeConfig, ISummarizeResult, CreateChildSummarizerNodeParam, SummarizeInternalFn, ITelemetryContext } from "@fluidframework/runtime-definitions";
6
- import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
7
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
8
- import { ReadAndParseBlob } from "../utils";
9
- import { EscapedPath, ICreateChildDetails, IInitialSummary, ISummarizerNodeRootContract, RefreshSummaryResult, SummaryNode } from "./summarizerNodeUtils";
10
- export interface IRootSummarizerNode extends ISummarizerNode, ISummarizerNodeRootContract {
11
- }
12
- /**
13
- * Encapsulates the summarizing work and state of an individual tree node in the
14
- * summary tree. It tracks changes and allows for optimizations when unchanged, or
15
- * can allow for fallback summaries to be generated when an error is encountered.
16
- * Usage is for the root node to call startSummary first to begin tracking a WIP
17
- * (work in progress) summary. Then all nodes will call summarize to summaries their
18
- * individual parts. Once completed and uploaded to storage, the root node will call
19
- * completeSummary or clearSummary to clear the WIP summary tracking state if something
20
- * went wrong. The SummarizerNodes will track all pending summaries that have been
21
- * recorded by the completeSummary call. When one of them is acked, the root node should
22
- * call refreshLatestSummary to inform the tree of SummarizerNodes of the new baseline
23
- * latest successful summary.
24
- */
25
- export declare class SummarizerNode implements IRootSummarizerNode {
26
- protected readonly defaultLogger: ITelemetryLogger;
27
- private readonly summarizeInternalFn;
28
- private _changeSequenceNumber;
29
- /** Undefined means created without summary */
30
- private _latestSummary?;
31
- private readonly initialSummary?;
32
- protected wipSummaryLogger?: ITelemetryLogger | undefined;
33
- /**
34
- * The reference sequence number of the most recent acked summary.
35
- * Returns 0 if there is not yet an acked summary.
36
- */
37
- get referenceSequenceNumber(): number;
38
- protected readonly children: Map<string, SummarizerNode>;
39
- protected readonly pendingSummaries: Map<string, SummaryNode>;
40
- private wipReferenceSequenceNumber;
41
- private wipLocalPaths;
42
- private wipSkipRecursion;
43
- startSummary(referenceSequenceNumber: number, summaryLogger: ITelemetryLogger): void;
44
- summarize(fullTree: boolean, trackState?: boolean, telemetryContext?: ITelemetryContext): Promise<ISummarizeResult>;
45
- /**
46
- * Complete the WIP summary for the given proposalHandle
47
- */
48
- completeSummary(proposalHandle: string): void;
49
- /**
50
- * Recursive implementation for completeSummary, with additional internal-only parameters
51
- */
52
- protected completeSummaryCore(proposalHandle: string, parentPath: EscapedPath | undefined, parentSkipRecursion: boolean): void;
53
- clearSummary(): void;
54
- /**
55
- * Refreshes the latest summary tracked by this node. If we have a pending summary for the given proposal handle,
56
- * it becomes the latest summary. If the current summary is already ahead (e.g., loaded from a service summary),
57
- * we skip the update. Otherwise, we get the snapshot by calling `getSnapshot` and update latest
58
- * summary based off of that.
59
- *
60
- * @returns A RefreshSummaryResult type which returns information based on the following three scenarios:
61
- *
62
- * 1. The latest summary was not udpated.
63
- *
64
- * 2. The latest summary was updated and the summary corresponding to the params was being tracked.
65
- *
66
- * 3. The latest summary was updated but the summary corresponding to the params was not tracked. In this
67
- * case, the latest summary is updated based on the downloaded snapshot which is also returned.
68
- */
69
- refreshLatestSummary(proposalHandle: string | undefined, summaryRefSeq: number, getSnapshot: () => Promise<ISnapshotTree>, readAndParseBlob: ReadAndParseBlob, correlatedSummaryLogger: ITelemetryLogger): Promise<RefreshSummaryResult>;
70
- /**
71
- * Called when we get an ack from the server for a summary we've just sent. Updates the reference state of this node
72
- * from the state in the pending summary queue.
73
- * @param proposalHandle - Handle for the current proposal.
74
- * @param referenceSequenceNumber - reference sequence number of sent summary.
75
- */
76
- protected refreshLatestSummaryFromPending(proposalHandle: string, referenceSequenceNumber: number): void;
77
- protected refreshLatestSummaryFromSnapshot(referenceSequenceNumber: number, snapshotTree: ISnapshotTree, basePath: EscapedPath | undefined, localPath: EscapedPath, correlatedSummaryLogger: ITelemetryLogger, readAndParseBlob: ReadAndParseBlob): Promise<void>;
78
- private refreshLatestSummaryCore;
79
- updateBaseSummaryState(snapshot: ISnapshotTree): void;
80
- recordChange(op: ISequencedDocumentMessage): void;
81
- invalidate(sequenceNumber: number): void;
82
- /**
83
- * True if a change has been recorded with sequence number exceeding
84
- * the latest successfully acked summary reference sequence number.
85
- * False implies that the previous summary can be reused.
86
- */
87
- protected hasChanged(): boolean;
88
- get latestSummary(): Readonly<SummaryNode> | undefined;
89
- private readonly canReuseHandle;
90
- /**
91
- * Do not call constructor directly.
92
- * Use createRootSummarizerNode to create root node, or createChild to create child nodes.
93
- */
94
- constructor(defaultLogger: ITelemetryLogger, summarizeInternalFn: SummarizeInternalFn, config: ISummarizerNodeConfig, _changeSequenceNumber: number,
95
- /** Undefined means created without summary */
96
- _latestSummary?: SummaryNode | undefined, initialSummary?: IInitialSummary | undefined, wipSummaryLogger?: ITelemetryLogger | undefined);
97
- createChild(
98
- /** Summarize function */
99
- summarizeInternalFn: SummarizeInternalFn,
100
- /** Initial id or path part of this node */
101
- id: string,
102
- /**
103
- * Information needed to create the node.
104
- * If it is from a base summary, it will assert that a summary has been seen.
105
- * Attach information if it is created from an attach op.
106
- */
107
- createParam: CreateChildSummarizerNodeParam, config?: ISummarizerNodeConfig): ISummarizerNode;
108
- getChild(id: string): ISummarizerNode | undefined;
109
- /**
110
- * Returns the details needed to create a child node.
111
- * @param id - Initial id or path part of the child node.
112
- * @param createParam - Information needed to create the node.
113
- * @returns the details needed to create the child node.
114
- */
115
- protected getCreateDetailsForChild(id: string, createParam: CreateChildSummarizerNodeParam): ICreateChildDetails;
116
- /**
117
- * Updates the state of the child if required. For example, if a summary is currently being tracked, the child's
118
- * summary tracking state needs to be updated too.
119
- * Also, in case a child node gets realized in between Summary Op and Summary Ack, let's initialize the child's
120
- * pending summary as well.
121
- * @param child - The child node whose state is to be updated.
122
- */
123
- protected maybeUpdateChildState(child: SummarizerNode): void;
124
- protected addPendingSummary(key: string, summary: SummaryNode): void;
125
- /**
126
- * Tells whether summary tracking is in progress. True if "startSummary" API is called before summarize.
127
- */
128
- protected isTrackingInProgress(): boolean;
129
- }
130
- /**
131
- * Creates a root summarizer node.
132
- * @param logger - Logger to use within SummarizerNode
133
- * @param summarizeInternalFn - Function to generate summary
134
- * @param changeSequenceNumber - Sequence number of latest change to new node/subtree
135
- * @param referenceSequenceNumber - Reference sequence number of last acked summary,
136
- * or undefined if not loaded from summary
137
- * @param config - Configure behavior of summarizer node
138
- */
139
- export declare const createRootSummarizerNode: (logger: ITelemetryLogger, summarizeInternalFn: SummarizeInternalFn, changeSequenceNumber: number, referenceSequenceNumber: number | undefined, config?: ISummarizerNodeConfig) => IRootSummarizerNode;
140
- //# sourceMappingURL=summarizerNode.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"summarizerNode.d.ts","sourceRoot":"","sources":["../../src/summarizerNode/summarizerNode.ts"],"names":[],"mappings":"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"}