@itwin/core-bentley 5.5.0-dev.1 → 5.5.0-dev.2

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 (81) hide show
  1. package/lib/cjs/AccessToken.js.map +1 -1
  2. package/lib/cjs/Assert.js.map +1 -1
  3. package/lib/cjs/BeEvent.js.map +1 -1
  4. package/lib/cjs/BeSQLite.js.map +1 -1
  5. package/lib/cjs/BentleyError.js.map +1 -1
  6. package/lib/cjs/BentleyLoggerCategory.js.map +1 -1
  7. package/lib/cjs/ByteStream.js.map +1 -1
  8. package/lib/cjs/ClassUtils.js.map +1 -1
  9. package/lib/cjs/Compare.js.map +1 -1
  10. package/lib/cjs/CompressedId64Set.js.map +1 -1
  11. package/lib/cjs/Dictionary.js.map +1 -1
  12. package/lib/cjs/Disposable.js.map +1 -1
  13. package/lib/cjs/Expect.js.map +1 -1
  14. package/lib/cjs/Id.js.map +1 -1
  15. package/lib/cjs/IndexMap.js.map +1 -1
  16. package/lib/cjs/JsonSchema.js.map +1 -1
  17. package/lib/cjs/JsonUtils.js.map +1 -1
  18. package/lib/cjs/LRUMap.js.map +1 -1
  19. package/lib/cjs/Logger.js.map +1 -1
  20. package/lib/cjs/ObservableSet.js.map +1 -1
  21. package/lib/cjs/OneAtATimeAction.js.map +1 -1
  22. package/lib/cjs/OrderedId64Iterable.js.map +1 -1
  23. package/lib/cjs/OrderedSet.js.map +1 -1
  24. package/lib/cjs/PriorityQueue.js.map +1 -1
  25. package/lib/cjs/ProcessDetector.js.map +1 -1
  26. package/lib/cjs/SortedArray.js.map +1 -1
  27. package/lib/cjs/StatusCategory.js.map +1 -1
  28. package/lib/cjs/StringUtils.js.map +1 -1
  29. package/lib/cjs/Time.js.map +1 -1
  30. package/lib/cjs/Tracing.js.map +1 -1
  31. package/lib/cjs/TupleKeyedMap.js.map +1 -1
  32. package/lib/cjs/TypedArrayBuilder.js.map +1 -1
  33. package/lib/cjs/UnexpectedErrors.js.map +1 -1
  34. package/lib/cjs/UtilityTypes.js.map +1 -1
  35. package/lib/cjs/YieldManager.js.map +1 -1
  36. package/lib/cjs/core-bentley.js.map +1 -1
  37. package/lib/cjs/internal/BeSQLiteInternal.js.map +1 -1
  38. package/lib/cjs/internal/RepositoryStatus.js.map +1 -1
  39. package/lib/cjs/internal/cross-package.js.map +1 -1
  40. package/lib/cjs/partitionArray.js.map +1 -1
  41. package/lib/esm/AccessToken.js.map +1 -1
  42. package/lib/esm/Assert.js.map +1 -1
  43. package/lib/esm/BeEvent.js.map +1 -1
  44. package/lib/esm/BeSQLite.js.map +1 -1
  45. package/lib/esm/BentleyError.js.map +1 -1
  46. package/lib/esm/BentleyLoggerCategory.js.map +1 -1
  47. package/lib/esm/ByteStream.js.map +1 -1
  48. package/lib/esm/ClassUtils.js.map +1 -1
  49. package/lib/esm/Compare.js.map +1 -1
  50. package/lib/esm/CompressedId64Set.js.map +1 -1
  51. package/lib/esm/Dictionary.js.map +1 -1
  52. package/lib/esm/Disposable.js.map +1 -1
  53. package/lib/esm/Expect.js.map +1 -1
  54. package/lib/esm/Id.js.map +1 -1
  55. package/lib/esm/IndexMap.js.map +1 -1
  56. package/lib/esm/JsonSchema.js.map +1 -1
  57. package/lib/esm/JsonUtils.js.map +1 -1
  58. package/lib/esm/LRUMap.js.map +1 -1
  59. package/lib/esm/Logger.js.map +1 -1
  60. package/lib/esm/ObservableSet.js.map +1 -1
  61. package/lib/esm/OneAtATimeAction.js.map +1 -1
  62. package/lib/esm/OrderedId64Iterable.js.map +1 -1
  63. package/lib/esm/OrderedSet.js.map +1 -1
  64. package/lib/esm/PriorityQueue.js.map +1 -1
  65. package/lib/esm/ProcessDetector.js.map +1 -1
  66. package/lib/esm/SortedArray.js.map +1 -1
  67. package/lib/esm/StatusCategory.js.map +1 -1
  68. package/lib/esm/StringUtils.js.map +1 -1
  69. package/lib/esm/Time.js.map +1 -1
  70. package/lib/esm/Tracing.js.map +1 -1
  71. package/lib/esm/TupleKeyedMap.js.map +1 -1
  72. package/lib/esm/TypedArrayBuilder.js.map +1 -1
  73. package/lib/esm/UnexpectedErrors.js.map +1 -1
  74. package/lib/esm/UtilityTypes.js.map +1 -1
  75. package/lib/esm/YieldManager.js.map +1 -1
  76. package/lib/esm/core-bentley.js.map +1 -1
  77. package/lib/esm/internal/BeSQLiteInternal.js.map +1 -1
  78. package/lib/esm/internal/RepositoryStatus.js.map +1 -1
  79. package/lib/esm/internal/cross-package.js.map +1 -1
  80. package/lib/esm/partitionArray.js.map +1 -1
  81. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ByteStream.js","sourceRoot":"","sources":["../../src/ByteStream.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,IAAI,EAAc,MAAM,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,OAAO,UAAU;IACJ,KAAK,CAAW;IAChB,WAAW,CAAS;IAC7B,OAAO,GAAW,CAAC,CAAC;IAE5B;;;;;;;;;;;;OAYG;IACH,YAAoB,MAAuC,EAAE,OAAoD;QAC/G,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;YAC1E,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,cAAc,CAAC,KAAiB;QAC5C,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QACzC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,eAAe,CAAC,MAAuC,EAAE,OAAoD;QACzH,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,yCAAyC;IACzC,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAC/B,CAAC;IAED,0FAA0F;IAC1F,IAAW,eAAe;QACxB,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,IAAW,UAAU;QACnB,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC;IACrC,CAAC;IAED,sEAAsE;IACtE,IAAW,MAAM,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IACpD,IAAW,MAAM,CAAC,GAAW;QAC3B,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7B,CAAC;IAED,sEAAsE;IAC/D,OAAO,CAAC,QAAgB;QAC7B,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC;IAC5B,CAAC;IAED,6EAA6E;IACtE,MAAM,CAAC,QAAgB;QAC5B,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,GAAG,CAAC;YAC5B,OAAO,KAAK,CAAC;QAEf,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,sEAAsE;IAC/D,KAAK,KAAW,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IAEzC,0FAA0F;IACnF,SAAS,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACzF,6FAA6F;IACtF,UAAU,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,6FAA6F;IACtF,UAAU,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACjG,0FAA0F;IACnF,SAAS,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/F,iGAAiG;IAC1F,WAAW,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,iGAAiG;IAC1F,WAAW,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACnG,wIAAwI;IACjI,QAAQ,KAAiB,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;IACnG,6FAA6F;IACtF,UAAU,KAAa,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7G;;OAEG;IACI,SAAS,CAAC,QAAgB;QAC/B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACzF,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,qGAAqG;IAC9F,SAAS,CAAC,OAAe,EAAE,QAAgB;QAChD,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAChF,CAAC;IAED,0HAA0H;IACnH,WAAW,CAAC,UAAkB;QACnC,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAC9F,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,0CAA0C;IAC1C,IAAW,WAAW,KAAsC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/E,IAAI,CAAC,QAAgB,EAAE,IAAgC;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,MAAM,CAAC;IAChB,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\nimport { assert } from \"./Assert\";\r\nimport { Id64, Id64String } from \"./Id\";\r\n\r\n/** Allows the contents of an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)\r\n * to be consumed sequentially using methods to extract\r\n * data of a particular type from the bytes beginning at the current read position.\r\n * Methods and properties beginning with 'read' and taking no arguments consume data at the current read position and advance it\r\n * by the size of the data read. The read position can also be directly adjusted by the caller.\r\n * @public\r\n */\r\nexport class ByteStream {\r\n private readonly _view: DataView;\r\n private readonly _byteOffset: number;\r\n private _curPos: number = 0;\r\n\r\n /** Construct a new ByteStream with the read position set to the beginning.\r\n * @param buffer The underlying buffer from which data is to be extracted.\r\n * @param subView If defined, specifies the subset of the underlying buffer's data to use.\r\n * This constructor is subject to two common mistakes:\r\n *\r\n * 1. Given `bytes: Uint8Array`, `new ByteStream(bytes)` will compile but at run-time will produce an error asserting that\r\n * the DataView constructor requires an ArrayBuffer. The correct usage is `new ByteStream(bytes.buffer)`.\r\n * 2. Given `bytes: Uint8Array`, `new ByteStream(bytes.buffer)` creates a stream for the entire range of bytes represented by the underlying\r\n * ArrayBuffer. If `bytes` represents only a **sub-range** of the underlying buffer's data, the results will be unexpected unless the optional `subView`\r\n * argument is supplied, with correct offset and length.\r\n *\r\n * For both of the above reasons, this constructor is private, and [[fromUint8Array]] or [[fromArrayBuffer]] should be used to create a ByteStream.\r\n */\r\n private constructor(buffer: ArrayBuffer | SharedArrayBuffer, subView?: { byteOffset: number, byteLength: number }) {\r\n if (undefined !== subView) {\r\n this._view = new DataView(buffer, subView.byteOffset, subView.byteLength);\r\n this._byteOffset = subView.byteOffset;\r\n } else {\r\n this._view = new DataView(buffer);\r\n this._byteOffset = 0;\r\n }\r\n }\r\n\r\n /** Construct a new ByteStream for the range of bytes represented by `bytes`, which may be a subset of the range of bytes\r\n * represented by the underlying ArrayBuffer. The read position will be set to the beginning of the range of bytes.\r\n * @param bytes The Uint8Array from which data is to be extracted.\r\n */\r\n public static fromUint8Array(bytes: Uint8Array): ByteStream {\r\n const { byteOffset, byteLength } = bytes;\r\n return new ByteStream(bytes.buffer, { byteOffset, byteLength }); \r\n }\r\n\r\n /** Construct a new ByteStream with the read position set to the beginning.\r\n * @param buffer The underlying buffer from which data is to be extracted.\r\n * @param subView If defined, specifies the subset of the underlying buffer's data to use.\r\n */\r\n public static fromArrayBuffer(buffer: ArrayBuffer | SharedArrayBuffer, subView?: { byteOffset: number, byteLength: number }): ByteStream {\r\n return new ByteStream(buffer, subView); \r\n }\r\n\r\n /** The number of bytes in this stream */\r\n public get length(): number {\r\n return this._view.byteLength;\r\n }\r\n\r\n /** The number of bytes remaining to be read, from [[curPos]] to the end of the stream. */\r\n public get remainingLength(): number {\r\n return this.length - this.curPos;\r\n }\r\n\r\n /** Returns true if the current read position has been advanced past the end of the stream. This generally indicates that an attempt was made to read more data than is available.\r\n * @see [[isAtTheEnd]]\r\n */\r\n public get isPastTheEnd(): boolean {\r\n return this.curPos > this.length;\r\n }\r\n\r\n /** Returns true if the current read position has advanced precisely to the end of the stream, indicating all of the data has been consumed.\r\n * @see [[isPastTheEnd]].\r\n */\r\n public get isAtTheEnd(): boolean {\r\n return this.curPos === this.length;\r\n }\r\n\r\n /** The current read position as an index into the stream of bytes. */\r\n public get curPos(): number { return this._curPos; }\r\n public set curPos(pos: number) {\r\n this._curPos = pos;\r\n assert(!this.isPastTheEnd);\r\n }\r\n\r\n /** Adds the specified number of bytes to the current read position */\r\n public advance(numBytes: number): boolean {\r\n this.curPos = (this.curPos + numBytes);\r\n return !this.isPastTheEnd;\r\n }\r\n\r\n /** Subtracts the specified number of bytes from the current read position */\r\n public rewind(numBytes: number): boolean {\r\n if (this.curPos - numBytes < 0)\r\n return false;\r\n\r\n this.curPos = this.curPos - numBytes;\r\n return true;\r\n }\r\n\r\n /** Resets the current read position to the beginning of the stream */\r\n public reset(): void { this.curPos = 0; }\r\n\r\n /** Read a unsigned 8-bit integer from the current read position and advance by 1 byte. */\r\n public readUint8(): number { return this.read(1, (view) => view.getUint8(this.curPos)); }\r\n /** Read an unsigned 16-bit integer from the current read position and advance by 2 bytes. */\r\n public readUint16(): number { return this.read(2, (view) => view.getUint16(this.curPos, true)); }\r\n /** Read an unsigned 32-bit integer from the current read position and advance by 4 bytes. */\r\n public readUint32(): number { return this.read(4, (view) => view.getUint32(this.curPos, true)); }\r\n /** Read a signed 32-bit integer from the current read position and advance by 4 bytes. */\r\n public readInt32(): number { return this.read(4, (view) => view.getInt32(this.curPos, true)); }\r\n /** Read a 32-bit floating point number from the current read position and advance by 4 bytes. */\r\n public readFloat32(): number { return this.read(4, (view) => view.getFloat32(this.curPos, true)); }\r\n /** Read a 64-bit floating point number from the current read position and advance by 8 bytes. */\r\n public readFloat64(): number { return this.read(8, (view) => view.getFloat64(this.curPos, true)); }\r\n /** Read an unsigned 64-bit integer from the current read position, advance by 8 bytes, and return the 64-bit value as an Id64String. */\r\n public readId64(): Id64String { return Id64.fromUint32Pair(this.readUint32(), this.readUint32()); }\r\n /** Read an unsigned 24-bit integer from the current read position and advance by 3 bytes. */\r\n public readUint24(): number { return this.readUint8() | (this.readUint8() << 8) | (this.readUint8() << 16); }\r\n\r\n /** Read the specified number of bytes beginning at the current read position into a Uint8Array and advance by the specified number of byte.\r\n * @param numBytes The number of bytes to read.\r\n */\r\n public nextBytes(numBytes: number): Uint8Array {\r\n const bytes = new Uint8Array(this.arrayBuffer, this.curPos + this._byteOffset, numBytes);\r\n this.advance(numBytes);\r\n return bytes;\r\n }\r\n\r\n /** Read the specified number of bytes at the specified offset without changing the read position. */\r\n public readBytes(readPos: number, numBytes: number): Uint8Array {\r\n return new Uint8Array(this.arrayBuffer, readPos + this._byteOffset, numBytes);\r\n }\r\n\r\n /** Read the specified number of unsigned 32-bit integers from the current read position and advance the read position. */\r\n public nextUint32s(numUint32s: number): Uint32Array {\r\n const numBytes = numUint32s * 4;\r\n const uint32s = new Uint32Array(this.arrayBuffer, this.curPos + this._byteOffset, numUint32s);\r\n this.advance(numBytes);\r\n return uint32s;\r\n }\r\n\r\n /** Returns the underlying array buffer */\r\n public get arrayBuffer(): ArrayBuffer | SharedArrayBuffer { return this._view.buffer; }\r\n\r\n private read(numBytes: number, read: (view: DataView) => number) {\r\n const result = read(this._view);\r\n this.advance(numBytes);\r\n return result;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ByteStream.js","sourceRoot":"","sources":["../../src/ByteStream.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\n\nimport { assert } from \"./Assert\";\nimport { Id64, Id64String } from \"./Id\";\n\n/** Allows the contents of an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)\n * to be consumed sequentially using methods to extract\n * data of a particular type from the bytes beginning at the current read position.\n * Methods and properties beginning with 'read' and taking no arguments consume data at the current read position and advance it\n * by the size of the data read. The read position can also be directly adjusted by the caller.\n * @public\n */\nexport class ByteStream {\n private readonly _view: DataView;\n private readonly _byteOffset: number;\n private _curPos: number = 0;\n\n /** Construct a new ByteStream with the read position set to the beginning.\n * @param buffer The underlying buffer from which data is to be extracted.\n * @param subView If defined, specifies the subset of the underlying buffer's data to use.\n * This constructor is subject to two common mistakes:\n *\n * 1. Given `bytes: Uint8Array`, `new ByteStream(bytes)` will compile but at run-time will produce an error asserting that\n * the DataView constructor requires an ArrayBuffer. The correct usage is `new ByteStream(bytes.buffer)`.\n * 2. Given `bytes: Uint8Array`, `new ByteStream(bytes.buffer)` creates a stream for the entire range of bytes represented by the underlying\n * ArrayBuffer. If `bytes` represents only a **sub-range** of the underlying buffer's data, the results will be unexpected unless the optional `subView`\n * argument is supplied, with correct offset and length.\n *\n * For both of the above reasons, this constructor is private, and [[fromUint8Array]] or [[fromArrayBuffer]] should be used to create a ByteStream.\n */\n private constructor(buffer: ArrayBuffer | SharedArrayBuffer, subView?: { byteOffset: number, byteLength: number }) {\n if (undefined !== subView) {\n this._view = new DataView(buffer, subView.byteOffset, subView.byteLength);\n this._byteOffset = subView.byteOffset;\n } else {\n this._view = new DataView(buffer);\n this._byteOffset = 0;\n }\n }\n\n /** Construct a new ByteStream for the range of bytes represented by `bytes`, which may be a subset of the range of bytes\n * represented by the underlying ArrayBuffer. The read position will be set to the beginning of the range of bytes.\n * @param bytes The Uint8Array from which data is to be extracted.\n */\n public static fromUint8Array(bytes: Uint8Array): ByteStream {\n const { byteOffset, byteLength } = bytes;\n return new ByteStream(bytes.buffer, { byteOffset, byteLength }); \n }\n\n /** Construct a new ByteStream with the read position set to the beginning.\n * @param buffer The underlying buffer from which data is to be extracted.\n * @param subView If defined, specifies the subset of the underlying buffer's data to use.\n */\n public static fromArrayBuffer(buffer: ArrayBuffer | SharedArrayBuffer, subView?: { byteOffset: number, byteLength: number }): ByteStream {\n return new ByteStream(buffer, subView); \n }\n\n /** The number of bytes in this stream */\n public get length(): number {\n return this._view.byteLength;\n }\n\n /** The number of bytes remaining to be read, from [[curPos]] to the end of the stream. */\n public get remainingLength(): number {\n return this.length - this.curPos;\n }\n\n /** Returns true if the current read position has been advanced past the end of the stream. This generally indicates that an attempt was made to read more data than is available.\n * @see [[isAtTheEnd]]\n */\n public get isPastTheEnd(): boolean {\n return this.curPos > this.length;\n }\n\n /** Returns true if the current read position has advanced precisely to the end of the stream, indicating all of the data has been consumed.\n * @see [[isPastTheEnd]].\n */\n public get isAtTheEnd(): boolean {\n return this.curPos === this.length;\n }\n\n /** The current read position as an index into the stream of bytes. */\n public get curPos(): number { return this._curPos; }\n public set curPos(pos: number) {\n this._curPos = pos;\n assert(!this.isPastTheEnd);\n }\n\n /** Adds the specified number of bytes to the current read position */\n public advance(numBytes: number): boolean {\n this.curPos = (this.curPos + numBytes);\n return !this.isPastTheEnd;\n }\n\n /** Subtracts the specified number of bytes from the current read position */\n public rewind(numBytes: number): boolean {\n if (this.curPos - numBytes < 0)\n return false;\n\n this.curPos = this.curPos - numBytes;\n return true;\n }\n\n /** Resets the current read position to the beginning of the stream */\n public reset(): void { this.curPos = 0; }\n\n /** Read a unsigned 8-bit integer from the current read position and advance by 1 byte. */\n public readUint8(): number { return this.read(1, (view) => view.getUint8(this.curPos)); }\n /** Read an unsigned 16-bit integer from the current read position and advance by 2 bytes. */\n public readUint16(): number { return this.read(2, (view) => view.getUint16(this.curPos, true)); }\n /** Read an unsigned 32-bit integer from the current read position and advance by 4 bytes. */\n public readUint32(): number { return this.read(4, (view) => view.getUint32(this.curPos, true)); }\n /** Read a signed 32-bit integer from the current read position and advance by 4 bytes. */\n public readInt32(): number { return this.read(4, (view) => view.getInt32(this.curPos, true)); }\n /** Read a 32-bit floating point number from the current read position and advance by 4 bytes. */\n public readFloat32(): number { return this.read(4, (view) => view.getFloat32(this.curPos, true)); }\n /** Read a 64-bit floating point number from the current read position and advance by 8 bytes. */\n public readFloat64(): number { return this.read(8, (view) => view.getFloat64(this.curPos, true)); }\n /** Read an unsigned 64-bit integer from the current read position, advance by 8 bytes, and return the 64-bit value as an Id64String. */\n public readId64(): Id64String { return Id64.fromUint32Pair(this.readUint32(), this.readUint32()); }\n /** Read an unsigned 24-bit integer from the current read position and advance by 3 bytes. */\n public readUint24(): number { return this.readUint8() | (this.readUint8() << 8) | (this.readUint8() << 16); }\n\n /** Read the specified number of bytes beginning at the current read position into a Uint8Array and advance by the specified number of byte.\n * @param numBytes The number of bytes to read.\n */\n public nextBytes(numBytes: number): Uint8Array {\n const bytes = new Uint8Array(this.arrayBuffer, this.curPos + this._byteOffset, numBytes);\n this.advance(numBytes);\n return bytes;\n }\n\n /** Read the specified number of bytes at the specified offset without changing the read position. */\n public readBytes(readPos: number, numBytes: number): Uint8Array {\n return new Uint8Array(this.arrayBuffer, readPos + this._byteOffset, numBytes);\n }\n\n /** Read the specified number of unsigned 32-bit integers from the current read position and advance the read position. */\n public nextUint32s(numUint32s: number): Uint32Array {\n const numBytes = numUint32s * 4;\n const uint32s = new Uint32Array(this.arrayBuffer, this.curPos + this._byteOffset, numUint32s);\n this.advance(numBytes);\n return uint32s;\n }\n\n /** Returns the underlying array buffer */\n public get arrayBuffer(): ArrayBuffer | SharedArrayBuffer { return this._view.buffer; }\n\n private read(numBytes: number, read: (view: DataView) => number) {\n const result = read(this._view);\n this.advance(numBytes);\n return result;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ClassUtils.js","sourceRoot":"","sources":["../../src/ClassUtils.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAIhC,QAAgC,EAAE,UAAsB;IACxD,OAAO,QAAQ,CAAC,SAAS,YAAY,UAAU,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAI1B,QAA6C,EAAE,UAAsB;IACrE,OAAO,QAAQ,KAAK,UAAU,IAAI,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC7E,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\n/** Check if class `subclass` is a different class from `superclass` but extends from `superclass`\r\n * @param subclass the class that may be a subclass of `superclass`\r\n * @param superclass the class that may be a base class of `subclass`\r\n * @note The constructors of all types must be `public`.\r\n * @returns whether `subclass` is a proper subclass of `superclass`\r\n * @public\r\n */\r\nexport function isProperSubclassOf<\r\n SuperClass extends new (..._: any[]) => any,\r\n NonSubClass extends new (..._: any[]) => any,\r\n SubClass extends new (..._: any[]) => InstanceType<SuperClass>,\r\n>(subclass: SubClass | NonSubClass, superclass: SuperClass): subclass is SubClass {\r\n return subclass.prototype instanceof superclass;\r\n}\r\n\r\n/** Check if class `subclass` is `superclass` or extends from `superclass`\r\n * @param subclass the class that may be a subclass of `superclass`.\r\n * @param superclass the class that may be a base class of `subclass`.\r\n * @note The constructors of all types must be `public`.\r\n * @returns whether `subclass` is a subclass of `superclass`\r\n * @public\r\n */\r\nexport function isSubclassOf<\r\n SuperClass extends new (..._: any[]) => any,\r\n NonSubClass extends new (..._: any[]) => any,\r\n SubClass extends new (..._: any[]) => InstanceType<SuperClass>,\r\n>(subclass: SuperClass | SubClass | NonSubClass, superclass: SuperClass): subclass is SubClass | SuperClass {\r\n return subclass === superclass || isProperSubclassOf(subclass, superclass);\r\n}\r\n"]}
