@fluidframework/odsp-driver 2.1.0-276985 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +93 -2
  3. package/api-extractor/{api-extractor-lint-beta.cjs.json → api-extractor.current.json} +2 -2
  4. package/api-extractor/api-extractor.legacy.json +1 -1
  5. package/api-extractor.json +1 -1
  6. package/api-report/odsp-driver.legacy.public.api.md +9 -0
  7. package/dist/ReadBufferUtils.d.ts.map +1 -1
  8. package/dist/ReadBufferUtils.js +1 -0
  9. package/dist/ReadBufferUtils.js.map +1 -1
  10. package/dist/WriteBufferUtils.d.ts.map +1 -1
  11. package/dist/WriteBufferUtils.js +2 -0
  12. package/dist/WriteBufferUtils.js.map +1 -1
  13. package/dist/compactSnapshotParser.d.ts.map +1 -1
  14. package/dist/compactSnapshotParser.js +28 -5
  15. package/dist/compactSnapshotParser.js.map +1 -1
  16. package/dist/compactSnapshotWriter.d.ts.map +1 -1
  17. package/dist/compactSnapshotWriter.js +3 -1
  18. package/dist/compactSnapshotWriter.js.map +1 -1
  19. package/dist/createFile.d.ts.map +1 -1
  20. package/dist/createFile.js +1 -1
  21. package/dist/createFile.js.map +1 -1
  22. package/dist/createNewContainerOnExistingFile.d.ts.map +1 -1
  23. package/dist/createNewContainerOnExistingFile.js +2 -1
  24. package/dist/createNewContainerOnExistingFile.js.map +1 -1
  25. package/dist/createNewUtils.d.ts.map +1 -1
  26. package/dist/createNewUtils.js +3 -1
  27. package/dist/createNewUtils.js.map +1 -1
  28. package/dist/epochTracker.d.ts.map +1 -1
  29. package/dist/epochTracker.js +3 -3
  30. package/dist/epochTracker.js.map +1 -1
  31. package/dist/fetchSnapshot.d.ts +1 -1
  32. package/dist/fetchSnapshot.d.ts.map +1 -1
  33. package/dist/fetchSnapshot.js +8 -3
  34. package/dist/fetchSnapshot.js.map +1 -1
  35. package/dist/legacy.d.ts +1 -1
  36. package/dist/localOdspDriver/localOdspDeltaStorageService.d.ts.map +1 -1
  37. package/dist/localOdspDriver/localOdspDeltaStorageService.js +1 -0
  38. package/dist/localOdspDriver/localOdspDeltaStorageService.js.map +1 -1
  39. package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -1
  40. package/dist/odspDelayLoadedDeltaStream.js +2 -0
  41. package/dist/odspDelayLoadedDeltaStream.js.map +1 -1
  42. package/dist/odspDeltaStorageService.d.ts.map +1 -1
  43. package/dist/odspDeltaStorageService.js +4 -1
  44. package/dist/odspDeltaStorageService.js.map +1 -1
  45. package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
  46. package/dist/odspDocumentDeltaConnection.js +2 -0
  47. package/dist/odspDocumentDeltaConnection.js.map +1 -1
  48. package/dist/odspDocumentStorageManager.d.ts +1 -0
  49. package/dist/odspDocumentStorageManager.d.ts.map +1 -1
  50. package/dist/odspDocumentStorageManager.js +4 -3
  51. package/dist/odspDocumentStorageManager.js.map +1 -1
  52. package/dist/odspDocumentStorageServiceBase.d.ts.map +1 -1
  53. package/dist/odspDocumentStorageServiceBase.js +2 -0
  54. package/dist/odspDocumentStorageServiceBase.js.map +1 -1
  55. package/dist/odspDriverUrlResolver.d.ts.map +1 -1
  56. package/dist/odspDriverUrlResolver.js +2 -1
  57. package/dist/odspDriverUrlResolver.js.map +1 -1
  58. package/dist/odspSnapshotParser.d.ts.map +1 -1
  59. package/dist/odspSnapshotParser.js +5 -1
  60. package/dist/odspSnapshotParser.js.map +1 -1
  61. package/dist/odspSummaryUploadManager.d.ts.map +1 -1
  62. package/dist/odspSummaryUploadManager.js +2 -1
  63. package/dist/odspSummaryUploadManager.js.map +1 -1
  64. package/dist/odspUrlHelper.d.ts.map +1 -1
  65. package/dist/odspUrlHelper.js +5 -1
  66. package/dist/odspUrlHelper.js.map +1 -1
  67. package/dist/odspUtils.d.ts +3 -2
  68. package/dist/odspUtils.d.ts.map +1 -1
  69. package/dist/odspUtils.js +7 -3
  70. package/dist/odspUtils.js.map +1 -1
  71. package/dist/packageVersion.d.ts +1 -1
  72. package/dist/packageVersion.d.ts.map +1 -1
  73. package/dist/packageVersion.js +1 -1
  74. package/dist/packageVersion.js.map +1 -1
  75. package/dist/prefetchLatestSnapshot.d.ts.map +1 -1
  76. package/dist/prefetchLatestSnapshot.js +2 -2
  77. package/dist/prefetchLatestSnapshot.js.map +1 -1
  78. package/dist/public.d.ts +1 -1
  79. package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
  80. package/dist/zipItDataRepresentationUtils.js +9 -0
  81. package/dist/zipItDataRepresentationUtils.js.map +1 -1
  82. package/internal.d.ts +1 -1
  83. package/legacy.d.ts +1 -1
  84. package/lib/ReadBufferUtils.d.ts.map +1 -1
  85. package/lib/ReadBufferUtils.js +1 -0
  86. package/lib/ReadBufferUtils.js.map +1 -1
  87. package/lib/WriteBufferUtils.d.ts.map +1 -1
  88. package/lib/WriteBufferUtils.js +2 -0
  89. package/lib/WriteBufferUtils.js.map +1 -1
  90. package/lib/compactSnapshotParser.d.ts.map +1 -1
  91. package/lib/compactSnapshotParser.js +28 -5
  92. package/lib/compactSnapshotParser.js.map +1 -1
  93. package/lib/compactSnapshotWriter.d.ts.map +1 -1
  94. package/lib/compactSnapshotWriter.js +3 -1
  95. package/lib/compactSnapshotWriter.js.map +1 -1
  96. package/lib/createFile.d.ts.map +1 -1
  97. package/lib/createFile.js +3 -3
  98. package/lib/createFile.js.map +1 -1
  99. package/lib/createNewContainerOnExistingFile.d.ts.map +1 -1
  100. package/lib/createNewContainerOnExistingFile.js +3 -2
  101. package/lib/createNewContainerOnExistingFile.js.map +1 -1
  102. package/lib/createNewUtils.d.ts.map +1 -1
  103. package/lib/createNewUtils.js +3 -1
  104. package/lib/createNewUtils.js.map +1 -1
  105. package/lib/epochTracker.d.ts.map +1 -1
  106. package/lib/epochTracker.js +4 -4
  107. package/lib/epochTracker.js.map +1 -1
  108. package/lib/fetchSnapshot.d.ts +1 -1
  109. package/lib/fetchSnapshot.d.ts.map +1 -1
  110. package/lib/fetchSnapshot.js +8 -3
  111. package/lib/fetchSnapshot.js.map +1 -1
  112. package/lib/legacy.d.ts +1 -1
  113. package/lib/localOdspDriver/localOdspDeltaStorageService.d.ts.map +1 -1
  114. package/lib/localOdspDriver/localOdspDeltaStorageService.js +1 -0
  115. package/lib/localOdspDriver/localOdspDeltaStorageService.js.map +1 -1
  116. package/lib/odspDelayLoadedDeltaStream.d.ts.map +1 -1
  117. package/lib/odspDelayLoadedDeltaStream.js +2 -0
  118. package/lib/odspDelayLoadedDeltaStream.js.map +1 -1
  119. package/lib/odspDeltaStorageService.d.ts.map +1 -1
  120. package/lib/odspDeltaStorageService.js +4 -1
  121. package/lib/odspDeltaStorageService.js.map +1 -1
  122. package/lib/odspDocumentDeltaConnection.d.ts.map +1 -1
  123. package/lib/odspDocumentDeltaConnection.js +2 -0
  124. package/lib/odspDocumentDeltaConnection.js.map +1 -1
  125. package/lib/odspDocumentStorageManager.d.ts +1 -0
  126. package/lib/odspDocumentStorageManager.d.ts.map +1 -1
  127. package/lib/odspDocumentStorageManager.js +5 -4
  128. package/lib/odspDocumentStorageManager.js.map +1 -1
  129. package/lib/odspDocumentStorageServiceBase.d.ts.map +1 -1
  130. package/lib/odspDocumentStorageServiceBase.js +2 -0
  131. package/lib/odspDocumentStorageServiceBase.js.map +1 -1
  132. package/lib/odspDriverUrlResolver.d.ts.map +1 -1
  133. package/lib/odspDriverUrlResolver.js +2 -1
  134. package/lib/odspDriverUrlResolver.js.map +1 -1
  135. package/lib/odspSnapshotParser.d.ts.map +1 -1
  136. package/lib/odspSnapshotParser.js +5 -1
  137. package/lib/odspSnapshotParser.js.map +1 -1
  138. package/lib/odspSummaryUploadManager.d.ts.map +1 -1
  139. package/lib/odspSummaryUploadManager.js +2 -1
  140. package/lib/odspSummaryUploadManager.js.map +1 -1
  141. package/lib/odspUrlHelper.d.ts.map +1 -1
  142. package/lib/odspUrlHelper.js +5 -1
  143. package/lib/odspUrlHelper.js.map +1 -1
  144. package/lib/odspUtils.d.ts +3 -2
  145. package/lib/odspUtils.d.ts.map +1 -1
  146. package/lib/odspUtils.js +6 -3
  147. package/lib/odspUtils.js.map +1 -1
  148. package/lib/packageVersion.d.ts +1 -1
  149. package/lib/packageVersion.d.ts.map +1 -1
  150. package/lib/packageVersion.js +1 -1
  151. package/lib/packageVersion.js.map +1 -1
  152. package/lib/prefetchLatestSnapshot.d.ts.map +1 -1
  153. package/lib/prefetchLatestSnapshot.js +3 -3
  154. package/lib/prefetchLatestSnapshot.js.map +1 -1
  155. package/lib/public.d.ts +1 -1
  156. package/lib/zipItDataRepresentationUtils.d.ts.map +1 -1
  157. package/lib/zipItDataRepresentationUtils.js +9 -0
  158. package/lib/zipItDataRepresentationUtils.js.map +1 -1
  159. package/package.json +25 -35
  160. package/src/ReadBufferUtils.ts +2 -1
  161. package/src/WriteBufferUtils.ts +4 -2
  162. package/src/compactSnapshotParser.ts +41 -17
  163. package/src/compactSnapshotWriter.ts +4 -2
  164. package/src/createFile.ts +9 -1
  165. package/src/createNewContainerOnExistingFile.ts +16 -3
  166. package/src/createNewUtils.ts +5 -3
  167. package/src/epochTracker.ts +4 -3
  168. package/src/fetchSnapshot.ts +10 -3
  169. package/src/localOdspDriver/localOdspDeltaStorageService.ts +2 -1
  170. package/src/odspDelayLoadedDeltaStream.ts +4 -2
  171. package/src/odspDeltaStorageService.ts +4 -2
  172. package/src/odspDocumentDeltaConnection.ts +4 -2
  173. package/src/odspDocumentStorageManager.ts +18 -3
  174. package/src/odspDocumentStorageServiceBase.ts +4 -2
  175. package/src/odspDriverUrlResolver.ts +2 -1
  176. package/src/odspSnapshotParser.ts +8 -4
  177. package/src/odspSummaryUploadManager.ts +3 -2
  178. package/src/odspUrlHelper.ts +8 -4
  179. package/src/odspUtils.ts +13 -2
  180. package/src/packageVersion.ts +1 -1
  181. package/src/prefetchLatestSnapshot.ts +3 -4
  182. package/src/zipItDataRepresentationUtils.ts +18 -9
  183. package/tsconfig.json +0 -1
  184. package/api-extractor/api-extractor-lint-beta.esm.json +0 -5
  185. package/beta.d.ts +0 -11
  186. package/dist/beta.d.ts +0 -12
  187. package/lib/beta.d.ts +0 -12
