@fluidframework/runtime-utils 2.0.0-dev.7.4.0.215747 → 2.0.0-dev.7.4.0.216897

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 (93) hide show
  1. package/api-extractor-lint.json +13 -0
  2. package/api-extractor.json +0 -4
  3. package/api-report/runtime-utils.api.md +29 -29
  4. package/dist/dataStoreHandleContextUtils.d.ts +1 -0
  5. package/dist/dataStoreHandleContextUtils.d.ts.map +1 -1
  6. package/dist/dataStoreHandleContextUtils.js +1 -0
  7. package/dist/dataStoreHandleContextUtils.js.map +1 -1
  8. package/dist/dataStoreHelpers.d.ts +19 -0
  9. package/dist/dataStoreHelpers.d.ts.map +1 -1
  10. package/dist/dataStoreHelpers.js +16 -0
  11. package/dist/dataStoreHelpers.js.map +1 -1
  12. package/dist/objectstoragepartition.d.ts +1 -0
  13. package/dist/objectstoragepartition.d.ts.map +1 -1
  14. package/dist/objectstoragepartition.js +1 -0
  15. package/dist/objectstoragepartition.js.map +1 -1
  16. package/dist/objectstorageutils.d.ts +6 -0
  17. package/dist/objectstorageutils.d.ts.map +1 -1
  18. package/dist/objectstorageutils.js +6 -0
  19. package/dist/objectstorageutils.js.map +1 -1
  20. package/dist/requestParser.d.ts +1 -0
  21. package/dist/requestParser.d.ts.map +1 -1
  22. package/dist/requestParser.js +1 -0
  23. package/dist/requestParser.js.map +1 -1
  24. package/dist/runtime-utils-alpha.d.ts +82 -195
  25. package/dist/runtime-utils-beta.d.ts +82 -195
  26. package/dist/runtime-utils-public.d.ts +82 -195
  27. package/dist/runtime-utils-untrimmed.d.ts +67 -1
  28. package/dist/runtimeFactoryHelper.d.ts +3 -0
  29. package/dist/runtimeFactoryHelper.d.ts.map +1 -1
  30. package/dist/runtimeFactoryHelper.js +3 -0
  31. package/dist/runtimeFactoryHelper.js.map +1 -1
  32. package/dist/summaryUtils.d.ts +29 -0
  33. package/dist/summaryUtils.d.ts.map +1 -1
  34. package/dist/summaryUtils.js +29 -0
  35. package/dist/summaryUtils.js.map +1 -1
  36. package/dist/unpackUsedRoutes.d.ts +1 -0
  37. package/dist/unpackUsedRoutes.d.ts.map +1 -1
  38. package/dist/unpackUsedRoutes.js +1 -0
  39. package/dist/unpackUsedRoutes.js.map +1 -1
  40. package/dist/utils.d.ts +6 -1
  41. package/dist/utils.d.ts.map +1 -1
  42. package/dist/utils.js +1 -0
  43. package/dist/utils.js.map +1 -1
  44. package/lib/dataStoreHandleContextUtils.d.ts +1 -0
  45. package/lib/dataStoreHandleContextUtils.d.ts.map +1 -1
  46. package/lib/dataStoreHandleContextUtils.js +1 -0
  47. package/lib/dataStoreHandleContextUtils.js.map +1 -1
  48. package/lib/dataStoreHelpers.d.ts +19 -0
  49. package/lib/dataStoreHelpers.d.ts.map +1 -1
  50. package/lib/dataStoreHelpers.js +16 -0
  51. package/lib/dataStoreHelpers.js.map +1 -1
  52. package/lib/objectstoragepartition.d.ts +1 -0
  53. package/lib/objectstoragepartition.d.ts.map +1 -1
  54. package/lib/objectstoragepartition.js +1 -0
  55. package/lib/objectstoragepartition.js.map +1 -1
  56. package/lib/objectstorageutils.d.ts +6 -0
  57. package/lib/objectstorageutils.d.ts.map +1 -1
  58. package/lib/objectstorageutils.js +6 -0
  59. package/lib/objectstorageutils.js.map +1 -1
  60. package/lib/requestParser.d.ts +1 -0
  61. package/lib/requestParser.d.ts.map +1 -1
  62. package/lib/requestParser.js +1 -0
  63. package/lib/requestParser.js.map +1 -1
  64. package/lib/runtime-utils-alpha.d.ts +82 -195
  65. package/lib/runtime-utils-beta.d.ts +82 -195
  66. package/lib/runtime-utils-public.d.ts +82 -195
  67. package/lib/runtime-utils-untrimmed.d.ts +67 -1
  68. package/lib/runtimeFactoryHelper.d.ts +3 -0
  69. package/lib/runtimeFactoryHelper.d.ts.map +1 -1
  70. package/lib/runtimeFactoryHelper.js +3 -0
  71. package/lib/runtimeFactoryHelper.js.map +1 -1
  72. package/lib/summaryUtils.d.ts +29 -0
  73. package/lib/summaryUtils.d.ts.map +1 -1
  74. package/lib/summaryUtils.js +29 -0
  75. package/lib/summaryUtils.js.map +1 -1
  76. package/lib/unpackUsedRoutes.d.ts +1 -0
  77. package/lib/unpackUsedRoutes.d.ts.map +1 -1
  78. package/lib/unpackUsedRoutes.js +1 -0
  79. package/lib/unpackUsedRoutes.js.map +1 -1
  80. package/lib/utils.d.ts +6 -1
  81. package/lib/utils.d.ts.map +1 -1
  82. package/lib/utils.js +1 -0
  83. package/lib/utils.js.map +1 -1
  84. package/package.json +13 -12
  85. package/src/dataStoreHandleContextUtils.ts +1 -0
  86. package/src/dataStoreHelpers.ts +19 -0
  87. package/src/objectstoragepartition.ts +1 -0
  88. package/src/objectstorageutils.ts +6 -0
  89. package/src/requestParser.ts +1 -0
  90. package/src/runtimeFactoryHelper.ts +3 -0
  91. package/src/summaryUtils.ts +29 -0
  92. package/src/unpackUsedRoutes.ts +1 -0
  93. package/src/utils.ts +6 -1
@@ -10,6 +10,7 @@ import { SummaryType, TreeEntry, } from "@fluidframework/protocol-definitions";
10
10
  * Combines summary stats by adding their totals together.
11
11
  * Returns empty stats if called without args.
12
12
  * @param stats - stats to merge
13
+ * @internal
13
14
  */
14
15
  export function mergeStats(...stats) {
15
16
  const results = {
@@ -28,6 +29,9 @@ export function mergeStats(...stats) {
28
29
  }
29
30
  return results;
30
31
  }
32
+ /**
33
+ * @internal
34
+ */
31
35
  export function utf8ByteLength(str) {
32
36
  // returns the byte length of an utf8 string
33
37
  let s = str.length;
@@ -45,6 +49,9 @@ export function utf8ByteLength(str) {
45
49
  }
46
50
  return s;
47
51
  }
52
+ /**
53
+ * @internal
54
+ */
48
55
  export function getBlobSize(content) {
49
56
  return typeof content === "string" ? utf8ByteLength(content) : content.byteLength;
50
57
  }
@@ -70,11 +77,17 @@ function calculateStatsCore(summaryObject, stats) {
70
77
  return;
71
78
  }
72
79
  }
80
+ /**
81
+ * @internal
82
+ */
73
83
  export function calculateStats(summary) {
74
84
  const stats = mergeStats();
75
85
  calculateStatsCore(summary, stats);
76
86
  return stats;
77
87
  }