1
+ {"version":3,"file":"ClassUtils.js","sourceRoot":"","sources":["../../src/ClassUtils.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAIhC,QAAgC,EAAE,UAAsB;IACxD,OAAO,QAAQ,CAAC,SAAS,YAAY,UAAU,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAI1B,QAA6C,EAAE,UAAsB;IACrE,OAAO,QAAQ,KAAK,UAAU,IAAI,kBAAkB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;AAC7E,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\n\n/** Check if class `subclass` is a different class from `superclass` but extends from `superclass`\n * @param subclass the class that may be a subclass of `superclass`\n * @param superclass the class that may be a base class of `subclass`\n * @note The constructors of all types must be `public`.\n * @returns whether `subclass` is a proper subclass of `superclass`\n * @public\n */\nexport function isProperSubclassOf<\n SuperClass extends new (..._: any[]) => any,\n NonSubClass extends new (..._: any[]) => any,\n SubClass extends new (..._: any[]) => InstanceType<SuperClass>,\n>(subclass: SubClass | NonSubClass, superclass: SuperClass): subclass is SubClass {\n return subclass.prototype instanceof superclass;\n}\n\n/** Check if class `subclass` is `superclass` or extends from `superclass`\n * @param subclass the class that may be a subclass of `superclass`.\n * @param superclass the class that may be a base class of `subclass`.\n * @note The constructors of all types must be `public`.\n * @returns whether `subclass` is a subclass of `superclass`\n * @public\n */\nexport function isSubclassOf<\n SuperClass extends new (..._: any[]) => any,\n NonSubClass extends new (..._: any[]) => any,\n SubClass extends new (..._: any[]) => InstanceType<SuperClass>,\n>(subclass: SuperClass | SubClass | NonSubClass, superclass: SuperClass): subclass is SubClass | SuperClass {\n return subclass === superclass || isProperSubclassOf(subclass, superclass);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Compare.js","sourceRoot":"","sources":["../../src/Compare.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\n/**\r\n * A function that returns a numerical value indicating how two objects are ordered in relation to one another.\r\n * Such functions are used by various collection classes throughout the library.\r\n * Given values `lhs` and `rhs`, the function returns:\r\n * - Zero if lhs == rhs\r\n * - A negative number if lhs < rhs\r\n * - A positive number if lhs > rhs\r\n *\r\n * An OrderedComparator `must` implement [strict weak ordering](https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings), which can be summarized by the following rules:\r\n * - `compare(x, x)` returns zero.\r\n * - If `compare(x, y)` returns zero, then so does `compare(y, x)` (i.e., `x == y` implies `y == x`).\r\n * - If `compare(x, y)` returns non-zero, then `compare(y, x)` returns a value with an opposite sign (i.e., `x < y` implies `y > x`).\r\n * - If `compare(x, y)` and `compare(y, z)` return non-zero values with the same sign, then `compare(x, z)` returns a value with the same sign (i.e., `x < y < z` implies `x < z`).\r\n *\r\n * @see SortedArray\r\n * @see Dictionary\r\n * @see IndexMap\r\n * @see PriorityQueue\r\n * @public\r\n */\r\nexport type OrderedComparator<T, U = T> = (lhs: T, rhs: U) => number;\r\n\r\n/**\r\n * An [[OrderedComparator]] for numbers that treats two numbers as equal if the absolute value of their difference is less than a specified tolerance.\r\n * @public\r\n */\r\nexport function compareWithTolerance(a: number, b: number, tolerance = 0.1): number {\r\n if (a < b - tolerance)\r\n return -1;\r\n else if (a > b + tolerance)\r\n return 1;\r\n else\r\n return 0;\r\n}\r\n\r\n/** @public */\r\nexport function compareNumbers(a: number, b: number): number {\r\n return a - b;\r\n}\r\n\r\n/** @public */\r\nexport function compareBooleans(a: boolean, b: boolean): number {\r\n return a !== b ? (a < b ? -1 : 1) : 0;\r\n}\r\n\r\n/** @public */\r\nexport function compareStrings(a: string, b: string): number {\r\n return a === b ? 0 : (a < b ? -1 : 1);\r\n}\r\n\r\n/** @public */\r\nexport function comparePossiblyUndefined<T>(compareDefined: (lhs: T, rhs: T) => number, lhs?: T, rhs?: T): number {\r\n if (undefined === lhs)\r\n return undefined === rhs ? 0 : -1;\r\n else if (undefined === rhs)\r\n return 1;\r\n else\r\n return compareDefined(lhs, rhs);\r\n}\r\n\r\n/** @public */\r\nexport function compareStringsOrUndefined(lhs?: string, rhs?: string): number {\r\n return comparePossiblyUndefined(compareStrings, lhs, rhs);\r\n}\r\n\r\n/** @public */\r\nexport function compareNumbersOrUndefined(lhs?: number, rhs?: number): number {\r\n return comparePossiblyUndefined(compareNumbers, lhs, rhs);\r\n}\r\n\r\n/** @public */\r\nexport function compareBooleansOrUndefined(lhs?: boolean, rhs?: boolean): number {\r\n return comparePossiblyUndefined(compareBooleans, lhs, rhs);\r\n}\r\n\r\n/** Compare two possibly-undefined values for equality. If both are undefined, the comparison is performed by the supplied `areEqual` function.\r\n * @public\r\n */\r\nexport function areEqualPossiblyUndefined<T, U>(t: T | undefined, u: U | undefined, areEqual: (t: T, u: U) => boolean): boolean {\r\n if (undefined === t)\r\n return undefined === u;\r\n else if (undefined === u)\r\n return false;\r\n else\r\n return areEqual(t, u);\r\n}\r\n\r\n/**\r\n * Compare two simples types (number, string, boolean)\r\n * This essentially wraps the existing type-specific comparison functions\r\n * @beta */\r\nexport function compareSimpleTypes(lhs: number | string | boolean, rhs: number | string | boolean): number {\r\n let cmp = 0;\r\n\r\n // Make sure the types are the same\r\n cmp = compareStrings(typeof lhs, typeof rhs);\r\n if (cmp !== 0) {\r\n return cmp;\r\n }\r\n\r\n // Compare actual values\r\n switch (typeof lhs) {\r\n case \"number\":\r\n return compareNumbers(lhs, rhs as number);\r\n case \"string\":\r\n return compareStrings(lhs, rhs as string);\r\n case \"boolean\":\r\n return compareBooleans(lhs, rhs as boolean);\r\n }\r\n return cmp;\r\n}\r\n/**\r\n * An array of simple types (number, string, boolean)\r\n * @beta\r\n */\r\nexport type SimpleTypesArray = number[] | string[] | boolean[];\r\n\r\n/**\r\n * Compare two arrays of simple types (number, string, boolean)\r\n * @beta\r\n */\r\n\r\nexport function compareSimpleArrays (lhs?: SimpleTypesArray, rhs?: SimpleTypesArray ) {\r\n if (undefined === lhs)\r\n return undefined === rhs ? 0 : -1;\r\n else if (undefined === rhs)\r\n return 1;\r\n else if (lhs.length === 0 && rhs.length === 0) {\r\n return 0;\r\n } else if (lhs.length !== rhs.length) {\r\n return lhs.length - rhs.length;\r\n }\r\n\r\n let cmp = 0;\r\n for (let i = 0; i < lhs.length; i++) {\r\n cmp = compareSimpleTypes(lhs[i], rhs[i]);\r\n if (cmp !== 0) {\r\n break;\r\n }\r\n }\r\n return cmp;\r\n}\r\n\r\n/** Compare two arrays of the same type `T` using the specified `compare` function to compare each pair of array elements.\r\n * @returns 0 if the arrays have the same length and `compare` returns 0 for each pair of elements, or a non-zero value if the arrays differ in length or contents.\r\n * @public\r\n */\r\nexport function compareArrays<T>(lhs: ReadonlyArray<T>, rhs: ReadonlyArray<T>, compare: (a: T, b: T) => number): number {\r\n let diff = compareNumbers(lhs.length, rhs.length);\r\n if (!diff) {\r\n for (let i = 0; i < lhs.length; i++) {\r\n diff = compare(lhs[i], rhs[i]);\r\n if (diff) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n return diff;\r\n}\r\n"]}
1
+ {"version":3,"file":"Compare.js","sourceRoot":"","sources":["../../src/Compare.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\n\n/**\n * A function that returns a numerical value indicating how two objects are ordered in relation to one another.\n * Such functions are used by various collection classes throughout the library.\n * Given values `lhs` and `rhs`, the function returns:\n * - Zero if lhs == rhs\n * - A negative number if lhs < rhs\n * - A positive number if lhs > rhs\n *\n * An OrderedComparator `must` implement [strict weak ordering](https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings), which can be summarized by the following rules:\n * - `compare(x, x)` returns zero.\n * - If `compare(x, y)` returns zero, then so does `compare(y, x)` (i.e., `x == y` implies `y == x`).\n * - If `compare(x, y)` returns non-zero, then `compare(y, x)` returns a value with an opposite sign (i.e., `x < y` implies `y > x`).\n * - If `compare(x, y)` and `compare(y, z)` return non-zero values with the same sign, then `compare(x, z)` returns a value with the same sign (i.e., `x < y < z` implies `x < z`).\n *\n * @see SortedArray\n * @see Dictionary\n * @see IndexMap\n * @see PriorityQueue\n * @public\n */\nexport type OrderedComparator<T, U = T> = (lhs: T, rhs: U) => number;\n\n/**\n * An [[OrderedComparator]] for numbers that treats two numbers as equal if the absolute value of their difference is less than a specified tolerance.\n * @public\n */\nexport function compareWithTolerance(a: number, b: number, tolerance = 0.1): number {\n if (a < b - tolerance)\n return -1;\n else if (a > b + tolerance)\n return 1;\n else\n return 0;\n}\n\n/** @public */\nexport function compareNumbers(a: number, b: number): number {\n return a - b;\n}\n\n/** @public */\nexport function compareBooleans(a: boolean, b: boolean): number {\n return a !== b ? (a < b ? -1 : 1) : 0;\n}\n\n/** @public */\nexport function compareStrings(a: string, b: string): number {\n return a === b ? 0 : (a < b ? -1 : 1);\n}\n\n/** @public */\nexport function comparePossiblyUndefined<T>(compareDefined: (lhs: T, rhs: T) => number, lhs?: T, rhs?: T): number {\n if (undefined === lhs)\n return undefined === rhs ? 0 : -1;\n else if (undefined === rhs)\n return 1;\n else\n return compareDefined(lhs, rhs);\n}\n\n/** @public */\nexport function compareStringsOrUndefined(lhs?: string, rhs?: string): number {\n return comparePossiblyUndefined(compareStrings, lhs, rhs);\n}\n\n/** @public */\nexport function compareNumbersOrUndefined(lhs?: number, rhs?: number): number {\n return comparePossiblyUndefined(compareNumbers, lhs, rhs);\n}\n\n/** @public */\nexport function compareBooleansOrUndefined(lhs?: boolean, rhs?: boolean): number {\n return comparePossiblyUndefined(compareBooleans, lhs, rhs);\n}\n\n/** Compare two possibly-undefined values for equality. If both are undefined, the comparison is performed by the supplied `areEqual` function.\n * @public\n */\nexport function areEqualPossiblyUndefined<T, U>(t: T | undefined, u: U | undefined, areEqual: (t: T, u: U) => boolean): boolean {\n if (undefined === t)\n return undefined === u;\n else if (undefined === u)\n return false;\n else\n return areEqual(t, u);\n}\n\n/**\n * Compare two simples types (number, string, boolean)\n * This essentially wraps the existing type-specific comparison functions\n * @beta */\nexport function compareSimpleTypes(lhs: number | string | boolean, rhs: number | string | boolean): number {\n let cmp = 0;\n\n // Make sure the types are the same\n cmp = compareStrings(typeof lhs, typeof rhs);\n if (cmp !== 0) {\n return cmp;\n }\n\n // Compare actual values\n switch (typeof lhs) {\n case \"number\":\n return compareNumbers(lhs, rhs as number);\n case \"string\":\n return compareStrings(lhs, rhs as string);\n case \"boolean\":\n return compareBooleans(lhs, rhs as boolean);\n }\n return cmp;\n}\n/**\n * An array of simple types (number, string, boolean)\n * @beta\n */\nexport type SimpleTypesArray = number[] | string[] | boolean[];\n\n/**\n * Compare two arrays of simple types (number, string, boolean)\n * @beta\n */\n\nexport function compareSimpleArrays (lhs?: SimpleTypesArray, rhs?: SimpleTypesArray ) {\n if (undefined === lhs)\n return undefined === rhs ? 0 : -1;\n else if (undefined === rhs)\n return 1;\n else if (lhs.length === 0 && rhs.length === 0) {\n return 0;\n } else if (lhs.length !== rhs.length) {\n return lhs.length - rhs.length;\n }\n\n let cmp = 0;\n for (let i = 0; i < lhs.length; i++) {\n cmp = compareSimpleTypes(lhs[i], rhs[i]);\n if (cmp !== 0) {\n break;\n }\n }\n return cmp;\n}\n\n/** Compare two arrays of the same type `T` using the specified `compare` function to compare each pair of array elements.\n * @returns 0 if the arrays have the same length and `compare` returns 0 for each pair of elements, or a non-zero value if the arrays differ in length or contents.\n * @public\n */\nexport function compareArrays<T>(lhs: ReadonlyArray<T>, rhs: ReadonlyArray<T>, compare: (a: T, b: T) => number): number {\n let diff = compareNumbers(lhs.length, rhs.length);\n if (!diff) {\n for (let i = 0; i < lhs.length; i++) {\n diff = compare(lhs[i], rhs[i]);\n if (diff) {\n break;\n }\n }\n }\n\n return diff;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"CompressedId64Set.js","sourceRoot":"","sources":["../../src/CompressedId64Set.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Ids\r\n */\r\n\r\nimport { assert } from \"./Assert\";\r\nimport { Id64, Id64Array, Id64Set, Id64String } from \"./Id\";\r\nimport { OrderedId64Iterable } from \"./OrderedId64Iterable\";\r\nimport { SortedArray } from \"./SortedArray\";\r\n\r\n/** @public */\r\nexport type CompressedId64Set = string;\r\n\r\n/** A compact string representation of an [[Id64Set]]. Such a representation is useful when serializing potentially very large\r\n * sets of Ids.\r\n * @see [[CompressedId64Set.iterable]] to efficiently iterate the Ids represented by a compact string.\r\n * @see [[CompressedId64Set.compressSet]] and [[CompressedId64Set.compressArray]] to produce a compact string from a collection of Ids.\r\n * @see [[CompressedId64Set.decompressSet]] and [[CompressedId64Set.decompressArray]] to produce a collection of Ids from a compact string.\r\n * @see [[OrderedId64Iterable]] for a generic representation of an ordered set of Ids (compressed or otherwise).\r\n * @see [[MutableCompressedId64Set]] for a mutable version.\r\n * @public\r\n */\r\nexport namespace CompressedId64Set { // eslint-disable-line @typescript-eslint/no-redeclare\r\n function isHexDigit(ch: number): boolean {\r\n // ascii values:\r\n // '0' = 48\r\n // '9' = 57\r\n // 'a' = 65\r\n // 'f' = 70\r\n\r\n return (ch >= 48 && ch <= 57) || (ch >= 65 && ch <= 70);\r\n }\r\n\r\n function compactRange(increment: Uint64, length: number): string {\r\n assert(length > 0);\r\n const inc = `+${increment.toString()}`;\r\n if (length <= 1)\r\n return inc;\r\n\r\n const len = length.toString(16).toUpperCase();\r\n return `${inc}*${len}`;\r\n }\r\n\r\n /** Given a set of [[Id64String]]s, produce a compact string representation. Useful when serializing potentially large sets of Ids.\r\n * @note Invalid Ids are ignored.\r\n * @see [[CompressedId64Set.sortAndCompress]] to compress any unordered collection of Ids.\r\n * @see [[CompressedId64Set.compressArray]] to perform the same operation on an [[Id64Array]].\r\n * @see [[CompressedId64Set.decompressSet]] to perform the inverse operation.\r\n */\r\n export function compressSet(ids: Id64Set): CompressedId64Set {\r\n return sortAndCompress(ids);\r\n }\r\n\r\n /** Create a sorted array from `ids`, then return a compact string representation of those Ids.\r\n * @see [[CompressedId64Set.compressIds]] if `ids` is known to already be sorted.\r\n */\r\n export function sortAndCompress(ids: Iterable<Id64String>): CompressedId64Set {\r\n // `string` is an Iterable<string>. In that case assume caller passed a single Id64String.\r\n const arr = typeof ids === \"string\" ? [ids] : Array.from(ids);\r\n OrderedId64Iterable.sortArray(arr);\r\n return compressArray(arr);\r\n }\r\n\r\n /** Give a **numerically-ordered** array of [[Id64String]]s, produce a compact string representation. Useful when serializing potentially large sets of Ids.\r\n * Duplicate Ids are included only once in the string representation.\r\n * @throws Error if two consecutive Ids `x` and `y` exist such that the numerical value of `x` is greater than that of `y` - i.e., the array is not properly sorted.\r\n * @note The array must be sorted according to the 64-bit numerical value of each Id.\r\n * @note Invalid Ids are ignored.\r\n * @see [[CompressedId64Set.decompressArray]] to perform the inverse operation.\r\n * @see [[OrderedId64Iterable.sortArray]] to ensure the Ids are properly sorted.\r\n * @see [[CompressedId64Set.sortAndCompress]] to compress any unordered collection of Ids.\r\n */\r\n export function compressArray(ids: Id64Array): CompressedId64Set {\r\n return compressIds(ids);\r\n }\r\n\r\n /** Give a **numerically-ordered** collection of [[Id64String]]s, produce a compact string representation. Useful when serializing potentially large sets of Ids.\r\n * Duplicate Ids are included only once in the string representation.\r\n * @throws Error if two consecutive Ids `x` and `y` exist such that the numerical value of `x` is greater than that of `y` - i.e., the collection is not properly sorted.\r\n * @note The collection must be sorted according to the 64-bit numerical value of each Id.\r\n * @note Invalid Ids are ignored.\r\n * @see [[CompressedId64Set.iterable]] to perform the inverse operation.\r\n * @see [[OrderedId64Iterable.sortArray]] or [[OrderedId64Iterable.compare]] to ensure the Ids are properly sorted.\r\n * @see [[CompressedId64Set.sortAndCompress]] to compress any unordered collection of Ids.\r\n */\r\n export function compressIds(ids: OrderedId64Iterable): CompressedId64Set {\r\n if (\"string\" === typeof ids)\r\n return ids;\r\n\r\n let str = \"\";\r\n\r\n const prevId = new Uint64();\r\n const rangeIncrement = new Uint64();\r\n let rangeLen = 0;\r\n\r\n const curId = new Uint64();\r\n const curIncrement = new Uint64();\r\n for (const id of ids) {\r\n if (!Id64.isValidId64(id))\r\n continue; // ignore garbage and invalid Ids (\"0\")\r\n\r\n curId.setFromId(id);\r\n curIncrement.setFromDifference(curId, prevId);\r\n\r\n const cmp = prevId.compare(curId);\r\n if (0 === cmp)\r\n continue; // ignore duplicates\r\n else if (cmp > 0)\r\n throw new Error(\"CompressedId64Set.compressArray requires a sorted array as input\");\r\n\r\n prevId.copyFrom(curId);\r\n\r\n if (0 === rangeLen) {\r\n rangeIncrement.copyFrom(curIncrement);\r\n rangeLen = 1;\r\n } else if (curIncrement.equals(rangeIncrement)) {\r\n ++rangeLen;\r\n } else {\r\n str += compactRange(rangeIncrement, rangeLen);\r\n rangeIncrement.copyFrom(curIncrement);\r\n rangeLen = 1;\r\n }\r\n }\r\n\r\n if (0 < rangeLen)\r\n str += compactRange(rangeIncrement, rangeLen);\r\n\r\n return str;\r\n }\r\n\r\n /** This exists strictly for the purposes of compressed sets of 64-bit Ids, to avoid the overhead of BigInt for handling 64-bit integers. */\r\n class Uint64 implements Id64.Uint32Pair {\r\n private static readonly _base = 0x100000000;\r\n\r\n private static assertUint32(num: number): void {\r\n assert(num >= 0);\r\n assert(num < Uint64._base);\r\n assert(Math.floor(num) === num);\r\n }\r\n\r\n private assertConstraints(): void {\r\n Uint64.assertUint32(this.lower);\r\n Uint64.assertUint32(this.upper);\r\n }\r\n\r\n constructor(public lower = 0, public upper = 0) {\r\n this.assertConstraints();\r\n }\r\n\r\n public compare(rhs: Uint64): number {\r\n const diff = this.upper - rhs.upper;\r\n return 0 === diff ? this.lower - rhs.lower : diff;\r\n }\r\n\r\n public equals(rhs: Uint64): boolean { return 0 === this.compare(rhs); }\r\n public isLessThan(rhs: Uint64): boolean { return this.compare(rhs) < 0; }\r\n public isGreaterThan(rhs: Uint64): boolean { return this.compare(rhs) > 0; }\r\n\r\n public get isZero(): boolean { return 0 === this.lower && 0 === this.upper; }\r\n\r\n public setFromDifference(lhs: Uint64, rhs: Uint64): void {\r\n assert(!rhs.isGreaterThan(lhs));\r\n\r\n this.lower = lhs.lower - rhs.lower;\r\n this.upper = lhs.upper - rhs.upper;\r\n if (this.lower < 0) {\r\n this.lower += Uint64._base;\r\n this.upper -= 1;\r\n }\r\n }\r\n\r\n public add(rhs: Uint64): void {\r\n let lower = rhs.lower;\r\n let upper = rhs.upper;\r\n if (lower + this.lower >= Uint64._base) {\r\n lower -= Uint64._base;\r\n upper += 1;\r\n }\r\n\r\n this.lower += lower;\r\n this.upper += upper;\r\n this.assertConstraints();\r\n }\r\n\r\n public setFromId(id: Id64String): void {\r\n Id64.getUint32Pair(id, this);\r\n }\r\n\r\n public copyFrom(other: Uint64): void {\r\n this.lower = other.lower;\r\n this.upper = other.upper;\r\n }\r\n\r\n public toString(): string {\r\n if (0 === this.upper)\r\n return this.lower.toString(16).toUpperCase();\r\n\r\n const upper = this.upper.toString(16);\r\n const lower = this.lower.toString(16).padStart(8, \"0\");\r\n assert(lower.length === 8);\r\n return `${upper}${lower}`.toUpperCase();\r\n }\r\n\r\n public toId64String(): string {\r\n return Id64.fromUint32Pair(this.lower, this.upper);\r\n }\r\n }\r\n\r\n /** Supplies an iterator over the [[Id64String]]s in a [[CompressedId64Set]].\r\n * The Ids are iterated in ascending order based on their unsigned 64-bit integer values.\r\n */\r\n export function* iterator(ids: CompressedId64Set): Iterator<Id64String> {\r\n if (0 === ids.length)\r\n return; // empty set.\r\n\r\n if (\"+\" !== ids[0])\r\n throw new Error(\"Invalid CompressedId64Set\");\r\n\r\n let curIndex = 1; // skip the leading '+'\r\n const curId = new Uint64();\r\n\r\n function parseUint32(): number {\r\n let value = 0;\r\n let nChars = 0;\r\n while (curIndex < ids.length && nChars < 8) {\r\n ++nChars;\r\n const ch = ids.charCodeAt(curIndex);\r\n if (!isHexDigit(ch))\r\n break; // not a hex digit in [0..9] or [A..F]\r\n\r\n value <<= 4;\r\n value |= (ch >= 65 ? ch - 65 + 10 : ch - 48); // ch - 'A' + 10 or ch - '0'\r\n value = value >>> 0; // restore unsignedness because silly javascript.\r\n ++curIndex;\r\n }\r\n\r\n return value;\r\n }\r\n\r\n function parseUint64(uint64: Uint64): void {\r\n let lower = 0;\r\n let upper = 0;\r\n\r\n // Read up to the first 8 digits.\r\n const startIndex = curIndex;\r\n const first = parseUint32();\r\n\r\n const nFirstDigits = curIndex - startIndex;\r\n assert(nFirstDigits <= 8);\r\n\r\n if (8 === nFirstDigits && curIndex + 1 < ids.length && isHexDigit(ids.charCodeAt(curIndex + 1))) {\r\n // We've got up to 8 more digits remaining\r\n const secondIndex = curIndex;\r\n const second = parseUint32();\r\n\r\n // Transfer excess digits from upper to lower.\r\n const nSecondDigits = curIndex - secondIndex;\r\n assert(nSecondDigits > 0 && nSecondDigits <= 8);\r\n\r\n const nDigitsToTransfer = 8 - nSecondDigits;\r\n upper = first >>> (4 * nDigitsToTransfer);\r\n const transfer = first - ((upper << (4 * nDigitsToTransfer)) >>> 0);\r\n lower = (second | ((transfer << (4 * nSecondDigits)) >>> 0)) >>> 0;\r\n } else {\r\n lower = first;\r\n }\r\n\r\n uint64.lower = lower;\r\n uint64.upper = upper;\r\n }\r\n\r\n const increment = new Uint64();\r\n while (curIndex < ids.length) {\r\n let multiplier = 1;\r\n parseUint64(increment);\r\n if (increment.isZero)\r\n throw new Error(\"Invalid CompressedId64Set\");\r\n\r\n if (curIndex < ids.length) {\r\n switch (ids[curIndex++]) {\r\n case \"*\":\r\n multiplier = parseUint32();\r\n if (0 === multiplier)\r\n throw new Error(\"Invalid CompressedId64Set\");\r\n\r\n if (curIndex !== ids.length && ids[curIndex++] !== \"+\")\r\n return;\r\n\r\n break;\r\n case \"+\":\r\n break;\r\n default:\r\n throw new Error(\"Invalid CompressedId64Set\");\r\n }\r\n }\r\n\r\n for (let i = 0; i < multiplier; i++) {\r\n curId.add(increment);\r\n yield curId.toId64String();\r\n }\r\n }\r\n }\r\n\r\n /** Supplies an iterable over the [[Id64String]]s in a [[CompressedId64Set]].\r\n * The Ids are iterated in ascending order based on their unsigned 64-bit integer values.\r\n */\r\n export function iterable(ids: CompressedId64Set): OrderedId64Iterable {\r\n return {\r\n [Symbol.iterator]: () => iterator(ids),\r\n };\r\n }\r\n\r\n /** Decompress the compact string representation of an [[Id64Set]] into an [[Id64Set]].\r\n * @param compressedIds The compact string representation.\r\n * @param out If supplied, the Ids will be inserted into this set rather than allocating and returning a new set.\r\n * @returns The set containing the decompressed Ids.\r\n * @throws Error if `compressedIds` is not a well-formed [[CompressedId64Set]].\r\n * @see [[CompressedId64Set.compressSet]] to perform the inverse operation.\r\n * @see [[CompressedId64Set.decompressArray]] to decompress as an [[Id64Array]] instead.\r\n * @see [[CompressedId64Set.iterable]] to efficiently iterate the Ids.\r\n */\r\n export function decompressSet(compressedIds: CompressedId64Set, out?: Id64Set): Id64Set {\r\n const set = out ?? new Set<string>();\r\n for (const id of iterable(compressedIds))\r\n set.add(id);\r\n\r\n return set;\r\n }\r\n\r\n /** Decompress the compact string representation of an [[Id64Set]] into an [[Id64Array]].\r\n * @param compressedIds The compact string representation.\r\n * @param out If supplied, the Ids will be appended to this array rather than allocating and returning a new array.\r\n * @returns The array containing the decompressed Ids.\r\n * @throws Error if `compressedIds` is not a well-formed [[CompressedId64Set]].\r\n * @note The Ids are decompressed and appended to the array in ascending order based on their 64-bit numerical values.\r\n * @see [[CompressedId64Set.compressArray]] to perform the inverse operation.\r\n * @see [[CompressedId64Set.decompressSet]] to decompress as an [[Id64Set]] instead.\r\n * @see [[CompressedId64Set.iterable]] to efficiently iterate the Ids.\r\n */\r\n export function decompressArray(compressedIds: CompressedId64Set, out?: Id64Array): Id64Array {\r\n const arr = out ?? [];\r\n for (const id of iterable(compressedIds))\r\n arr.push(id);\r\n\r\n return arr;\r\n }\r\n}\r\n\r\n/** A [[SortedArray]] of unique [[Id64String]]s sorted in ascending order by the 64-bit unsigned integer values of the Ids.\r\n * @see [[CompressedId64Set]] for an immutable compact string representation.\r\n * @public\r\n */\r\nexport class OrderedId64Array extends SortedArray<Id64String> {\r\n /** Construct a new, empty array. */\r\n public constructor() {\r\n super((lhs, rhs) => OrderedId64Iterable.compare(lhs, rhs));\r\n }\r\n\r\n /** An iterable that iterates over the Ids in sorted order. */\r\n public get ids(): OrderedId64Iterable { return this._array; }\r\n\r\n /** The underlying array of Ids. */\r\n public get array(): ReadonlyArray<Id64String> { return this._array; }\r\n}\r\n\r\n/** A mutable set of valid [[Id64String]]s sorted in ascending order by the 64-bit unsigned integer value of the Ids.\r\n * Internally the set of Ids is maintained as a [[CompressedId64Set]] string representation.\r\n * Insertions and removals are buffered until the string representation needs to be recomputed. The string representation is recomputed by every public method except [[add]] and [[delete]] -\r\n * therefore, if multiple removals and/or insertions are required, it is most efficient to perform them all before invoking other methods.\r\n * @public\r\n */\r\nexport class MutableCompressedId64Set implements OrderedId64Iterable {\r\n private _ids: CompressedId64Set;\r\n private readonly _inserted = new OrderedId64Array();\r\n private readonly _deleted = new OrderedId64Array();\r\n\r\n /** Construct a new set, optionally initialized to contain the Ids represented by `ids`. */\r\n public constructor(ids?: CompressedId64Set) {\r\n this._ids = ids ?? \"\";\r\n }\r\n\r\n /** Obtain the compact string representation of the contents of this set. If any insertions or removals are pending, they will be applied and the string recomputed. */\r\n public get ids(): CompressedId64Set {\r\n this.updateIds();\r\n return this._ids;\r\n }\r\n\r\n /** Add the specified Id to the set.\r\n * @throws Error if `id` is not a valid [[Id64String]].\r\n */\r\n public add(id: Id64String): void {\r\n if (!Id64.isValidId64(id))\r\n throw new Error(\"MutableCompressedId64Set.add: invalid Id\");\r\n\r\n this._deleted.remove(id);\r\n this._inserted.insert(id);\r\n }\r\n\r\n /** Remove the specified Id from the set.\r\n * @throws Error if `id` is not a valid [[Id64String]].\r\n */\r\n public delete(id: Id64String): void {\r\n if (!Id64.isValidId64(id))\r\n throw new Error(\"MutableCompressedId64Set.delete: invalid Id\");\r\n\r\n this._inserted.remove(id);\r\n this._deleted.insert(id);\r\n }\r\n\r\n /** Remove all Ids from the set. */\r\n public clear(): void {\r\n this._ids = \"\";\r\n this._inserted.clear();\r\n this._deleted.clear();\r\n }\r\n\r\n /** Remove all Ids from the set, then add the specified Ids. */\r\n public reset(ids?: CompressedId64Set): void {\r\n this.clear();\r\n this._ids = ids ?? \"\";\r\n }\r\n\r\n /** Obtain an iterator over the Ids in this set. The Ids are returned in ascending order based on their unsigned 64-bit integer values. */\r\n public [Symbol.iterator]() {\r\n return CompressedId64Set.iterator(this.ids);\r\n }\r\n\r\n /** Compute a compact string representation of the union of this and another set of Ids - i.e., those Ids present in either this and/or the other set. */\r\n public computeUnion(ids: OrderedId64Iterable | CompressedId64Set | MutableCompressedId64Set): CompressedId64Set {\r\n if (this.isEmpty)\r\n return CompressedId64Set.compressIds(ids);\r\n else if (OrderedId64Iterable.isEmptySet(ids) || this.equals(ids))\r\n return this.ids;\r\n\r\n return CompressedId64Set.compressIds(OrderedId64Iterable.union(this, ids));\r\n }\r\n\r\n /** Compute a compact string representation of the intersection of this and another set of Ids - i.e., those Ids present in both this and the other set. */\r\n public computeIntersection(ids: OrderedId64Iterable | CompressedId64Set | MutableCompressedId64Set): CompressedId64Set {\r\n if (this.equals(ids))\r\n return this.ids;\r\n else if (this.isEmpty || OrderedId64Iterable.isEmptySet(ids))\r\n return \"\";\r\n\r\n return CompressedId64Set.compressIds(OrderedId64Iterable.intersection(this, ids));\r\n }\r\n\r\n /** Compute a compact string representation of the difference between this and another set - i.e., those Ids present in this but not in the other set. */\r\n public computeDifference(ids: OrderedId64Iterable | CompressedId64Set | MutableCompressedId64Set): CompressedId64Set {\r\n if (this.isEmpty || this.equals(ids))\r\n return \"\";\r\n\r\n return CompressedId64Set.compressIds(OrderedId64Iterable.difference(this, ids));\r\n }\r\n\r\n /** Return true if this set contains no Ids. */\r\n public get isEmpty(): boolean {\r\n return OrderedId64Iterable.isEmptySet(this.ids);\r\n }\r\n\r\n /** Return true if the set of Ids represented by `other` is identical to those in this set.\r\n * @note This considers only the **distinct** Ids in `other` - duplicates are ignored.\r\n */\r\n public equals(other: CompressedId64Set | MutableCompressedId64Set | OrderedId64Iterable): boolean {\r\n if (other instanceof MutableCompressedId64Set) {\r\n if (other === this)\r\n return true;\r\n\r\n if (typeof other !== \"string\")\r\n other = other.ids;\r\n }\r\n\r\n if (typeof other === \"string\")\r\n return other === this.ids;\r\n\r\n this.updateIds();\r\n return OrderedId64Iterable.areEqualSets(this, other);\r\n }\r\n\r\n private get _isDirty(): boolean {\r\n return !this._inserted.isEmpty || !this._deleted.isEmpty;\r\n }\r\n\r\n private updateIds(): void {\r\n if (!this._isDirty)\r\n return;\r\n\r\n const difference = OrderedId64Iterable.difference(CompressedId64Set.iterable(this._ids), this._deleted.ids);\r\n const union = { [Symbol.iterator]: () => OrderedId64Iterable.unionIterator(difference, this._inserted.ids) };\r\n this._ids = CompressedId64Set.compressIds(union);\r\n\r\n this._inserted.clear();\r\n this._deleted.clear();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"CompressedId64Set.js","sourceRoot":"","sources":["../../src/CompressedId64Set.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Ids\n */\n\nimport { assert } from \"./Assert\";\nimport { Id64, Id64Array, Id64Set, Id64String } from \"./Id\";\nimport { OrderedId64Iterable } from \"./OrderedId64Iterable\";\nimport { SortedArray } from \"./SortedArray\";\n\n/** @public */\nexport type CompressedId64Set = string;\n\n/** A compact string representation of an [[Id64Set]]. Such a representation is useful when serializing potentially very large\n * sets of Ids.\n * @see [[CompressedId64Set.iterable]] to efficiently iterate the Ids represented by a compact string.\n * @see [[CompressedId64Set.compressSet]] and [[CompressedId64Set.compressArray]] to produce a compact string from a collection of Ids.\n * @see [[CompressedId64Set.decompressSet]] and [[CompressedId64Set.decompressArray]] to produce a collection of Ids from a compact string.\n * @see [[OrderedId64Iterable]] for a generic representation of an ordered set of Ids (compressed or otherwise).\n * @see [[MutableCompressedId64Set]] for a mutable version.\n * @public\n */\nexport namespace CompressedId64Set { // eslint-disable-line @typescript-eslint/no-redeclare\n function isHexDigit(ch: number): boolean {\n // ascii values:\n // '0' = 48\n // '9' = 57\n // 'a' = 65\n // 'f' = 70\n\n return (ch >= 48 && ch <= 57) || (ch >= 65 && ch <= 70);\n }\n\n function compactRange(increment: Uint64, length: number): string {\n assert(length > 0);\n const inc = `+${increment.toString()}`;\n if (length <= 1)\n return inc;\n\n const len = length.toString(16).toUpperCase();\n return `${inc}*${len}`;\n }\n\n /** Given a set of [[Id64String]]s, produce a compact string representation. Useful when serializing potentially large sets of Ids.\n * @note Invalid Ids are ignored.\n * @see [[CompressedId64Set.sortAndCompress]] to compress any unordered collection of Ids.\n * @see [[CompressedId64Set.compressArray]] to perform the same operation on an [[Id64Array]].\n * @see [[CompressedId64Set.decompressSet]] to perform the inverse operation.\n */\n export function compressSet(ids: Id64Set): CompressedId64Set {\n return sortAndCompress(ids);\n }\n\n /** Create a sorted array from `ids`, then return a compact string representation of those Ids.\n * @see [[CompressedId64Set.compressIds]] if `ids` is known to already be sorted.\n */\n export function sortAndCompress(ids: Iterable<Id64String>): CompressedId64Set {\n // `string` is an Iterable<string>. In that case assume caller passed a single Id64String.\n const arr = typeof ids === \"string\" ? [ids] : Array.from(ids);\n OrderedId64Iterable.sortArray(arr);\n return compressArray(arr);\n }\n\n /** Give a **numerically-ordered** array of [[Id64String]]s, produce a compact string representation. Useful when serializing potentially large sets of Ids.\n * Duplicate Ids are included only once in the string representation.\n * @throws Error if two consecutive Ids `x` and `y` exist such that the numerical value of `x` is greater than that of `y` - i.e., the array is not properly sorted.\n * @note The array must be sorted according to the 64-bit numerical value of each Id.\n * @note Invalid Ids are ignored.\n * @see [[CompressedId64Set.decompressArray]] to perform the inverse operation.\n * @see [[OrderedId64Iterable.sortArray]] to ensure the Ids are properly sorted.\n * @see [[CompressedId64Set.sortAndCompress]] to compress any unordered collection of Ids.\n */\n export function compressArray(ids: Id64Array): CompressedId64Set {\n return compressIds(ids);\n }\n\n /** Give a **numerically-ordered** collection of [[Id64String]]s, produce a compact string representation. Useful when serializing potentially large sets of Ids.\n * Duplicate Ids are included only once in the string representation.\n * @throws Error if two consecutive Ids `x` and `y` exist such that the numerical value of `x` is greater than that of `y` - i.e., the collection is not properly sorted.\n * @note The collection must be sorted according to the 64-bit numerical value of each Id.\n * @note Invalid Ids are ignored.\n * @see [[CompressedId64Set.iterable]] to perform the inverse operation.\n * @see [[OrderedId64Iterable.sortArray]] or [[OrderedId64Iterable.compare]] to ensure the Ids are properly sorted.\n * @see [[CompressedId64Set.sortAndCompress]] to compress any unordered collection of Ids.\n */\n export function compressIds(ids: OrderedId64Iterable): CompressedId64Set {\n if (\"string\" === typeof ids)\n return ids;\n\n let str = \"\";\n\n const prevId = new Uint64();\n const rangeIncrement = new Uint64();\n let rangeLen = 0;\n\n const curId = new Uint64();\n const curIncrement = new Uint64();\n for (const id of ids) {\n if (!Id64.isValidId64(id))\n continue; // ignore garbage and invalid Ids (\"0\")\n\n curId.setFromId(id);\n curIncrement.setFromDifference(curId, prevId);\n\n const cmp = prevId.compare(curId);\n if (0 === cmp)\n continue; // ignore duplicates\n else if (cmp > 0)\n throw new Error(\"CompressedId64Set.compressArray requires a sorted array as input\");\n\n prevId.copyFrom(curId);\n\n if (0 === rangeLen) {\n rangeIncrement.copyFrom(curIncrement);\n rangeLen = 1;\n } else if (curIncrement.equals(rangeIncrement)) {\n ++rangeLen;\n } else {\n str += compactRange(rangeIncrement, rangeLen);\n rangeIncrement.copyFrom(curIncrement);\n rangeLen = 1;\n }\n }\n\n if (0 < rangeLen)\n str += compactRange(rangeIncrement, rangeLen);\n\n return str;\n }\n\n /** This exists strictly for the purposes of compressed sets of 64-bit Ids, to avoid the overhead of BigInt for handling 64-bit integers. */\n class Uint64 implements Id64.Uint32Pair {\n private static readonly _base = 0x100000000;\n\n private static assertUint32(num: number): void {\n assert(num >= 0);\n assert(num < Uint64._base);\n assert(Math.floor(num) === num);\n }\n\n private assertConstraints(): void {\n Uint64.assertUint32(this.lower);\n Uint64.assertUint32(this.upper);\n }\n\n constructor(public lower = 0, public upper = 0) {\n this.assertConstraints();\n }\n\n public compare(rhs: Uint64): number {\n const diff = this.upper - rhs.upper;\n return 0 === diff ? this.lower - rhs.lower : diff;\n }\n\n public equals(rhs: Uint64): boolean { return 0 === this.compare(rhs); }\n public isLessThan(rhs: Uint64): boolean { return this.compare(rhs) < 0; }\n public isGreaterThan(rhs: Uint64): boolean { return this.compare(rhs) > 0; }\n\n public get isZero(): boolean { return 0 === this.lower && 0 === this.upper; }\n\n public setFromDifference(lhs: Uint64, rhs: Uint64): void {\n assert(!rhs.isGreaterThan(lhs));\n\n this.lower = lhs.lower - rhs.lower;\n this.upper = lhs.upper - rhs.upper;\n if (this.lower < 0) {\n this.lower += Uint64._base;\n this.upper -= 1;\n }\n }\n\n public add(rhs: Uint64): void {\n let lower = rhs.lower;\n let upper = rhs.upper;\n if (lower + this.lower >= Uint64._base) {\n lower -= Uint64._base;\n upper += 1;\n }\n\n this.lower += lower;\n this.upper += upper;\n this.assertConstraints();\n }\n\n public setFromId(id: Id64String): void {\n Id64.getUint32Pair(id, this);\n }\n\n public copyFrom(other: Uint64): void {\n this.lower = other.lower;\n this.upper = other.upper;\n }\n\n public toString(): string {\n if (0 === this.upper)\n return this.lower.toString(16).toUpperCase();\n\n const upper = this.upper.toString(16);\n const lower = this.lower.toString(16).padStart(8, \"0\");\n assert(lower.length === 8);\n return `${upper}${lower}`.toUpperCase();\n }\n\n public toId64String(): string {\n return Id64.fromUint32Pair(this.lower, this.upper);\n }\n }\n\n /** Supplies an iterator over the [[Id64String]]s in a [[CompressedId64Set]].\n * The Ids are iterated in ascending order based on their unsigned 64-bit integer values.\n */\n export function* iterator(ids: CompressedId64Set): Iterator<Id64String> {\n if (0 === ids.length)\n return; // empty set.\n\n if (\"+\" !== ids[0])\n throw new Error(\"Invalid CompressedId64Set\");\n\n let curIndex = 1; // skip the leading '+'\n const curId = new Uint64();\n\n function parseUint32(): number {\n let value = 0;\n let nChars = 0;\n while (curIndex < ids.length && nChars < 8) {\n ++nChars;\n const ch = ids.charCodeAt(curIndex);\n if (!isHexDigit(ch))\n break; // not a hex digit in [0..9] or [A..F]\n\n value <<= 4;\n value |= (ch >= 65 ? ch - 65 + 10 : ch - 48); // ch - 'A' + 10 or ch - '0'\n value = value >>> 0; // restore unsignedness because silly javascript.\n ++curIndex;\n }\n\n return value;\n }\n\n function parseUint64(uint64: Uint64): void {\n let lower = 0;\n let upper = 0;\n\n // Read up to the first 8 digits.\n const startIndex = curIndex;\n const first = parseUint32();\n\n const nFirstDigits = curIndex - startIndex;\n assert(nFirstDigits <= 8);\n\n if (8 === nFirstDigits && curIndex + 1 < ids.length && isHexDigit(ids.charCodeAt(curIndex + 1))) {\n // We've got up to 8 more digits remaining\n const secondIndex = curIndex;\n const second = parseUint32();\n\n // Transfer excess digits from upper to lower.\n const nSecondDigits = curIndex - secondIndex;\n assert(nSecondDigits > 0 && nSecondDigits <= 8);\n\n const nDigitsToTransfer = 8 - nSecondDigits;\n upper = first >>> (4 * nDigitsToTransfer);\n const transfer = first - ((upper << (4 * nDigitsToTransfer)) >>> 0);\n lower = (second | ((transfer << (4 * nSecondDigits)) >>> 0)) >>> 0;\n } else {\n lower = first;\n }\n\n uint64.lower = lower;\n uint64.upper = upper;\n }\n\n const increment = new Uint64();\n while (curIndex < ids.length) {\n let multiplier = 1;\n parseUint64(increment);\n if (increment.isZero)\n throw new Error(\"Invalid CompressedId64Set\");\n\n if (curIndex < ids.length) {\n switch (ids[curIndex++]) {\n case \"*\":\n multiplier = parseUint32();\n if (0 === multiplier)\n throw new Error(\"Invalid CompressedId64Set\");\n\n if (curIndex !== ids.length && ids[curIndex++] !== \"+\")\n return;\n\n break;\n case \"+\":\n break;\n default:\n throw new Error(\"Invalid CompressedId64Set\");\n }\n }\n\n for (let i = 0; i < multiplier; i++) {\n curId.add(increment);\n yield curId.toId64String();\n }\n }\n }\n\n /** Supplies an iterable over the [[Id64String]]s in a [[CompressedId64Set]].\n * The Ids are iterated in ascending order based on their unsigned 64-bit integer values.\n */\n export function iterable(ids: CompressedId64Set): OrderedId64Iterable {\n return {\n [Symbol.iterator]: () => iterator(ids),\n };\n }\n\n /** Decompress the compact string representation of an [[Id64Set]] into an [[Id64Set]].\n * @param compressedIds The compact string representation.\n * @param out If supplied, the Ids will be inserted into this set rather than allocating and returning a new set.\n * @returns The set containing the decompressed Ids.\n * @throws Error if `compressedIds` is not a well-formed [[CompressedId64Set]].\n * @see [[CompressedId64Set.compressSet]] to perform the inverse operation.\n * @see [[CompressedId64Set.decompressArray]] to decompress as an [[Id64Array]] instead.\n * @see [[CompressedId64Set.iterable]] to efficiently iterate the Ids.\n */\n export function decompressSet(compressedIds: CompressedId64Set, out?: Id64Set): Id64Set {\n const set = out ?? new Set<string>();\n for (const id of iterable(compressedIds))\n set.add(id);\n\n return set;\n }\n\n /** Decompress the compact string representation of an [[Id64Set]] into an [[Id64Array]].\n * @param compressedIds The compact string representation.\n * @param out If supplied, the Ids will be appended to this array rather than allocating and returning a new array.\n * @returns The array containing the decompressed Ids.\n * @throws Error if `compressedIds` is not a well-formed [[CompressedId64Set]].\n * @note The Ids are decompressed and appended to the array in ascending order based on their 64-bit numerical values.\n * @see [[CompressedId64Set.compressArray]] to perform the inverse operation.\n * @see [[CompressedId64Set.decompressSet]] to decompress as an [[Id64Set]] instead.\n * @see [[CompressedId64Set.iterable]] to efficiently iterate the Ids.\n */\n export function decompressArray(compressedIds: CompressedId64Set, out?: Id64Array): Id64Array {\n const arr = out ?? [];\n for (const id of iterable(compressedIds))\n arr.push(id);\n\n return arr;\n }\n}\n\n/** A [[SortedArray]] of unique [[Id64String]]s sorted in ascending order by the 64-bit unsigned integer values of the Ids.\n * @see [[CompressedId64Set]] for an immutable compact string representation.\n * @public\n */\nexport class OrderedId64Array extends SortedArray<Id64String> {\n /** Construct a new, empty array. */\n public constructor() {\n super((lhs, rhs) => OrderedId64Iterable.compare(lhs, rhs));\n }\n\n /** An iterable that iterates over the Ids in sorted order. */\n public get ids(): OrderedId64Iterable { return this._array; }\n\n /** The underlying array of Ids. */\n public get array(): ReadonlyArray<Id64String> { return this._array; }\n}\n\n/** A mutable set of valid [[Id64String]]s sorted in ascending order by the 64-bit unsigned integer value of the Ids.\n * Internally the set of Ids is maintained as a [[CompressedId64Set]] string representation.\n * Insertions and removals are buffered until the string representation needs to be recomputed. The string representation is recomputed by every public method except [[add]] and [[delete]] -\n * therefore, if multiple removals and/or insertions are required, it is most efficient to perform them all before invoking other methods.\n * @public\n */\nexport class MutableCompressedId64Set implements OrderedId64Iterable {\n private _ids: CompressedId64Set;\n private readonly _inserted = new OrderedId64Array();\n private readonly _deleted = new OrderedId64Array();\n\n /** Construct a new set, optionally initialized to contain the Ids represented by `ids`. */\n public constructor(ids?: CompressedId64Set) {\n this._ids = ids ?? \"\";\n }\n\n /** Obtain the compact string representation of the contents of this set. If any insertions or removals are pending, they will be applied and the string recomputed. */\n public get ids(): CompressedId64Set {\n this.updateIds();\n return this._ids;\n }\n\n /** Add the specified Id to the set.\n * @throws Error if `id` is not a valid [[Id64String]].\n */\n public add(id: Id64String): void {\n if (!Id64.isValidId64(id))\n throw new Error(\"MutableCompressedId64Set.add: invalid Id\");\n\n this._deleted.remove(id);\n this._inserted.insert(id);\n }\n\n /** Remove the specified Id from the set.\n * @throws Error if `id` is not a valid [[Id64String]].\n */\n public delete(id: Id64String): void {\n if (!Id64.isValidId64(id))\n throw new Error(\"MutableCompressedId64Set.delete: invalid Id\");\n\n this._inserted.remove(id);\n this._deleted.insert(id);\n }\n\n /** Remove all Ids from the set. */\n public clear(): void {\n this._ids = \"\";\n this._inserted.clear();\n this._deleted.clear();\n }\n\n /** Remove all Ids from the set, then add the specified Ids. */\n public reset(ids?: CompressedId64Set): void {\n this.clear();\n this._ids = ids ?? \"\";\n }\n\n /** Obtain an iterator over the Ids in this set. The Ids are returned in ascending order based on their unsigned 64-bit integer values. */\n public [Symbol.iterator]() {\n return CompressedId64Set.iterator(this.ids);\n }\n\n /** Compute a compact string representation of the union of this and another set of Ids - i.e., those Ids present in either this and/or the other set. */\n public computeUnion(ids: OrderedId64Iterable | CompressedId64Set | MutableCompressedId64Set): CompressedId64Set {\n if (this.isEmpty)\n return CompressedId64Set.compressIds(ids);\n else if (OrderedId64Iterable.isEmptySet(ids) || this.equals(ids))\n return this.ids;\n\n return CompressedId64Set.compressIds(OrderedId64Iterable.union(this, ids));\n }\n\n /** Compute a compact string representation of the intersection of this and another set of Ids - i.e., those Ids present in both this and the other set. */\n public computeIntersection(ids: OrderedId64Iterable | CompressedId64Set | MutableCompressedId64Set): CompressedId64Set {\n if (this.equals(ids))\n return this.ids;\n else if (this.isEmpty || OrderedId64Iterable.isEmptySet(ids))\n return \"\";\n\n return CompressedId64Set.compressIds(OrderedId64Iterable.intersection(this, ids));\n }\n\n /** Compute a compact string representation of the difference between this and another set - i.e., those Ids present in this but not in the other set. */\n public computeDifference(ids: OrderedId64Iterable | CompressedId64Set | MutableCompressedId64Set): CompressedId64Set {\n if (this.isEmpty || this.equals(ids))\n return \"\";\n\n return CompressedId64Set.compressIds(OrderedId64Iterable.difference(this, ids));\n }\n\n /** Return true if this set contains no Ids. */\n public get isEmpty(): boolean {\n return OrderedId64Iterable.isEmptySet(this.ids);\n }\n\n /** Return true if the set of Ids represented by `other` is identical to those in this set.\n * @note This considers only the **distinct** Ids in `other` - duplicates are ignored.\n */\n public equals(other: CompressedId64Set | MutableCompressedId64Set | OrderedId64Iterable): boolean {\n if (other instanceof MutableCompressedId64Set) {\n if (other === this)\n return true;\n\n if (typeof other !== \"string\")\n other = other.ids;\n }\n\n if (typeof other === \"string\")\n return other === this.ids;\n\n this.updateIds();\n return OrderedId64Iterable.areEqualSets(this, other);\n }\n\n private get _isDirty(): boolean {\n return !this._inserted.isEmpty || !this._deleted.isEmpty;\n }\n\n private updateIds(): void {\n if (!this._isDirty)\n return;\n\n const difference = OrderedId64Iterable.difference(CompressedId64Set.iterable(this._ids), this._deleted.ids);\n const union = { [Symbol.iterator]: () => OrderedId64Iterable.unionIterator(difference, this._inserted.ids) };\n this._ids = CompressedId64Set.compressIds(union);\n\n this._inserted.clear();\n this._deleted.clear();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Dictionary.js","sourceRoot":"","sources":["../../src/Dictionary.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAiB,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,kBAAkB;IACd,KAAK,CAAM;IACX,OAAO,CAAM;IACb,SAAS,GAAG,CAAC,CAAC,CAAC;IAEvB,YAAmB,IAAS,EAAE,MAAW;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAEM,IAAI;QACT,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1C,0JAA0J;YAC1J,OAAO,EAAE,IAAI,EAAE,IAAI,EAAkD,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,KAAK,EAAE;oBACL,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC/B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACpC;gBACD,IAAI,EAAE,KAAK;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAaD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,UAAU;IACX,KAAK,GAAQ,EAAE,CAAC;IACP,YAAY,CAAuB;IACnC,SAAS,CAAmB;IACrC,OAAO,GAAQ,EAAE,CAAC;IACT,WAAW,CAAmB;IAEjD;;;;;OAKG;IACH,YAAmB,WAAiC,EAAE,WAA6B,YAAY,EAAE,aAA+B,YAAY;QAC1I,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,+CAA+C;IAC/C,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvD,sJAAsJ;IAC/I,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,kBAAkB,CAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,4EAA4E;IACrE,IAAI;QACT,QAAS,CAAC,CAAC,QAAQ,CAAC,IAAsB;YACxC,KAAK,MAAM,KAAK,IAAI,IAAI;gBACtB,MAAM,KAAK,CAAC,GAAG,CAAC;QACpB,CAAC;QAED,OAAO;YACL,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,wGAAwG;IACjG,MAAM;QACX,QAAS,CAAC,CAAC,QAAQ,CAAC,IAAsB;YACxC,KAAK,MAAM,KAAK,IAAI,IAAI;gBACtB,MAAM,KAAK,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,OAAO;YACL,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,+CAA+C;IACxC,KAAK;QACV,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,GAAM;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,GAAM;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,GAAM;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,GAAM,EAAE,KAAQ;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,GAAM,EAAE,KAAQ;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK;YACb,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAE/D,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,GAAM,EAAE,KAAQ;QACzB,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,YAAY;QACjB,MAAM,KAAK,GAAgC,EAAE,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACI,aAAa;QAClB,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,IAAgC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACO,UAAU,CAAC,GAAM,IAAuC,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAC3H","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Collections\r\n */\r\n\r\nimport { OrderedComparator } from \"./Compare\";\r\nimport { CloneFunction, lowerBound, shallowClone } from \"./SortedArray\";\r\n\r\nclass DictionaryIterator<K, V> implements Iterator<DictionaryEntry<K, V>> {\r\n private _keys: K[];\r\n private _values: V[];\r\n private _curIndex = -1;\r\n\r\n public constructor(keys: K[], values: V[]) {\r\n this._keys = keys;\r\n this._values = values;\r\n }\r\n\r\n public next(): IteratorResult<DictionaryEntry<K, V>> {\r\n if (++this._curIndex >= this._keys.length) {\r\n // The ECMAScript spec states that value=undefined is valid if done=true. The TypeScript interface violates the spec hence the cast to any and back below.\r\n return { done: true } as any as IteratorResult<DictionaryEntry<K, V>>;\r\n } else {\r\n return {\r\n value: {\r\n key: this._keys[this._curIndex],\r\n value: this._values[this._curIndex],\r\n },\r\n done: false,\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Represents an entry in a [[Dictionary]].\r\n * @public\r\n */\r\nexport interface DictionaryEntry<K, V> {\r\n /** The key used for lookup in the Dictionary. */\r\n key: K;\r\n /** The value associated with the key in the Dictionary. */\r\n value: V;\r\n}\r\n\r\n/**\r\n * Maintains a mapping of keys to values.\r\n * Unlike the standard Map<K, V>, a Dictionary<K, V> supports custom comparison logic for keys of object type (and for any other type).\r\n * The user supplies a key comparison function to the constructor, that must meet the following criteria given 'lhs' and 'rhs' of type K:\r\n * - If lhs is equal to rhs, returns 0\r\n * - If lhs is less than rhs, returns a negative value\r\n * - If lhs is greater than rhs, returns a positive value\r\n * - If compare(lhs, rhs) returns 0, then compare(rhs, lhs) must also return 0\r\n * - If compare(lhs, rhs) returns a negative value, then compare(rhs, lhs) must return a positive value, and vice versa.\r\n *\r\n * Modifying a key in a way that affects the comparison function will produce unpredictable results, the\r\n * most likely of which is that keys will cease to map to the values with which they were initially inserted.\r\n * @public\r\n */\r\nexport class Dictionary<K, V> implements Iterable<DictionaryEntry<K, V>> {\r\n protected _keys: K[] = [];\r\n protected readonly _compareKeys: OrderedComparator<K>;\r\n protected readonly _cloneKey: CloneFunction<K>;\r\n protected _values: V[] = [];\r\n protected readonly _cloneValue: CloneFunction<V>;\r\n\r\n /**\r\n * Construct a new Dictionary<K, V>.\r\n * @param compareKeys The function used to compare keys within the dictionary.\r\n * @param cloneKey The function invoked to clone a key for insertion into the dictionary. The default implementation simply returns its input.\r\n * @param cloneValue The function invoked to clone a value for insertion into the dictionary. The default implementation simply returns its input.\r\n */\r\n public constructor(compareKeys: OrderedComparator<K>, cloneKey: CloneFunction<K> = shallowClone, cloneValue: CloneFunction<V> = shallowClone) {\r\n this._compareKeys = compareKeys;\r\n this._cloneKey = cloneKey;\r\n this._cloneValue = cloneValue;\r\n }\r\n\r\n /** The number of entries in the dictionary. */\r\n public get size(): number { return this._keys.length; }\r\n\r\n /** Returns an iterator over the key-value pairs in the Dictionary suitable for use in `for-of` loops. Entries are returned in sorted order by key. */\r\n public [Symbol.iterator](): Iterator<DictionaryEntry<K, V>> {\r\n return new DictionaryIterator<K, V>(this._keys, this._values);\r\n }\r\n\r\n /** Provides iteration over the keys in this Dictionary, in sorted order. */\r\n public keys(): Iterable<K> {\r\n function * iterator(dict: Dictionary<K, V>) {\r\n for (const entry of dict)\r\n yield entry.key;\r\n }\r\n\r\n return {\r\n [Symbol.iterator]: () => iterator(this),\r\n };\r\n }\r\n\r\n /** Provides iteration over the values in this Dictionary, in sorted order by the corresponding keys. */\r\n public values(): Iterable<V> {\r\n function * iterator(dict: Dictionary<K, V>) {\r\n for (const entry of dict)\r\n yield entry.value;\r\n }\r\n\r\n return {\r\n [Symbol.iterator]: () => iterator(this),\r\n };\r\n }\r\n\r\n /** Removes all entries from this dictionary */\r\n public clear(): void {\r\n this._keys = [];\r\n this._values = [];\r\n }\r\n\r\n /**\r\n * Looks up a value by its key.\r\n * @param key The key to search for\r\n * @returns the value associated with the key, or undefined if the key is not present in the dictionary.\r\n */\r\n public get(key: K): V | undefined {\r\n const bound = this.lowerBound(key);\r\n return bound.equal ? this._values[bound.index] : undefined;\r\n }\r\n\r\n /**\r\n * Determines if an entry exists for the specified key\r\n * @param key The key to search for\r\n * @returns true if an entry exists in this dictionary corresponding to the specified key.\r\n */\r\n public has(key: K): boolean {\r\n return this.lowerBound(key).equal;\r\n }\r\n\r\n /**\r\n * Deletes a value using its key.\r\n * @param key The key to delete\r\n * @returns true if the key was found and deleted.\r\n */\r\n public delete(key: K): boolean {\r\n const bound = this.lowerBound(key);\r\n if (bound.equal) {\r\n this._values.splice(bound.index, 1);\r\n this._keys.splice(bound.index, 1);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Attempts to insert a new entry into the dictionary. If an entry with an equivalent key exists, the dictionary is unmodified.\r\n * If the new entry is in fact inserted, both the key and value will be cloned using the functions supplied to the dictionary's constructor.\r\n * @param key The key to associate with the value\r\n * @param value The value to associate with the key\r\n * @returns true if the new entry was inserted, false if an entry with an equivalent key already exists.\r\n */\r\n public insert(key: K, value: V): boolean {\r\n const result = this.findOrInsert(key, value);\r\n return result.inserted;\r\n }\r\n\r\n /** Obtains the value associated with the specified key, or inserts it if the specified key does not yet exist.\r\n * @param key The key to search for.\r\n * @param value The value to associate with `key` if `key` does not yet exist in the dictionary.\r\n * @returns The found or inserted value and a flag indicating whether the new value was inserted.\r\n */\r\n public findOrInsert(key: K, value: V): { value: V, inserted: boolean } {\r\n const bound = this.lowerBound(key);\r\n if (bound.equal)\r\n return { value: this._values[bound.index], inserted: false };\r\n\r\n value = this._cloneValue(value);\r\n this._keys.splice(bound.index, 0, this._cloneKey(key));\r\n this._values.splice(bound.index, 0, this._cloneValue(value));\r\n return { value, inserted: true };\r\n }\r\n\r\n /**\r\n * Sets the value associated with the specified key in the dictionary.\r\n * If no such key already exists, this is equivalent to insert(key, value); otherwise, the existing value associated with the key is replaced.\r\n * In either case, the value will be cloned using the function supplied to the dictionary's constructor.\r\n */\r\n public set(key: K, value: V): void {\r\n value = this._cloneValue(value);\r\n const bound = this.lowerBound(key);\r\n if (bound.equal) {\r\n this._values[bound.index] = value;\r\n } else {\r\n this._keys.splice(bound.index, 0, this._cloneKey(key));\r\n this._values.splice(bound.index, 0, value);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts the contents of this dictionary as an array of { key, value } pairs, and empties this dictionary.\r\n * @returns An array of { key, value } pairs sorted by key.\r\n */\r\n public extractPairs(): Array<{ key: K, value: V }> {\r\n const pairs: Array<{ key: K, value: V }> = [];\r\n for (let i = 0; i < this.size; i++)\r\n pairs.push({ key: this._keys[i], value: this._values[i] });\r\n\r\n this.clear();\r\n return pairs;\r\n }\r\n\r\n /**\r\n * Extracts the contents of this dictionary as a pair of { keys, values } arrays, and empties this dictionary.\r\n * The array of keys is sorted according to the comparison criterion.\r\n * The position of each value in the array of values corresponds the the position of the corresponding key in the array of keys.\r\n * @returns a pair of { keys, values } arrays in which key[i] corresponds to value[i] in this dictionary and the keys are in sorted order.\r\n */\r\n public extractArrays(): { keys: K[], values: V[] } {\r\n const result = { keys: this._keys, values: this._values };\r\n this.clear();\r\n return result;\r\n }\r\n\r\n /** Apply a function to each (key, value) pair in the dictionary, in sorted order.\r\n * @param func The function to be applied.\r\n */\r\n public forEach(func: (key: K, value: V) => void): void {\r\n for (let i = 0; i < this.size; i++)\r\n func(this._keys[i], this._values[i]);\r\n }\r\n\r\n /**\r\n * Computes the position at which the specified key should be inserted to maintain sorted order.\r\n * @param key The key whose position is to be computed.\r\n * @returns an object with 'index' corresponding to the computed position and 'equal' set to true if an equivalent key already exists at that index.\r\n */\r\n protected lowerBound(key: K): { index: number, equal: boolean } { return lowerBound(key, this._keys, this._compareKeys); }\r\n}\r\n"]}
1
+ {"version":3,"file":"Dictionary.js","sourceRoot":"","sources":["../../src/Dictionary.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAiB,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAExE,MAAM,kBAAkB;IACd,KAAK,CAAM;IACX,OAAO,CAAM;IACb,SAAS,GAAG,CAAC,CAAC,CAAC;IAEvB,YAAmB,IAAS,EAAE,MAAW;QACvC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAEM,IAAI;QACT,IAAI,EAAE,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC1C,0JAA0J;YAC1J,OAAO,EAAE,IAAI,EAAE,IAAI,EAAkD,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,KAAK,EAAE;oBACL,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;oBAC/B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;iBACpC;gBACD,IAAI,EAAE,KAAK;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAaD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,UAAU;IACX,KAAK,GAAQ,EAAE,CAAC;IACP,YAAY,CAAuB;IACnC,SAAS,CAAmB;IACrC,OAAO,GAAQ,EAAE,CAAC;IACT,WAAW,CAAmB;IAEjD;;;;;OAKG;IACH,YAAmB,WAAiC,EAAE,WAA6B,YAAY,EAAE,aAA+B,YAAY;QAC1I,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAChC,CAAC;IAED,+CAA+C;IAC/C,IAAW,IAAI,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAEvD,sJAAsJ;IAC/I,CAAC,MAAM,CAAC,QAAQ,CAAC;QACtB,OAAO,IAAI,kBAAkB,CAAO,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAChE,CAAC;IAED,4EAA4E;IACrE,IAAI;QACT,QAAS,CAAC,CAAC,QAAQ,CAAC,IAAsB;YACxC,KAAK,MAAM,KAAK,IAAI,IAAI;gBACtB,MAAM,KAAK,CAAC,GAAG,CAAC;QACpB,CAAC;QAED,OAAO;YACL,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,wGAAwG;IACjG,MAAM;QACX,QAAS,CAAC,CAAC,QAAQ,CAAC,IAAsB;YACxC,KAAK,MAAM,KAAK,IAAI,IAAI;gBACtB,MAAM,KAAK,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,OAAO;YACL,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,+CAA+C;IACxC,KAAK;QACV,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,GAAM;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,GAAM;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,GAAM;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,GAAM,EAAE,KAAQ;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,GAAM,EAAE,KAAQ;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK;YACb,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAE/D,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,GAAM,EAAE,KAAQ;QACzB,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;QACpC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,YAAY;QACjB,MAAM,KAAK,GAAgC,EAAE,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YAChC,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;OAKG;IACI,aAAa;QAClB,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACI,OAAO,CAAC,IAAgC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACO,UAAU,CAAC,GAAM,IAAuC,OAAO,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAC3H","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Collections\n */\n\nimport { OrderedComparator } from \"./Compare\";\nimport { CloneFunction, lowerBound, shallowClone } from \"./SortedArray\";\n\nclass DictionaryIterator<K, V> implements Iterator<DictionaryEntry<K, V>> {\n private _keys: K[];\n private _values: V[];\n private _curIndex = -1;\n\n public constructor(keys: K[], values: V[]) {\n this._keys = keys;\n this._values = values;\n }\n\n public next(): IteratorResult<DictionaryEntry<K, V>> {\n if (++this._curIndex >= this._keys.length) {\n // The ECMAScript spec states that value=undefined is valid if done=true. The TypeScript interface violates the spec hence the cast to any and back below.\n return { done: true } as any as IteratorResult<DictionaryEntry<K, V>>;\n } else {\n return {\n value: {\n key: this._keys[this._curIndex],\n value: this._values[this._curIndex],\n },\n done: false,\n };\n }\n }\n}\n\n/**\n * Represents an entry in a [[Dictionary]].\n * @public\n */\nexport interface DictionaryEntry<K, V> {\n /** The key used for lookup in the Dictionary. */\n key: K;\n /** The value associated with the key in the Dictionary. */\n value: V;\n}\n\n/**\n * Maintains a mapping of keys to values.\n * Unlike the standard Map<K, V>, a Dictionary<K, V> supports custom comparison logic for keys of object type (and for any other type).\n * The user supplies a key comparison function to the constructor, that must meet the following criteria given 'lhs' and 'rhs' of type K:\n * - If lhs is equal to rhs, returns 0\n * - If lhs is less than rhs, returns a negative value\n * - If lhs is greater than rhs, returns a positive value\n * - If compare(lhs, rhs) returns 0, then compare(rhs, lhs) must also return 0\n * - If compare(lhs, rhs) returns a negative value, then compare(rhs, lhs) must return a positive value, and vice versa.\n *\n * Modifying a key in a way that affects the comparison function will produce unpredictable results, the\n * most likely of which is that keys will cease to map to the values with which they were initially inserted.\n * @public\n */\nexport class Dictionary<K, V> implements Iterable<DictionaryEntry<K, V>> {\n protected _keys: K[] = [];\n protected readonly _compareKeys: OrderedComparator<K>;\n protected readonly _cloneKey: CloneFunction<K>;\n protected _values: V[] = [];\n protected readonly _cloneValue: CloneFunction<V>;\n\n /**\n * Construct a new Dictionary<K, V>.\n * @param compareKeys The function used to compare keys within the dictionary.\n * @param cloneKey The function invoked to clone a key for insertion into the dictionary. The default implementation simply returns its input.\n * @param cloneValue The function invoked to clone a value for insertion into the dictionary. The default implementation simply returns its input.\n */\n public constructor(compareKeys: OrderedComparator<K>, cloneKey: CloneFunction<K> = shallowClone, cloneValue: CloneFunction<V> = shallowClone) {\n this._compareKeys = compareKeys;\n this._cloneKey = cloneKey;\n this._cloneValue = cloneValue;\n }\n\n /** The number of entries in the dictionary. */\n public get size(): number { return this._keys.length; }\n\n /** Returns an iterator over the key-value pairs in the Dictionary suitable for use in `for-of` loops. Entries are returned in sorted order by key. */\n public [Symbol.iterator](): Iterator<DictionaryEntry<K, V>> {\n return new DictionaryIterator<K, V>(this._keys, this._values);\n }\n\n /** Provides iteration over the keys in this Dictionary, in sorted order. */\n public keys(): Iterable<K> {\n function * iterator(dict: Dictionary<K, V>) {\n for (const entry of dict)\n yield entry.key;\n }\n\n return {\n [Symbol.iterator]: () => iterator(this),\n };\n }\n\n /** Provides iteration over the values in this Dictionary, in sorted order by the corresponding keys. */\n public values(): Iterable<V> {\n function * iterator(dict: Dictionary<K, V>) {\n for (const entry of dict)\n yield entry.value;\n }\n\n return {\n [Symbol.iterator]: () => iterator(this),\n };\n }\n\n /** Removes all entries from this dictionary */\n public clear(): void {\n this._keys = [];\n this._values = [];\n }\n\n /**\n * Looks up a value by its key.\n * @param key The key to search for\n * @returns the value associated with the key, or undefined if the key is not present in the dictionary.\n */\n public get(key: K): V | undefined {\n const bound = this.lowerBound(key);\n return bound.equal ? this._values[bound.index] : undefined;\n }\n\n /**\n * Determines if an entry exists for the specified key\n * @param key The key to search for\n * @returns true if an entry exists in this dictionary corresponding to the specified key.\n */\n public has(key: K): boolean {\n return this.lowerBound(key).equal;\n }\n\n /**\n * Deletes a value using its key.\n * @param key The key to delete\n * @returns true if the key was found and deleted.\n */\n public delete(key: K): boolean {\n const bound = this.lowerBound(key);\n if (bound.equal) {\n this._values.splice(bound.index, 1);\n this._keys.splice(bound.index, 1);\n return true;\n } else {\n return false;\n }\n }\n\n /**\n * Attempts to insert a new entry into the dictionary. If an entry with an equivalent key exists, the dictionary is unmodified.\n * If the new entry is in fact inserted, both the key and value will be cloned using the functions supplied to the dictionary's constructor.\n * @param key The key to associate with the value\n * @param value The value to associate with the key\n * @returns true if the new entry was inserted, false if an entry with an equivalent key already exists.\n */\n public insert(key: K, value: V): boolean {\n const result = this.findOrInsert(key, value);\n return result.inserted;\n }\n\n /** Obtains the value associated with the specified key, or inserts it if the specified key does not yet exist.\n * @param key The key to search for.\n * @param value The value to associate with `key` if `key` does not yet exist in the dictionary.\n * @returns The found or inserted value and a flag indicating whether the new value was inserted.\n */\n public findOrInsert(key: K, value: V): { value: V, inserted: boolean } {\n const bound = this.lowerBound(key);\n if (bound.equal)\n return { value: this._values[bound.index], inserted: false };\n\n value = this._cloneValue(value);\n this._keys.splice(bound.index, 0, this._cloneKey(key));\n this._values.splice(bound.index, 0, this._cloneValue(value));\n return { value, inserted: true };\n }\n\n /**\n * Sets the value associated with the specified key in the dictionary.\n * If no such key already exists, this is equivalent to insert(key, value); otherwise, the existing value associated with the key is replaced.\n * In either case, the value will be cloned using the function supplied to the dictionary's constructor.\n */\n public set(key: K, value: V): void {\n value = this._cloneValue(value);\n const bound = this.lowerBound(key);\n if (bound.equal) {\n this._values[bound.index] = value;\n } else {\n this._keys.splice(bound.index, 0, this._cloneKey(key));\n this._values.splice(bound.index, 0, value);\n }\n }\n\n /**\n * Extracts the contents of this dictionary as an array of { key, value } pairs, and empties this dictionary.\n * @returns An array of { key, value } pairs sorted by key.\n */\n public extractPairs(): Array<{ key: K, value: V }> {\n const pairs: Array<{ key: K, value: V }> = [];\n for (let i = 0; i < this.size; i++)\n pairs.push({ key: this._keys[i], value: this._values[i] });\n\n this.clear();\n return pairs;\n }\n\n /**\n * Extracts the contents of this dictionary as a pair of { keys, values } arrays, and empties this dictionary.\n * The array of keys is sorted according to the comparison criterion.\n * The position of each value in the array of values corresponds the the position of the corresponding key in the array of keys.\n * @returns a pair of { keys, values } arrays in which key[i] corresponds to value[i] in this dictionary and the keys are in sorted order.\n */\n public extractArrays(): { keys: K[], values: V[] } {\n const result = { keys: this._keys, values: this._values };\n this.clear();\n return result;\n }\n\n /** Apply a function to each (key, value) pair in the dictionary, in sorted order.\n * @param func The function to be applied.\n */\n public forEach(func: (key: K, value: V) => void): void {\n for (let i = 0; i < this.size; i++)\n func(this._keys[i], this._values[i]);\n }\n\n /**\n * Computes the position at which the specified key should be inserted to maintain sorted order.\n * @param key The key whose position is to be computed.\n * @returns an object with 'index' corresponding to the computed position and 'equal' set to true if an equivalent key already exists at that index.\n */\n protected lowerBound(key: K): { index: number, equal: boolean } { return lowerBound(key, this._keys, this._compareKeys); }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Disposable.js","sourceRoot":"","sources":["../../src/Disposable.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\n/* eslint-disable @typescript-eslint/no-deprecated */\r\n(Symbol as any).dispose ??= Symbol(\"Symbol.dispose\");\r\n(Symbol as any).asyncDispose ??= Symbol(\"Symbol.asyncDispose\");\r\n\r\n/** Interface adopted by a type which has deterministic cleanup logic.\r\n * For example:\r\n * - Most rendering-related types, such as [[RenderGraphic]] and [[Viewport]], own WebGL resources which must be explicitly released when no longer needed.\r\n * - Some low-level objects like [[ECDb]] own native types defined in C++ code which must be explicitly released when no longer needed.\r\n *\r\n * A similar concept exists in languages like C++ (implemented as \"destructors\") and C# (\"IDisposable\").\r\n * However, because TypeScript and Javascript lack any built-in support for deterministic destruction, it is up to the programmer to ensure dispose() is called appropriately.\r\n * Failure to do so may result in memory leaks or leaking of other resources.\r\n *\r\n * IDisposable tends to be contagious; that is, if a type has members which implement IDisposable, that type should also implement IDisposable to dispose of those members.\r\n *\r\n * Implementations of IDisposable tend to be more \"low-level\" types. The disposal of such types is often handled on your behalf.\r\n * However, always consult the documentation for an IDisposable type to determine under what circumstances you are expected to explicitly dispose of it.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use builtin Disposable type instead.\r\n * @public\r\n */\r\nexport interface IDisposable {\r\n /** Disposes of any resources owned by this object.\r\n * @note The object is generally considered unusable after it has been disposed of.\r\n */\r\n dispose(): void;\r\n}\r\n\r\n/**\r\n * A type guard that checks whether the given argument implements `IDisposable` interface\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use isDisposable instead.\r\n * @public\r\n */\r\nexport function isIDisposable(obj: unknown): obj is IDisposable {\r\n return !!obj && (obj instanceof Object) && !!(obj as IDisposable).dispose && (typeof (obj as IDisposable).dispose === \"function\");\r\n}\r\n\r\n/**\r\n * A type guard that checks whether the given argument implements `Disposable` interface\r\n * @public\r\n */\r\nexport function isDisposable(obj: unknown): obj is Disposable {\r\n return !!obj && (obj instanceof Object) && !!(obj as Disposable)[Symbol.dispose] && (typeof (obj as Disposable)[Symbol.dispose] === \"function\");\r\n}\r\n\r\n/** Convenience function for disposing of a disposable object that may be undefined.\r\n * This is primarily used to simplify implementations of [[IDisposable.dispose]].\r\n * As a simple example:\r\n * ```ts\r\n * class Disposable implements IDisposable {\r\n * public member1?: DisposableType1;\r\n * public member2?: DisposableType2;\r\n *\r\n * public dispose() {\r\n * this.member1 = dispose(this.member1); // If member1 is defined, dispose of it and set it to undefined.\r\n * this.member2 = dispose(this.member2); // Likewise for member2.\r\n * }\r\n * }\r\n * ```\r\n * @param disposable The object to be disposed of.\r\n * @returns undefined\r\n * @public\r\n */\r\nexport function dispose(disposable?: Disposable): undefined;\r\n/**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use builtin Disposable type instead.\r\n * @public\r\n */\r\nexport function dispose(disposable?: IDisposable): undefined; // eslint-disable-line @typescript-eslint/unified-signatures\r\nexport function dispose(disposable?: Disposable | IDisposable): undefined {\r\n if (undefined !== disposable) {\r\n if (Symbol.dispose in disposable)\r\n disposable[Symbol.dispose]();\r\n else\r\n disposable.dispose();\r\n }\r\n return undefined;\r\n}\r\n\r\n/** Disposes of and empties a list of disposable objects.\r\n * @param list The list of disposable objects.\r\n * @returns undefined\r\n * @public\r\n */\r\nexport function disposeArray(list?: Disposable[]): undefined;\r\n/**\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use builtin Disposable type instead.\r\n * @public\r\n */\r\nexport function disposeArray(list?: IDisposable[]): undefined; // eslint-disable-line @typescript-eslint/unified-signatures\r\nexport function disposeArray(list?: Disposable[] | IDisposable[]): undefined {\r\n if (undefined === list)\r\n return undefined;\r\n\r\n for (const entry of list) {\r\n if (Symbol.dispose in entry)\r\n entry[Symbol.dispose]();\r\n else\r\n entry.dispose();\r\n }\r\n\r\n list.length = 0;\r\n return undefined;\r\n}\r\n\r\n/** A 'using' function which is a substitution for .NET's using statement. It makes sure that 'dispose'\r\n * is called on the resource no matter if the func returns or throws. If func returns, the return value\r\n * of this function is equal to return value of func. If func throws, this function also throws (after\r\n * disposing the resource).\r\n * @public\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `using` declarations instead.\r\n */\r\nexport function using<T extends IDisposable, TResult>(resources: T | T[], func: (...r: T[]) => TResult): TResult {\r\n if (!Array.isArray(resources))\r\n return using([resources], func);\r\n\r\n const doDispose = () => resources.forEach((disposable) => disposable.dispose());\r\n let shouldDisposeImmediately = true;\r\n\r\n try {\r\n const result = func(...resources);\r\n if (result instanceof Promise) {\r\n shouldDisposeImmediately = false;\r\n result.then(doDispose, doDispose);\r\n }\r\n return result;\r\n } finally {\r\n if (shouldDisposeImmediately)\r\n doDispose();\r\n }\r\n}\r\n\r\n/** A definition of function which may be called to dispose an object\r\n * @public\r\n */\r\nexport type DisposeFunc = () => void;\r\n\r\nclass FuncDisposable implements IDisposable {\r\n private _disposeFunc: () => void;\r\n constructor(disposeFunc: () => void) { this._disposeFunc = disposeFunc; }\r\n public dispose() { this._disposeFunc(); }\r\n}\r\n\r\n/** A disposable container of disposable objects.\r\n * @public\r\n */\r\nexport class DisposableList implements IDisposable {\r\n private _disposables: IDisposable[];\r\n\r\n /** Creates a disposable list. */\r\n constructor(disposables: Array<IDisposable | DisposeFunc> = []) {\r\n this._disposables = [];\r\n disposables.forEach((disposable) => {\r\n this.add(disposable);\r\n });\r\n }\r\n\r\n private isDisposable(x: IDisposable | DisposeFunc): x is IDisposable {\r\n return (x as IDisposable).dispose !== undefined;\r\n }\r\n\r\n /** Register an object for disposal. */\r\n public add(disposable: IDisposable | DisposeFunc) {\r\n if (this.isDisposable(disposable))\r\n this._disposables.push(disposable);\r\n else\r\n this._disposables.push(new FuncDisposable(disposable));\r\n }\r\n\r\n /** Unregister disposable object. */\r\n public remove(disposable: IDisposable): void {\r\n const idx = this._disposables.indexOf(disposable);\r\n if (-1 !== idx)\r\n this._disposables.splice(idx, 1);\r\n }\r\n\r\n /** Disposes all registered objects. */\r\n public dispose(): void {\r\n for (const disposable of this._disposables)\r\n disposable.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Disposable.js","sourceRoot":"","sources":["../../src/Disposable.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Utils\n */\n\n/* eslint-disable @typescript-eslint/no-deprecated */\n(Symbol as any).dispose ??= Symbol(\"Symbol.dispose\");\n(Symbol as any).asyncDispose ??= Symbol(\"Symbol.asyncDispose\");\n\n/** Interface adopted by a type which has deterministic cleanup logic.\n * For example:\n * - Most rendering-related types, such as [[RenderGraphic]] and [[Viewport]], own WebGL resources which must be explicitly released when no longer needed.\n * - Some low-level objects like [[ECDb]] own native types defined in C++ code which must be explicitly released when no longer needed.\n *\n * A similar concept exists in languages like C++ (implemented as \"destructors\") and C# (\"IDisposable\").\n * However, because TypeScript and Javascript lack any built-in support for deterministic destruction, it is up to the programmer to ensure dispose() is called appropriately.\n * Failure to do so may result in memory leaks or leaking of other resources.\n *\n * IDisposable tends to be contagious; that is, if a type has members which implement IDisposable, that type should also implement IDisposable to dispose of those members.\n *\n * Implementations of IDisposable tend to be more \"low-level\" types. The disposal of such types is often handled on your behalf.\n * However, always consult the documentation for an IDisposable type to determine under what circumstances you are expected to explicitly dispose of it.\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use builtin Disposable type instead.\n * @public\n */\nexport interface IDisposable {\n /** Disposes of any resources owned by this object.\n * @note The object is generally considered unusable after it has been disposed of.\n */\n dispose(): void;\n}\n\n/**\n * A type guard that checks whether the given argument implements `IDisposable` interface\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use isDisposable instead.\n * @public\n */\nexport function isIDisposable(obj: unknown): obj is IDisposable {\n return !!obj && (obj instanceof Object) && !!(obj as IDisposable).dispose && (typeof (obj as IDisposable).dispose === \"function\");\n}\n\n/**\n * A type guard that checks whether the given argument implements `Disposable` interface\n * @public\n */\nexport function isDisposable(obj: unknown): obj is Disposable {\n return !!obj && (obj instanceof Object) && !!(obj as Disposable)[Symbol.dispose] && (typeof (obj as Disposable)[Symbol.dispose] === \"function\");\n}\n\n/** Convenience function for disposing of a disposable object that may be undefined.\n * This is primarily used to simplify implementations of [[IDisposable.dispose]].\n * As a simple example:\n * ```ts\n * class Disposable implements IDisposable {\n * public member1?: DisposableType1;\n * public member2?: DisposableType2;\n *\n * public dispose() {\n * this.member1 = dispose(this.member1); // If member1 is defined, dispose of it and set it to undefined.\n * this.member2 = dispose(this.member2); // Likewise for member2.\n * }\n * }\n * ```\n * @param disposable The object to be disposed of.\n * @returns undefined\n * @public\n */\nexport function dispose(disposable?: Disposable): undefined;\n/**\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use builtin Disposable type instead.\n * @public\n */\nexport function dispose(disposable?: IDisposable): undefined; // eslint-disable-line @typescript-eslint/unified-signatures\nexport function dispose(disposable?: Disposable | IDisposable): undefined {\n if (undefined !== disposable) {\n if (Symbol.dispose in disposable)\n disposable[Symbol.dispose]();\n else\n disposable.dispose();\n }\n return undefined;\n}\n\n/** Disposes of and empties a list of disposable objects.\n * @param list The list of disposable objects.\n * @returns undefined\n * @public\n */\nexport function disposeArray(list?: Disposable[]): undefined;\n/**\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use builtin Disposable type instead.\n * @public\n */\nexport function disposeArray(list?: IDisposable[]): undefined; // eslint-disable-line @typescript-eslint/unified-signatures\nexport function disposeArray(list?: Disposable[] | IDisposable[]): undefined {\n if (undefined === list)\n return undefined;\n\n for (const entry of list) {\n if (Symbol.dispose in entry)\n entry[Symbol.dispose]();\n else\n entry.dispose();\n }\n\n list.length = 0;\n return undefined;\n}\n\n/** A 'using' function which is a substitution for .NET's using statement. It makes sure that 'dispose'\n * is called on the resource no matter if the func returns or throws. If func returns, the return value\n * of this function is equal to return value of func. If func throws, this function also throws (after\n * disposing the resource).\n * @public\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `using` declarations instead.\n */\nexport function using<T extends IDisposable, TResult>(resources: T | T[], func: (...r: T[]) => TResult): TResult {\n if (!Array.isArray(resources))\n return using([resources], func);\n\n const doDispose = () => resources.forEach((disposable) => disposable.dispose());\n let shouldDisposeImmediately = true;\n\n try {\n const result = func(...resources);\n if (result instanceof Promise) {\n shouldDisposeImmediately = false;\n result.then(doDispose, doDispose);\n }\n return result;\n } finally {\n if (shouldDisposeImmediately)\n doDispose();\n }\n}\n\n/** A definition of function which may be called to dispose an object\n * @public\n */\nexport type DisposeFunc = () => void;\n\nclass FuncDisposable implements IDisposable {\n private _disposeFunc: () => void;\n constructor(disposeFunc: () => void) { this._disposeFunc = disposeFunc; }\n public dispose() { this._disposeFunc(); }\n}\n\n/** A disposable container of disposable objects.\n * @public\n */\nexport class DisposableList implements IDisposable {\n private _disposables: IDisposable[];\n\n /** Creates a disposable list. */\n constructor(disposables: Array<IDisposable | DisposeFunc> = []) {\n this._disposables = [];\n disposables.forEach((disposable) => {\n this.add(disposable);\n });\n }\n\n private isDisposable(x: IDisposable | DisposeFunc): x is IDisposable {\n return (x as IDisposable).dispose !== undefined;\n }\n\n /** Register an object for disposal. */\n public add(disposable: IDisposable | DisposeFunc) {\n if (this.isDisposable(disposable))\n this._disposables.push(disposable);\n else\n this._disposables.push(new FuncDisposable(disposable));\n }\n\n /** Unregister disposable object. */\n public remove(disposable: IDisposable): void {\n const idx = this._disposables.indexOf(disposable);\n if (-1 !== idx)\n this._disposables.splice(idx, 1);\n }\n\n /** Disposes all registered objects. */\n public dispose(): void {\n for (const disposable of this._disposables)\n disposable.dispose();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"Expect.js","sourceRoot":"","sources":["../../src/Expect.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAI,KAAoB,EAAE,OAAgB;IACrE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,qDAAqD,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAI,KAAe,EAAE,OAAgB;IAChE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,iDAAiD,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/**\r\n * Expects that a value is defined (not undefined).\r\n * @note Almost always, places that use this function should in the future be cleaned up to properly\r\n * handle undefined values instead of throwing an error.\r\n * @param value The value to check.\r\n * @param message Optional error message to be used in thrown Error.\r\n * @returns The original value if it is defined.\r\n * @throws Error if the value is undefined.\r\n * @internal\r\n */\r\nexport function expectDefined<T>(value: T | undefined, message?: string): T {\r\n if (value === undefined) {\r\n throw new Error(message ?? \"Expected value to be defined, but it was undefined.\");\r\n }\r\n return value;\r\n}\r\n\r\n/**\r\n * Expects that a value is not null.\r\n * @note Almost always, places that use this function should in the future be cleaned up to properly\r\n * handle null values instead of throwing an error.\r\n * @param value The value to check.\r\n * @param message Optional error message to be used in thrown Error.\r\n * @returns The original value if it is not null.\r\n * @throws Error if the value is null.\r\n * @internal\r\n */\r\nexport function expectNotNull<T>(value: T | null, message?: string): T {\r\n if (value === null) {\r\n throw new Error(message ?? \"Expected value to be not null, but it was null.\");\r\n }\r\n return value;\r\n}\r\n"]}
1
+ {"version":3,"file":"Expect.js","sourceRoot":"","sources":["../../src/Expect.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAE/F;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAI,KAAoB,EAAE,OAAgB;IACrE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,qDAAqD,CAAC,CAAC;IACpF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAI,KAAe,EAAE,OAAgB;IAChE,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,iDAAiD,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/**\n * Expects that a value is defined (not undefined).\n * @note Almost always, places that use this function should in the future be cleaned up to properly\n * handle undefined values instead of throwing an error.\n * @param value The value to check.\n * @param message Optional error message to be used in thrown Error.\n * @returns The original value if it is defined.\n * @throws Error if the value is undefined.\n * @internal\n */\nexport function expectDefined<T>(value: T | undefined, message?: string): T {\n if (value === undefined) {\n throw new Error(message ?? \"Expected value to be defined, but it was undefined.\");\n }\n return value;\n}\n\n/**\n * Expects that a value is not null.\n * @note Almost always, places that use this function should in the future be cleaned up to properly\n * handle null values instead of throwing an error.\n * @param value The value to check.\n * @param message Optional error message to be used in thrown Error.\n * @returns The original value if it is not null.\n * @throws Error if the value is null.\n * @internal\n */\nexport function expectNotNull<T>(value: T | null, message?: string): T {\n if (value === null) {\n throw new Error(message ?? \"Expected value to be not null, but it was null.\");\n }\n return value;\n}\n"]}