@@ -1 +1 @@
1
- {"version":3,"file":"zipItDataRepresentationUtils.js","sourceRoot":"","sources":["../src/zipItDataRepresentationUtils.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\n/**\n * Data representation which is followed(zipIt Protocol) here is described in this document:\n * https://microsoft.sharepoint-df.com/:w:/t/ODSPFileStore/ER06b64K_XdDjEyAKl-UT60BJiId39SCVkYSyo_2pvH9gQ?e=KYQ0c5\n */\n\nimport { Uint8ArrayToArrayBuffer, Uint8ArrayToString } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { NonRetryableError } from \"@fluidframework/driver-utils/internal\";\nimport { OdspErrorTypes } from \"@fluidframework/odsp-driver-definitions/internal\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { ReadBuffer } from \"./ReadBufferUtils.js\";\nimport { measure } from \"./odspUtils.js\";\nimport { pkgVersion as driverVersion } from \"./packageVersion.js\";\n\n// https://onedrive.visualstudio.com/SharePoint%20Online/_git/SPO?path=/cobalt/Base/Property/BinaryEncodedPropertyReader.cs&version=GBmaster&_a=contents\n/**\n * Control codes used by tree serialization / decentralization code. Same as on server. These can be found on\n * filestore code on server too at above link.\n */\nexport enum MarkerCodes {\n\tBoolTrue = 11, // value = true\n\tBoolFalse = 12, // value = false\n\n\tStringEmpty = 13, // value = \"\"\n\tString8Length = 14, // unsigned-8-bit little-endian length, follows by UTF-8 bytes of length\n\tString16Length = 15, // unsigned-16-bit little-endian length, follows by UTF-8 bytes of length\n\tString32Length = 16, // unsigned-32-bit little-endian length, follows by UTF-8 bytes of length\n\n\tConstString8Id = 17, // unsigned-8-bit little-endian const string id follows\n\tConstString16Id = 18, // unsigned-16-bit little-endian const string id follows\n\tConstString32Id = 19, // unsigned-32-bit little-endian const string id follows\n\tConstStringDeclare = 20, // Code for declaring a const string with size <= 1 byte\n\tConstStringDeclareBig = 21, // Code for declaring a const string with size > 1 byte. It is represented in 4 bytes.\n\n\tInt0 = 1, // value = 0\n\tUInt8 = 3, // unsigned-8-bit little-endian follows\n\tUInt16 = 5, // unsigned-16-bit little-endian follows\n\tUInt32 = 7, // unsigned-32-bit little-endian follows\n\tUInt64 = 9, // unsigned-64-bit little-endian follows\n\tInt8 = 2, // signed-8-bit little-endian follows\n\tInt16 = 4, // signed-16-bit little-endian follows\n\tInt32 = 6, // signed-32-bit little-endian follows\n\tInt64 = 8, // signed-64-bit little-endian follows\n\n\tBinaryEmpty = 32, // value = byte[]\n\tBinarySingle8 = 33, // unsigned-8-bit little-endian length, follows by bytes of length\n\tBinarySingle16 = 34, // unsigned-16-bit little-endian length, follows by bytes of length\n\tBinarySingle32 = 35, // unsigned-32-bit little-endian length, follows by bytes of length\n\tBinarySingle64 = 36, // unsigned-64-bit little-endian length, follows by bytes of length\n}\n\n/**\n * Control codes used by tree serialization / decentralization code. They mark the start of sections.\n */\nexport enum MarkerCodesStart {\n\t\"list\" = 49,\n\t\"set\" = 51,\n}\n\n/**\n * Control codes used by tree serialization / decentralization code. They mark the end of sections.\n */\nexport enum MarkerCodesEnd {\n\t\"list\" = 50,\n\t\"set\" = 52,\n}\n\n/**\n * This contains mapping of Marker Codes to number of bytes in which the corresponding data\n * will be stored.\n */\nexport const codeToBytesMap = {\n\t// Integer code to bytes\n\t1: 0,\n\t2: 1,\n\t3: 1,\n\t4: 2,\n\t5: 2,\n\t6: 4,\n\t7: 4,\n\t8: 8,\n\t9: 8,\n\n\t// String code to Bytes\n\t13: 0,\n\t14: 1,\n\t15: 2,\n\t16: 4,\n\n\t17: 1,\n\t18: 2,\n\t19: 4,\n\n\t20: 1,\n\t21: 4,\n\n\t// Binary code to bytes\n\t32: 0,\n\t33: 1,\n\t34: 2,\n\t35: 4,\n\t36: 8,\n};\n\nexport function getValueSafely(map: { [index: number]: number }, key: number): number {\n\tconst val = map[key];\n\tassert(val !== undefined, 0x287 /* key must exist in the map */);\n\treturn val;\n}\n\nexport function getNodeProps(node: NodeCore): Record<string, NodeTypes> {\n\tconst res: Record<string, NodeTypes> = {};\n\tfor (const [keyNode, valueNode] of node.iteratePairs()) {\n\t\tconst id = getStringInstance(keyNode, \"keynode should be a string\");\n\t\tres[id] = valueNode;\n\t}\n\treturn res;\n}\n\nexport function iteratePairs<T>(it: IterableIterator<T>): IterableIterator<[T, T]> {\n\tconst res: IterableIterator<[T, T]> = {\n\t\tnext: () => {\n\t\t\tconst a = it.next();\n\t\t\tif (a.done) {\n\t\t\t\treturn { value: undefined, done: true };\n\t\t\t}\n\t\t\tconst b = it.next();\n\t\t\tassert(b.done !== true, 0x22b /* \"Should be a pair\" */);\n\t\t\treturn { value: [a.value, b.value], done: b.done };\n\t\t},\n\t\t[Symbol.iterator]: () => {\n\t\t\treturn res;\n\t\t},\n\t};\n\treturn res;\n}\n\n/**\n * Helper function that returns iterator from an object\n * @param obj - object that supports iteration\n */\nexport function iterate<T>(obj: {\n\t[Symbol.iterator]: () => IterableIterator<T>;\n}): IterableIterator<T> {\n\treturn obj[Symbol.iterator]();\n}\n\n/**\n * Base class to represent binary blob element.\n * Binary blob is one of three types supported as a leaf node of a tree.\n * Note: concrete implementations (derived classes) are not exposed from this module\n */\nexport abstract class BlobCore {\n\tpublic abstract get buffer(): Uint8Array;\n\tpublic abstract get arrayBuffer(): ArrayBufferLike;\n\n\t/**\n\t * Represents a blob.\n\t */\n\tconstructor() {}\n}\n\n/**\n * \"deep copy\" blob, holds to binary data passed in\n * It is called deep copy as a counter-part to BlobShallowCopy, which\n * is a reference to underlying binary stream (ReadBuffer).\n */\nclass BlobDeepCopy extends BlobCore {\n\t/**\n\t * Represents a deep copy of the blob.\n\t * @param data - Data array of the blob\n\t */\n\tconstructor(protected readonly data: Uint8Array) {\n\t\tsuper();\n\t}\n\n\tpublic get buffer(): Uint8Array {\n\t\treturn this.data;\n\t}\n\n\tpublic get arrayBuffer(): ArrayBufferLike {\n\t\treturn Uint8ArrayToArrayBuffer(this.buffer);\n\t}\n\n\tpublic static read(buffer: ReadBuffer, lengthLen: number): BlobCore {\n\t\tconst length = buffer.read(lengthLen);\n\t\tconst data = new Uint8Array(length);\n\t\tfor (let counter = 0; counter < length; counter++) {\n\t\t\tdata[counter] = buffer.read();\n\t\t}\n\t\treturn new BlobDeepCopy(data);\n\t}\n}\n\n/**\n * Shallow copy blob, keeps a reference to portion of ReadBuffer\n * it was constructed from. It takes much less memory compared to BlobDeepCopy\n */\nexport class BlobShallowCopy extends BlobCore {\n\t/**\n\t * Represents a shallow copy of the blob. It is not a separate blob, just reference to original blobs.\n\t * @param data - Data array of the blob\n\t * @param start - Start point of the blob in the buffer.\n\t * @param end - End point of the blob in the buffer.\n\t */\n\tconstructor(\n\t\tprotected data: Uint8Array,\n\t\tprotected start: number,\n\t\tprotected end: number,\n\t) {\n\t\tsuper();\n\t}\n\n\tpublic get buffer(): Uint8Array {\n\t\treturn this.data.subarray(this.start, this.end);\n\t}\n\n\t// Equivalent to Uint8ArrayToArrayBuffer(this.buffer)\n\tpublic get arrayBuffer(): ArrayBufferLike {\n\t\tconst offset = this.data.byteOffset;\n\t\treturn this.data.buffer.slice(this.start + offset, this.end + offset);\n\t}\n\n\tpublic static read(buffer: ReadBuffer, lengthLen: number): BlobCore {\n\t\tconst length = buffer.read(lengthLen);\n\t\tconst pos = buffer.pos;\n\t\tbuffer.skip(length);\n\t\treturn new BlobShallowCopy(buffer.buffer, pos, pos + length);\n\t}\n}\n\nexport const addStringProperty = (node: NodeCore, a: string, b: string): void => {\n\tnode.addDictionaryString(a);\n\tnode.addString(b);\n};\nexport const addDictionaryStringProperty = (node: NodeCore, a: string, b: string): void => {\n\tnode.addDictionaryString(a);\n\tnode.addString(b);\n};\nexport const addNumberProperty = (node: NodeCore, a: string, b: number): void => {\n\tnode.addDictionaryString(a);\n\tnode.addNumber(b);\n};\nexport const addBoolProperty = (node: NodeCore, a: string, b: boolean): void => {\n\tnode.addDictionaryString(a);\n\tnode.addBool(b);\n};\n\nexport interface IStringElement {\n\tcontent: string;\n\tdictionary: boolean;\n\t_stringElement: true;\n}\n\nexport interface IStringElementInternal extends Omit<IStringElement, \"content\"> {\n\tcontent?: string;\n\tstartPos: number;\n\tendPos: number;\n}\n\n/**\n * Three leaf types supported by tree:\n * 1. Node (sub-tree)\n * 2. binary blob\n * 3. integer\n * 4. boolean\n */\nexport type NodeTypes = NodeCore | BlobCore | number | boolean | IStringElement;\n\nexport type NodeCoreTypes = \"list\" | \"set\";\n\n/**\n * Node - node in the tree (non-leaf element of the tree)\n */\nexport class NodeCore {\n\t// It is an array of nodes.\n\tprivate readonly children: NodeTypes[] = [];\n\tpublic get nodes(): NodeTypes[] {\n\t\treturn this.children;\n\t}\n\n\tconstructor(public type: NodeCoreTypes = \"set\") {}\n\n\tpublic [Symbol.iterator](): IterableIterator<NodeTypes> {\n\t\treturn this.children[Symbol.iterator]();\n\t}\n\n\tpublic iteratePairs(): IterableIterator<[NodeTypes, NodeTypes]> {\n\t\tassert(this.length % 2 === 0, 0x22c /* \"reading pairs\" */);\n\t\treturn iteratePairs(iterate(this));\n\t}\n\n\tpublic get length(): number {\n\t\treturn this.children.length;\n\t}\n\n\tpublic get(index: number): NodeTypes {\n\t\treturn this.children[index];\n\t}\n\n\tpublic getString(index: number): string {\n\t\tconst node = this.children[index];\n\t\treturn getStringInstance(node, \"getString should return string\");\n\t}\n\n\tpublic getMaybeString(index: number): string | undefined {\n\t\tconst node = this.children[index];\n\t\treturn getMaybeStringInstance(node);\n\t}\n\n\tpublic getBlob(index: number): BlobCore {\n\t\tconst node = this.children[index];\n\t\tassertBlobCoreInstance(node, \"getBlob should return a blob\");\n\t\treturn node;\n\t}\n\n\tpublic getNode(index: number): NodeCore {\n\t\tconst node = this.children[index];\n\t\tassertNodeCoreInstance(node, \"getNode should return a node\");\n\t\treturn node;\n\t}\n\n\tpublic getNumber(index: number): number {\n\t\tconst node = this.children[index];\n\t\tassertNumberInstance(node, \"getNumber should return a number\");\n\t\treturn node;\n\t}\n\n\tpublic getBool(index: number): boolean {\n\t\tconst node = this.children[index];\n\t\tassertBoolInstance(node, \"getBool should return a boolean\");\n\t\treturn node;\n\t}\n\n\tpublic addNode(type?: NodeCoreTypes): NodeCore {\n\t\tconst node = new NodeCore(type);\n\t\tthis.children.push(node);\n\t\treturn node;\n\t}\n\n\tpublic addBlob(blob: Uint8Array): void {\n\t\tthis.children.push(new BlobDeepCopy(blob));\n\t}\n\n\tpublic addDictionaryString(payload: string): void {\n\t\tthis.children.push({\n\t\t\tcontent: payload,\n\t\t\tdictionary: true,\n\t\t\t_stringElement: true,\n\t\t});\n\t}\n\n\tpublic addString(payload: string): void {\n\t\tthis.children.push({\n\t\t\tcontent: payload,\n\t\t\tdictionary: false,\n\t\t\t_stringElement: true,\n\t\t});\n\t}\n\n\tpublic addNumber(payload: number | undefined): void {\n\t\tassert(Number.isInteger(payload), 0x231 /* \"Number should be an integer\" */);\n\t\tassert(\n\t\t\tpayload !== undefined && payload >= 0,\n\t\t\t0x232 /* \"Payload should not be negative\" */,\n\t\t);\n\t\tthis.children.push(payload);\n\t}\n\n\tpublic addBool(payload: boolean): void {\n\t\tthis.children.push(payload);\n\t}\n\n\t// Can we do more efficiently here, without extra objects somehow??\n\tprivate static readString(\n\t\tbuffer: ReadBuffer,\n\t\tcode: number,\n\t\tdictionary: boolean,\n\t): IStringElementInternal & IStringElement {\n\t\tconst lengthLen = getValueSafely(codeToBytesMap, code);\n\t\tconst length = buffer.read(lengthLen);\n\t\tconst startPos = buffer.pos;\n\t\tbuffer.skip(length);\n\t\tconst result: IStringElementInternal = {\n\t\t\t// Note: Setting here property 'content: undefined' makes code substantially slower!\n\t\t\tdictionary,\n\t\t\t_stringElement: true,\n\t\t\tstartPos,\n\t\t\tendPos: buffer.pos,\n\t\t};\n\n\t\t// We are lying here in terms of presence of `content` property.\n\t\t// This will be addressed at the bottom of NodeCore.load() by resolving all strings at once!\n\t\t// It's equivalent (but much slower!) to do it here via\n\t\t// result.content = Uint8ArrayToString(buffer.buffer.subarray(startPos, buffer.pos), \"utf-8\");\n\t\treturn result as IStringElementInternal & IStringElement;\n\t}\n\n\t/**\n\t * Load and parse the buffer into a tree.\n\t * @param buffer - buffer to read from.\n\t */\n\tprotected load(\n\t\tbuffer: ReadBuffer,\n\t\tlogger: ITelemetryLoggerExt,\n\t): {\n\t\tdurationStructure: number;\n\t\tdurationStrings: number;\n\t} {\n\t\tconst [stringsToResolve, durationStructure] = measure(() =>\n\t\t\tthis.loadStructure(buffer, logger),\n\t\t);\n\t\tconst [, durationStrings] = measure(() =>\n\t\t\tthis.loadStrings(buffer, stringsToResolve, logger),\n\t\t);\n\t\treturn { durationStructure, durationStrings };\n\t}\n\n\t/**\n\t * Load and parse the buffer into a tree.\n\t * @param buffer - buffer to read from.\n\t */\n\tprotected loadStructure(\n\t\tbuffer: ReadBuffer,\n\t\tlogger: ITelemetryLoggerExt,\n\t): IStringElementInternal[] {\n\t\tconst stack: NodeTypes[][] = [];\n\t\tconst stringsToResolve: IStringElementInternal[] = [];\n\t\tconst dictionary: IStringElement[] = [];\n\n\t\tlet children = this.children;\n\t\tfor (; !buffer.eof; ) {\n\t\t\tconst code = buffer.read();\n\t\t\tswitch (code) {\n\t\t\t\tcase MarkerCodesStart.list:\n\t\t\t\tcase MarkerCodesStart.set: {\n\t\t\t\t\tconst childValue = new NodeCore(code === MarkerCodesStart.set ? \"set\" : \"list\");\n\t\t\t\t\tchildren.push(childValue);\n\t\t\t\t\tstack.push(children);\n\t\t\t\t\tchildren = childValue.children;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.ConstStringDeclare:\n\t\t\t\tcase MarkerCodes.ConstStringDeclareBig: {\n\t\t\t\t\tconst stringId = buffer.read(getValueSafely(codeToBytesMap, code));\n\t\t\t\t\tconst constString = NodeCore.readString(buffer, code, true /* dictionary */);\n\t\t\t\t\tstringsToResolve.push(constString);\n\t\t\t\t\tdictionary[stringId] = constString;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.ConstString8Id:\n\t\t\t\tcase MarkerCodes.ConstString16Id:\n\t\t\t\tcase MarkerCodes.ConstString32Id: {\n\t\t\t\t\tconst stringId = buffer.read(getValueSafely(codeToBytesMap, code));\n\t\t\t\t\tconst content = dictionary[stringId];\n\t\t\t\t\tassert(content !== undefined, 0x3de /* const string not found */);\n\t\t\t\t\tchildren.push(content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.StringEmpty:\n\t\t\t\tcase MarkerCodes.String8Length:\n\t\t\t\tcase MarkerCodes.String16Length:\n\t\t\t\tcase MarkerCodes.String32Length: {\n\t\t\t\t\tconst str = NodeCore.readString(buffer, code, false /* dictionary */);\n\t\t\t\t\tstringsToResolve.push(str);\n\t\t\t\t\tchildren.push(str);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.BinaryEmpty:\n\t\t\t\tcase MarkerCodes.BinarySingle8:\n\t\t\t\tcase MarkerCodes.BinarySingle16:\n\t\t\t\tcase MarkerCodes.BinarySingle32:\n\t\t\t\tcase MarkerCodes.BinarySingle64: {\n\t\t\t\t\tchildren.push(BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code)));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// If integer is 0.\n\t\t\t\tcase MarkerCodes.Int0: {\n\t\t\t\t\tchildren.push(0);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.UInt8:\n\t\t\t\tcase MarkerCodes.UInt16:\n\t\t\t\tcase MarkerCodes.UInt32:\n\t\t\t\tcase MarkerCodes.UInt64:\n\t\t\t\tcase MarkerCodes.Int8:\n\t\t\t\tcase MarkerCodes.Int16:\n\t\t\t\tcase MarkerCodes.Int32:\n\t\t\t\tcase MarkerCodes.Int64: {\n\t\t\t\t\tchildren.push(buffer.read(getValueSafely(codeToBytesMap, code)));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.BoolTrue: {\n\t\t\t\t\tchildren.push(true);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.BoolFalse: {\n\t\t\t\t\tchildren.push(false);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodesEnd.list:\n\t\t\t\tcase MarkerCodesEnd.set: {\n\t\t\t\t\t// Note: We are not checking that end marker matches start marker.\n\t\t\t\t\t// I.e. that we do not have a case where we start a 'list' but end with a 'set'\n\t\t\t\t\t// Checking it would require more state tracking that seems not very useful, given\n\t\t\t\t\t// our code does not care.\n\t\t\t\t\tchildren = stack.pop()!;\n\n\t\t\t\t\t// To my surprise, checking children !== undefined adds measurable cost!\n\t\t\t\t\t// We will rely on children.push() crashing in case of mismatch, and check below\n\t\t\t\t\t// (outside of the loop)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tthrow new Error(`Invalid code: ${code}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This also ensures that stack.length === 0.\n\t\tassert(children === this.children, 0x3e7 /* Unpaired start/end list/set markers! */);\n\n\t\treturn stringsToResolve;\n\t}\n\n\tprivate loadStrings(\n\t\tbuffer: ReadBuffer,\n\t\tstringsToResolve: IStringElementInternal[],\n\t\tlogger: ITelemetryLoggerExt,\n\t): void {\n\t\t/**\n\t\t * Process all the strings at once!\n\t\t */\n\t\tlet length = 0;\n\t\tfor (const el of stringsToResolve) {\n\t\t\tlength += el.endPos - el.startPos + 1;\n\t\t}\n\t\tconst stringBuffer = new Uint8Array(length);\n\n\t\tlength = 0;\n\t\tconst input = buffer.buffer;\n\t\tassert(input.byteOffset === 0, 0x3e8 /* code below assumes no offset */);\n\n\t\tfor (const el of stringsToResolve) {\n\t\t\tfor (let it = el.startPos; it < el.endPos; it++) {\n\t\t\t\tstringBuffer[length] = input[it];\n\t\t\t\tlength++;\n\t\t\t}\n\t\t\tstringBuffer[length] = 0;\n\t\t\tlength++;\n\t\t}\n\t\tassert(length === stringBuffer.length, 0x418 /* properly encoded */);\n\n\t\tconst result = Uint8ArrayToString(stringBuffer, \"utf8\").split(String.fromCodePoint(0));\n\t\tif (result.length === stringsToResolve.length + 1) {\n\t\t\t// All is good, we expect all the cases to get here\n\t\t\tfor (let i = 0; i < stringsToResolve.length; i++) {\n\t\t\t\tstringsToResolve[i].content = result[i];\n\t\t\t}\n\t\t} else {\n\t\t\t// String content has \\0 chars!\n\t\t\t// Recovery code\n\t\t\tlogger.sendErrorEvent({ eventName: \"StringParsingError\" });\n\t\t\tfor (const el of stringsToResolve) {\n\t\t\t\tassert(\n\t\t\t\t\tel.content === Uint8ArrayToString(input.subarray(el.startPos, el.endPos), \"utf8\"),\n\t\t\t\t\t0x3ea /* test */,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * TreeBuilder - Root of the tree.\n * Provides loading and serialization capabilities.\n */\nexport class TreeBuilder extends NodeCore {\n\tstatic load(\n\t\tbuffer: ReadBuffer,\n\t\tlogger: ITelemetryLoggerExt,\n\t): {\n\t\tbuilder: TreeBuilder;\n\t\ttelemetryProps: {\n\t\t\tdurationStructure: number;\n\t\t\tdurationStrings: number;\n\t\t};\n\t} {\n\t\tconst builder = new TreeBuilder();\n\t\tconst telemetryProps = builder.load(buffer, logger);\n\t\tassert(buffer.eof, 0x233 /* \"Unexpected data at the end of buffer\" */);\n\t\treturn { builder, telemetryProps };\n\t}\n}\n\nexport function getMaybeStringInstance(node: NodeTypes): string | undefined {\n\tconst maybeString = node as IStringElement;\n\tif (maybeString._stringElement) {\n\t\treturn maybeString.content;\n\t}\n}\n\nexport function getStringInstance(node: NodeTypes, message: string): string {\n\tconst maybeString = node as IStringElement;\n\tif (maybeString._stringElement) {\n\t\treturn maybeString.content;\n\t}\n\tthrowBufferParseException(node, \"BlobCore\", message);\n}\n\nexport function assertBlobCoreInstance(\n\tnode: NodeTypes,\n\tmessage: string,\n): asserts node is BlobCore {\n\tif (node instanceof BlobCore) {\n\t\treturn;\n\t}\n\tthrowBufferParseException(node, \"BlobCore\", message);\n}\n\nexport function assertNodeCoreInstance(\n\tnode: NodeTypes,\n\tmessage: string,\n): asserts node is NodeCore {\n\tif (node instanceof NodeCore) {\n\t\treturn;\n\t}\n\tthrowBufferParseException(node, \"NodeCore\", message);\n}\n\nexport function assertNumberInstance(\n\tnode: NodeTypes,\n\tmessage: string,\n): asserts node is number {\n\tif (typeof node === \"number\") {\n\t\treturn;\n\t}\n\tthrowBufferParseException(node, \"Number\", message);\n}\n\nexport function assertBoolInstance(node: NodeTypes, message: string): asserts node is boolean {\n\tif (typeof node === \"boolean\") {\n\t\treturn;\n\t}\n\tthrowBufferParseException(node, \"Boolean\", message);\n}\n\nfunction throwBufferParseException(\n\tnode: NodeTypes,\n\texpectedNodeType: NodeType,\n\tmessage: string,\n): never {\n\tthrow new NonRetryableError(\n\t\t`Buffer parsing exception: ${message}`,\n\t\tOdspErrorTypes.incorrectServerResponse,\n\t\t{\n\t\t\tnodeType: getNodeType(node),\n\t\t\texpectedNodeType,\n\t\t\tdriverVersion,\n\t\t},\n\t);\n}\n\nfunction getNodeType(value: NodeTypes): NodeType {\n\tif (typeof value === \"number\") {\n\t\treturn \"Number\";\n\t} else if (value instanceof BlobCore) {\n\t\treturn \"BlobCore\";\n\t} else if (value instanceof NodeCore) {\n\t\treturn \"NodeCore\";\n\t} else if (typeof value === \"boolean\") {\n\t\treturn \"Boolean\";\n\t} else if (value._stringElement) {\n\t\treturn \"String\";\n\t}\n\treturn \"UnknownType\";\n}\n\ntype NodeType = \"Number\" | \"BlobCore\" | \"NodeCore\" | \"Boolean\" | \"UnknownType\" | \"String\";\n"]}
1
+ {"version":3,"file":"zipItDataRepresentationUtils.js","sourceRoot":"","sources":["../src/zipItDataRepresentationUtils.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\n/**\n * Data representation which is followed(zipIt Protocol) here is described in this document:\n * https://microsoft.sharepoint-df.com/:w:/t/ODSPFileStore/ER06b64K_XdDjEyAKl-UT60BJiId39SCVkYSyo_2pvH9gQ?e=KYQ0c5\n */\n\nimport { Uint8ArrayToArrayBuffer, Uint8ArrayToString } from \"@fluid-internal/client-utils\";\nimport { assert } from \"@fluidframework/core-utils/internal\";\nimport { NonRetryableError } from \"@fluidframework/driver-utils/internal\";\nimport { OdspErrorTypes } from \"@fluidframework/odsp-driver-definitions/internal\";\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils/internal\";\n\nimport { ReadBuffer } from \"./ReadBufferUtils.js\";\nimport { measure } from \"./odspUtils.js\";\nimport { pkgVersion as driverVersion } from \"./packageVersion.js\";\n\n// https://onedrive.visualstudio.com/SharePoint%20Online/_git/SPO?path=/cobalt/Base/Property/BinaryEncodedPropertyReader.cs&version=GBmaster&_a=contents\n/**\n * Control codes used by tree serialization / decentralization code. Same as on server. These can be found on\n * filestore code on server too at above link.\n */\nexport enum MarkerCodes {\n\tBoolTrue = 11, // value = true\n\tBoolFalse = 12, // value = false\n\n\tStringEmpty = 13, // value = \"\"\n\tString8Length = 14, // unsigned-8-bit little-endian length, follows by UTF-8 bytes of length\n\tString16Length = 15, // unsigned-16-bit little-endian length, follows by UTF-8 bytes of length\n\tString32Length = 16, // unsigned-32-bit little-endian length, follows by UTF-8 bytes of length\n\n\tConstString8Id = 17, // unsigned-8-bit little-endian const string id follows\n\tConstString16Id = 18, // unsigned-16-bit little-endian const string id follows\n\tConstString32Id = 19, // unsigned-32-bit little-endian const string id follows\n\tConstStringDeclare = 20, // Code for declaring a const string with size <= 1 byte\n\tConstStringDeclareBig = 21, // Code for declaring a const string with size > 1 byte. It is represented in 4 bytes.\n\n\tInt0 = 1, // value = 0\n\tUInt8 = 3, // unsigned-8-bit little-endian follows\n\tUInt16 = 5, // unsigned-16-bit little-endian follows\n\tUInt32 = 7, // unsigned-32-bit little-endian follows\n\tUInt64 = 9, // unsigned-64-bit little-endian follows\n\tInt8 = 2, // signed-8-bit little-endian follows\n\tInt16 = 4, // signed-16-bit little-endian follows\n\tInt32 = 6, // signed-32-bit little-endian follows\n\tInt64 = 8, // signed-64-bit little-endian follows\n\n\tBinaryEmpty = 32, // value = byte[]\n\tBinarySingle8 = 33, // unsigned-8-bit little-endian length, follows by bytes of length\n\tBinarySingle16 = 34, // unsigned-16-bit little-endian length, follows by bytes of length\n\tBinarySingle32 = 35, // unsigned-32-bit little-endian length, follows by bytes of length\n\tBinarySingle64 = 36, // unsigned-64-bit little-endian length, follows by bytes of length\n}\n\n/**\n * Control codes used by tree serialization / decentralization code. They mark the start of sections.\n */\nexport enum MarkerCodesStart {\n\t\"list\" = 49,\n\t\"set\" = 51,\n}\n\n/**\n * Control codes used by tree serialization / decentralization code. They mark the end of sections.\n */\nexport enum MarkerCodesEnd {\n\t\"list\" = 50,\n\t\"set\" = 52,\n}\n\n/**\n * This contains mapping of Marker Codes to number of bytes in which the corresponding data\n * will be stored.\n */\nexport const codeToBytesMap = {\n\t// Integer code to bytes\n\t1: 0,\n\t2: 1,\n\t3: 1,\n\t4: 2,\n\t5: 2,\n\t6: 4,\n\t7: 4,\n\t8: 8,\n\t9: 8,\n\n\t// String code to Bytes\n\t13: 0,\n\t14: 1,\n\t15: 2,\n\t16: 4,\n\n\t17: 1,\n\t18: 2,\n\t19: 4,\n\n\t20: 1,\n\t21: 4,\n\n\t// Binary code to bytes\n\t32: 0,\n\t33: 1,\n\t34: 2,\n\t35: 4,\n\t36: 8,\n};\n\nexport function getValueSafely(map: { [index: number]: number }, key: number): number {\n\tconst val = map[key];\n\tassert(val !== undefined, 0x287 /* key must exist in the map */);\n\treturn val;\n}\n\nexport function getNodeProps(node: NodeCore): Record<string, NodeTypes> {\n\tconst res: Record<string, NodeTypes> = {};\n\tfor (const [keyNode, valueNode] of node.iteratePairs()) {\n\t\tconst id = getStringInstance(keyNode, \"keynode should be a string\");\n\t\tres[id] = valueNode;\n\t}\n\treturn res;\n}\n\nexport function iteratePairs<T>(it: IterableIterator<T>): IterableIterator<[T, T]> {\n\tconst res: IterableIterator<[T, T]> = {\n\t\tnext: () => {\n\t\t\tconst a = it.next();\n\t\t\tif (a.done) {\n\t\t\t\treturn { value: undefined, done: true };\n\t\t\t}\n\t\t\tconst b = it.next();\n\t\t\tassert(b.done !== true, 0x22b /* \"Should be a pair\" */);\n\t\t\treturn { value: [a.value, b.value], done: b.done };\n\t\t},\n\t\t[Symbol.iterator]: () => {\n\t\t\treturn res;\n\t\t},\n\t};\n\treturn res;\n}\n\n/**\n * Helper function that returns iterator from an object\n * @param obj - object that supports iteration\n */\nexport function iterate<T>(obj: {\n\t[Symbol.iterator]: () => IterableIterator<T>;\n}): IterableIterator<T> {\n\treturn obj[Symbol.iterator]();\n}\n\n/**\n * Base class to represent binary blob element.\n * Binary blob is one of three types supported as a leaf node of a tree.\n * Note: concrete implementations (derived classes) are not exposed from this module\n */\nexport abstract class BlobCore {\n\tpublic abstract get buffer(): Uint8Array;\n\tpublic abstract get arrayBuffer(): ArrayBufferLike;\n\n\t/**\n\t * Represents a blob.\n\t */\n\tconstructor() {}\n}\n\n/**\n * \"deep copy\" blob, holds to binary data passed in\n * It is called deep copy as a counter-part to BlobShallowCopy, which\n * is a reference to underlying binary stream (ReadBuffer).\n */\nclass BlobDeepCopy extends BlobCore {\n\t/**\n\t * Represents a deep copy of the blob.\n\t * @param data - Data array of the blob\n\t */\n\tconstructor(protected readonly data: Uint8Array) {\n\t\tsuper();\n\t}\n\n\tpublic get buffer(): Uint8Array {\n\t\treturn this.data;\n\t}\n\n\tpublic get arrayBuffer(): ArrayBufferLike {\n\t\treturn Uint8ArrayToArrayBuffer(this.buffer);\n\t}\n\n\tpublic static read(buffer: ReadBuffer, lengthLen: number): BlobCore {\n\t\tconst length = buffer.read(lengthLen);\n\t\tconst data = new Uint8Array(length);\n\t\tfor (let counter = 0; counter < length; counter++) {\n\t\t\tdata[counter] = buffer.read();\n\t\t}\n\t\treturn new BlobDeepCopy(data);\n\t}\n}\n\n/**\n * Shallow copy blob, keeps a reference to portion of ReadBuffer\n * it was constructed from. It takes much less memory compared to BlobDeepCopy\n */\nexport class BlobShallowCopy extends BlobCore {\n\t/**\n\t * Represents a shallow copy of the blob. It is not a separate blob, just reference to original blobs.\n\t * @param data - Data array of the blob\n\t * @param start - Start point of the blob in the buffer.\n\t * @param end - End point of the blob in the buffer.\n\t */\n\tconstructor(\n\t\tprotected data: Uint8Array,\n\t\tprotected start: number,\n\t\tprotected end: number,\n\t) {\n\t\tsuper();\n\t}\n\n\tpublic get buffer(): Uint8Array {\n\t\treturn this.data.subarray(this.start, this.end);\n\t}\n\n\t// Equivalent to Uint8ArrayToArrayBuffer(this.buffer)\n\tpublic get arrayBuffer(): ArrayBufferLike {\n\t\tconst offset = this.data.byteOffset;\n\t\treturn this.data.buffer.slice(this.start + offset, this.end + offset);\n\t}\n\n\tpublic static read(buffer: ReadBuffer, lengthLen: number): BlobCore {\n\t\tconst length = buffer.read(lengthLen);\n\t\tconst pos = buffer.pos;\n\t\tbuffer.skip(length);\n\t\treturn new BlobShallowCopy(buffer.buffer, pos, pos + length);\n\t}\n}\n\nexport const addStringProperty = (node: NodeCore, a: string, b: string): void => {\n\tnode.addDictionaryString(a);\n\tnode.addString(b);\n};\nexport const addDictionaryStringProperty = (node: NodeCore, a: string, b: string): void => {\n\tnode.addDictionaryString(a);\n\tnode.addString(b);\n};\nexport const addNumberProperty = (node: NodeCore, a: string, b: number): void => {\n\tnode.addDictionaryString(a);\n\tnode.addNumber(b);\n};\nexport const addBoolProperty = (node: NodeCore, a: string, b: boolean): void => {\n\tnode.addDictionaryString(a);\n\tnode.addBool(b);\n};\n\nexport interface IStringElement {\n\tcontent: string;\n\tdictionary: boolean;\n\t_stringElement: true;\n}\n\nexport interface IStringElementInternal extends Omit<IStringElement, \"content\"> {\n\tcontent?: string;\n\tstartPos: number;\n\tendPos: number;\n}\n\n/**\n * Three leaf types supported by tree:\n * 1. Node (sub-tree)\n * 2. binary blob\n * 3. integer\n * 4. boolean\n */\nexport type NodeTypes = NodeCore | BlobCore | number | boolean | IStringElement;\n\nexport type NodeCoreTypes = \"list\" | \"set\";\n\n/**\n * Node - node in the tree (non-leaf element of the tree)\n */\nexport class NodeCore {\n\t// It is an array of nodes.\n\tprivate readonly children: NodeTypes[] = [];\n\tpublic get nodes(): NodeTypes[] {\n\t\treturn this.children;\n\t}\n\n\tconstructor(public type: NodeCoreTypes = \"set\") {}\n\n\tpublic [Symbol.iterator](): IterableIterator<NodeTypes> {\n\t\treturn this.children[Symbol.iterator]();\n\t}\n\n\tpublic iteratePairs(): IterableIterator<[NodeTypes, NodeTypes]> {\n\t\tassert(this.length % 2 === 0, 0x22c /* \"reading pairs\" */);\n\t\treturn iteratePairs(iterate(this));\n\t}\n\n\tpublic get length(): number {\n\t\treturn this.children.length;\n\t}\n\n\tpublic get(index: number): NodeTypes {\n\t\t// TODO Why are we non null asserting here?\n\t\treturn this.children[index]!;\n\t}\n\n\tpublic getString(index: number): string {\n\t\t// TODO Why are we non null asserting here?\n\t\tconst node = this.children[index]!;\n\t\treturn getStringInstance(node, \"getString should return string\");\n\t}\n\n\tpublic getMaybeString(index: number): string | undefined {\n\t\t// TODO Why are we non null asserting here?\n\t\tconst node = this.children[index]!;\n\t\treturn getMaybeStringInstance(node);\n\t}\n\n\tpublic getBlob(index: number): BlobCore {\n\t\t// TODO Why are we non null asserting here?\n\t\tconst node = this.children[index]!;\n\t\tassertBlobCoreInstance(node, \"getBlob should return a blob\");\n\t\treturn node;\n\t}\n\n\tpublic getNode(index: number): NodeCore {\n\t\t// TODO Why are we non null asserting here?\n\t\tconst node = this.children[index]!;\n\t\tassertNodeCoreInstance(node, \"getNode should return a node\");\n\t\treturn node;\n\t}\n\n\tpublic getNumber(index: number): number {\n\t\t// TODO Why are we non null asserting here?\n\t\tconst node = this.children[index]!;\n\t\tassertNumberInstance(node, \"getNumber should return a number\");\n\t\treturn node;\n\t}\n\n\tpublic getBool(index: number): boolean {\n\t\t// TODO Why are we non null asserting here?\n\t\tconst node = this.children[index]!;\n\t\tassertBoolInstance(node, \"getBool should return a boolean\");\n\t\treturn node;\n\t}\n\n\tpublic addNode(type?: NodeCoreTypes): NodeCore {\n\t\tconst node = new NodeCore(type);\n\t\tthis.children.push(node);\n\t\treturn node;\n\t}\n\n\tpublic addBlob(blob: Uint8Array): void {\n\t\tthis.children.push(new BlobDeepCopy(blob));\n\t}\n\n\tpublic addDictionaryString(payload: string): void {\n\t\tthis.children.push({\n\t\t\tcontent: payload,\n\t\t\tdictionary: true,\n\t\t\t_stringElement: true,\n\t\t});\n\t}\n\n\tpublic addString(payload: string): void {\n\t\tthis.children.push({\n\t\t\tcontent: payload,\n\t\t\tdictionary: false,\n\t\t\t_stringElement: true,\n\t\t});\n\t}\n\n\tpublic addNumber(payload: number | undefined): void {\n\t\tassert(Number.isInteger(payload), 0x231 /* \"Number should be an integer\" */);\n\t\tassert(\n\t\t\tpayload !== undefined && payload >= 0,\n\t\t\t0x232 /* \"Payload should not be negative\" */,\n\t\t);\n\t\tthis.children.push(payload);\n\t}\n\n\tpublic addBool(payload: boolean): void {\n\t\tthis.children.push(payload);\n\t}\n\n\t// Can we do more efficiently here, without extra objects somehow??\n\tprivate static readString(\n\t\tbuffer: ReadBuffer,\n\t\tcode: number,\n\t\tdictionary: boolean,\n\t): IStringElementInternal & IStringElement {\n\t\tconst lengthLen = getValueSafely(codeToBytesMap, code);\n\t\tconst length = buffer.read(lengthLen);\n\t\tconst startPos = buffer.pos;\n\t\tbuffer.skip(length);\n\t\tconst result: IStringElementInternal = {\n\t\t\t// Note: Setting here property 'content: undefined' makes code substantially slower!\n\t\t\tdictionary,\n\t\t\t_stringElement: true,\n\t\t\tstartPos,\n\t\t\tendPos: buffer.pos,\n\t\t};\n\n\t\t// We are lying here in terms of presence of `content` property.\n\t\t// This will be addressed at the bottom of NodeCore.load() by resolving all strings at once!\n\t\t// It's equivalent (but much slower!) to do it here via\n\t\t// result.content = Uint8ArrayToString(buffer.buffer.subarray(startPos, buffer.pos), \"utf-8\");\n\t\treturn result as IStringElementInternal & IStringElement;\n\t}\n\n\t/**\n\t * Load and parse the buffer into a tree.\n\t * @param buffer - buffer to read from.\n\t */\n\tprotected load(\n\t\tbuffer: ReadBuffer,\n\t\tlogger: ITelemetryLoggerExt,\n\t): {\n\t\tdurationStructure: number;\n\t\tdurationStrings: number;\n\t} {\n\t\tconst [stringsToResolve, durationStructure] = measure(() =>\n\t\t\tthis.loadStructure(buffer, logger),\n\t\t);\n\t\tconst [, durationStrings] = measure(() =>\n\t\t\tthis.loadStrings(buffer, stringsToResolve, logger),\n\t\t);\n\t\treturn { durationStructure, durationStrings };\n\t}\n\n\t/**\n\t * Load and parse the buffer into a tree.\n\t * @param buffer - buffer to read from.\n\t */\n\tprotected loadStructure(\n\t\tbuffer: ReadBuffer,\n\t\tlogger: ITelemetryLoggerExt,\n\t): IStringElementInternal[] {\n\t\tconst stack: NodeTypes[][] = [];\n\t\tconst stringsToResolve: IStringElementInternal[] = [];\n\t\tconst dictionary: IStringElement[] = [];\n\n\t\tlet children = this.children;\n\t\tfor (; !buffer.eof; ) {\n\t\t\tconst code = buffer.read();\n\t\t\tswitch (code) {\n\t\t\t\tcase MarkerCodesStart.list:\n\t\t\t\tcase MarkerCodesStart.set: {\n\t\t\t\t\tconst childValue = new NodeCore(code === MarkerCodesStart.set ? \"set\" : \"list\");\n\t\t\t\t\tchildren.push(childValue);\n\t\t\t\t\tstack.push(children);\n\t\t\t\t\tchildren = childValue.children;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.ConstStringDeclare:\n\t\t\t\tcase MarkerCodes.ConstStringDeclareBig: {\n\t\t\t\t\tconst stringId = buffer.read(getValueSafely(codeToBytesMap, code));\n\t\t\t\t\tconst constString = NodeCore.readString(buffer, code, true /* dictionary */);\n\t\t\t\t\tstringsToResolve.push(constString);\n\t\t\t\t\tdictionary[stringId] = constString;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.ConstString8Id:\n\t\t\t\tcase MarkerCodes.ConstString16Id:\n\t\t\t\tcase MarkerCodes.ConstString32Id: {\n\t\t\t\t\tconst stringId = buffer.read(getValueSafely(codeToBytesMap, code));\n\t\t\t\t\tconst content = dictionary[stringId];\n\t\t\t\t\tassert(content !== undefined, 0x3de /* const string not found */);\n\t\t\t\t\tchildren.push(content);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.StringEmpty:\n\t\t\t\tcase MarkerCodes.String8Length:\n\t\t\t\tcase MarkerCodes.String16Length:\n\t\t\t\tcase MarkerCodes.String32Length: {\n\t\t\t\t\tconst str = NodeCore.readString(buffer, code, false /* dictionary */);\n\t\t\t\t\tstringsToResolve.push(str);\n\t\t\t\t\tchildren.push(str);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.BinaryEmpty:\n\t\t\t\tcase MarkerCodes.BinarySingle8:\n\t\t\t\tcase MarkerCodes.BinarySingle16:\n\t\t\t\tcase MarkerCodes.BinarySingle32:\n\t\t\t\tcase MarkerCodes.BinarySingle64: {\n\t\t\t\t\tchildren.push(BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code)));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\t// If integer is 0.\n\t\t\t\tcase MarkerCodes.Int0: {\n\t\t\t\t\tchildren.push(0);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.UInt8:\n\t\t\t\tcase MarkerCodes.UInt16:\n\t\t\t\tcase MarkerCodes.UInt32:\n\t\t\t\tcase MarkerCodes.UInt64:\n\t\t\t\tcase MarkerCodes.Int8:\n\t\t\t\tcase MarkerCodes.Int16:\n\t\t\t\tcase MarkerCodes.Int32:\n\t\t\t\tcase MarkerCodes.Int64: {\n\t\t\t\t\tchildren.push(buffer.read(getValueSafely(codeToBytesMap, code)));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.BoolTrue: {\n\t\t\t\t\tchildren.push(true);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodes.BoolFalse: {\n\t\t\t\t\tchildren.push(false);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tcase MarkerCodesEnd.list:\n\t\t\t\tcase MarkerCodesEnd.set: {\n\t\t\t\t\t// Note: We are not checking that end marker matches start marker.\n\t\t\t\t\t// I.e. that we do not have a case where we start a 'list' but end with a 'set'\n\t\t\t\t\t// Checking it would require more state tracking that seems not very useful, given\n\t\t\t\t\t// our code does not care.\n\t\t\t\t\tchildren = stack.pop()!;\n\n\t\t\t\t\t// To my surprise, checking children !== undefined adds measurable cost!\n\t\t\t\t\t// We will rely on children.push() crashing in case of mismatch, and check below\n\t\t\t\t\t// (outside of the loop)\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tdefault: {\n\t\t\t\t\tthrow new Error(`Invalid code: ${code}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// This also ensures that stack.length === 0.\n\t\tassert(children === this.children, 0x3e7 /* Unpaired start/end list/set markers! */);\n\n\t\treturn stringsToResolve;\n\t}\n\n\tprivate loadStrings(\n\t\tbuffer: ReadBuffer,\n\t\tstringsToResolve: IStringElementInternal[],\n\t\tlogger: ITelemetryLoggerExt,\n\t): void {\n\t\t/**\n\t\t * Process all the strings at once!\n\t\t */\n\t\tlet length = 0;\n\t\tfor (const el of stringsToResolve) {\n\t\t\tlength += el.endPos - el.startPos + 1;\n\t\t}\n\t\tconst stringBuffer = new Uint8Array(length);\n\n\t\tlength = 0;\n\t\tconst input = buffer.buffer;\n\t\tassert(input.byteOffset === 0, 0x3e8 /* code below assumes no offset */);\n\n\t\tfor (const el of stringsToResolve) {\n\t\t\tfor (let it = el.startPos; it < el.endPos; it++) {\n\t\t\t\t// Non null asserting here because we are iterating over startPos\n\t\t\t\tstringBuffer[length] = input[it]!;\n\t\t\t\tlength++;\n\t\t\t}\n\t\t\tstringBuffer[length] = 0;\n\t\t\tlength++;\n\t\t}\n\t\tassert(length === stringBuffer.length, 0x418 /* properly encoded */);\n\n\t\tconst result = Uint8ArrayToString(stringBuffer, \"utf8\").split(String.fromCodePoint(0));\n\t\tif (result.length === stringsToResolve.length + 1) {\n\t\t\t// All is good, we expect all the cases to get here\n\t\t\tfor (let i = 0; i < stringsToResolve.length; i++) {\n\t\t\t\t// Non null asserting here because we are iterating over stringsToResolve\n\t\t\t\tstringsToResolve[i]!.content = result[i];\n\t\t\t}\n\t\t} else {\n\t\t\t// String content has \\0 chars!\n\t\t\t// Recovery code\n\t\t\tlogger.sendErrorEvent({ eventName: \"StringParsingError\" });\n\t\t\tfor (const el of stringsToResolve) {\n\t\t\t\tassert(\n\t\t\t\t\tel.content === Uint8ArrayToString(input.subarray(el.startPos, el.endPos), \"utf8\"),\n\t\t\t\t\t0x3ea /* test */,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * TreeBuilder - Root of the tree.\n * Provides loading and serialization capabilities.\n */\nexport class TreeBuilder extends NodeCore {\n\tstatic load(\n\t\tbuffer: ReadBuffer,\n\t\tlogger: ITelemetryLoggerExt,\n\t): {\n\t\tbuilder: TreeBuilder;\n\t\ttelemetryProps: {\n\t\t\tdurationStructure: number;\n\t\t\tdurationStrings: number;\n\t\t};\n\t} {\n\t\tconst builder = new TreeBuilder();\n\t\tconst telemetryProps = builder.load(buffer, logger);\n\t\tassert(buffer.eof, 0x233 /* \"Unexpected data at the end of buffer\" */);\n\t\treturn { builder, telemetryProps };\n\t}\n}\n\nexport function getMaybeStringInstance(node: NodeTypes): string | undefined {\n\tconst maybeString = node as IStringElement;\n\tif (maybeString._stringElement) {\n\t\treturn maybeString.content;\n\t}\n}\n\nexport function getStringInstance(node: NodeTypes, message: string): string {\n\tconst maybeString = node as IStringElement;\n\tif (maybeString._stringElement) {\n\t\treturn maybeString.content;\n\t}\n\tthrowBufferParseException(node, \"BlobCore\", message);\n}\n\nexport function assertBlobCoreInstance(\n\tnode: NodeTypes,\n\tmessage: string,\n): asserts node is BlobCore {\n\tif (node instanceof BlobCore) {\n\t\treturn;\n\t}\n\tthrowBufferParseException(node, \"BlobCore\", message);\n}\n\nexport function assertNodeCoreInstance(\n\tnode: NodeTypes,\n\tmessage: string,\n): asserts node is NodeCore {\n\tif (node instanceof NodeCore) {\n\t\treturn;\n\t}\n\tthrowBufferParseException(node, \"NodeCore\", message);\n}\n\nexport function assertNumberInstance(\n\tnode: NodeTypes,\n\tmessage: string,\n): asserts node is number {\n\tif (typeof node === \"number\") {\n\t\treturn;\n\t}\n\tthrowBufferParseException(node, \"Number\", message);\n}\n\nexport function assertBoolInstance(node: NodeTypes, message: string): asserts node is boolean {\n\tif (typeof node === \"boolean\") {\n\t\treturn;\n\t}\n\tthrowBufferParseException(node, \"Boolean\", message);\n}\n\nfunction throwBufferParseException(\n\tnode: NodeTypes,\n\texpectedNodeType: NodeType,\n\tmessage: string,\n): never {\n\tthrow new NonRetryableError(\n\t\t`Buffer parsing exception: ${message}`,\n\t\tOdspErrorTypes.incorrectServerResponse,\n\t\t{\n\t\t\tnodeType: getNodeType(node),\n\t\t\texpectedNodeType,\n\t\t\tdriverVersion,\n\t\t},\n\t);\n}\n\nfunction getNodeType(value: NodeTypes): NodeType {\n\tif (typeof value === \"number\") {\n\t\treturn \"Number\";\n\t} else if (value instanceof BlobCore) {\n\t\treturn \"BlobCore\";\n\t} else if (value instanceof NodeCore) {\n\t\treturn \"NodeCore\";\n\t} else if (typeof value === \"boolean\") {\n\t\treturn \"Boolean\";\n\t} else if (value._stringElement) {\n\t\treturn \"String\";\n\t}\n\treturn \"UnknownType\";\n}\n\ntype NodeType = \"Number\" | \"BlobCore\" | \"NodeCore\" | \"Boolean\" | \"UnknownType\" | \"String\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/odsp-driver",
3
- "version": "2.1.0-276985",
3
+ "version": "2.1.0",
4
4
  "description": "Socket storage implementation for SPO and ODC",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": {
@@ -23,16 +23,6 @@
23
23
  "default": "./dist/index.js"
24
24
  }
25
25
  },