88
+ /**
89
+ * @internal
90
+ */
78
91
  export function addBlobToSummary(summary, key, content) {
79
92
  const blob = {
80
93
  type: SummaryType.Blob,
@@ -84,14 +97,23 @@ export function addBlobToSummary(summary, key, content) {
84
97
  summary.stats.blobNodeCount++;
85
98
  summary.stats.totalBlobSize += getBlobSize(content);
86
99
  }
100
+ /**
101
+ * @internal
102
+ */
87
103
  export function addTreeToSummary(summary, key, summarizeResult) {
88
104
  summary.summary.tree[key] = summarizeResult.summary;
89
105
  summary.stats = mergeStats(summary.stats, summarizeResult.stats);
90
106
  }
107
+ /**
108
+ * @internal
109
+ */
91
110
  export function addSummarizeResultToSummary(summary, key, summarizeResult) {
92
111
  summary.summary.tree[key] = summarizeResult.summary;
93
112
  summary.stats = mergeStats(summary.stats, summarizeResult.stats);
94
113
  }
114
+ /**
115
+ * @internal
116
+ */
95
117
  export class SummaryTreeBuilder {
96
118
  get summary() {
97
119
  return {
@@ -141,6 +163,7 @@ export class SummaryTreeBuilder {
141
163
  * Converts snapshot ITree to ISummaryTree format and tracks stats.
142
164
  * @param snapshot - snapshot in ITree format
143
165
  * @param fullTree - true to never use handles, even if id is specified
166
+ * @internal
144
167
  */
145
168
  export function convertToSummaryTreeWithStats(snapshot, fullTree = false) {
146
169
  const builder = new SummaryTreeBuilder();
@@ -176,6 +199,7 @@ export function convertToSummaryTreeWithStats(snapshot, fullTree = false) {
176
199
  * Converts snapshot ITree to ISummaryTree format and tracks stats.
177
200
  * @param snapshot - snapshot in ITree format
178
201
  * @param fullTree - true to never use handles, even if id is specified
202
+ * @internal
179
203
  */
180
204
  export function convertToSummaryTree(snapshot, fullTree = false) {
181
205
  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
@@ -199,6 +223,7 @@ export function convertToSummaryTree(snapshot, fullTree = false) {
199
223
  * Converts ISnapshotTree to ISummaryTree format and tracks stats. This snapshot tree was
200
224
  * was taken by serialize api in detached container.
201
225
  * @param snapshot - snapshot in ISnapshotTree format
226
+ * @internal
202
227
  */
203
228
  export function convertSnapshotTreeToSummaryTree(snapshot) {
204
229
  const builder = new SummaryTreeBuilder();
@@ -230,6 +255,7 @@ export function convertSnapshotTreeToSummaryTree(snapshot) {
230
255
  /**
231
256
  * Converts ISummaryTree to ITree format. This is needed for back-compat while we get rid of snapshot.
232
257
  * @param summaryTree - summary tree in ISummaryTree format
258
+ * @internal
233
259
  */
234
260
  export function convertSummaryTreeToITree(summaryTree) {
235
261
  const entries = [];
@@ -268,6 +294,9 @@ export function convertSummaryTreeToITree(summaryTree) {
268
294
  unreferenced: summaryTree.unreferenced,
269
295
  };
270
296
  }
297
+ /**
298
+ * @internal
299
+ */
271
300
  export class TelemetryContext {
272
301
  constructor() {
273
302
  this.telemetry = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"summaryUtils.js","sourceRoot":"","sources":["../src/summaryUtils.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 { TelemetryEventPropertyType } from \"@fluidframework/core-interfaces\";\nimport {\n\tbufferToString,\n\tfromBase64ToUtf8,\n\tIsoBuffer,\n\tUint8ArrayToString,\n} from \"@fluid-internal/client-utils\";\nimport { unreachableCase } from \"@fluidframework/core-utils\";\nimport { AttachmentTreeEntry, BlobTreeEntry, TreeTreeEntry } from \"@fluidframework/driver-utils\";\nimport {\n\tITree,\n\tSummaryType,\n\tISummaryTree,\n\tSummaryObject,\n\tISummaryBlob,\n\tTreeEntry,\n\tITreeEntry,\n\tISnapshotTree,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tISummaryStats,\n\tISummarizeResult,\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n\tIGarbageCollectionData,\n} from \"@fluidframework/runtime-definitions\";\n\n/**\n * Combines summary stats by adding their totals together.\n * Returns empty stats if called without args.\n * @param stats - stats to merge\n */\nexport function mergeStats(...stats: ISummaryStats[]): ISummaryStats {\n\tconst results = {\n\t\ttreeNodeCount: 0,\n\t\tblobNodeCount: 0,\n\t\thandleNodeCount: 0,\n\t\ttotalBlobSize: 0,\n\t\tunreferencedBlobSize: 0,\n\t};\n\tfor (const stat of stats) {\n\t\tresults.treeNodeCount += stat.treeNodeCount;\n\t\tresults.blobNodeCount += stat.blobNodeCount;\n\t\tresults.handleNodeCount += stat.handleNodeCount;\n\t\tresults.totalBlobSize += stat.totalBlobSize;\n\t\tresults.unreferencedBlobSize += stat.unreferencedBlobSize;\n\t}\n\treturn results;\n}\n\nexport function utf8ByteLength(str: string): number {\n\t// returns the byte length of an utf8 string\n\tlet s = str.length;\n\tfor (let i = str.length - 1; i >= 0; i--) {\n\t\tconst code = str.charCodeAt(i);\n\t\tif (code > 0x7f && code <= 0x7ff) {\n\t\t\ts++;\n\t\t} else if (code > 0x7ff && code <= 0xffff) {\n\t\t\ts += 2;\n\t\t}\n\t\tif (code >= 0xdc00 && code <= 0xdfff) {\n\t\t\ti--; // trail surrogate\n\t\t}\n\t}\n\treturn s;\n}\n\nexport function getBlobSize(content: ISummaryBlob[\"content\"]): number {\n\treturn typeof content === \"string\" ? utf8ByteLength(content) : content.byteLength;\n}\n\nfunction calculateStatsCore(summaryObject: SummaryObject, stats: ISummaryStats): void {\n\tswitch (summaryObject.type) {\n\t\tcase SummaryType.Tree: {\n\t\t\tstats.treeNodeCount++;\n\t\t\tfor (const value of Object.values(summaryObject.tree)) {\n\t\t\t\tcalculateStatsCore(value, stats);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcase SummaryType.Handle: {\n\t\t\tstats.handleNodeCount++;\n\t\t\treturn;\n\t\t}\n\t\tcase SummaryType.Blob: {\n\t\t\tstats.blobNodeCount++;\n\t\t\tstats.totalBlobSize += getBlobSize(summaryObject.content);\n\t\t\treturn;\n\t\t}\n\t\tdefault:\n\t\t\treturn;\n\t}\n}\n\nexport function calculateStats(summary: SummaryObject): ISummaryStats {\n\tconst stats = mergeStats();\n\tcalculateStatsCore(summary, stats);\n\treturn stats;\n}\n\nexport function addBlobToSummary(\n\tsummary: ISummaryTreeWithStats,\n\tkey: string,\n\tcontent: string | Uint8Array,\n): void {\n\tconst blob: ISummaryBlob = {\n\t\ttype: SummaryType.Blob,\n\t\tcontent,\n\t};\n\tsummary.summary.tree[key] = blob;\n\tsummary.stats.blobNodeCount++;\n\tsummary.stats.totalBlobSize += getBlobSize(content);\n}\n\nexport function addTreeToSummary(\n\tsummary: ISummaryTreeWithStats,\n\tkey: string,\n\tsummarizeResult: ISummarizeResult,\n): void {\n\tsummary.summary.tree[key] = summarizeResult.summary;\n\tsummary.stats = mergeStats(summary.stats, summarizeResult.stats);\n}\n\nexport function addSummarizeResultToSummary(\n\tsummary: ISummaryTreeWithStats,\n\tkey: string,\n\tsummarizeResult: ISummarizeResult,\n): void {\n\tsummary.summary.tree[key] = summarizeResult.summary;\n\tsummary.stats = mergeStats(summary.stats, summarizeResult.stats);\n}\n\nexport class SummaryTreeBuilder implements ISummaryTreeWithStats {\n\tprivate attachmentCounter: number = 0;\n\n\tpublic get summary(): ISummaryTree {\n\t\treturn {\n\t\t\ttype: SummaryType.Tree,\n\t\t\ttree: { ...this.summaryTree },\n\t\t};\n\t}\n\n\tpublic get stats(): Readonly<ISummaryStats> {\n\t\treturn { ...this.summaryStats };\n\t}\n\n\tconstructor() {\n\t\tthis.summaryStats = mergeStats();\n\t\tthis.summaryStats.treeNodeCount++;\n\t}\n\n\tprivate readonly summaryTree: { [path: string]: SummaryObject } = {};\n\tprivate summaryStats: ISummaryStats;\n\n\tpublic addBlob(key: string, content: string | Uint8Array): void {\n\t\t// Prevent cloning by directly referencing underlying private properties\n\t\taddBlobToSummary(\n\t\t\t{\n\t\t\t\tsummary: {\n\t\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\t\ttree: this.summaryTree,\n\t\t\t\t},\n\t\t\t\tstats: this.summaryStats,\n\t\t\t},\n\t\t\tkey,\n\t\t\tcontent,\n\t\t);\n\t}\n\n\tpublic addHandle(\n\t\tkey: string,\n\t\thandleType: SummaryType.Tree | SummaryType.Blob | SummaryType.Attachment,\n\t\thandle: string,\n\t): void {\n\t\tthis.summaryTree[key] = {\n\t\t\ttype: SummaryType.Handle,\n\t\t\thandleType,\n\t\t\thandle,\n\t\t};\n\t\tthis.summaryStats.handleNodeCount++;\n\t}\n\n\tpublic addWithStats(key: string, summarizeResult: ISummarizeResult): void {\n\t\tthis.summaryTree[key] = summarizeResult.summary;\n\t\tthis.summaryStats = mergeStats(this.summaryStats, summarizeResult.stats);\n\t}\n\n\tpublic addAttachment(id: string) {\n\t\tthis.summaryTree[this.attachmentCounter++] = { id, type: SummaryType.Attachment };\n\t}\n\n\tpublic getSummaryTree(): ISummaryTreeWithStats {\n\t\treturn { summary: this.summary, stats: this.stats };\n\t}\n}\n\n/**\n * Converts snapshot ITree to ISummaryTree format and tracks stats.\n * @param snapshot - snapshot in ITree format\n * @param fullTree - true to never use handles, even if id is specified\n */\nexport function convertToSummaryTreeWithStats(\n\tsnapshot: ITree,\n\tfullTree: boolean = false,\n): ISummaryTreeWithStats {\n\tconst builder = new SummaryTreeBuilder();\n\tfor (const entry of snapshot.entries) {\n\t\tswitch (entry.type) {\n\t\t\tcase TreeEntry.Blob: {\n\t\t\t\tconst blob = entry.value;\n\t\t\t\tconst content =\n\t\t\t\t\tblob.encoding === \"base64\"\n\t\t\t\t\t\t? IsoBuffer.from(blob.contents, \"base64\")\n\t\t\t\t\t\t: blob.contents;\n\t\t\t\tbuilder.addBlob(entry.path, content);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase TreeEntry.Tree: {\n\t\t\t\tconst subtree = convertToSummaryTree(entry.value, fullTree);\n\t\t\t\tbuilder.addWithStats(entry.path, subtree);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase TreeEntry.Attachment: {\n\t\t\t\tconst id = entry.value.id;\n\t\t\t\tbuilder.addAttachment(id);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unexpected TreeEntry type\");\n\t\t}\n\t}\n\n\tconst summaryTree = builder.getSummaryTree();\n\tsummaryTree.summary.unreferenced = snapshot.unreferenced;\n\treturn summaryTree;\n}\n\n/**\n * Converts snapshot ITree to ISummaryTree format and tracks stats.\n * @param snapshot - snapshot in ITree format\n * @param fullTree - true to never use handles, even if id is specified\n */\nexport function convertToSummaryTree(snapshot: ITree, fullTree: boolean = false): ISummarizeResult {\n\t// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n\tif (snapshot.id && !fullTree) {\n\t\tconst stats = mergeStats();\n\t\tstats.handleNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\thandle: snapshot.id,\n\t\t\t\thandleType: SummaryType.Tree,\n\t\t\t\ttype: SummaryType.Handle,\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t} else {\n\t\treturn convertToSummaryTreeWithStats(snapshot, fullTree);\n\t}\n}\n\n/**\n * Converts ISnapshotTree to ISummaryTree format and tracks stats. This snapshot tree was\n * was taken by serialize api in detached container.\n * @param snapshot - snapshot in ISnapshotTree format\n */\nexport function convertSnapshotTreeToSummaryTree(snapshot: ISnapshotTree): ISummaryTreeWithStats {\n\tconst builder = new SummaryTreeBuilder();\n\tfor (const [path, id] of Object.entries(snapshot.blobs)) {\n\t\tlet decoded: string | undefined;\n\t\tif ((snapshot as any).blobsContents !== undefined) {\n\t\t\tconst content: ArrayBufferLike = (snapshot as any).blobsContents[id];\n\t\t\tif (content !== undefined) {\n\t\t\t\tdecoded = bufferToString(content, \"utf-8\");\n\t\t\t}\n\t\t\t// 0.44 back-compat We still put contents in same blob for back-compat so need to add blob\n\t\t\t// only for blobPath -> blobId mapping and not for blobId -> blob value contents.\n\t\t} else if (snapshot.blobs[id] !== undefined) {\n\t\t\tdecoded = fromBase64ToUtf8(snapshot.blobs[id]);\n\t\t}\n\t\tif (decoded !== undefined) {\n\t\t\tbuilder.addBlob(path, decoded);\n\t\t}\n\t}\n\n\tfor (const [key, tree] of Object.entries(snapshot.trees)) {\n\t\tconst subtree = convertSnapshotTreeToSummaryTree(tree);\n\t\tbuilder.addWithStats(key, subtree);\n\t}\n\n\tconst summaryTree = builder.getSummaryTree();\n\tsummaryTree.summary.unreferenced = snapshot.unreferenced;\n\treturn summaryTree;\n}\n\n/**\n * Converts ISummaryTree to ITree format. This is needed for back-compat while we get rid of snapshot.\n * @param summaryTree - summary tree in ISummaryTree format\n */\nexport function convertSummaryTreeToITree(summaryTree: ISummaryTree): ITree {\n\tconst entries: ITreeEntry[] = [];\n\tfor (const [key, value] of Object.entries(summaryTree.tree)) {\n\t\tswitch (value.type) {\n\t\t\tcase SummaryType.Blob: {\n\t\t\t\tlet parsedContent: string;\n\t\t\t\tlet encoding: \"utf-8\" | \"base64\" = \"utf-8\";\n\t\t\t\tif (typeof value.content === \"string\") {\n\t\t\t\t\tparsedContent = value.content;\n\t\t\t\t} else {\n\t\t\t\t\tparsedContent = Uint8ArrayToString(value.content, \"base64\");\n\t\t\t\t\tencoding = \"base64\";\n\t\t\t\t}\n\t\t\t\tentries.push(new BlobTreeEntry(key, parsedContent, encoding));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SummaryType.Tree: {\n\t\t\t\tentries.push(new TreeTreeEntry(key, convertSummaryTreeToITree(value)));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SummaryType.Attachment: {\n\t\t\t\tentries.push(new AttachmentTreeEntry(key, value.id));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SummaryType.Handle: {\n\t\t\t\tthrow new Error(\"Should not have Handle type in summary tree\");\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(value, \"Unexpected summary tree type\");\n\t\t}\n\t}\n\treturn {\n\t\tentries,\n\t\tunreferenced: summaryTree.unreferenced,\n\t};\n}\n\nexport class TelemetryContext implements ITelemetryContext {\n\tprivate readonly telemetry = new Map<string, TelemetryEventPropertyType>();\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#ITelemetryContext.set}\n\t */\n\tset(prefix: string, property: string, value: TelemetryEventPropertyType): void {\n\t\tthis.telemetry.set(`${prefix}${property}`, value);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#ITelemetryContext.setMultiple}\n\t */\n\tsetMultiple(\n\t\tprefix: string,\n\t\tproperty: string,\n\t\tvalues: Record<string, TelemetryEventPropertyType>,\n\t): void {\n\t\t// Set the values individually so that they are logged as a flat list along with other properties.\n\t\tfor (const key of Object.keys(values)) {\n\t\t\tthis.set(prefix, `${property}_${key}`, values[key]);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#ITelemetryContext.get}\n\t */\n\tget(prefix: string, property: string): TelemetryEventPropertyType {\n\t\treturn this.telemetry.get(`${prefix}${property}`);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#ITelemetryContext.serialize}\n\t */\n\tserialize(): string {\n\t\tconst jsonObject = {};\n\t\tthis.telemetry.forEach((value, key) => {\n\t\t\tjsonObject[key] = value;\n\t\t});\n\t\treturn JSON.stringify(jsonObject);\n\t}\n}\n\n/**\n * Trims the leading slashes from the given string.\n * @param str - A string that may contain leading slashes.\n * @returns A new string without leading slashes.\n */\nfunction trimLeadingSlashes(str: string) {\n\treturn str.replace(/^\\/+/g, \"\");\n}\n\n/**\n * Trims the trailing slashes from the given string.\n * @param str - A string that may contain trailing slashes.\n * @returns A new string without trailing slashes.\n */\nfunction trimTrailingSlashes(str: string) {\n\treturn str.replace(/\\/+$/g, \"\");\n}\n\n/**\n * Helper class to build the garbage collection data of a node by combining the data from multiple nodes.\n * @internal\n */\nexport class GCDataBuilder implements IGarbageCollectionData {\n\tprivate readonly gcNodesSet: { [id: string]: Set<string> } = {};\n\tpublic get gcNodes(): { [id: string]: string[] } {\n\t\tconst gcNodes = {};\n\t\tfor (const [nodeId, outboundRoutes] of Object.entries(this.gcNodesSet)) {\n\t\t\tgcNodes[nodeId] = [...outboundRoutes];\n\t\t}\n\t\treturn gcNodes;\n\t}\n\n\tpublic addNode(id: string, outboundRoutes: string[]) {\n\t\tthis.gcNodesSet[id] = new Set(outboundRoutes);\n\t}\n\n\t/**\n\t * Adds the given GC nodes. It does the following:\n\t * - Normalizes the ids of the given nodes.\n\t * - Prefixes the given `prefixId` to the given nodes' ids.\n\t * - Adds the outbound routes of the nodes against the normalized and prefixed id.\n\t */\n\tpublic prefixAndAddNodes(prefixId: string, gcNodes: { [id: string]: string[] }) {\n\t\tfor (const [id, outboundRoutes] of Object.entries(gcNodes)) {\n\t\t\t// Remove any leading slashes from the id.\n\t\t\tlet normalizedId = trimLeadingSlashes(id);\n\t\t\t// Prefix the given id to the normalized id.\n\t\t\tnormalizedId = `/${prefixId}/${normalizedId}`;\n\t\t\t// Remove any trailing slashes from the normalized id. Note that the trailing slashes are removed after\n\t\t\t// adding the prefix for handling the special case where id is \"/\".\n\t\t\tnormalizedId = trimTrailingSlashes(normalizedId);\n\n\t\t\t// Add the outbound routes against the normalized and prefixed id without duplicates.\n\t\t\tthis.gcNodesSet[normalizedId] = new Set(outboundRoutes);\n\t\t}\n\t}\n\n\tpublic addNodes(gcNodes: { [id: string]: string[] }) {\n\t\tfor (const [id, outboundRoutes] of Object.entries(gcNodes)) {\n\t\t\tthis.gcNodesSet[id] = new Set(outboundRoutes);\n\t\t}\n\t}\n\n\t/**\n\t * Adds the given outbound route to the outbound routes of all GC nodes.\n\t */\n\tpublic addRouteToAllNodes(outboundRoute: string) {\n\t\tfor (const outboundRoutes of Object.values(this.gcNodesSet)) {\n\t\t\toutboundRoutes.add(outboundRoute);\n\t\t}\n\t}\n\n\tpublic getGCData(): IGarbageCollectionData {\n\t\treturn {\n\t\t\tgcNodes: this.gcNodes,\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"summaryUtils.js","sourceRoot":"","sources":["../src/summaryUtils.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 { TelemetryEventPropertyType } from \"@fluidframework/core-interfaces\";\nimport {\n\tbufferToString,\n\tfromBase64ToUtf8,\n\tIsoBuffer,\n\tUint8ArrayToString,\n} from \"@fluid-internal/client-utils\";\nimport { unreachableCase } from \"@fluidframework/core-utils\";\nimport { AttachmentTreeEntry, BlobTreeEntry, TreeTreeEntry } from \"@fluidframework/driver-utils\";\nimport {\n\tITree,\n\tSummaryType,\n\tISummaryTree,\n\tSummaryObject,\n\tISummaryBlob,\n\tTreeEntry,\n\tITreeEntry,\n\tISnapshotTree,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tISummaryStats,\n\tISummarizeResult,\n\tISummaryTreeWithStats,\n\tITelemetryContext,\n\tIGarbageCollectionData,\n} from \"@fluidframework/runtime-definitions\";\n\n/**\n * Combines summary stats by adding their totals together.\n * Returns empty stats if called without args.\n * @param stats - stats to merge\n * @internal\n */\nexport function mergeStats(...stats: ISummaryStats[]): ISummaryStats {\n\tconst results = {\n\t\ttreeNodeCount: 0,\n\t\tblobNodeCount: 0,\n\t\thandleNodeCount: 0,\n\t\ttotalBlobSize: 0,\n\t\tunreferencedBlobSize: 0,\n\t};\n\tfor (const stat of stats) {\n\t\tresults.treeNodeCount += stat.treeNodeCount;\n\t\tresults.blobNodeCount += stat.blobNodeCount;\n\t\tresults.handleNodeCount += stat.handleNodeCount;\n\t\tresults.totalBlobSize += stat.totalBlobSize;\n\t\tresults.unreferencedBlobSize += stat.unreferencedBlobSize;\n\t}\n\treturn results;\n}\n\n/**\n * @internal\n */\nexport function utf8ByteLength(str: string): number {\n\t// returns the byte length of an utf8 string\n\tlet s = str.length;\n\tfor (let i = str.length - 1; i >= 0; i--) {\n\t\tconst code = str.charCodeAt(i);\n\t\tif (code > 0x7f && code <= 0x7ff) {\n\t\t\ts++;\n\t\t} else if (code > 0x7ff && code <= 0xffff) {\n\t\t\ts += 2;\n\t\t}\n\t\tif (code >= 0xdc00 && code <= 0xdfff) {\n\t\t\ti--; // trail surrogate\n\t\t}\n\t}\n\treturn s;\n}\n\n/**\n * @internal\n */\nexport function getBlobSize(content: ISummaryBlob[\"content\"]): number {\n\treturn typeof content === \"string\" ? utf8ByteLength(content) : content.byteLength;\n}\n\nfunction calculateStatsCore(summaryObject: SummaryObject, stats: ISummaryStats): void {\n\tswitch (summaryObject.type) {\n\t\tcase SummaryType.Tree: {\n\t\t\tstats.treeNodeCount++;\n\t\t\tfor (const value of Object.values(summaryObject.tree)) {\n\t\t\t\tcalculateStatsCore(value, stats);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcase SummaryType.Handle: {\n\t\t\tstats.handleNodeCount++;\n\t\t\treturn;\n\t\t}\n\t\tcase SummaryType.Blob: {\n\t\t\tstats.blobNodeCount++;\n\t\t\tstats.totalBlobSize += getBlobSize(summaryObject.content);\n\t\t\treturn;\n\t\t}\n\t\tdefault:\n\t\t\treturn;\n\t}\n}\n\n/**\n * @internal\n */\nexport function calculateStats(summary: SummaryObject): ISummaryStats {\n\tconst stats = mergeStats();\n\tcalculateStatsCore(summary, stats);\n\treturn stats;\n}\n\n/**\n * @internal\n */\nexport function addBlobToSummary(\n\tsummary: ISummaryTreeWithStats,\n\tkey: string,\n\tcontent: string | Uint8Array,\n): void {\n\tconst blob: ISummaryBlob = {\n\t\ttype: SummaryType.Blob,\n\t\tcontent,\n\t};\n\tsummary.summary.tree[key] = blob;\n\tsummary.stats.blobNodeCount++;\n\tsummary.stats.totalBlobSize += getBlobSize(content);\n}\n\n/**\n * @internal\n */\nexport function addTreeToSummary(\n\tsummary: ISummaryTreeWithStats,\n\tkey: string,\n\tsummarizeResult: ISummarizeResult,\n): void {\n\tsummary.summary.tree[key] = summarizeResult.summary;\n\tsummary.stats = mergeStats(summary.stats, summarizeResult.stats);\n}\n\n/**\n * @internal\n */\nexport function addSummarizeResultToSummary(\n\tsummary: ISummaryTreeWithStats,\n\tkey: string,\n\tsummarizeResult: ISummarizeResult,\n): void {\n\tsummary.summary.tree[key] = summarizeResult.summary;\n\tsummary.stats = mergeStats(summary.stats, summarizeResult.stats);\n}\n\n/**\n * @internal\n */\nexport class SummaryTreeBuilder implements ISummaryTreeWithStats {\n\tprivate attachmentCounter: number = 0;\n\n\tpublic get summary(): ISummaryTree {\n\t\treturn {\n\t\t\ttype: SummaryType.Tree,\n\t\t\ttree: { ...this.summaryTree },\n\t\t};\n\t}\n\n\tpublic get stats(): Readonly<ISummaryStats> {\n\t\treturn { ...this.summaryStats };\n\t}\n\n\tconstructor() {\n\t\tthis.summaryStats = mergeStats();\n\t\tthis.summaryStats.treeNodeCount++;\n\t}\n\n\tprivate readonly summaryTree: { [path: string]: SummaryObject } = {};\n\tprivate summaryStats: ISummaryStats;\n\n\tpublic addBlob(key: string, content: string | Uint8Array): void {\n\t\t// Prevent cloning by directly referencing underlying private properties\n\t\taddBlobToSummary(\n\t\t\t{\n\t\t\t\tsummary: {\n\t\t\t\t\ttype: SummaryType.Tree,\n\t\t\t\t\ttree: this.summaryTree,\n\t\t\t\t},\n\t\t\t\tstats: this.summaryStats,\n\t\t\t},\n\t\t\tkey,\n\t\t\tcontent,\n\t\t);\n\t}\n\n\tpublic addHandle(\n\t\tkey: string,\n\t\thandleType: SummaryType.Tree | SummaryType.Blob | SummaryType.Attachment,\n\t\thandle: string,\n\t): void {\n\t\tthis.summaryTree[key] = {\n\t\t\ttype: SummaryType.Handle,\n\t\t\thandleType,\n\t\t\thandle,\n\t\t};\n\t\tthis.summaryStats.handleNodeCount++;\n\t}\n\n\tpublic addWithStats(key: string, summarizeResult: ISummarizeResult): void {\n\t\tthis.summaryTree[key] = summarizeResult.summary;\n\t\tthis.summaryStats = mergeStats(this.summaryStats, summarizeResult.stats);\n\t}\n\n\tpublic addAttachment(id: string) {\n\t\tthis.summaryTree[this.attachmentCounter++] = { id, type: SummaryType.Attachment };\n\t}\n\n\tpublic getSummaryTree(): ISummaryTreeWithStats {\n\t\treturn { summary: this.summary, stats: this.stats };\n\t}\n}\n\n/**\n * Converts snapshot ITree to ISummaryTree format and tracks stats.\n * @param snapshot - snapshot in ITree format\n * @param fullTree - true to never use handles, even if id is specified\n * @internal\n */\nexport function convertToSummaryTreeWithStats(\n\tsnapshot: ITree,\n\tfullTree: boolean = false,\n): ISummaryTreeWithStats {\n\tconst builder = new SummaryTreeBuilder();\n\tfor (const entry of snapshot.entries) {\n\t\tswitch (entry.type) {\n\t\t\tcase TreeEntry.Blob: {\n\t\t\t\tconst blob = entry.value;\n\t\t\t\tconst content =\n\t\t\t\t\tblob.encoding === \"base64\"\n\t\t\t\t\t\t? IsoBuffer.from(blob.contents, \"base64\")\n\t\t\t\t\t\t: blob.contents;\n\t\t\t\tbuilder.addBlob(entry.path, content);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase TreeEntry.Tree: {\n\t\t\t\tconst subtree = convertToSummaryTree(entry.value, fullTree);\n\t\t\t\tbuilder.addWithStats(entry.path, subtree);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase TreeEntry.Attachment: {\n\t\t\t\tconst id = entry.value.id;\n\t\t\t\tbuilder.addAttachment(id);\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"Unexpected TreeEntry type\");\n\t\t}\n\t}\n\n\tconst summaryTree = builder.getSummaryTree();\n\tsummaryTree.summary.unreferenced = snapshot.unreferenced;\n\treturn summaryTree;\n}\n\n/**\n * Converts snapshot ITree to ISummaryTree format and tracks stats.\n * @param snapshot - snapshot in ITree format\n * @param fullTree - true to never use handles, even if id is specified\n * @internal\n */\nexport function convertToSummaryTree(snapshot: ITree, fullTree: boolean = false): ISummarizeResult {\n\t// eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n\tif (snapshot.id && !fullTree) {\n\t\tconst stats = mergeStats();\n\t\tstats.handleNodeCount++;\n\t\treturn {\n\t\t\tsummary: {\n\t\t\t\thandle: snapshot.id,\n\t\t\t\thandleType: SummaryType.Tree,\n\t\t\t\ttype: SummaryType.Handle,\n\t\t\t},\n\t\t\tstats,\n\t\t};\n\t} else {\n\t\treturn convertToSummaryTreeWithStats(snapshot, fullTree);\n\t}\n}\n\n/**\n * Converts ISnapshotTree to ISummaryTree format and tracks stats. This snapshot tree was\n * was taken by serialize api in detached container.\n * @param snapshot - snapshot in ISnapshotTree format\n * @internal\n */\nexport function convertSnapshotTreeToSummaryTree(snapshot: ISnapshotTree): ISummaryTreeWithStats {\n\tconst builder = new SummaryTreeBuilder();\n\tfor (const [path, id] of Object.entries(snapshot.blobs)) {\n\t\tlet decoded: string | undefined;\n\t\tif ((snapshot as any).blobsContents !== undefined) {\n\t\t\tconst content: ArrayBufferLike = (snapshot as any).blobsContents[id];\n\t\t\tif (content !== undefined) {\n\t\t\t\tdecoded = bufferToString(content, \"utf-8\");\n\t\t\t}\n\t\t\t// 0.44 back-compat We still put contents in same blob for back-compat so need to add blob\n\t\t\t// only for blobPath -> blobId mapping and not for blobId -> blob value contents.\n\t\t} else if (snapshot.blobs[id] !== undefined) {\n\t\t\tdecoded = fromBase64ToUtf8(snapshot.blobs[id]);\n\t\t}\n\t\tif (decoded !== undefined) {\n\t\t\tbuilder.addBlob(path, decoded);\n\t\t}\n\t}\n\n\tfor (const [key, tree] of Object.entries(snapshot.trees)) {\n\t\tconst subtree = convertSnapshotTreeToSummaryTree(tree);\n\t\tbuilder.addWithStats(key, subtree);\n\t}\n\n\tconst summaryTree = builder.getSummaryTree();\n\tsummaryTree.summary.unreferenced = snapshot.unreferenced;\n\treturn summaryTree;\n}\n\n/**\n * Converts ISummaryTree to ITree format. This is needed for back-compat while we get rid of snapshot.\n * @param summaryTree - summary tree in ISummaryTree format\n * @internal\n */\nexport function convertSummaryTreeToITree(summaryTree: ISummaryTree): ITree {\n\tconst entries: ITreeEntry[] = [];\n\tfor (const [key, value] of Object.entries(summaryTree.tree)) {\n\t\tswitch (value.type) {\n\t\t\tcase SummaryType.Blob: {\n\t\t\t\tlet parsedContent: string;\n\t\t\t\tlet encoding: \"utf-8\" | \"base64\" = \"utf-8\";\n\t\t\t\tif (typeof value.content === \"string\") {\n\t\t\t\t\tparsedContent = value.content;\n\t\t\t\t} else {\n\t\t\t\t\tparsedContent = Uint8ArrayToString(value.content, \"base64\");\n\t\t\t\t\tencoding = \"base64\";\n\t\t\t\t}\n\t\t\t\tentries.push(new BlobTreeEntry(key, parsedContent, encoding));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SummaryType.Tree: {\n\t\t\t\tentries.push(new TreeTreeEntry(key, convertSummaryTreeToITree(value)));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SummaryType.Attachment: {\n\t\t\t\tentries.push(new AttachmentTreeEntry(key, value.id));\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase SummaryType.Handle: {\n\t\t\t\tthrow new Error(\"Should not have Handle type in summary tree\");\n\t\t\t}\n\n\t\t\tdefault:\n\t\t\t\tunreachableCase(value, \"Unexpected summary tree type\");\n\t\t}\n\t}\n\treturn {\n\t\tentries,\n\t\tunreferenced: summaryTree.unreferenced,\n\t};\n}\n\n/**\n * @internal\n */\nexport class TelemetryContext implements ITelemetryContext {\n\tprivate readonly telemetry = new Map<string, TelemetryEventPropertyType>();\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#ITelemetryContext.set}\n\t */\n\tset(prefix: string, property: string, value: TelemetryEventPropertyType): void {\n\t\tthis.telemetry.set(`${prefix}${property}`, value);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#ITelemetryContext.setMultiple}\n\t */\n\tsetMultiple(\n\t\tprefix: string,\n\t\tproperty: string,\n\t\tvalues: Record<string, TelemetryEventPropertyType>,\n\t): void {\n\t\t// Set the values individually so that they are logged as a flat list along with other properties.\n\t\tfor (const key of Object.keys(values)) {\n\t\t\tthis.set(prefix, `${property}_${key}`, values[key]);\n\t\t}\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#ITelemetryContext.get}\n\t */\n\tget(prefix: string, property: string): TelemetryEventPropertyType {\n\t\treturn this.telemetry.get(`${prefix}${property}`);\n\t}\n\n\t/**\n\t * {@inheritDoc @fluidframework/runtime-definitions#ITelemetryContext.serialize}\n\t */\n\tserialize(): string {\n\t\tconst jsonObject = {};\n\t\tthis.telemetry.forEach((value, key) => {\n\t\t\tjsonObject[key] = value;\n\t\t});\n\t\treturn JSON.stringify(jsonObject);\n\t}\n}\n\n/**\n * Trims the leading slashes from the given string.\n * @param str - A string that may contain leading slashes.\n * @returns A new string without leading slashes.\n */\nfunction trimLeadingSlashes(str: string) {\n\treturn str.replace(/^\\/+/g, \"\");\n}\n\n/**\n * Trims the trailing slashes from the given string.\n * @param str - A string that may contain trailing slashes.\n * @returns A new string without trailing slashes.\n */\nfunction trimTrailingSlashes(str: string) {\n\treturn str.replace(/\\/+$/g, \"\");\n}\n\n/**\n * Helper class to build the garbage collection data of a node by combining the data from multiple nodes.\n * @internal\n */\nexport class GCDataBuilder implements IGarbageCollectionData {\n\tprivate readonly gcNodesSet: { [id: string]: Set<string> } = {};\n\tpublic get gcNodes(): { [id: string]: string[] } {\n\t\tconst gcNodes = {};\n\t\tfor (const [nodeId, outboundRoutes] of Object.entries(this.gcNodesSet)) {\n\t\t\tgcNodes[nodeId] = [...outboundRoutes];\n\t\t}\n\t\treturn gcNodes;\n\t}\n\n\tpublic addNode(id: string, outboundRoutes: string[]) {\n\t\tthis.gcNodesSet[id] = new Set(outboundRoutes);\n\t}\n\n\t/**\n\t * Adds the given GC nodes. It does the following:\n\t * - Normalizes the ids of the given nodes.\n\t * - Prefixes the given `prefixId` to the given nodes' ids.\n\t * - Adds the outbound routes of the nodes against the normalized and prefixed id.\n\t */\n\tpublic prefixAndAddNodes(prefixId: string, gcNodes: { [id: string]: string[] }) {\n\t\tfor (const [id, outboundRoutes] of Object.entries(gcNodes)) {\n\t\t\t// Remove any leading slashes from the id.\n\t\t\tlet normalizedId = trimLeadingSlashes(id);\n\t\t\t// Prefix the given id to the normalized id.\n\t\t\tnormalizedId = `/${prefixId}/${normalizedId}`;\n\t\t\t// Remove any trailing slashes from the normalized id. Note that the trailing slashes are removed after\n\t\t\t// adding the prefix for handling the special case where id is \"/\".\n\t\t\tnormalizedId = trimTrailingSlashes(normalizedId);\n\n\t\t\t// Add the outbound routes against the normalized and prefixed id without duplicates.\n\t\t\tthis.gcNodesSet[normalizedId] = new Set(outboundRoutes);\n\t\t}\n\t}\n\n\tpublic addNodes(gcNodes: { [id: string]: string[] }) {\n\t\tfor (const [id, outboundRoutes] of Object.entries(gcNodes)) {\n\t\t\tthis.gcNodesSet[id] = new Set(outboundRoutes);\n\t\t}\n\t}\n\n\t/**\n\t * Adds the given outbound route to the outbound routes of all GC nodes.\n\t */\n\tpublic addRouteToAllNodes(outboundRoute: string) {\n\t\tfor (const outboundRoutes of Object.values(this.gcNodesSet)) {\n\t\t\toutboundRoutes.add(outboundRoute);\n\t\t}\n\t}\n\n\tpublic getGCData(): IGarbageCollectionData {\n\t\treturn {\n\t\t\tgcNodes: this.gcNodes,\n\t\t};\n\t}\n}\n"]}
@@ -6,6 +6,7 @@
6
6
  * Helper function that unpacks the used routes of children from a given node's used routes.
7
7
  * @param usedRoutes - The used routes of a node.
8
8
  * @returns A map of used routes of each children of the the given node.
9
+ * @internal
9
10
  */
10
11
  export declare function unpackChildNodesUsedRoutes(usedRoutes: string[]): Map<string, string[]>;
11
12
  //# sourceMappingURL=unpackUsedRoutes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"unpackUsedRoutes.d.ts","sourceRoot":"","sources":["../src/unpackUsedRoutes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,yBAiB9D"}
1
+ {"version":3,"file":"unpackUsedRoutes.d.ts","sourceRoot":"","sources":["../src/unpackUsedRoutes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,EAAE,yBAiB9D"}
@@ -7,6 +7,7 @@ import { assert } from "@fluidframework/core-utils";
7
7
  * Helper function that unpacks the used routes of children from a given node's used routes.
8
8
  * @param usedRoutes - The used routes of a node.
9
9
  * @returns A map of used routes of each children of the the given node.
10
+ * @internal
10
11
  */
11
12
  export function unpackChildNodesUsedRoutes(usedRoutes) {
12
13
  // Remove the node's self used route, if any, and generate the children used routes.
@@ -1 +1 @@
1
- {"version":3,"file":"unpackUsedRoutes.js","sourceRoot":"","sources":["../src/unpackUsedRoutes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAoB;IAC9D,oFAAoF;IACpF,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC;IACvF,MAAM,kBAAkB,GAA0B,IAAI,GAAG,EAAE,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE;QACvC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,eAAe,KAAK,SAAS,EAAE;YAClC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACrC;aAAM;YACN,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;SAClD;KACD;IACD,OAAO,kBAAkB,CAAC;AAC3B,CAAC","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\";\n\n/**\n * Helper function that unpacks the used routes of children from a given node's used routes.\n * @param usedRoutes - The used routes of a node.\n * @returns A map of used routes of each children of the the given node.\n */\nexport function unpackChildNodesUsedRoutes(usedRoutes: string[]) {\n\t// Remove the node's self used route, if any, and generate the children used routes.\n\tconst filteredUsedRoutes = usedRoutes.filter((route) => route !== \"\" && route !== \"/\");\n\tconst childUsedRoutesMap: Map<string, string[]> = new Map();\n\tfor (const route of filteredUsedRoutes) {\n\t\tassert(route.startsWith(\"/\"), 0x5e0 /* Used route should always be an absolute route */);\n\t\tconst childId = route.split(\"/\")[1];\n\t\tconst childUsedRoute = route.slice(childId.length + 1);\n\n\t\tconst childUsedRoutes = childUsedRoutesMap.get(childId);\n\t\tif (childUsedRoutes !== undefined) {\n\t\t\tchildUsedRoutes.push(childUsedRoute);\n\t\t} else {\n\t\t\tchildUsedRoutesMap.set(childId, [childUsedRoute]);\n\t\t}\n\t}\n\treturn childUsedRoutesMap;\n}\n"]}
1
+ {"version":3,"file":"unpackUsedRoutes.js","sourceRoot":"","sources":["../src/unpackUsedRoutes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAoB;IAC9D,oFAAoF;IACpF,MAAM,kBAAkB,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC;IACvF,MAAM,kBAAkB,GAA0B,IAAI,GAAG,EAAE,CAAC;IAC5D,KAAK,MAAM,KAAK,IAAI,kBAAkB,EAAE;QACvC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACzF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,cAAc,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvD,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACxD,IAAI,eAAe,KAAK,SAAS,EAAE;YAClC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACrC;aAAM;YACN,kBAAkB,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;SAClD;KACD;IACD,OAAO,kBAAkB,CAAC;AAC3B,CAAC","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\";\n\n/**\n * Helper function that unpacks the used routes of children from a given node's used routes.\n * @param usedRoutes - The used routes of a node.\n * @returns A map of used routes of each children of the the given node.\n * @internal\n */\nexport function unpackChildNodesUsedRoutes(usedRoutes: string[]) {\n\t// Remove the node's self used route, if any, and generate the children used routes.\n\tconst filteredUsedRoutes = usedRoutes.filter((route) => route !== \"\" && route !== \"/\");\n\tconst childUsedRoutesMap: Map<string, string[]> = new Map();\n\tfor (const route of filteredUsedRoutes) {\n\t\tassert(route.startsWith(\"/\"), 0x5e0 /* Used route should always be an absolute route */);\n\t\tconst childId = route.split(\"/\")[1];\n\t\tconst childUsedRoute = route.slice(childId.length + 1);\n\n\t\tconst childUsedRoutes = childUsedRoutesMap.get(childId);\n\t\tif (childUsedRoutes !== undefined) {\n\t\t\tchildUsedRoutes.push(childUsedRoute);\n\t\t} else {\n\t\t\tchildUsedRoutesMap.set(childId, [childUsedRoute]);\n\t\t}\n\t}\n\treturn childUsedRoutesMap;\n}\n"]}
package/lib/utils.d.ts CHANGED
@@ -3,13 +3,18 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { ISnapshotTree } from "@fluidframework/protocol-definitions";
6
- /** Reads a blob from storage and parses it from JSON. */
6
+ /**
7
+ * Reads a blob from storage and parses it from JSON.
8
+ *
9
+ * @internal
10
+ */
7
11
  export type ReadAndParseBlob = <T>(id: string) => Promise<T>;
8
12
  /**
9
13
  * Fetches the sequence number of the snapshot tree by examining the protocol.
10
14
  * @param tree - snapshot tree to examine
11
15
  * @param readAndParseBlob - function to read blob contents from storage
12
16
  * and parse the result from JSON.
17
+ * @internal
13
18
  */
14
19
  export declare function seqFromTree(tree: ISnapshotTree, readAndParseBlob: ReadAndParseBlob): Promise<number>;
15
20
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAuB,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1F,yDAAyD;AACzD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7D;;;;;GAKG;AACH,wBAAsB,WAAW,CAChC,IAAI,EAAE,aAAa,EACnB,gBAAgB,EAAE,gBAAgB,GAChC,OAAO,CAAC,MAAM,CAAC,CAIjB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAuB,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAE1F;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7D;;;;;;GAMG;AACH,wBAAsB,WAAW,CAChC,IAAI,EAAE,aAAa,EACnB,gBAAgB,EAAE,gBAAgB,GAChC,OAAO,CAAC,MAAM,CAAC,CAIjB"}
package/lib/utils.js CHANGED
@@ -7,6 +7,7 @@
7
7
  * @param tree - snapshot tree to examine
8
8
  * @param readAndParseBlob - function to read blob contents from storage
9
9
  * and parse the result from JSON.
10
+ * @internal
10
11
  */
11
12
  export async function seqFromTree(tree, readAndParseBlob) {
12
13
  const attributesHash = tree.trees[".protocol"].blobs.attributes;
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,IAAmB,EACnB,gBAAkC;IAElC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAsB,cAAc,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,cAAc,CAAC;AAC9B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IDocumentAttributes, ISnapshotTree } from \"@fluidframework/protocol-definitions\";\n\n/** Reads a blob from storage and parses it from JSON. */\nexport type ReadAndParseBlob = <T>(id: string) => Promise<T>;\n\n/**\n * Fetches the sequence number of the snapshot tree by examining the protocol.\n * @param tree - snapshot tree to examine\n * @param readAndParseBlob - function to read blob contents from storage\n * and parse the result from JSON.\n */\nexport async function seqFromTree(\n\ttree: ISnapshotTree,\n\treadAndParseBlob: ReadAndParseBlob,\n): Promise<number> {\n\tconst attributesHash = tree.trees[\".protocol\"].blobs.attributes;\n\tconst attrib = await readAndParseBlob<IDocumentAttributes>(attributesHash);\n\treturn attrib.sequenceNumber;\n}\n"]}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,IAAmB,EACnB,gBAAkC;IAElC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC;IAChE,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAsB,cAAc,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC,cAAc,CAAC;AAC9B,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IDocumentAttributes, ISnapshotTree } from \"@fluidframework/protocol-definitions\";\n\n/**\n * Reads a blob from storage and parses it from JSON.\n *\n * @internal\n */\nexport type ReadAndParseBlob = <T>(id: string) => Promise<T>;\n\n/**\n * Fetches the sequence number of the snapshot tree by examining the protocol.\n * @param tree - snapshot tree to examine\n * @param readAndParseBlob - function to read blob contents from storage\n * and parse the result from JSON.\n * @internal\n */\nexport async function seqFromTree(\n\ttree: ISnapshotTree,\n\treadAndParseBlob: ReadAndParseBlob,\n): Promise<number> {\n\tconst attributesHash = tree.trees[\".protocol\"].blobs.attributes;\n\tconst attrib = await readAndParseBlob<IDocumentAttributes>(attributesHash);\n\treturn attrib.sequenceNumber;\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/runtime-utils",
3
- "version": "2.0.0-dev.7.4.0.215747",
3
+ "version": "2.0.0-dev.7.4.0.216897",
4
4
  "description": "Collection of utility functions for Fluid Runtime",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -35,23 +35,23 @@
35
35
  "temp-directory": "nyc/.nyc_output"
36
36
  },
37
37
  "dependencies": {
38
- "@fluid-internal/client-utils": "2.0.0-dev.7.4.0.215747",
39
- "@fluidframework/container-definitions": "2.0.0-dev.7.4.0.215747",
40
- "@fluidframework/container-runtime-definitions": "2.0.0-dev.7.4.0.215747",
41
- "@fluidframework/core-interfaces": "2.0.0-dev.7.4.0.215747",
42
- "@fluidframework/core-utils": "2.0.0-dev.7.4.0.215747",
43
- "@fluidframework/datastore-definitions": "2.0.0-dev.7.4.0.215747",
44
- "@fluidframework/driver-utils": "2.0.0-dev.7.4.0.215747",
38
+ "@fluid-internal/client-utils": "2.0.0-dev.7.4.0.216897",
39
+ "@fluidframework/container-definitions": "2.0.0-dev.7.4.0.216897",
40
+ "@fluidframework/container-runtime-definitions": "2.0.0-dev.7.4.0.216897",
41
+ "@fluidframework/core-interfaces": "2.0.0-dev.7.4.0.216897",
42
+ "@fluidframework/core-utils": "2.0.0-dev.7.4.0.216897",
43
+ "@fluidframework/datastore-definitions": "2.0.0-dev.7.4.0.216897",
44
+ "@fluidframework/driver-utils": "2.0.0-dev.7.4.0.216897",
45
45
  "@fluidframework/protocol-definitions": "^3.0.0",
46
- "@fluidframework/runtime-definitions": "2.0.0-dev.7.4.0.215747",
47
- "@fluidframework/telemetry-utils": "2.0.0-dev.7.4.0.215747"
46
+ "@fluidframework/runtime-definitions": "2.0.0-dev.7.4.0.216897",
47
+ "@fluidframework/telemetry-utils": "2.0.0-dev.7.4.0.216897"
48
48
  },
49
49
  "devDependencies": {
50
50
  "@fluid-tools/build-cli": "^0.28.0",
51
51
  "@fluidframework/build-common": "^2.0.3",
52
52
  "@fluidframework/build-tools": "^0.28.0",
53
53
  "@fluidframework/eslint-config-fluid": "^3.1.0",
54
- "@fluidframework/mocha-test-setup": "2.0.0-dev.7.4.0.215747",
54
+ "@fluidframework/mocha-test-setup": "2.0.0-dev.7.4.0.216897",
55
55
  "@fluidframework/runtime-utils-previous": "npm:@fluidframework/runtime-utils@2.0.0-internal.7.2.0",
56
56
  "@microsoft/api-extractor": "^7.38.3",
57
57
  "@types/mocha": "^9.1.1",
@@ -95,12 +95,13 @@
95
95
  "build:docs": "fluid-build . --task api",
96
96
  "build:esnext": "tsc --project ./tsconfig.esnext.json",
97
97
  "build:test": "tsc --project ./src/test/tsconfig.json",
98
+ "check:release-tags": "api-extractor run --local --config ./api-extractor-lint.json",
98
99
  "ci:build:docs": "api-extractor run",
99
100
  "clean": "rimraf --glob dist lib \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
100
101
  "eslint": "eslint --format stylish src",
101
102
  "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
102
103
  "format": "npm run prettier:fix",
103
- "lint": "npm run prettier && npm run eslint",
104
+ "lint": "npm run prettier && npm run check:release-tags && npm run eslint",
104
105
  "lint:fix": "npm run prettier:fix && npm run eslint:fix",
105
106
  "prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
106
107
  "prettier:fix": "prettier --write . --cache --ignore-path ../../../.prettierignore",
@@ -10,6 +10,7 @@ import { IFluidHandleContext } from "@fluidframework/core-interfaces";
10
10
  * @param path - The path to the Fluid object relative to the route context.
11
11
  * @param routeContext - The route context that contains the Fluid object.
12
12
  * @returns The absolute path to the Fluid object from the root of the Container.
13
+ * @internal
13
14
  */
14
15
  export function generateHandleContextPath(
15
16
  path: string,
@@ -21,6 +21,9 @@ interface IResponseException extends Error {
21
21
  underlyingResponseHeaders?: { [key: string]: any };
22
22
  }
23
23
 
24
+ /**
25
+ * @internal
26
+ */
24
27
  export function exceptionToResponse(err: any): IResponse {
25
28
  const status = 500;
26
29
  if (err !== null && typeof err === "object" && err.errorFromRequestFluidObject === true) {
@@ -49,6 +52,9 @@ export function exceptionToResponse(err: any): IResponse {
49
52
  };
50
53
  }
51
54
 
55
+ /**
56
+ * @internal
57
+ */
52
58
  export function responseToException(response: IResponse, request: IRequest): Error {
53
59
  const message = response.value;
54
60
  const errWithStack = generateErrorWithStack();
@@ -68,6 +74,7 @@ export function responseToException(response: IResponse, request: IRequest): Err
68
74
 
69
75
  /**
70
76
  * @deprecated Will be removed in future major release. Migrate all usage of IFluidRouter to the "entryPoint" pattern. Refer to Removing-IFluidRouter.md
77
+ * @internal
71
78
  */
72
79
  export async function requestFluidObject<T = FluidObject>(
73
80
  // eslint-disable-next-line import/no-deprecated
@@ -85,9 +92,15 @@ export async function requestFluidObject<T = FluidObject>(
85
92
  return response.value as T;
86
93
  }
87
94
 
95
+ /**
96
+ * @internal
97
+ */
88
98
  export const create404Response = (request: IRequest) =>
89
99
  createResponseError(404, "not found", request);
90
100
 
101
+ /**
102
+ * @internal
103
+ */
91
104
  export function createResponseError(
92
105
  status: number,
93
106
  value: string,
@@ -112,8 +125,14 @@ export function createResponseError(
112
125
  };
113
126
  }
114
127
 
128
+ /**
129
+ * @internal
130
+ */
115
131
  export type Factory = IFluidDataStoreFactory & Partial<IProvideFluidDataStoreRegistry>;
116
132
 
133
+ /**
134
+ * @internal
135
+ */
117
136
  export function createDataStoreFactory(
118
137
  type: string,
119
138
  factory: Factory | Promise<Factory>,
@@ -8,6 +8,7 @@ import { IChannelStorageService } from "@fluidframework/datastore-definitions";
8
8
 
9
9
  /**
10
10
  * Returns a new IChannelStorageService that resolves the given `path` as root.
11
+ * @internal
11
12
  */
12
13
  export class ObjectStoragePartition implements IChannelStorageService {
13
14
  constructor(
@@ -5,6 +5,9 @@
5
5
 
6
6
  import { ITree } from "@fluidframework/protocol-definitions";
7
7
 
8
+ /**
9
+ * @internal
10
+ */
8
11
  export function getNormalizedObjectStoragePathParts(path: string) {
9
12
  let normalizePath = path;
10
13
  if (normalizePath.startsWith("/")) {
@@ -19,6 +22,9 @@ export function getNormalizedObjectStoragePathParts(path: string) {
19
22
  return [];
20
23
  }
21
24
 
25
+ /**
26
+ * @internal
27
+ */
22
28
  export async function listBlobsAtTreePath(
23
29
  inputTree: ITree | undefined,
24
30
  path: string,
@@ -6,6 +6,7 @@ import { IRequest, IRequestHeader } from "@fluidframework/core-interfaces";
6
6
 
7
7
  /**
8
8
  * The Request Parser takes an IRequest provides parsing and sub request creation
9
+ * @internal
9
10
  */
10
11
  export class RequestParser implements IRequest {
11
12
  /**
@@ -10,6 +10,9 @@ import {
10
10
  } from "@fluidframework/container-definitions";
11
11
  import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
12
12
 
13
+ /**
14
+ * @internal
15
+ */
13
16
  export abstract class RuntimeFactoryHelper<T = IContainerRuntime> implements IRuntimeFactory {
14
17
  public get IRuntimeFactory() {
15
18
  return this;
@@ -34,6 +34,7 @@ import {
34
34
  * Combines summary stats by adding their totals together.
35
35
  * Returns empty stats if called without args.
36
36
  * @param stats - stats to merge
37
+ * @internal
37
38
  */
38
39
  export function mergeStats(...stats: ISummaryStats[]): ISummaryStats {
39
40
  const results = {
@@ -53,6 +54,9 @@ export function mergeStats(...stats: ISummaryStats[]): ISummaryStats {
53
54
  return results;
54
55
  }
55
56
 
57
+ /**
58
+ * @internal
59
+ */
56
60
  export function utf8ByteLength(str: string): number {
57
61
  // returns the byte length of an utf8 string
58
62
  let s = str.length;
@@ -70,6 +74,9 @@ export function utf8ByteLength(str: string): number {
70
74
  return s;
71
75
  }
72
76
 
77
+ /**
78
+ * @internal
79
+ */
73
80
  export function getBlobSize(content: ISummaryBlob["content"]): number {
74
81
  return typeof content === "string" ? utf8ByteLength(content) : content.byteLength;
75
82
  }
@@ -97,12 +104,18 @@ function calculateStatsCore(summaryObject: SummaryObject, stats: ISummaryStats):
97
104
  }
98
105
  }
99
106
 
107
+ /**
108
+ * @internal
109
+ */
100
110
  export function calculateStats(summary: SummaryObject): ISummaryStats {
101
111
  const stats = mergeStats();
102
112
  calculateStatsCore(summary, stats);
103
113
  return stats;
104
114
  }
105
115
 
116
+ /**
117
+ * @internal
118
+ */
106
119
  export function addBlobToSummary(
107
120
  summary: ISummaryTreeWithStats,
108
121
  key: string,
@@ -117,6 +130,9 @@ export function addBlobToSummary(
117
130
  summary.stats.totalBlobSize += getBlobSize(content);
118
131
  }
119
132
 
133
+ /**
134
+ * @internal
135
+ */
120
136
  export function addTreeToSummary(
121
137
  summary: ISummaryTreeWithStats,
122
138
  key: string,
@@ -126,6 +142,9 @@ export function addTreeToSummary(
126
142
  summary.stats = mergeStats(summary.stats, summarizeResult.stats);
127
143
  }
128
144
 
145
+ /**
146
+ * @internal
147
+ */
129
148
  export function addSummarizeResultToSummary(
130
149
  summary: ISummaryTreeWithStats,
131
150
  key: string,
@@ -135,6 +154,9 @@ export function addSummarizeResultToSummary(
135
154
  summary.stats = mergeStats(summary.stats, summarizeResult.stats);
136
155
  }
137
156
 
157
+ /**
158
+ * @internal
159
+ */
138
160
  export class SummaryTreeBuilder implements ISummaryTreeWithStats {
139
161
  private attachmentCounter: number = 0;
140
162
 
@@ -203,6 +225,7 @@ export class SummaryTreeBuilder implements ISummaryTreeWithStats {
203
225
  * Converts snapshot ITree to ISummaryTree format and tracks stats.
204
226
  * @param snapshot - snapshot in ITree format
205
227
  * @param fullTree - true to never use handles, even if id is specified
228
+ * @internal
206
229
  */
207
230
  export function convertToSummaryTreeWithStats(
208
231
  snapshot: ITree,
@@ -249,6 +272,7 @@ export function convertToSummaryTreeWithStats(
249
272
  * Converts snapshot ITree to ISummaryTree format and tracks stats.
250
273
  * @param snapshot - snapshot in ITree format
251
274
  * @param fullTree - true to never use handles, even if id is specified
275
+ * @internal
252
276
  */
253
277
  export function convertToSummaryTree(snapshot: ITree, fullTree: boolean = false): ISummarizeResult {
254
278
  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
@@ -272,6 +296,7 @@ export function convertToSummaryTree(snapshot: ITree, fullTree: boolean = false)
272
296
  * Converts ISnapshotTree to ISummaryTree format and tracks stats. This snapshot tree was
273
297
  * was taken by serialize api in detached container.
274
298
  * @param snapshot - snapshot in ISnapshotTree format
299
+ * @internal
275
300
  */
276
301
  export function convertSnapshotTreeToSummaryTree(snapshot: ISnapshotTree): ISummaryTreeWithStats {
277
302
  const builder = new SummaryTreeBuilder();
@@ -305,6 +330,7 @@ export function convertSnapshotTreeToSummaryTree(snapshot: ISnapshotTree): ISumm
305
330
  /**
306
331
  * Converts ISummaryTree to ITree format. This is needed for back-compat while we get rid of snapshot.
307
332
  * @param summaryTree - summary tree in ISummaryTree format
333
+ * @internal
308
334
  */
309
335
  export function convertSummaryTreeToITree(summaryTree: ISummaryTree): ITree {
310
336
  const entries: ITreeEntry[] = [];
@@ -347,6 +373,9 @@ export function convertSummaryTreeToITree(summaryTree: ISummaryTree): ITree {
347
373
  };
348
374
  }
349
375
 
376
+ /**
377
+ * @internal
378
+ */
350
379
  export class TelemetryContext implements ITelemetryContext {
351
380
  private readonly telemetry = new Map<string, TelemetryEventPropertyType>();
352
381
 
@@ -9,6 +9,7 @@ import { assert } from "@fluidframework/core-utils";
9
9
  * Helper function that unpacks the used routes of children from a given node's used routes.
10
10
  * @param usedRoutes - The used routes of a node.
11
11
  * @returns A map of used routes of each children of the the given node.
12
+ * @internal
12
13
  */
13
14
  export function unpackChildNodesUsedRoutes(usedRoutes: string[]) {
14
15
  // Remove the node's self used route, if any, and generate the children used routes.
package/src/utils.ts CHANGED
@@ -5,7 +5,11 @@
5
5
 
6
6
  import { IDocumentAttributes, ISnapshotTree } from "@fluidframework/protocol-definitions";
7
7
 
8
- /** Reads a blob from storage and parses it from JSON. */
8
+ /**
9
+ * Reads a blob from storage and parses it from JSON.
10
+ *
11
+ * @internal
12
+ */
9
13
  export type ReadAndParseBlob = <T>(id: string) => Promise<T>;
10
14
 
11
15
  /**
@@ -13,6 +17,7 @@ export type ReadAndParseBlob = <T>(id: string) => Promise<T>;
13
17
  * @param tree - snapshot tree to examine
14
18
  * @param readAndParseBlob - function to read blob contents from storage
15
19
  * and parse the result from JSON.
20
+ * @internal
16
21
  */
17
22
  export async function seqFromTree(
18
23
  tree: ISnapshotTree,