26
- "./beta": {
27
- "import": {
28
- "types": "./lib/beta.d.ts",
29
- "default": "./lib/index.js"
30
- },
31
- "require": {
32
- "types": "./dist/beta.d.ts",
33
- "default": "./dist/index.js"
34
- }
35
- },
36
26
  "./legacy": {
37
27
  "import": {
38
28
  "types": "./lib/legacy.d.ts",
@@ -77,28 +67,28 @@
77
67
  "temp-directory": "nyc/.nyc_output"
78
68
  },
79
69
  "dependencies": {
80
- "@fluid-internal/client-utils": "2.1.0-276985",
81
- "@fluidframework/core-interfaces": "2.1.0-276985",
82
- "@fluidframework/core-utils": "2.1.0-276985",
83
- "@fluidframework/driver-base": "2.1.0-276985",
84
- "@fluidframework/driver-definitions": "2.1.0-276985",
85
- "@fluidframework/driver-utils": "2.1.0-276985",
86
- "@fluidframework/odsp-doclib-utils": "2.1.0-276985",
87
- "@fluidframework/odsp-driver-definitions": "2.1.0-276985",
88
- "@fluidframework/telemetry-utils": "2.1.0-276985",
70
+ "@fluid-internal/client-utils": "~2.1.0",
71
+ "@fluidframework/core-interfaces": "~2.1.0",
72
+ "@fluidframework/core-utils": "~2.1.0",
73
+ "@fluidframework/driver-base": "~2.1.0",
74
+ "@fluidframework/driver-definitions": "~2.1.0",
75
+ "@fluidframework/driver-utils": "~2.1.0",
76
+ "@fluidframework/odsp-doclib-utils": "~2.1.0",
77
+ "@fluidframework/odsp-driver-definitions": "~2.1.0",
78
+ "@fluidframework/telemetry-utils": "~2.1.0",
89
79
  "node-fetch": "^2.6.9",
90
80
  "socket.io-client": "^4.7.3",
91
81
  "uuid": "^9.0.0"
92
82
  },
93
83
  "devDependencies": {
94
84
  "@arethetypeswrong/cli": "^0.15.2",
95
- "@biomejs/biome": "^1.7.3",
96
- "@fluid-internal/mocha-test-setup": "2.1.0-276985",
97
- "@fluid-tools/build-cli": "^0.39.0",
85
+ "@biomejs/biome": "~1.8.3",
86
+ "@fluid-internal/mocha-test-setup": "~2.1.0",
87
+ "@fluid-tools/build-cli": "^0.41.0",
98
88
  "@fluidframework/build-common": "^2.0.3",
99
- "@fluidframework/build-tools": "^0.39.0",
89
+ "@fluidframework/build-tools": "^0.41.0",
100
90
  "@fluidframework/eslint-config-fluid": "^5.3.0",
101
- "@fluidframework/odsp-driver-previous": "npm:@fluidframework/odsp-driver@2.0.0-rc.5.0.0",
91
+ "@fluidframework/odsp-driver-previous": "npm:@fluidframework/odsp-driver@2.0.0",
102
92
  "@microsoft/api-extractor": "^7.45.1",
103
93
  "@types/mocha": "^9.1.1",
104
94
  "@types/node": "^18.19.0",
@@ -127,36 +117,36 @@
127
117
  "api-extractor:commonjs": "flub generate entrypoints --outDir ./dist",
128
118
  "api-extractor:esnext": "flub generate entrypoints --outDir ./lib --node10TypeCompat",
129
119
  "build": "fluid-build . --task build",
120
+ "build:api-reports": "concurrently \"npm:build:api-reports:*\"",
121
+ "build:api-reports:current": "api-extractor run --local --config api-extractor/api-extractor.current.json",
122
+ "build:api-reports:legacy": "api-extractor run --local --config api-extractor/api-extractor.legacy.json",
130
123
  "build:commonjs": "fluid-build . --task commonjs",
131
124
  "build:compile": "fluid-build . --task compile",
132
- "build:docs": "concurrently \"npm:build:docs:*\"",
133
- "build:docs:current": "api-extractor run --local",
134
- "build:docs:legacy": "api-extractor run --local --config api-extractor/api-extractor.legacy.json",
125
+ "build:docs": "api-extractor run --local",
135
126
  "build:esnext": "tsc --project ./tsconfig.json",
136
127
  "build:genver": "gen-version",
137
128
  "build:test": "npm run build:test:esm && npm run build:test:cjs",
138
129
  "build:test:cjs": "fluid-tsc commonjs --project ./src/test/tsconfig.cjs.json",
139
130
  "build:test:esm": "tsc --project ./src/test/tsconfig.json",
140
131
  "check:are-the-types-wrong": "attw --pack .",
141
- "check:biome": "biome check . --formatter-enabled=true",
132
+ "check:biome": "biome check .",
142
133
  "check:exports": "concurrently \"npm:check:exports:*\"",
143
134
  "check:exports:bundle-release-tags": "api-extractor run --config api-extractor/api-extractor-lint-bundle.json",
144
- "check:exports:cjs:beta": "api-extractor run --config api-extractor/api-extractor-lint-beta.cjs.json",
145
135
  "check:exports:cjs:legacy": "api-extractor run --config api-extractor/api-extractor-lint-legacy.cjs.json",
146
136
  "check:exports:cjs:public": "api-extractor run --config api-extractor/api-extractor-lint-public.cjs.json",
147
- "check:exports:esm:beta": "api-extractor run --config api-extractor/api-extractor-lint-beta.esm.json",
148
137
  "check:exports:esm:legacy": "api-extractor run --config api-extractor/api-extractor-lint-legacy.esm.json",
149
138
  "check:exports:esm:public": "api-extractor run --config api-extractor/api-extractor-lint-public.esm.json",
150
139
  "check:format": "npm run check:biome",
151
140
  "check:prettier": "prettier --check . --cache --ignore-path ../../../.prettierignore",
152
- "ci:build:docs": "concurrently \"npm:ci:build:docs:*\"",
153
- "ci:build:docs:current": "api-extractor run",
154
- "ci:build:docs:legacy": "api-extractor run --config api-extractor/api-extractor.legacy.json",
141
+ "ci:build:api-reports": "concurrently \"npm:ci:build:api-reports:*\"",
142
+ "ci:build:api-reports:current": "api-extractor run --config api-extractor/api-extractor.current.json",
143
+ "ci:build:api-reports:legacy": "api-extractor run --config api-extractor/api-extractor.legacy.json",
144
+ "ci:build:docs": "api-extractor run",
155
145
  "clean": "rimraf --glob dist lib \"*.d.ts\" \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
156
146
  "eslint": "eslint --format stylish src",
157
147
  "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
158
148
  "format": "npm run format:biome",
159
- "format:biome": "biome check . --formatter-enabled=true --apply",
149
+ "format:biome": "biome check . --write",
160
150
  "format:prettier": "prettier --write . --cache --ignore-path ../../../.prettierignore",
161
151
  "lint": "fluid-build . --task lint",
162
152
  "lint:fix": "fluid-build . --task eslint:fix --task format",
@@ -47,7 +47,8 @@ export class ReadBuffer {
47
47
  let length = lengthArg;
48
48
  while (length > 0) {
49
49
  assert(!this.eof, 0x223 /* "unexpected end of buffer" */);
50
- res += this.data[this.index] * multiplier;
50
+ // TODO Why are we non null asserting here?
51
+ res += this.data[this.index]! * multiplier;
51
52
  this.index++;
52
53
  multiplier *= 256;
53
54
  length--;
@@ -32,7 +32,8 @@ export class WriteBuffer {
32
32
  let index = 0;
33
33
  const oldData = this.data;
34
34
  while (index < length) {
35
- newData[index] = oldData[index];
35
+ // TODO Why are we non null asserting here?
36
+ newData[index] = oldData[index]!;
36
37
  index++;
37
38
  }
38
39
  this.data = newData;
@@ -252,7 +253,8 @@ function serializeNodeCore(
252
253
  buffer.write(child, len);
253
254
  }
254
255
  } else if (typeof child === "boolean") {
255
- buffer.write(boolToCodeMap[child ? 1 : 0]);
256
+ // TODO Why are we non null asserting here?
257
+ buffer.write(boolToCodeMap[child ? 1 : 0]!);
256
258
  } else {
257
259
  assert(child._stringElement, 0x3dd /* Unsupported node type */);
258
260
  if (child.dictionary) {
@@ -70,8 +70,10 @@ function readBlobSection(node: NodeTypes): {
70
70
  */
71
71
  slowBlobStructureCount += 1;
72
72
  const records = getNodeProps(blob);
73
- assertBlobCoreInstance(records.data, "data should be of BlobCore type");
74
- const id = getStringInstance(records.id, "blob id should be string");
73
+ // TODO why are we non null asserting here?
74
+ assertBlobCoreInstance(records.data!, "data should be of BlobCore type");
75
+ // TODO why are we non null asserting here?
76
+ const id = getStringInstance(records.id!, "blob id should be string");
75
77
  blobContents.set(id, records.data.arrayBuffer);
76
78
  }
77
79
  }
@@ -86,8 +88,10 @@ function readOpsSection(node: NodeTypes): ISequencedDocumentMessage[] {
86
88
  assertNodeCoreInstance(node, "Deltas should be of type NodeCore");
87
89
  const ops: ISequencedDocumentMessage[] = [];
88
90
  const records = getNodeProps(node);
89
- assertNumberInstance(records.firstSequenceNumber, "Seq number should be a number");
90
- assertNodeCoreInstance(records.deltas, "Deltas should be a Node");
91
+ // TODO Why are we non null asserting here?
92
+ assertNumberInstance(records.firstSequenceNumber!, "Seq number should be a number");
93
+ // TODO Why are we non null asserting here?
94
+ assertNodeCoreInstance(records.deltas!, "Deltas should be a Node");
91
95
  for (let i = 0; i < records.deltas.length; ++i) {
92
96
  // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
93
97
  ops.push(JSON.parse(records.deltas.getString(i)));
@@ -96,7 +100,8 @@ function readOpsSection(node: NodeTypes): ISequencedDocumentMessage[] {
96
100
  // when there are no ops. So just make the code resilient to that bug. Service has also
97
101
  // fixed that bug.
98
102
  assert(
99
- ops.length === 0 || records.firstSequenceNumber.valueOf() === ops[0].sequenceNumber,
103
+ // Non null asserting here because of the length check
104
+ ops.length === 0 || records.firstSequenceNumber.valueOf() === ops[0]!.sequenceNumber,
100
105
  0x280 /* "Validate first op seq number" */,
101
106
  );
102
107
  return ops;
@@ -109,8 +114,10 @@ function readOpsSection(node: NodeTypes): ISequencedDocumentMessage[] {
109
114
  function readTreeSection(node: NodeCore): {
110
115
  snapshotTree: ISnapshotTree;
111
116
  slowTreeStructureCount: number;
117
+ treeStructureCountWithGroupId: number;
112
118
  } {
113
119
  let slowTreeStructureCount = 0;
120
+ let treeStructureCountWithGroupId = 0;
114
121
  const trees: Record<string, ISnapshotTree> = {};
115
122
  const snapshotTree: ISnapshotTree = {
116
123
  blobs: {},
@@ -141,6 +148,7 @@ function readTreeSection(node: NodeCore): {
141
148
  const result = readTreeSection(treeNode.getNode(3));
142
149
  trees[treeNode.getString(1)] = result.snapshotTree;
143
150
  slowTreeStructureCount += result.slowTreeStructureCount;
151
+ treeStructureCountWithGroupId += result.treeStructureCountWithGroupId;
144
152
  continue;
145
153
  }
146
154
  // "name": <node name>
@@ -173,6 +181,7 @@ function readTreeSection(node: NodeCore): {
173
181
  const result = readTreeSection(treeNode.getNode(5));
174
182
  trees[treeNode.getString(1)] = result.snapshotTree;
175
183
  slowTreeStructureCount += result.slowTreeStructureCount;
184
+ treeStructureCountWithGroupId += result.treeStructureCountWithGroupId;
176
185
  assert(treeNode.getBool(3), 0x3db /* Unreferenced if present should be true */);
177
186
  snapshotTree.unreferenced = true;
178
187
  continue;
@@ -188,7 +197,7 @@ function readTreeSection(node: NodeCore): {
188
197
  /**
189
198
  * More generalized workflow
190
199
  */
191
- slowTreeStructureCount += 1;
200
+ slowTreeStructureCount++;
192
201
  const records = getNodeProps(treeNode);
193
202
 
194
203
  if (records.unreferenced !== undefined) {
@@ -197,7 +206,8 @@ function readTreeSection(node: NodeCore): {
197
206
  snapshotTree.unreferenced = true;
198
207
  }
199
208
 
200
- const path = getStringInstance(records.name, "Path name should be string");
209
+ // TODO Why are we non null asserting here?
210
+ const path = getStringInstance(records.name!, "Path name should be string");
201
211
  if (records.value !== undefined) {
202
212
  snapshotTree.blobs[path] = getStringInstance(
203
213
  records.value,
@@ -210,14 +220,17 @@ function readTreeSection(node: NodeCore): {
210
220
  trees[path] = result.snapshotTree;
211
221
  if (records.groupId !== undefined) {
212
222
  const groupId = getStringInstance(records.groupId, "groupId should be a string");
213
- trees[path].groupId = groupId;
223
+ // Non null asserting since trees[path] is already created
224
+ trees[path]!.groupId = groupId;
225
+ treeStructureCountWithGroupId++;
214
226
  }
215
227
  slowTreeStructureCount += result.slowTreeStructureCount;
228
+ treeStructureCountWithGroupId += result.treeStructureCountWithGroupId;
216
229
  } else {
217
230
  trees[path] = { blobs: {}, trees: {} };
218
231
  }
219
232
  }
220
- return { snapshotTree, slowTreeStructureCount };
233
+ return { snapshotTree, slowTreeStructureCount, treeStructureCountWithGroupId };
221
234
  }
222
235
 
223
236
  /**
@@ -228,19 +241,25 @@ function readSnapshotSection(node: NodeTypes): {
228
241
  sequenceNumber: number;
229
242
  snapshotTree: ISnapshotTree;
230
243
  slowTreeStructureCount: number;
244
+ treeStructureCountWithGroupId: number;
231
245
  } {
232
246
  assertNodeCoreInstance(node, "Snapshot should be of type NodeCore");
233
247
  const records = getNodeProps(node);
234
248
 
235
- assertNodeCoreInstance(records.treeNodes, "TreeNodes should be of type NodeCore");
236
- assertNumberInstance(records.sequenceNumber, "sequenceNumber should be of type number");
237
- const { snapshotTree, slowTreeStructureCount } = readTreeSection(records.treeNodes);
238
- snapshotTree.id = getStringInstance(records.id, "snapshotId should be string");
249
+ // TODO Why are we non null asserting here?
250
+ assertNodeCoreInstance(records.treeNodes!, "TreeNodes should be of type NodeCore");
251
+ // TODO Why are we non null asserting here?
252
+ assertNumberInstance(records.sequenceNumber!, "sequenceNumber should be of type number");
253
+ const { snapshotTree, slowTreeStructureCount, treeStructureCountWithGroupId } =
254
+ readTreeSection(records.treeNodes);
255
+ // TODO Why are we non null asserting here?
256
+ snapshotTree.id = getStringInstance(records.id!, "snapshotId should be string");
239
257
  const sequenceNumber = records.sequenceNumber.valueOf();
240
258
  return {
241
259
  sequenceNumber,
242
260
  snapshotTree,
243
261
  slowTreeStructureCount,
262
+ treeStructureCountWithGroupId,
244
263
  };
245
264
  }
246
265
 
@@ -260,8 +279,10 @@ export function parseCompactSnapshotResponse(
260
279
 
261
280
  const records = getNodeProps(root);
262
281
 
263
- const mrv = getStringInstance(records.mrv, "minReadVersion should be string");
264
- const cv = getStringInstance(records.cv, "createVersion should be string");
282
+ // TODO Why are we non null asserting here?
283
+ const mrv = getStringInstance(records.mrv!, "minReadVersion should be string");
284
+ // TODO Why are we non null asserting here?
285
+ const cv = getStringInstance(records.cv!, "createVersion should be string");
265
286
  if (records.lsn !== undefined) {
266
287
  assertNumberInstance(records.lsn, "lsn should be a number");
267
288
  }
@@ -280,9 +301,11 @@ export function parseCompactSnapshotResponse(
280
301
  );
281
302
 
282
303
  const [snapshot, durationSnapshotTree] = measure(() =>
283
- readSnapshotSection(records.snapshot),
304
+ // TODO Why are we non null asserting here?
305
+ readSnapshotSection(records.snapshot!),
284
306
  );
285
- const [blobContents, durationBlobs] = measure(() => readBlobSection(records.blobs));
307
+ // TODO Why are we non null asserting here?
308
+ const [blobContents, durationBlobs] = measure(() => readBlobSection(records.blobs!));
286
309
 
287
310
  return {
288
311
  ...snapshot,
@@ -296,6 +319,7 @@ export function parseCompactSnapshotResponse(
296
319
  durationBlobs,
297
320
  slowTreeStructureCount: snapshot.slowTreeStructureCount,
298
321
  slowBlobStructureCount: blobContents.slowBlobStructureCount,
322
+ treeStructureCountWithGroupId: snapshot.treeStructureCountWithGroupId,
299
323
  },
300
324
  };
301
325
  }
@@ -130,7 +130,8 @@ function writeSnapshotSection(
130
130
  function writeOpsSection(rootNode: NodeCore, ops: ISequencedDocumentMessage[]): void {
131
131
  let firstSequenceNumber: number | undefined;
132
132
  if (ops.length > 0) {
133
- firstSequenceNumber = ops[0].sequenceNumber;
133
+ // Non null asserting here because of the length check above
134
+ firstSequenceNumber = ops[0]!.sequenceNumber;
134
135
  }
135
136
  if (firstSequenceNumber !== undefined) {
136
137
  rootNode.addDictionaryString("deltas");
@@ -162,7 +163,8 @@ export function convertToCompactSnapshot(snapshotContents: ISnapshot): Uint8Arra
162
163
  if (latestSequenceNumber === undefined) {
163
164
  latestSequenceNumber =
164
165
  snapshotContents.ops.length > 0
165
- ? snapshotContents.ops[snapshotContents.ops.length - 1].sequenceNumber
166
+ ? // Non null asserting here because of the length check above
167
+ snapshotContents.ops[snapshotContents.ops.length - 1]!.sequenceNumber
166
168
  : snapshotContents.sequenceNumber;
167
169
  }
168
170
 
package/src/createFile.ts CHANGED
@@ -16,6 +16,7 @@ import {
16
16
  } from "@fluidframework/odsp-driver-definitions/internal";
17
17
  import {
18
18
  ITelemetryLoggerExt,
19
+ loggerToMonitoringContext,
19
20
  PerformanceEvent,
20
21
  } from "@fluidframework/telemetry-utils/internal";
21
22
 
@@ -36,6 +37,7 @@ import {
36
37
  buildOdspShareLinkReqParams,
37
38
  createCacheSnapshotKey,
38
39
  getWithRetryForTokenRefresh,
40
+ snapshotWithLoadingGroupIdSupported,
39
41
  } from "./odspUtils.js";
40
42
  import { pkgVersion as driverVersion } from "./packageVersion.js";
41
43
  import { runWithRetry } from "./retryUtils.js";
@@ -110,7 +112,13 @@ export async function createNewFluidFile(
110
112
  summaryHandle,
111
113
  );
112
114
  // caching the converted summary
113
- await epochTracker.put(createCacheSnapshotKey(odspResolvedUrl), snapshot);
115
+ await epochTracker.put(
116
+ createCacheSnapshotKey(
117
+ odspResolvedUrl,
118
+ snapshotWithLoadingGroupIdSupported(loggerToMonitoringContext(logger).config),
119
+ ),
120
+ snapshot,
121
+ );
114
122
  }
115
123
  return odspResolvedUrl;
116
124
  }
@@ -11,7 +11,10 @@ import {
11
11
  IOdspResolvedUrl,
12
12
  InstrumentedStorageTokenFetcher,
13
13
  } from "@fluidframework/odsp-driver-definitions/internal";
14
- import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils/internal";
14
+ import {
15
+ ITelemetryLoggerExt,
16
+ loggerToMonitoringContext,
17
+ } from "@fluidframework/telemetry-utils/internal";
15
18
 
16
19
  import { IWriteSummaryResponse } from "./contracts.js";
17
20
  import { ClpCompliantAppHeader } from "./contractsPublic.js";
@@ -24,7 +27,11 @@ import { createOdspUrl } from "./createOdspUrl.js";
24
27
  import { EpochTracker } from "./epochTracker.js";
25
28
  import { OdspDriverUrlResolver } from "./odspDriverUrlResolver.js";
26
29
  import { getApiRoot } from "./odspUrlHelper.js";
27
- import { IExistingFileInfo, createCacheSnapshotKey } from "./odspUtils.js";
30
+ import {
31
+ IExistingFileInfo,
32
+ createCacheSnapshotKey,
33
+ snapshotWithLoadingGroupIdSupported,
34
+ } from "./odspUtils.js";
28
35
 
29
36
  /**
30
37
  * Creates a new Fluid container on an existing file.
@@ -87,7 +94,13 @@ export async function createNewContainerOnExistingFile(
87
94
  summaryHandle,
88
95
  );
89
96
  // caching the converted summary
90
- await epochTracker.put(createCacheSnapshotKey(odspResolvedUrl), snapshot);
97
+ await epochTracker.put(
98
+ createCacheSnapshotKey(
99
+ odspResolvedUrl,
100
+ snapshotWithLoadingGroupIdSupported(loggerToMonitoringContext(logger).config),
101
+ ),
102
+ snapshot,
103
+ );
91
104
  }
92
105
 
93
106
  return odspResolvedUrl;
@@ -72,7 +72,8 @@ function convertCreateNewSummaryTreeToTreeAndBlobsCore(
72
72
  };
73
73
  const keys = Object.keys(summary.tree);
74
74
  for (const key of keys) {
75
- const summaryObject = summary.tree[key];
75
+ // Non null asserting for now this should change to Object.entries
76
+ const summaryObject = summary.tree[key]!;
76
77
 
77
78
  switch (summaryObject.type) {
78
79
  case SummaryType.Tree: {
@@ -149,8 +150,9 @@ function convertSummaryToSnapshotTreeForCreateNew(summary: ISummaryTree): IOdspS
149
150
 
150
151
  const keys = Object.keys(summary.tree);
151
152
  for (const key of keys) {
152
- assert(!key.includes("/"), "id should not include slashes");
153
- const summaryObject = summary.tree[key];
153
+ assert(!key.includes("/"), 0x9cc /* id should not include slashes */);
154
+ // Non null asserting for now this should change to Object.entries
155
+ const summaryObject = summary.tree[key]!;
154
156
 
155
157
  let value: OdspSummaryTreeValue;
156
158
  // Tracks if an entry is unreferenced. Currently, only tree entries can be marked as unreferenced. If the