@itwin/core-bentley 3.4.0-dev.8 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +49 -1
  2. package/lib/cjs/ByteStream.d.ts.map +1 -1
  3. package/lib/cjs/ByteStream.js +14 -4
  4. package/lib/cjs/ByteStream.js.map +1 -1
  5. package/lib/cjs/Compare.d.ts.map +1 -1
  6. package/lib/cjs/Compare.js +18 -6
  7. package/lib/cjs/Compare.js.map +1 -1
  8. package/lib/cjs/Dictionary.d.ts.map +1 -1
  9. package/lib/cjs/Dictionary.js.map +1 -1
  10. package/lib/cjs/Id.d.ts.map +1 -1
  11. package/lib/cjs/Id.js +15 -5
  12. package/lib/cjs/Id.js.map +1 -1
  13. package/lib/cjs/JsonUtils.d.ts.map +1 -1
  14. package/lib/cjs/JsonUtils.js +34 -16
  15. package/lib/cjs/JsonUtils.js.map +1 -1
  16. package/lib/cjs/LRUMap.d.ts.map +1 -1
  17. package/lib/cjs/LRUMap.js.map +1 -1
  18. package/lib/cjs/OneAtATimeAction.d.ts.map +1 -1
  19. package/lib/cjs/OneAtATimeAction.js +4 -1
  20. package/lib/cjs/OneAtATimeAction.js.map +1 -1
  21. package/lib/cjs/SortedArray.d.ts.map +1 -1
  22. package/lib/cjs/SortedArray.js +3 -1
  23. package/lib/cjs/SortedArray.js.map +1 -1
  24. package/lib/cjs/StringUtils.d.ts.map +1 -1
  25. package/lib/cjs/StringUtils.js +3 -1
  26. package/lib/cjs/StringUtils.js.map +1 -1
  27. package/lib/cjs/Time.d.ts +1 -1
  28. package/lib/cjs/Time.d.ts.map +1 -1
  29. package/lib/cjs/Time.js +9 -3
  30. package/lib/cjs/Time.js.map +1 -1
  31. package/lib/cjs/Tracing.d.ts +2 -2
  32. package/lib/cjs/Tracing.d.ts.map +1 -1
  33. package/lib/cjs/Tracing.js +4 -1
  34. package/lib/cjs/Tracing.js.map +1 -1
  35. package/lib/cjs/TypedArrayBuilder.d.ts +98 -0
  36. package/lib/cjs/TypedArrayBuilder.d.ts.map +1 -0
  37. package/lib/cjs/TypedArrayBuilder.js +135 -0
  38. package/lib/cjs/TypedArrayBuilder.js.map +1 -0
  39. package/lib/cjs/UnexpectedErrors.d.ts.map +1 -1
  40. package/lib/cjs/UnexpectedErrors.js +5 -2
  41. package/lib/cjs/UnexpectedErrors.js.map +1 -1
  42. package/lib/cjs/core-bentley.d.ts +1 -0
  43. package/lib/cjs/core-bentley.d.ts.map +1 -1
  44. package/lib/cjs/core-bentley.js +1 -0
  45. package/lib/cjs/core-bentley.js.map +1 -1
  46. package/lib/esm/ByteStream.d.ts.map +1 -1
  47. package/lib/esm/ByteStream.js +14 -4
  48. package/lib/esm/ByteStream.js.map +1 -1
  49. package/lib/esm/Compare.d.ts.map +1 -1
  50. package/lib/esm/Compare.js +18 -6
  51. package/lib/esm/Compare.js.map +1 -1
  52. package/lib/esm/Dictionary.d.ts.map +1 -1
  53. package/lib/esm/Dictionary.js.map +1 -1
  54. package/lib/esm/Id.d.ts.map +1 -1
  55. package/lib/esm/Id.js +15 -5
  56. package/lib/esm/Id.js.map +1 -1
  57. package/lib/esm/JsonUtils.d.ts.map +1 -1
  58. package/lib/esm/JsonUtils.js +34 -16
  59. package/lib/esm/JsonUtils.js.map +1 -1
  60. package/lib/esm/LRUMap.d.ts.map +1 -1
  61. package/lib/esm/LRUMap.js.map +1 -1
  62. package/lib/esm/OneAtATimeAction.d.ts.map +1 -1
  63. package/lib/esm/OneAtATimeAction.js +4 -1
  64. package/lib/esm/OneAtATimeAction.js.map +1 -1
  65. package/lib/esm/SortedArray.d.ts.map +1 -1
  66. package/lib/esm/SortedArray.js +3 -1
  67. package/lib/esm/SortedArray.js.map +1 -1
  68. package/lib/esm/StringUtils.d.ts.map +1 -1
  69. package/lib/esm/StringUtils.js +3 -1
  70. package/lib/esm/StringUtils.js.map +1 -1
  71. package/lib/esm/Time.d.ts +1 -1
  72. package/lib/esm/Time.d.ts.map +1 -1
  73. package/lib/esm/Time.js +9 -3
  74. package/lib/esm/Time.js.map +1 -1
  75. package/lib/esm/Tracing.d.ts +2 -2
  76. package/lib/esm/Tracing.d.ts.map +1 -1
  77. package/lib/esm/Tracing.js +4 -1
  78. package/lib/esm/Tracing.js.map +1 -1
  79. package/lib/esm/TypedArrayBuilder.d.ts +98 -0
  80. package/lib/esm/TypedArrayBuilder.d.ts.map +1 -0
  81. package/lib/esm/TypedArrayBuilder.js +128 -0
  82. package/lib/esm/TypedArrayBuilder.js.map +1 -0
  83. package/lib/esm/UnexpectedErrors.d.ts.map +1 -1
  84. package/lib/esm/UnexpectedErrors.js +5 -2
  85. package/lib/esm/UnexpectedErrors.js.map +1 -1
  86. package/lib/esm/core-bentley.d.ts +1 -0
  87. package/lib/esm/core-bentley.d.ts.map +1 -1
  88. package/lib/esm/core-bentley.js +1 -0
  89. package/lib/esm/core-bentley.js.map +1 -1
  90. package/package.json +5 -5
package/lib/esm/Id.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Id.js","sourceRoot":"","sources":["../../src/Id.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\n/** A string containing a well-formed string representation of an [Id64]($core-bentley).\r\n * See [Working with Ids]($docs/learning/common/Id64.md).\r\n * @public\r\n */\r\nexport type Id64String = string;\r\n\r\n/** A string containing a well-formed string representation of a [Guid]($core-bentley).\r\n * @public\r\n */\r\nexport type GuidString = string;\r\n\r\n/** A set of [[Id64String]]s.\r\n * @public\r\n */\r\nexport type Id64Set = Set<Id64String>;\r\n\r\n/** An array of [[Id64String]]s.\r\n * @public\r\n */\r\nexport type Id64Array = Id64String[];\r\n\r\n/** Used as an argument to a function that can accept one or more [[Id64String]]s.\r\n * @public\r\n */\r\nexport type Id64Arg = Id64String | Id64Set | Id64Array;\r\n\r\nfunction toHex(str: string): number {\r\n const v = parseInt(str, 16);\r\n return Number.isNaN(v) ? 0 : v;\r\n}\r\n\r\nfunction isLowerCaseNonZeroHexDigit(str: string, index: number) {\r\n return isLowerCaseHexDigit(str, index, false);\r\n}\r\n\r\nfunction isLowerCaseHexDigit(str: string, index: number, allowZero: boolean = true): boolean {\r\n const charCode = str.charCodeAt(index);\r\n const minDecimalDigit = allowZero ? 0x30 : 0x31; // '0' or '1'...\r\n return (charCode >= minDecimalDigit && charCode <= 0x39) || (charCode >= 0x61 && charCode <= 0x66); // '0'-'9, 'a' -'f'\r\n}\r\n\r\nfunction isValidHexString(id: string, startIndex: number, len: number) {\r\n if (len === 0)\r\n return false;\r\n\r\n // No leading zeroes...\r\n if (!isLowerCaseNonZeroHexDigit(id, startIndex))\r\n return false;\r\n\r\n // ...followed by len-1 lowercase hexadecimal digits.\r\n for (let i = 1; i < len; i++)\r\n if (!isLowerCaseHexDigit(id, startIndex + i))\r\n return false;\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * The Id64 namespace provides facilities for working with 64-bit identifiers. These Ids are stored as 64-bit integers inside an [[IModelDb]], but must be represented\r\n * as strings in JavaScript because JavaScript does not intrinsically support 64-bit integers.\r\n *\r\n * The [[Id64String]] type alias is used to indicate function arguments, return types, and variables which are known to contain a well-formed representation of a 64-bit Id.\r\n *\r\n * See [Working with Ids]($docs/learning/common/Id64.md) for a detailed description and code examples.\r\n * @public\r\n */\r\nexport namespace Id64 {\r\n /** Extract the \"local\" Id portion of an Id64String, contained in the lower 40 bits of the 64-bit value. */\r\n export function getLocalId(id: Id64String): number {\r\n if (isInvalid(id))\r\n return 0;\r\n\r\n const len = id.length;\r\n const start = (len > 12) ? (len - 10) : 2;\r\n return toHex(id.slice(start));\r\n }\r\n\r\n /** Extract the briefcase Id portion of an Id64String, contained in the upper 24 bits of the 64-bit value. */\r\n export function getBriefcaseId(id: Id64String): number {\r\n if (isInvalid(id))\r\n return 0;\r\n\r\n const len = id.length;\r\n return (len <= 12) ? 0 : toHex(id.slice(2, len - 10));\r\n }\r\n\r\n /** Create an Id64String from its JSON representation.\r\n * @param prop The JSON representation of an Id.\r\n * @returns A well-formed Id string.\r\n * @note if the input is undefined, the result is \"0\", indicating an invalid Id.\r\n * @note if the input is not undefined, the result is the same as that of [[Id64.fromString]].\r\n */\r\n export function fromJSON(prop?: string): Id64String {\r\n return typeof prop === \"string\" ? Id64.fromString(prop) : Id64.invalid;\r\n }\r\n\r\n /** Given a string value, attempt to normalize it into a well-formed Id string.\r\n * If the input is already a well-formed Id string, it is returned unmodified.\r\n * Otherwise, the input is trimmed of leading and trailing whitespace, converted to lowercase, and an attempt is made to parse it as a 64-bit hexadecimal integer.\r\n * If parsing succeeds the normalized result is returned; otherwise the result is \"0\", indicating an invalid Id.\r\n *\r\n * For a description of \"well-formed\", see [Working with Ids]($docs/learning/common/Id64.md).\r\n */\r\n export function fromString(val: string): Id64String {\r\n // NB: in case this is called from JavaScript, we must check the run-time type...\r\n if (typeof val !== \"string\")\r\n return invalid;\r\n\r\n // Skip the common case in which the input is already a well-formed Id string\r\n if (Id64.isId64(val))\r\n return val;\r\n\r\n // Attempt to normalize the input into a well-formed Id string\r\n val = val.toLowerCase().trim();\r\n const len = val.length;\r\n if (len < 2 || val[0] !== \"0\" || val[1] !== \"x\")\r\n return invalid;\r\n\r\n let low = 0;\r\n let high = 0;\r\n let start = 2;\r\n if (len > 12) {\r\n start = (len - 10);\r\n high = toHex(val.slice(2, start));\r\n }\r\n\r\n low = toHex(val.slice(start));\r\n return fromLocalAndBriefcaseIds(low, high);\r\n }\r\n\r\n // Used when constructing local ID portion of Id64String. Performance optimization.\r\n const _localIdPrefixByLocalIdLength = [ // eslint-disable-line @typescript-eslint/naming-convention\r\n \"0000000000\",\r\n \"000000000\",\r\n \"00000000\",\r\n \"0000000\",\r\n \"000000\",\r\n \"00000\",\r\n \"0000\",\r\n \"000\",\r\n \"00\",\r\n \"0\",\r\n \"\",\r\n ];\r\n\r\n /** Produce an Id string from a local and briefcase Id.\r\n * @param localId The non-zero local Id as an unsigned 40-bit integer.\r\n * @param briefcaseId The briefcase Id as an unsigned 24-bit integer.\r\n * @returns an Id64String containing the hexadecimal string representation of the unsigned 64-bit integer which would result from the\r\n * operation `localId | (briefcaseId << 40)`, or an invalid Id \"0\" if the inputs are invalid.\r\n */\r\n export function fromLocalAndBriefcaseIds(localId: number, briefcaseId: number): Id64String {\r\n // NB: Yes, we must check the run-time type...\r\n if (typeof localId !== \"number\" || typeof briefcaseId !== \"number\")\r\n return invalid;\r\n\r\n localId = Math.floor(localId);\r\n if (0 === localId)\r\n return invalid;\r\n\r\n briefcaseId = Math.floor(briefcaseId);\r\n const lowStr = localId.toString(16);\r\n return `0x${(briefcaseId === 0) ? lowStr : (briefcaseId.toString(16) + (_localIdPrefixByLocalIdLength[lowStr.length] + lowStr))}`;\r\n }\r\n\r\n // Used as a buffer when converting a pair of 32-bit integers to an Id64String. Significant performance optimization.\r\n const scratchCharCodes = [\r\n 0x30, // \"0\"\r\n 0x78, // \"x\"\r\n 0x30, // \"0\"\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n ];\r\n\r\n // Convert 4-bit unsigned integer to char code representing lower-case hexadecimal digit.\r\n function uint4ToCharCode(uint4: number): number {\r\n return uint4 + (uint4 < 10 ? 0x30 : 0x57);\r\n }\r\n\r\n // Convert char code representing lower-case hexadecimal digit to 4-bit unsigned integer.\r\n function charCodeToUint4(char: number): number {\r\n return char - (char >= 0x57 ? 0x57 : 0x30);\r\n }\r\n\r\n // Convert a substring to a uint32. This is twice as fast as using Number.parseInt().\r\n function substringToUint32(id: Id64String, start: number, end: number): number {\r\n let uint32 = 0;\r\n for (let i = start; i < end; i++) {\r\n const uint4 = charCodeToUint4(id.charCodeAt(i));\r\n const shift = (end - i - 1) << 2;\r\n const mask = uint4 << shift;\r\n uint32 = (uint32 | mask) >>> 0; // >>> 0 to force unsigned because javascript\r\n }\r\n\r\n return uint32;\r\n }\r\n\r\n /** Create an Id64String from a pair of unsigned 32-bit integers.\r\n * @param lowBytes The lower 4 bytes of the Id\r\n * @param highBytes The upper 4 bytes of the Id\r\n * @returns an Id64String containing the hexadecimal string representation of the unsigned 64-bit integer which would result from the\r\n * operation `lowBytes | (highBytes << 32)`.\r\n * @see [[Id64.fromUint32PairObject]] if you have a [[Id64.Uint32Pair]] object.\r\n */\r\n export function fromUint32Pair(lowBytes: number, highBytes: number): Id64String {\r\n const localIdLow = lowBytes >>> 0;\r\n const localIdHigh = (highBytes & 0x000000ff) * (0xffffffff + 1); // aka (highBytes & 0xff) << 32\r\n const localId = localIdLow + localIdHigh; // aka localIdLow | localIdHigh\r\n if (0 === localId)\r\n return invalid;\r\n\r\n // Need to omit or preserve leading zeroes...\r\n const buffer = scratchCharCodes;\r\n let index = 2;\r\n for (let i = 7; i >= 0; i--) {\r\n const shift = i << 2;\r\n const mask = 0xf << shift;\r\n const uint4 = (highBytes & mask) >>> shift;\r\n if (index > 2 || 0 !== uint4)\r\n buffer[index++] = uint4ToCharCode(uint4);\r\n }\r\n\r\n for (let i = 7; i >= 0; i--) {\r\n const shift = i << 2;\r\n const mask = 0xf << shift;\r\n const uint4 = (lowBytes & mask) >>> shift;\r\n if (index > 2 || 0 !== uint4)\r\n buffer[index++] = uint4ToCharCode(uint4);\r\n }\r\n\r\n if (buffer.length !== index)\r\n buffer.length = index;\r\n\r\n return String.fromCharCode(...scratchCharCodes);\r\n }\r\n\r\n /** Create an Id64String from a [[Id64.Uint32Pair]].\r\n * @see [[Id64.fromUint32Pair]].\r\n */\r\n export function fromUint32PairObject(pair: Uint32Pair): Id64String {\r\n return fromUint32Pair(pair.lower, pair.upper);\r\n }\r\n\r\n /** Returns true if the inputs represent two halves of a valid 64-bit Id.\r\n * @see [[Id64.Uint32Pair]].\r\n */\r\n export function isValidUint32Pair(lowBytes: number, highBytes: number): boolean {\r\n // Detect local ID of zero\r\n return 0 !== lowBytes || 0 !== (highBytes & 0x000000ff);\r\n }\r\n\r\n /** Represents an [[Id64]] as a pair of unsigned 32-bit integers. Because Javascript lacks efficient support for 64-bit integers,\r\n * this representation can be useful in performance-sensitive code like the render loop.\r\n * @see [[Id64.getUint32Pair]] to convert an [[Id64String]] to a Uint32Pair.\r\n * @see [[Id64.fromUint32Pair]] to convert a Uint32Pair to an [[Id64String]].\r\n * @see [[Id64.Uint32Set]] and [[Id64.Uint32Map]] for collections based on Uint32Pairs.\r\n */\r\n export interface Uint32Pair {\r\n /** The lower 4 bytes of the 64-bit integer. */\r\n lower: number;\r\n /** The upper 4 bytes of the 64-bit integer. */\r\n upper: number;\r\n }\r\n\r\n /** Convert an Id64String to a 64-bit unsigned integer represented as a pair of unsigned 32-bit integers.\r\n * @param id The well-formed string representation of a 64-bit Id.\r\n * @param out Used as the return value if supplied; otherwise a new object is returned.\r\n * @returns An object containing the parsed lower and upper 32-bit integers comprising the 64-bit Id.\r\n */\r\n export function getUint32Pair(id: Id64String, out?: Uint32Pair): Uint32Pair {\r\n if (!out)\r\n out = { lower: 0, upper: 0 };\r\n\r\n out.lower = getLowerUint32(id);\r\n out.upper = getUpperUint32(id);\r\n return out;\r\n }\r\n\r\n /** Extract an unsigned 32-bit integer from the lower 4 bytes of an Id64String. */\r\n export function getLowerUint32(id: Id64String): number {\r\n if (isInvalid(id))\r\n return 0;\r\n\r\n const end = id.length;\r\n const start = end > 10 ? end - 8 : 2;\r\n return substringToUint32(id, start, end);\r\n }\r\n\r\n /** Extract an unsigned 32-bit integer from the upper 4 bytes of an Id64String. */\r\n export function getUpperUint32(id: Id64String): number {\r\n const len = id.length;\r\n if (len <= 10 || isInvalid(id))\r\n return 0;\r\n\r\n return substringToUint32(id, 2, len - 8);\r\n }\r\n\r\n /** Convert an [[Id64Arg]] into an [[Id64Set]].\r\n *\r\n * This method can be used by functions that accept an Id64Arg to conveniently process the value(s). For example:\r\n * ```ts\r\n * public addCategories(arg: Id64Arg) { Id64.toIdSet(arg).forEach((id) => this.categories.add(id)); }\r\n * ```\r\n *\r\n * Alternatively, to avoid allocating a new Id64Set, use [[Id64.iterable]].\r\n *\r\n * @param arg The Ids to convert to an Id64Set.\r\n * @param makeCopy If true, and the input is already an Id64Set, returns a deep copy of the input.\r\n * @returns An Id64Set containing the set of [[Id64String]]s represented by the Id64Arg.\r\n */\r\n export function toIdSet(arg: Id64Arg, makeCopy: boolean = false): Id64Set {\r\n if (arg instanceof Set)\r\n return makeCopy ? new Set<string>(arg) : arg;\r\n\r\n const ids = new Set<Id64String>();\r\n if (typeof arg === \"string\")\r\n ids.add(arg);\r\n else if (Array.isArray(arg)) {\r\n arg.forEach((id: Id64String) => {\r\n if (typeof id === \"string\")\r\n ids.add(id);\r\n });\r\n }\r\n\r\n return ids;\r\n }\r\n\r\n /** Obtain iterator over the specified Ids.\r\n * @see [[Id64.iterable]].\r\n */\r\n export function* iterator(ids: Id64Arg): Iterator<Id64String> {\r\n if (typeof ids === \"string\") {\r\n yield ids;\r\n } else {\r\n for (const id of ids)\r\n yield id;\r\n }\r\n }\r\n\r\n /** Obtain an iterable over the specified Ids. Example usage:\r\n * ```ts\r\n * const ids = [\"0x123\", \"0xfed\"];\r\n * for (const id of Id64.iterable(ids))\r\n * console.log(id);\r\n * ```\r\n */\r\n export function iterable(ids: Id64Arg): Iterable<Id64String> {\r\n return {\r\n [Symbol.iterator]: () => iterator(ids),\r\n };\r\n }\r\n\r\n /** Return the first [[Id64String]] of an [[Id64Arg]]. */\r\n export function getFirst(arg: Id64Arg): Id64String {\r\n return typeof arg === \"string\" ? arg : (Array.isArray(arg) ? arg[0] : arg.values().next().value);\r\n }\r\n\r\n /** Return the number of [[Id64String]]s represented by an [[Id64Arg]]. */\r\n export function sizeOf(arg: Id64Arg): number {\r\n return typeof arg === \"string\" ? 1 : (Array.isArray(arg) ? arg.length : arg.size);\r\n }\r\n\r\n /** Returns true if the [[Id64Arg]] contains the specified Id. */\r\n export function has(arg: Id64Arg, id: Id64String): boolean {\r\n if (typeof arg === \"string\")\r\n return arg === id;\r\n if (Array.isArray(arg))\r\n return -1 !== arg.indexOf(id);\r\n\r\n return arg.has(id);\r\n }\r\n\r\n /** The string representation of an invalid Id. */\r\n export const invalid = \"0\";\r\n\r\n /** Determine if the supplied id string represents a transient Id.\r\n * @param id A well-formed Id string.\r\n * @returns true if the Id represents a transient Id.\r\n * @note This method assumes the input is a well-formed Id string.\r\n * @see [[Id64.isTransientId64]]\r\n * @see [[TransientIdSequence]]\r\n */\r\n export function isTransient(id: Id64String): boolean {\r\n // A transient Id is of the format \"0xffffffxxxxxxxxxx\" where the leading 6 digits indicate an invalid briefcase Id.\r\n return 18 === id.length && id.startsWith(\"0xffffff\");\r\n }\r\n\r\n /** Determine if the input is a well-formed [[Id64String]] and represents a transient Id.\r\n * @see [[Id64.isTransient]]\r\n * @see [[Id64.isId64]]\r\n * @see [[TransientIdSequence]]\r\n */\r\n export function isTransientId64(id: string): boolean {\r\n return isValidId64(id) && isTransient(id);\r\n }\r\n\r\n /** Determine if the input is a well-formed [[Id64String]].\r\n *\r\n * For a description of \"well-formed\", see [Working with Ids]($docs/learning/common/Id64.md).\r\n * @see [[Id64.isValidId64]]\r\n */\r\n export function isId64(id: string): boolean {\r\n const len = id.length;\r\n if (0 === len || 18 < len)\r\n return false;\r\n\r\n if (\"0\" !== id[0])\r\n return false;\r\n\r\n // Well-formed invalid Id: \"0\"\r\n if (1 === len)\r\n return true;\r\n\r\n // Valid Ids begin with \"0x\" followed by at least one lower-case hexadecimal digit.\r\n if (2 === len || \"x\" !== id[1])\r\n return false;\r\n\r\n // If briefcase Id is present, it occupies at least one digit, followed by 10 digits for local Id\r\n let localIdStart = 2;\r\n if (len > 12) {\r\n localIdStart = len - 10;\r\n\r\n // Verify briefcase Id\r\n if (!isValidHexString(id, 2, localIdStart - 2))\r\n return false;\r\n\r\n // Skip leading zeroes in local Id\r\n for (let i = localIdStart; i < len; i++) {\r\n if (0x30 !== id.charCodeAt(i)) // '0'\r\n break;\r\n else\r\n localIdStart++;\r\n }\r\n\r\n if (localIdStart >= len)\r\n return false;\r\n }\r\n\r\n return isValidHexString(id, localIdStart, len - localIdStart);\r\n }\r\n\r\n /** Returns true if the input is not equal to the representation of an invalid Id.\r\n * @note This method assumes the input is a well-formed Id string.\r\n * @see [[Id64.isInvalid]]\r\n * @see [[Id64.isValidId64]]\r\n */\r\n export function isValid(id: Id64String): boolean { return Id64.invalid !== id; }\r\n\r\n /** Returns true if the input is a well-formed [[Id64String]] representing a valid Id.\r\n * @see [[Id64.isValid]]\r\n * @see [[Id64.isId64]]\r\n */\r\n export function isValidId64(id: string): boolean { return Id64.invalid !== id && Id64.isId64(id); }\r\n\r\n /** Returns true if the input is a well-formed [[Id64String]] representing an invalid Id.\r\n * @see [[Id64.isValid]]\r\n */\r\n export function isInvalid(id: Id64String): boolean { return Id64.invalid === id; }\r\n\r\n /** A specialized replacement for Set<Id64String> optimized for performance-critical code which represents large sets of [[Id64]]s as pairs of\r\n * 32-bit integers.\r\n * The internal representation is a Map<number, Set<number>> where the Map key is the upper 4 bytes of the IDs and the Set elements are the lower 4 bytes of the IDs.\r\n * Because the upper 4 bytes store the 24-bit briefcase ID plus the upper 8 bits of the local ID, there will be a very small distribution of unique Map keys.\r\n * To further optimize this data type, the following assumptions are made regarding the { lower, upper } inputs, and no validation is performed to confirm them:\r\n * - The inputs are unsigned 32-bit integers;\r\n * - The inputs represent a valid Id64String (e.g., local ID is not zero).\r\n * @see [[Id64.Uint32Map]] for a similarly-optimized replacement for Map<Id64String, T>\r\n * @public\r\n */\r\n export class Uint32Set {\r\n protected readonly _map = new Map<number, Set<number>>();\r\n\r\n /** Construct a new Uint32Set.\r\n * @param ids If supplied, all of the specified Ids will be added to the new set.\r\n */\r\n public constructor(ids?: Id64Arg) {\r\n if (undefined !== ids)\r\n this.addIds(ids);\r\n }\r\n\r\n /** Remove all contents of this set. */\r\n public clear(): void {\r\n this._map.clear();\r\n }\r\n\r\n /** Add an Id to the set. */\r\n public addId(id: Id64String): void {\r\n this.add(Id64.getLowerUint32(id), Id64.getUpperUint32(id));\r\n }\r\n\r\n /** Add any number of Ids to the set. */\r\n public addIds(ids: Id64Arg): void {\r\n for (const id of Id64.iterable(ids))\r\n this.addId(id);\r\n }\r\n\r\n /** Returns true if the set contains the specified Id. */\r\n public hasId(id: Id64String): boolean { return this.has(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n\r\n /** Add an Id to the set. */\r\n public add(low: number, high: number): void {\r\n let set = this._map.get(high);\r\n if (undefined === set) {\r\n set = new Set<number>();\r\n this._map.set(high, set);\r\n }\r\n\r\n set.add(low);\r\n }\r\n\r\n /** Remove an Id from the set. */\r\n public deleteId(id: Id64String): void {\r\n this.delete(Id64.getLowerUint32(id), Id64.getUpperUint32(id));\r\n }\r\n\r\n /** Remove any number of Ids from the set. */\r\n public deleteIds(ids: Id64Arg): void {\r\n for (const id of Id64.iterable(ids))\r\n this.deleteId(id);\r\n }\r\n\r\n /** Remove an Id from the set. */\r\n public delete(low: number, high: number): void {\r\n const set = this._map.get(high);\r\n if (undefined !== set)\r\n set.delete(low);\r\n }\r\n\r\n /** Returns true if the set contains the specified Id. */\r\n public has(low: number, high: number): boolean {\r\n const set = this._map.get(high);\r\n return undefined !== set && set.has(low);\r\n }\r\n\r\n /** Returns true if the set contains the Id specified by `pair`. */\r\n public hasPair(pair: Uint32Pair): boolean {\r\n return this.has(pair.lower, pair.upper);\r\n }\r\n\r\n /** Returns true if the set contains no Ids. */\r\n public get isEmpty(): boolean { return 0 === this._map.size; }\r\n\r\n /** Returns the number of Ids contained in the set. */\r\n public get size(): number {\r\n let size = 0;\r\n for (const entry of this._map)\r\n size += entry[1].size;\r\n\r\n return size;\r\n }\r\n\r\n /** Populates and returns an array of all Ids contained in the set. */\r\n public toId64Array(): Id64Array {\r\n const ids: Id64Array = [];\r\n for (const entry of this._map)\r\n for (const low of entry[1])\r\n ids.push(Id64.fromUint32Pair(low, entry[0]));\r\n\r\n return ids;\r\n }\r\n\r\n /** Populates and returns a set of all Ids contained in the set. */\r\n public toId64Set(): Id64Set {\r\n const ids = new Set<string>();\r\n for (const entry of this._map)\r\n for (const low of entry[1])\r\n ids.add(Id64.fromUint32Pair(low, entry[0]));\r\n\r\n return ids;\r\n }\r\n\r\n /** Execute a function against each Id in this set. */\r\n public forEach(func: (lo: number, hi: number) => void): void {\r\n for (const entry of this._map)\r\n for (const lo of entry[1])\r\n func(lo, entry[0]);\r\n }\r\n }\r\n\r\n /** A specialized replacement for Map<Id64String, T> optimized for performance-critical code.\r\n * @see [[Id64.Uint32Set]] for implementation details.\r\n * @public\r\n */\r\n export class Uint32Map<T> {\r\n protected readonly _map = new Map<number, Map<number, T>>();\r\n\r\n /** Remove all entries from the map. */\r\n public clear(): void { this._map.clear(); }\r\n /** Find an entry in the map by Id. */\r\n public getById(id: Id64String): T | undefined { return this.get(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n /** Set an entry in the map by Id. */\r\n public setById(id: Id64String, value: T): void { this.set(Id64.getLowerUint32(id), Id64.getUpperUint32(id), value); }\r\n\r\n /** Set an entry in the map by Id components. */\r\n public set(low: number, high: number, value: T): void {\r\n let map = this._map.get(high);\r\n if (undefined === map) {\r\n map = new Map<number, T>();\r\n this._map.set(high, map);\r\n }\r\n\r\n map.set(low, value);\r\n }\r\n\r\n /** Get an entry from the map by Id components. */\r\n public get(low: number, high: number): T | undefined {\r\n const map = this._map.get(high);\r\n return undefined !== map ? map.get(low) : undefined;\r\n }\r\n\r\n /** Returns true if the map contains no entries. */\r\n public get isEmpty(): boolean { return 0 === this._map.size; }\r\n /** Returns the number of entries in the map. */\r\n public get size(): number {\r\n let size = 0;\r\n for (const entry of this._map)\r\n size += entry[1].size;\r\n\r\n return size;\r\n }\r\n\r\n /** Execute a function against each entry in this map. */\r\n public forEach(func: (lo: number, hi: number, value: T) => void): void {\r\n for (const outerEntry of this._map)\r\n for (const innerEntry of outerEntry[1])\r\n func(innerEntry[0], outerEntry[0], innerEntry[1]);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Generates unique [[Id64String]] values in sequence, which are guaranteed not to conflict with Ids associated with persistent elements or models.\r\n * This is useful for associating stable, non-persistent identifiers with things like [Decorator]($frontend)s.\r\n * A TransientIdSequence can generate a maximum of (2^40)-2 unique Ids.\r\n * @public\r\n */\r\nexport class TransientIdSequence {\r\n private _localId: number = 0;\r\n\r\n /** Generate and return the next transient Id64String in the sequence. */\r\n public get next(): Id64String { return Id64.fromLocalAndBriefcaseIds(++this._localId, 0xffffff); }\r\n}\r\n\r\n/**\r\n * The Guid namespace provides facilities for working with GUID strings using the \"8-4-4-4-12\" pattern.\r\n *\r\n * The [[GuidString]] type alias is used to indicate function arguments, return types, and variables which are known to\r\n * be in the GUID format.\r\n * @public\r\n */\r\nexport namespace Guid {\r\n const uuidPattern = new RegExp(\"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\");\r\n\r\n /** Represents the empty Guid 00000000-0000-0000-0000-000000000000 */\r\n export const empty: GuidString = \"00000000-0000-0000-0000-000000000000\";\r\n\r\n /** Determine whether the input string is \"guid-like\". That is, it follows the 8-4-4-4-12 pattern. This does not enforce\r\n * that the string is actually in valid UUID format.\r\n */\r\n export function isGuid(value: string): boolean { return uuidPattern.test(value); }\r\n\r\n /** Determine whether the input string is a valid V4 Guid string */\r\n export function isV4Guid(value: string): boolean { return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/.test(value); }\r\n\r\n /** Create a new V4 Guid value */\r\n export function createValue(): GuidString {\r\n // https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === \"x\" ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Normalize a Guid string if possible. Normalization consists of:\r\n * - Convert all characters to lower case\r\n * - Trim any leading or trailing whitespace\r\n * - Convert to the standard Guid format \"8-4-4-4-12\", repositioning the '-' characters as necessary, presuming there are exactly 32 hexadecimal digits.\r\n * @param value Input value that represents a Guid\r\n * @returns Normalized representation of the Guid string. If the normalization fails, return the *original* value unmodified (Note: it is *not* a valid Guid)\r\n */\r\n export function normalize(value: GuidString): GuidString {\r\n const lowerValue = value.toLowerCase().trim();\r\n\r\n // Return if it's already formatted to be a Guid\r\n if (isGuid(lowerValue))\r\n return lowerValue;\r\n\r\n // Remove any existing \"-\" characters and position them properly, if there remains exactly 32 hexadecimal digits\r\n const noDashValue = lowerValue.replace(/-/g, \"\");\r\n const noDashPattern = /^([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{12})$/;\r\n if (noDashPattern.test(noDashValue)) {\r\n return noDashValue.replace(noDashPattern,\r\n (_match: string, p1: string, p2: string, p3: string, p4: string, p5: string) =>\r\n `${p1}-${p2}-${p3}-${p4}-${p5}`);\r\n }\r\n\r\n // Return unmodified string - (note: it is *not* a valid Guid)\r\n return value;\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"Id.js","sourceRoot":"","sources":["../../src/Id.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\n/** A string containing a well-formed string representation of an [Id64]($core-bentley).\r\n * See [Working with Ids]($docs/learning/common/Id64.md).\r\n * @public\r\n */\r\nexport type Id64String = string;\r\n\r\n/** A string containing a well-formed string representation of a [Guid]($core-bentley).\r\n * @public\r\n */\r\nexport type GuidString = string;\r\n\r\n/** A set of [[Id64String]]s.\r\n * @public\r\n */\r\nexport type Id64Set = Set<Id64String>;\r\n\r\n/** An array of [[Id64String]]s.\r\n * @public\r\n */\r\nexport type Id64Array = Id64String[];\r\n\r\n/** Used as an argument to a function that can accept one or more [[Id64String]]s.\r\n * @public\r\n */\r\nexport type Id64Arg = Id64String | Id64Set | Id64Array;\r\n\r\nfunction toHex(str: string): number {\r\n const v = parseInt(str, 16);\r\n return Number.isNaN(v) ? 0 : v;\r\n}\r\n\r\nfunction isLowerCaseNonZeroHexDigit(str: string, index: number) {\r\n return isLowerCaseHexDigit(str, index, false);\r\n}\r\n\r\nfunction isLowerCaseHexDigit(str: string, index: number, allowZero: boolean = true): boolean {\r\n const charCode = str.charCodeAt(index);\r\n const minDecimalDigit = allowZero ? 0x30 : 0x31; // '0' or '1'...\r\n return (charCode >= minDecimalDigit && charCode <= 0x39) || (charCode >= 0x61 && charCode <= 0x66); // '0'-'9, 'a' -'f'\r\n}\r\n\r\nfunction isValidHexString(id: string, startIndex: number, len: number) {\r\n if (len === 0)\r\n return false;\r\n\r\n // No leading zeroes...\r\n if (!isLowerCaseNonZeroHexDigit(id, startIndex))\r\n return false;\r\n\r\n // ...followed by len-1 lowercase hexadecimal digits.\r\n for (let i = 1; i < len; i++)\r\n if (!isLowerCaseHexDigit(id, startIndex + i))\r\n return false;\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * The Id64 namespace provides facilities for working with 64-bit identifiers. These Ids are stored as 64-bit integers inside an [[IModelDb]], but must be represented\r\n * as strings in JavaScript because JavaScript does not intrinsically support 64-bit integers.\r\n *\r\n * The [[Id64String]] type alias is used to indicate function arguments, return types, and variables which are known to contain a well-formed representation of a 64-bit Id.\r\n *\r\n * See [Working with Ids]($docs/learning/common/Id64.md) for a detailed description and code examples.\r\n * @public\r\n */\r\nexport namespace Id64 {\r\n /** Extract the \"local\" Id portion of an Id64String, contained in the lower 40 bits of the 64-bit value. */\r\n export function getLocalId(id: Id64String): number {\r\n if (isInvalid(id))\r\n return 0;\r\n\r\n const len = id.length;\r\n const start = (len > 12) ? (len - 10) : 2;\r\n return toHex(id.slice(start));\r\n }\r\n\r\n /** Extract the briefcase Id portion of an Id64String, contained in the upper 24 bits of the 64-bit value. */\r\n export function getBriefcaseId(id: Id64String): number {\r\n if (isInvalid(id))\r\n return 0;\r\n\r\n const len = id.length;\r\n return (len <= 12) ? 0 : toHex(id.slice(2, len - 10));\r\n }\r\n\r\n /** Create an Id64String from its JSON representation.\r\n * @param prop The JSON representation of an Id.\r\n * @returns A well-formed Id string.\r\n * @note if the input is undefined, the result is \"0\", indicating an invalid Id.\r\n * @note if the input is not undefined, the result is the same as that of [[Id64.fromString]].\r\n */\r\n export function fromJSON(prop?: string): Id64String {\r\n return typeof prop === \"string\" ? Id64.fromString(prop) : Id64.invalid;\r\n }\r\n\r\n /** Given a string value, attempt to normalize it into a well-formed Id string.\r\n * If the input is already a well-formed Id string, it is returned unmodified.\r\n * Otherwise, the input is trimmed of leading and trailing whitespace, converted to lowercase, and an attempt is made to parse it as a 64-bit hexadecimal integer.\r\n * If parsing succeeds the normalized result is returned; otherwise the result is \"0\", indicating an invalid Id.\r\n *\r\n * For a description of \"well-formed\", see [Working with Ids]($docs/learning/common/Id64.md).\r\n */\r\n export function fromString(val: string): Id64String {\r\n // NB: in case this is called from JavaScript, we must check the run-time type...\r\n if (typeof val !== \"string\")\r\n return invalid;\r\n\r\n // Skip the common case in which the input is already a well-formed Id string\r\n if (Id64.isId64(val))\r\n return val;\r\n\r\n // Attempt to normalize the input into a well-formed Id string\r\n val = val.toLowerCase().trim();\r\n const len = val.length;\r\n if (len < 2 || val[0] !== \"0\" || val[1] !== \"x\")\r\n return invalid;\r\n\r\n let low = 0;\r\n let high = 0;\r\n let start = 2;\r\n if (len > 12) {\r\n start = (len - 10);\r\n high = toHex(val.slice(2, start));\r\n }\r\n\r\n low = toHex(val.slice(start));\r\n return fromLocalAndBriefcaseIds(low, high);\r\n }\r\n\r\n // Used when constructing local ID portion of Id64String. Performance optimization.\r\n const _localIdPrefixByLocalIdLength = [ // eslint-disable-line @typescript-eslint/naming-convention\r\n \"0000000000\",\r\n \"000000000\",\r\n \"00000000\",\r\n \"0000000\",\r\n \"000000\",\r\n \"00000\",\r\n \"0000\",\r\n \"000\",\r\n \"00\",\r\n \"0\",\r\n \"\",\r\n ];\r\n\r\n /** Produce an Id string from a local and briefcase Id.\r\n * @param localId The non-zero local Id as an unsigned 40-bit integer.\r\n * @param briefcaseId The briefcase Id as an unsigned 24-bit integer.\r\n * @returns an Id64String containing the hexadecimal string representation of the unsigned 64-bit integer which would result from the\r\n * operation `localId | (briefcaseId << 40)`, or an invalid Id \"0\" if the inputs are invalid.\r\n */\r\n export function fromLocalAndBriefcaseIds(localId: number, briefcaseId: number): Id64String {\r\n // NB: Yes, we must check the run-time type...\r\n if (typeof localId !== \"number\" || typeof briefcaseId !== \"number\")\r\n return invalid;\r\n\r\n localId = Math.floor(localId);\r\n if (0 === localId)\r\n return invalid;\r\n\r\n briefcaseId = Math.floor(briefcaseId);\r\n const lowStr = localId.toString(16);\r\n return `0x${(briefcaseId === 0) ? lowStr : (briefcaseId.toString(16) + (_localIdPrefixByLocalIdLength[lowStr.length] + lowStr))}`;\r\n }\r\n\r\n // Used as a buffer when converting a pair of 32-bit integers to an Id64String. Significant performance optimization.\r\n const scratchCharCodes = [\r\n 0x30, // \"0\"\r\n 0x78, // \"x\"\r\n 0x30, // \"0\"\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n 0x30,\r\n ];\r\n\r\n // Convert 4-bit unsigned integer to char code representing lower-case hexadecimal digit.\r\n function uint4ToCharCode(uint4: number): number {\r\n return uint4 + (uint4 < 10 ? 0x30 : 0x57);\r\n }\r\n\r\n // Convert char code representing lower-case hexadecimal digit to 4-bit unsigned integer.\r\n function charCodeToUint4(char: number): number {\r\n return char - (char >= 0x57 ? 0x57 : 0x30);\r\n }\r\n\r\n // Convert a substring to a uint32. This is twice as fast as using Number.parseInt().\r\n function substringToUint32(id: Id64String, start: number, end: number): number {\r\n let uint32 = 0;\r\n for (let i = start; i < end; i++) {\r\n const uint4 = charCodeToUint4(id.charCodeAt(i));\r\n const shift = (end - i - 1) << 2;\r\n const mask = uint4 << shift;\r\n uint32 = (uint32 | mask) >>> 0; // >>> 0 to force unsigned because javascript\r\n }\r\n\r\n return uint32;\r\n }\r\n\r\n /** Create an Id64String from a pair of unsigned 32-bit integers.\r\n * @param lowBytes The lower 4 bytes of the Id\r\n * @param highBytes The upper 4 bytes of the Id\r\n * @returns an Id64String containing the hexadecimal string representation of the unsigned 64-bit integer which would result from the\r\n * operation `lowBytes | (highBytes << 32)`.\r\n * @see [[Id64.fromUint32PairObject]] if you have a [[Id64.Uint32Pair]] object.\r\n */\r\n export function fromUint32Pair(lowBytes: number, highBytes: number): Id64String {\r\n const localIdLow = lowBytes >>> 0;\r\n const localIdHigh = (highBytes & 0x000000ff) * (0xffffffff + 1); // aka (highBytes & 0xff) << 32\r\n const localId = localIdLow + localIdHigh; // aka localIdLow | localIdHigh\r\n if (0 === localId)\r\n return invalid;\r\n\r\n // Need to omit or preserve leading zeroes...\r\n const buffer = scratchCharCodes;\r\n let index = 2;\r\n for (let i = 7; i >= 0; i--) {\r\n const shift = i << 2;\r\n const mask = 0xf << shift;\r\n const uint4 = (highBytes & mask) >>> shift;\r\n if (index > 2 || 0 !== uint4)\r\n buffer[index++] = uint4ToCharCode(uint4);\r\n }\r\n\r\n for (let i = 7; i >= 0; i--) {\r\n const shift = i << 2;\r\n const mask = 0xf << shift;\r\n const uint4 = (lowBytes & mask) >>> shift;\r\n if (index > 2 || 0 !== uint4)\r\n buffer[index++] = uint4ToCharCode(uint4);\r\n }\r\n\r\n if (buffer.length !== index)\r\n buffer.length = index;\r\n\r\n return String.fromCharCode(...scratchCharCodes);\r\n }\r\n\r\n /** Create an Id64String from a [[Id64.Uint32Pair]].\r\n * @see [[Id64.fromUint32Pair]].\r\n */\r\n export function fromUint32PairObject(pair: Uint32Pair): Id64String {\r\n return fromUint32Pair(pair.lower, pair.upper);\r\n }\r\n\r\n /** Returns true if the inputs represent two halves of a valid 64-bit Id.\r\n * @see [[Id64.Uint32Pair]].\r\n */\r\n export function isValidUint32Pair(lowBytes: number, highBytes: number): boolean {\r\n // Detect local ID of zero\r\n return 0 !== lowBytes || 0 !== (highBytes & 0x000000ff);\r\n }\r\n\r\n /** Represents an [[Id64]] as a pair of unsigned 32-bit integers. Because Javascript lacks efficient support for 64-bit integers,\r\n * this representation can be useful in performance-sensitive code like the render loop.\r\n * @see [[Id64.getUint32Pair]] to convert an [[Id64String]] to a Uint32Pair.\r\n * @see [[Id64.fromUint32Pair]] to convert a Uint32Pair to an [[Id64String]].\r\n * @see [[Id64.Uint32Set]] and [[Id64.Uint32Map]] for collections based on Uint32Pairs.\r\n */\r\n export interface Uint32Pair {\r\n /** The lower 4 bytes of the 64-bit integer. */\r\n lower: number;\r\n /** The upper 4 bytes of the 64-bit integer. */\r\n upper: number;\r\n }\r\n\r\n /** Convert an Id64String to a 64-bit unsigned integer represented as a pair of unsigned 32-bit integers.\r\n * @param id The well-formed string representation of a 64-bit Id.\r\n * @param out Used as the return value if supplied; otherwise a new object is returned.\r\n * @returns An object containing the parsed lower and upper 32-bit integers comprising the 64-bit Id.\r\n */\r\n export function getUint32Pair(id: Id64String, out?: Uint32Pair): Uint32Pair {\r\n if (!out)\r\n out = { lower: 0, upper: 0 };\r\n\r\n out.lower = getLowerUint32(id);\r\n out.upper = getUpperUint32(id);\r\n return out;\r\n }\r\n\r\n /** Extract an unsigned 32-bit integer from the lower 4 bytes of an Id64String. */\r\n export function getLowerUint32(id: Id64String): number {\r\n if (isInvalid(id))\r\n return 0;\r\n\r\n const end = id.length;\r\n const start = end > 10 ? end - 8 : 2;\r\n return substringToUint32(id, start, end);\r\n }\r\n\r\n /** Extract an unsigned 32-bit integer from the upper 4 bytes of an Id64String. */\r\n export function getUpperUint32(id: Id64String): number {\r\n const len = id.length;\r\n if (len <= 10 || isInvalid(id))\r\n return 0;\r\n\r\n return substringToUint32(id, 2, len - 8);\r\n }\r\n\r\n /** Convert an [[Id64Arg]] into an [[Id64Set]].\r\n *\r\n * This method can be used by functions that accept an Id64Arg to conveniently process the value(s). For example:\r\n * ```ts\r\n * public addCategories(arg: Id64Arg) { Id64.toIdSet(arg).forEach((id) => this.categories.add(id)); }\r\n * ```\r\n *\r\n * Alternatively, to avoid allocating a new Id64Set, use [[Id64.iterable]].\r\n *\r\n * @param arg The Ids to convert to an Id64Set.\r\n * @param makeCopy If true, and the input is already an Id64Set, returns a deep copy of the input.\r\n * @returns An Id64Set containing the set of [[Id64String]]s represented by the Id64Arg.\r\n */\r\n export function toIdSet(arg: Id64Arg, makeCopy: boolean = false): Id64Set {\r\n if (arg instanceof Set)\r\n return makeCopy ? new Set<string>(arg) : arg;\r\n\r\n const ids = new Set<Id64String>();\r\n if (typeof arg === \"string\")\r\n ids.add(arg);\r\n else if (Array.isArray(arg)) {\r\n arg.forEach((id: Id64String) => {\r\n if (typeof id === \"string\")\r\n ids.add(id);\r\n });\r\n }\r\n\r\n return ids;\r\n }\r\n\r\n /** Obtain iterator over the specified Ids.\r\n * @see [[Id64.iterable]].\r\n */\r\n export function* iterator(ids: Id64Arg): Iterator<Id64String> {\r\n if (typeof ids === \"string\") {\r\n yield ids;\r\n } else {\r\n for (const id of ids)\r\n yield id;\r\n }\r\n }\r\n\r\n /** Obtain an iterable over the specified Ids. Example usage:\r\n * ```ts\r\n * const ids = [\"0x123\", \"0xfed\"];\r\n * for (const id of Id64.iterable(ids))\r\n * console.log(id);\r\n * ```\r\n */\r\n export function iterable(ids: Id64Arg): Iterable<Id64String> {\r\n return {\r\n [Symbol.iterator]: () => iterator(ids),\r\n };\r\n }\r\n\r\n /** Return the first [[Id64String]] of an [[Id64Arg]]. */\r\n export function getFirst(arg: Id64Arg): Id64String {\r\n return typeof arg === \"string\" ? arg : (Array.isArray(arg) ? arg[0] : arg.values().next().value);\r\n }\r\n\r\n /** Return the number of [[Id64String]]s represented by an [[Id64Arg]]. */\r\n export function sizeOf(arg: Id64Arg): number {\r\n return typeof arg === \"string\" ? 1 : (Array.isArray(arg) ? arg.length : arg.size);\r\n }\r\n\r\n /** Returns true if the [[Id64Arg]] contains the specified Id. */\r\n export function has(arg: Id64Arg, id: Id64String): boolean {\r\n if (typeof arg === \"string\")\r\n return arg === id;\r\n if (Array.isArray(arg))\r\n return -1 !== arg.indexOf(id);\r\n\r\n return arg.has(id);\r\n }\r\n\r\n /** The string representation of an invalid Id. */\r\n export const invalid = \"0\";\r\n\r\n /** Determine if the supplied id string represents a transient Id.\r\n * @param id A well-formed Id string.\r\n * @returns true if the Id represents a transient Id.\r\n * @note This method assumes the input is a well-formed Id string.\r\n * @see [[Id64.isTransientId64]]\r\n * @see [[TransientIdSequence]]\r\n */\r\n export function isTransient(id: Id64String): boolean {\r\n // A transient Id is of the format \"0xffffffxxxxxxxxxx\" where the leading 6 digits indicate an invalid briefcase Id.\r\n return 18 === id.length && id.startsWith(\"0xffffff\");\r\n }\r\n\r\n /** Determine if the input is a well-formed [[Id64String]] and represents a transient Id.\r\n * @see [[Id64.isTransient]]\r\n * @see [[Id64.isId64]]\r\n * @see [[TransientIdSequence]]\r\n */\r\n export function isTransientId64(id: string): boolean {\r\n return isValidId64(id) && isTransient(id);\r\n }\r\n\r\n /** Determine if the input is a well-formed [[Id64String]].\r\n *\r\n * For a description of \"well-formed\", see [Working with Ids]($docs/learning/common/Id64.md).\r\n * @see [[Id64.isValidId64]]\r\n */\r\n export function isId64(id: string): boolean {\r\n const len = id.length;\r\n if (0 === len || 18 < len)\r\n return false;\r\n\r\n if (\"0\" !== id[0])\r\n return false;\r\n\r\n // Well-formed invalid Id: \"0\"\r\n if (1 === len)\r\n return true;\r\n\r\n // Valid Ids begin with \"0x\" followed by at least one lower-case hexadecimal digit.\r\n if (2 === len || \"x\" !== id[1])\r\n return false;\r\n\r\n // If briefcase Id is present, it occupies at least one digit, followed by 10 digits for local Id\r\n let localIdStart = 2;\r\n if (len > 12) {\r\n localIdStart = len - 10;\r\n\r\n // Verify briefcase Id\r\n if (!isValidHexString(id, 2, localIdStart - 2))\r\n return false;\r\n\r\n // Skip leading zeroes in local Id\r\n for (let i = localIdStart; i < len; i++) {\r\n if (0x30 !== id.charCodeAt(i)) // '0'\r\n break;\r\n else\r\n localIdStart++;\r\n }\r\n\r\n if (localIdStart >= len)\r\n return false;\r\n }\r\n\r\n return isValidHexString(id, localIdStart, len - localIdStart);\r\n }\r\n\r\n /** Returns true if the input is not equal to the representation of an invalid Id.\r\n * @note This method assumes the input is a well-formed Id string.\r\n * @see [[Id64.isInvalid]]\r\n * @see [[Id64.isValidId64]]\r\n */\r\n export function isValid(id: Id64String): boolean {\r\n return Id64.invalid !== id;\r\n }\r\n\r\n /** Returns true if the input is a well-formed [[Id64String]] representing a valid Id.\r\n * @see [[Id64.isValid]]\r\n * @see [[Id64.isId64]]\r\n */\r\n export function isValidId64(id: string): boolean {\r\n return Id64.invalid !== id && Id64.isId64(id);\r\n }\r\n\r\n /** Returns true if the input is a well-formed [[Id64String]] representing an invalid Id.\r\n * @see [[Id64.isValid]]\r\n */\r\n export function isInvalid(id: Id64String): boolean {\r\n return Id64.invalid === id;\r\n }\r\n\r\n /** A specialized replacement for Set<Id64String> optimized for performance-critical code which represents large sets of [[Id64]]s as pairs of\r\n * 32-bit integers.\r\n * The internal representation is a Map<number, Set<number>> where the Map key is the upper 4 bytes of the IDs and the Set elements are the lower 4 bytes of the IDs.\r\n * Because the upper 4 bytes store the 24-bit briefcase ID plus the upper 8 bits of the local ID, there will be a very small distribution of unique Map keys.\r\n * To further optimize this data type, the following assumptions are made regarding the { lower, upper } inputs, and no validation is performed to confirm them:\r\n * - The inputs are unsigned 32-bit integers;\r\n * - The inputs represent a valid Id64String (e.g., local ID is not zero).\r\n * @see [[Id64.Uint32Map]] for a similarly-optimized replacement for Map<Id64String, T>\r\n * @public\r\n */\r\n export class Uint32Set {\r\n protected readonly _map = new Map<number, Set<number>>();\r\n\r\n /** Construct a new Uint32Set.\r\n * @param ids If supplied, all of the specified Ids will be added to the new set.\r\n */\r\n public constructor(ids?: Id64Arg) {\r\n if (undefined !== ids)\r\n this.addIds(ids);\r\n }\r\n\r\n /** Remove all contents of this set. */\r\n public clear(): void {\r\n this._map.clear();\r\n }\r\n\r\n /** Add an Id to the set. */\r\n public addId(id: Id64String): void {\r\n this.add(Id64.getLowerUint32(id), Id64.getUpperUint32(id));\r\n }\r\n\r\n /** Add any number of Ids to the set. */\r\n public addIds(ids: Id64Arg): void {\r\n for (const id of Id64.iterable(ids))\r\n this.addId(id);\r\n }\r\n\r\n /** Returns true if the set contains the specified Id. */\r\n public hasId(id: Id64String): boolean { return this.has(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n\r\n /** Add an Id to the set. */\r\n public add(low: number, high: number): void {\r\n let set = this._map.get(high);\r\n if (undefined === set) {\r\n set = new Set<number>();\r\n this._map.set(high, set);\r\n }\r\n\r\n set.add(low);\r\n }\r\n\r\n /** Remove an Id from the set. */\r\n public deleteId(id: Id64String): void {\r\n this.delete(Id64.getLowerUint32(id), Id64.getUpperUint32(id));\r\n }\r\n\r\n /** Remove any number of Ids from the set. */\r\n public deleteIds(ids: Id64Arg): void {\r\n for (const id of Id64.iterable(ids))\r\n this.deleteId(id);\r\n }\r\n\r\n /** Remove an Id from the set. */\r\n public delete(low: number, high: number): void {\r\n const set = this._map.get(high);\r\n if (undefined !== set)\r\n set.delete(low);\r\n }\r\n\r\n /** Returns true if the set contains the specified Id. */\r\n public has(low: number, high: number): boolean {\r\n const set = this._map.get(high);\r\n return undefined !== set && set.has(low);\r\n }\r\n\r\n /** Returns true if the set contains the Id specified by `pair`. */\r\n public hasPair(pair: Uint32Pair): boolean {\r\n return this.has(pair.lower, pair.upper);\r\n }\r\n\r\n /** Returns true if the set contains no Ids. */\r\n public get isEmpty(): boolean { return 0 === this._map.size; }\r\n\r\n /** Returns the number of Ids contained in the set. */\r\n public get size(): number {\r\n let size = 0;\r\n for (const entry of this._map)\r\n size += entry[1].size;\r\n\r\n return size;\r\n }\r\n\r\n /** Populates and returns an array of all Ids contained in the set. */\r\n public toId64Array(): Id64Array {\r\n const ids: Id64Array = [];\r\n for (const entry of this._map)\r\n for (const low of entry[1])\r\n ids.push(Id64.fromUint32Pair(low, entry[0]));\r\n\r\n return ids;\r\n }\r\n\r\n /** Populates and returns a set of all Ids contained in the set. */\r\n public toId64Set(): Id64Set {\r\n const ids = new Set<string>();\r\n for (const entry of this._map)\r\n for (const low of entry[1])\r\n ids.add(Id64.fromUint32Pair(low, entry[0]));\r\n\r\n return ids;\r\n }\r\n\r\n /** Execute a function against each Id in this set. */\r\n public forEach(func: (lo: number, hi: number) => void): void {\r\n for (const entry of this._map)\r\n for (const lo of entry[1])\r\n func(lo, entry[0]);\r\n }\r\n }\r\n\r\n /** A specialized replacement for Map<Id64String, T> optimized for performance-critical code.\r\n * @see [[Id64.Uint32Set]] for implementation details.\r\n * @public\r\n */\r\n export class Uint32Map<T> {\r\n protected readonly _map = new Map<number, Map<number, T>>();\r\n\r\n /** Remove all entries from the map. */\r\n public clear(): void { this._map.clear(); }\r\n /** Find an entry in the map by Id. */\r\n public getById(id: Id64String): T | undefined { return this.get(Id64.getLowerUint32(id), Id64.getUpperUint32(id)); }\r\n /** Set an entry in the map by Id. */\r\n public setById(id: Id64String, value: T): void { this.set(Id64.getLowerUint32(id), Id64.getUpperUint32(id), value); }\r\n\r\n /** Set an entry in the map by Id components. */\r\n public set(low: number, high: number, value: T): void {\r\n let map = this._map.get(high);\r\n if (undefined === map) {\r\n map = new Map<number, T>();\r\n this._map.set(high, map);\r\n }\r\n\r\n map.set(low, value);\r\n }\r\n\r\n /** Get an entry from the map by Id components. */\r\n public get(low: number, high: number): T | undefined {\r\n const map = this._map.get(high);\r\n return undefined !== map ? map.get(low) : undefined;\r\n }\r\n\r\n /** Returns true if the map contains no entries. */\r\n public get isEmpty(): boolean { return 0 === this._map.size; }\r\n /** Returns the number of entries in the map. */\r\n public get size(): number {\r\n let size = 0;\r\n for (const entry of this._map)\r\n size += entry[1].size;\r\n\r\n return size;\r\n }\r\n\r\n /** Execute a function against each entry in this map. */\r\n public forEach(func: (lo: number, hi: number, value: T) => void): void {\r\n for (const outerEntry of this._map)\r\n for (const innerEntry of outerEntry[1])\r\n func(innerEntry[0], outerEntry[0], innerEntry[1]);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Generates unique [[Id64String]] values in sequence, which are guaranteed not to conflict with Ids associated with persistent elements or models.\r\n * This is useful for associating stable, non-persistent identifiers with things like [Decorator]($frontend)s.\r\n * A TransientIdSequence can generate a maximum of (2^40)-2 unique Ids.\r\n * @public\r\n */\r\nexport class TransientIdSequence {\r\n private _localId: number = 0;\r\n\r\n /** Generate and return the next transient Id64String in the sequence. */\r\n public get next(): Id64String { return Id64.fromLocalAndBriefcaseIds(++this._localId, 0xffffff); }\r\n}\r\n\r\n/**\r\n * The Guid namespace provides facilities for working with GUID strings using the \"8-4-4-4-12\" pattern.\r\n *\r\n * The [[GuidString]] type alias is used to indicate function arguments, return types, and variables which are known to\r\n * be in the GUID format.\r\n * @public\r\n */\r\nexport namespace Guid {\r\n const uuidPattern = new RegExp(\"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$\");\r\n\r\n /** Represents the empty Guid 00000000-0000-0000-0000-000000000000 */\r\n export const empty: GuidString = \"00000000-0000-0000-0000-000000000000\";\r\n\r\n /** Determine whether the input string is \"guid-like\". That is, it follows the 8-4-4-4-12 pattern. This does not enforce\r\n * that the string is actually in valid UUID format.\r\n */\r\n export function isGuid(value: string): boolean {\r\n return uuidPattern.test(value);\r\n }\r\n\r\n /** Determine whether the input string is a valid V4 Guid string */\r\n export function isV4Guid(value: string): boolean {\r\n return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/.test(value);\r\n }\r\n\r\n /** Create a new V4 Guid value */\r\n export function createValue(): GuidString {\r\n // https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n const r = Math.random() * 16 | 0;\r\n const v = c === \"x\" ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n }\r\n\r\n /**\r\n * Normalize a Guid string if possible. Normalization consists of:\r\n * - Convert all characters to lower case\r\n * - Trim any leading or trailing whitespace\r\n * - Convert to the standard Guid format \"8-4-4-4-12\", repositioning the '-' characters as necessary, presuming there are exactly 32 hexadecimal digits.\r\n * @param value Input value that represents a Guid\r\n * @returns Normalized representation of the Guid string. If the normalization fails, return the *original* value unmodified (Note: it is *not* a valid Guid)\r\n */\r\n export function normalize(value: GuidString): GuidString {\r\n const lowerValue = value.toLowerCase().trim();\r\n\r\n // Return if it's already formatted to be a Guid\r\n if (isGuid(lowerValue))\r\n return lowerValue;\r\n\r\n // Remove any existing \"-\" characters and position them properly, if there remains exactly 32 hexadecimal digits\r\n const noDashValue = lowerValue.replace(/-/g, \"\");\r\n const noDashPattern = /^([0-9a-f]{8})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{4})([0-9a-f]{12})$/;\r\n if (noDashPattern.test(noDashValue)) {\r\n return noDashValue.replace(noDashPattern,\r\n (_match: string, p1: string, p2: string, p3: string, p4: string, p5: string) =>\r\n `${p1}-${p2}-${p3}-${p4}-${p5}`);\r\n }\r\n\r\n // Return unmodified string - (note: it is *not* a valid Guid)\r\n return value;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"JsonUtils.d.ts","sourceRoot":"","sources":["../../src/JsonUtils.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,yBAAiB,SAAS,CAAC;IACzB;;;;OAIG;IACH,SAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,UAAQ,GAAG,OAAO,CAA0D;IACxH;;;;OAIG;IACH,SAAgB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,SAAI,GAAG,MAAM,CAAuE;IAC/H;;;;OAIG;IACH,SAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,SAAI,GAAG,MAAM,CAA2D;IACtH;;;;OAIG;IACH,SAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,SAAK,GAAG,MAAM,CAAmE;IAE/H;;;OAGG;IACH,SAAgB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAmD;IAE1F;;;OAGG;IACH,SAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAwD;IAEhG;;;;;;OAMG;IACH,SAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAqE;IAE9J;;;;;;OAMG;IACH,SAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,QAAqE;IAEjK;;;OAGG;IACH,SAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAEhD;IAED;;;OAGG;IACH,SAAgB,wBAAwB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAE3D;IAID;;;OAGG;IACH,SAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAE5D;IAED;;;OAGG;IACH,SAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CA2BtC;CAEF"}
1
+ {"version":3,"file":"JsonUtils.d.ts","sourceRoot":"","sources":["../../src/JsonUtils.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;GAEG;AACH,yBAAiB,SAAS,CAAC;IACzB;;;;OAIG;IACH,SAAgB,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,UAAQ,GAAG,OAAO,CAE7D;IACD;;;;OAIG;IACH,SAAgB,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,SAAI,GAAG,MAAM,CAEvD;IACD;;;;OAIG;IACH,SAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,SAAI,GAAG,MAAM,CAE1D;IACD;;;;OAIG;IACH,SAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,SAAK,GAAG,MAAM,CAE3D;IAED;;;OAGG;IACH,SAAgB,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAEtC;IAED;;;OAGG;IACH,SAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAEvC;IAED;;;;;;OAMG;IACH,SAAgB,iBAAiB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAKxF;IAED;;;;;;OAMG;IACH,SAAgB,kBAAkB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,QAK3F;IAED;;;OAGG;IACH,SAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAEhD;IAED;;;OAGG;IACH,SAAgB,wBAAwB,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAE3D;IAMD;;;OAGG;IACH,SAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,MAAM,CAE5D;IAED;;;OAGG;IACH,SAAgB,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CA2BtC;CAEF"}
@@ -15,40 +15,52 @@ export var JsonUtils;
15
15
  * @param defaultVal default value if json cannot be converted to boolean
16
16
  * @returns the value of json as a boolean, or default value
17
17
  */
18
- function asBool(json, defaultVal = false) { return isNullOrUndefined(json) ? defaultVal : !!json; }
18
+ function asBool(json, defaultVal = false) {
19
+ return isNullOrUndefined(json) ? defaultVal : !!json;
20
+ }
19
21
  JsonUtils.asBool = asBool;
20
22
  /** Get a value as an integer.
21
23
  * @param json the input JSON object
22
24
  * @param defaultVal default value if json cannot be converted to integer
23
25
  * @returns the value of json as an integer, or default value
24
26
  */
25
- function asInt(json, defaultVal = 0) { return (typeof json === "number") ? Math.trunc(json) : defaultVal; }
27
+ function asInt(json, defaultVal = 0) {
28
+ return (typeof json === "number") ? Math.trunc(json) : defaultVal;
29
+ }
26
30
  JsonUtils.asInt = asInt;
27
31
  /** Get a value as a double.
28
32
  * @param json the input JSON object
29
33
  * @param defaultVal default value if json cannot be converted to double
30
34
  * @returns the value of json as a double, or default value
31
35
  */
32
- function asDouble(json, defaultVal = 0) { return (typeof json === "number") ? json : defaultVal; }
36
+ function asDouble(json, defaultVal = 0) {
37
+ return (typeof json === "number") ? json : defaultVal;
38
+ }
33
39
  JsonUtils.asDouble = asDouble;
34
40
  /** Get a value as a string.
35
41
  * @param json the input JSON object
36
42
  * @param defaultVal default value if json cannot be converted to string
37
43
  * @returns the value of json as a string, or default value
38
44
  */
39
- function asString(json, defaultVal = "") { return isNullOrUndefined(json) ? defaultVal : json.toString(); }
45
+ function asString(json, defaultVal = "") {
46
+ return isNullOrUndefined(json) ? defaultVal : json.toString();
47
+ }
40
48
  JsonUtils.asString = asString;
41
49
  /** Get a value as an array.
42
50
  * @param json the input JSON object
43
51
  * @returns the input JSON object if it is an array, otherwise undefined
44
52
  */
45
- function asArray(json) { return Array.isArray(json) ? json : undefined; }
53
+ function asArray(json) {
54
+ return Array.isArray(json) ? json : undefined;
55
+ }
46
56
  JsonUtils.asArray = asArray;
47
57
  /** Get a value as an object.
48
58
  * @param json the input JSON object
49
59
  * @returns the input JSON object if it is an object, otherwise undefined
50
60
  */
51
- function asObject(json) { return "object" === typeof json ? json : undefined; }
61
+ function asObject(json) {
62
+ return "object" === typeof json ? json : undefined;
63
+ }
52
64
  JsonUtils.asObject = asObject;
53
65
  /** Set or remove a number on a json object, given a key name, a value, and a default value. Sets `json[key] = val` if val is *not* equal to the default,
54
66
  * otherwise `delete json[key]`. This is used to omit values from JSON strings that are of known defaults.
@@ -57,10 +69,12 @@ export var JsonUtils;
57
69
  * @param val the value to set
58
70
  * @param defaultVal the default value.
59
71
  */
60
- function setOrRemoveNumber(json, key, val, defaultVal) { if (val === defaultVal)
61
- delete json[key];
62
- else
63
- json[key] = val; }
72
+ function setOrRemoveNumber(json, key, val, defaultVal) {
73
+ if (val === defaultVal)
74
+ delete json[key];
75
+ else
76
+ json[key] = val;
77
+ }
64
78
  JsonUtils.setOrRemoveNumber = setOrRemoveNumber;
65
79
  /** Set or remove a boolean on a json object, given a key name, a value, and a default value. Sets `json[key] = val` if val is *not* equal to the default,
66
80
  * otherwise `delete json[key]`. This is used to omit values from JSON strings that are of known defaults.
@@ -69,10 +83,12 @@ export var JsonUtils;
69
83
  * @param val the value to set
70
84
  * @param defaultVal the default value.
71
85
  */
72
- function setOrRemoveBoolean(json, key, val, defaultVal) { if (val === defaultVal)
73
- delete json[key];
74
- else
75
- json[key] = val; }
86
+ function setOrRemoveBoolean(json, key, val, defaultVal) {
87
+ if (val === defaultVal)
88
+ delete json[key];
89
+ else
90
+ json[key] = val;
91
+ }
76
92
  JsonUtils.setOrRemoveBoolean = setOrRemoveBoolean;
77
93
  /** Determine if a Javascript object is equivalent to `{}`.
78
94
  * @param json The JSON object to test.
@@ -90,7 +106,9 @@ export var JsonUtils;
90
106
  return undefined === json || isEmptyObject(json);
91
107
  }
92
108
  JsonUtils.isEmptyObjectOrUndefined = isEmptyObjectOrUndefined;
93
- function isNullOrUndefined(json) { return null === json || undefined === json; }
109
+ function isNullOrUndefined(json) {
110
+ return null === json || undefined === json;
111
+ }
94
112
  /** Determine if the input is a non-empty Javascript object.
95
113
  * @param value The value to test.
96
114
  * @returns true if `value` is an Object with at least one key.
@@ -114,7 +132,7 @@ export var JsonUtils;
114
132
  // if it's an array, convert each member.
115
133
  if (Array.isArray(val)) {
116
134
  const arr = new Array(val.length);
117
- val.forEach((el, i) => { arr[i] = toObject(el); });
135
+ val.forEach((el, i) => arr[i] = toObject(el));
118
136
  return arr;
119
137
  }
120
138
  // Convert each property
@@ -1 +1 @@
1
- {"version":3,"file":"JsonUtils.js","sourceRoot":"","sources":["../../src/JsonUtils.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 Json\r\n */\r\n\r\n/** Utility functions for converting from JSON objects, with default values.\r\n * @public\r\n */\r\nexport namespace JsonUtils {\r\n /** Get a value as a boolean.\r\n * @param json the input JSON object\r\n * @param defaultVal default value if json cannot be converted to boolean\r\n * @returns the value of json as a boolean, or default value\r\n */\r\n export function asBool(json: any, defaultVal = false): boolean { return isNullOrUndefined(json) ? defaultVal : !!json; }\r\n /** Get a value as an integer.\r\n * @param json the input JSON object\r\n * @param defaultVal default value if json cannot be converted to integer\r\n * @returns the value of json as an integer, or default value\r\n */\r\n export function asInt(json: any, defaultVal = 0): number { return (typeof json === \"number\") ? Math.trunc(json) : defaultVal; }\r\n /** Get a value as a double.\r\n * @param json the input JSON object\r\n * @param defaultVal default value if json cannot be converted to double\r\n * @returns the value of json as a double, or default value\r\n */\r\n export function asDouble(json: any, defaultVal = 0): number { return (typeof json === \"number\") ? json : defaultVal; }\r\n /** Get a value as a string.\r\n * @param json the input JSON object\r\n * @param defaultVal default value if json cannot be converted to string\r\n * @returns the value of json as a string, or default value\r\n */\r\n export function asString(json: any, defaultVal = \"\"): string { return isNullOrUndefined(json) ? defaultVal : json.toString(); }\r\n\r\n /** Get a value as an array.\r\n * @param json the input JSON object\r\n * @returns the input JSON object if it is an array, otherwise undefined\r\n */\r\n export function asArray(json: any): any { return Array.isArray(json) ? json : undefined; }\r\n\r\n /** Get a value as an object.\r\n * @param json the input JSON object\r\n * @returns the input JSON object if it is an object, otherwise undefined\r\n */\r\n export function asObject(json: any): any { return \"object\" === typeof json ? json : undefined; }\r\n\r\n /** Set or remove a number on a json object, given a key name, a value, and a default value. Sets `json[key] = val` if val is *not* equal to the default,\r\n * otherwise `delete json[key]`. This is used to omit values from JSON strings that are of known defaults.\r\n * @param json the JSON object to affect\r\n * @param key the name of the member to set or remove\r\n * @param val the value to set\r\n * @param defaultVal the default value.\r\n */\r\n export function setOrRemoveNumber(json: any, key: string, val: number, defaultVal: number) { if (val === defaultVal) delete json[key]; else json[key] = val; }\r\n\r\n /** Set or remove a boolean on a json object, given a key name, a value, and a default value. Sets `json[key] = val` if val is *not* equal to the default,\r\n * otherwise `delete json[key]`. This is used to omit values from JSON strings that are of known defaults.\r\n * @param json the JSON object to affect\r\n * @param key the name of the member to set or remove\r\n * @param val the value to set\r\n * @param defaultVal the default value.\r\n */\r\n export function setOrRemoveBoolean(json: any, key: string, val: boolean, defaultVal: boolean) { if (val === defaultVal) delete json[key]; else json[key] = val; }\r\n\r\n /** Determine if a Javascript object is equivalent to `{}`.\r\n * @param json The JSON object to test.\r\n * @returns true if `json` is an Object with no keys.\r\n */\r\n export function isEmptyObject(json: any): boolean {\r\n return \"object\" === typeof json && 0 === Object.keys(json).length;\r\n }\r\n\r\n /** Determine if the input is undefined or an empty Javascript object.\r\n * @param json The JSON object to test.\r\n * @returns true if `json` is undefined or is an Object with no keys (equivalent to `{}`).\r\n */\r\n export function isEmptyObjectOrUndefined(json: any): boolean {\r\n return undefined === json || isEmptyObject(json);\r\n }\r\n\r\n function isNullOrUndefined(json: any): boolean { return null === json || undefined === json; }\r\n\r\n /** Determine if the input is a non-empty Javascript object.\r\n * @param value The value to test.\r\n * @returns true if `value` is an Object with at least one key.\r\n */\r\n export function isNonEmptyObject(value: any): value is Object {\r\n return !isEmptyObjectOrUndefined(value);\r\n }\r\n\r\n /**\r\n * Convert the input object into a \"pure\" JavaScript object, with only instances of \"object\" or primitives in the returned value.\r\n * Works recursively for object members, and over arrays entries. Calls \"toJSON\" on any members that implement it.\r\n */\r\n export function toObject(val: any): any {\r\n if (typeof val === \"boolean\" || typeof val === \"number\" || typeof val === \"string\")\r\n return val;\r\n\r\n if (typeof val !== \"object\")\r\n return undefined;\r\n\r\n // See if the object has toJSON() function defined.\r\n if (typeof val.toJSON !== \"undefined\")\r\n return toObject(val.toJSON());\r\n\r\n // if it's an array, convert each member.\r\n if (Array.isArray(val)) {\r\n const arr = new Array(val.length);\r\n val.forEach((el, i) => { arr[i] = toObject(el); });\r\n return arr;\r\n }\r\n\r\n // Convert each property\r\n const out: any = {};\r\n Object.getOwnPropertyNames(val).forEach((prop) => {\r\n const transformVal = toObject(val[prop]);\r\n if (transformVal !== undefined)\r\n out[prop] = transformVal;\r\n });\r\n\r\n return out;\r\n }\r\n\r\n}\r\n"]}
1
+ {"version":3,"file":"JsonUtils.js","sourceRoot":"","sources":["../../src/JsonUtils.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 Json\r\n */\r\n\r\n/** Utility functions for converting from JSON objects, with default values.\r\n * @public\r\n */\r\nexport namespace JsonUtils {\r\n /** Get a value as a boolean.\r\n * @param json the input JSON object\r\n * @param defaultVal default value if json cannot be converted to boolean\r\n * @returns the value of json as a boolean, or default value\r\n */\r\n export function asBool(json: any, defaultVal = false): boolean {\r\n return isNullOrUndefined(json) ? defaultVal : !!json;\r\n }\r\n /** Get a value as an integer.\r\n * @param json the input JSON object\r\n * @param defaultVal default value if json cannot be converted to integer\r\n * @returns the value of json as an integer, or default value\r\n */\r\n export function asInt(json: any, defaultVal = 0): number {\r\n return (typeof json === \"number\") ? Math.trunc(json) : defaultVal;\r\n }\r\n /** Get a value as a double.\r\n * @param json the input JSON object\r\n * @param defaultVal default value if json cannot be converted to double\r\n * @returns the value of json as a double, or default value\r\n */\r\n export function asDouble(json: any, defaultVal = 0): number {\r\n return (typeof json === \"number\") ? json : defaultVal;\r\n }\r\n /** Get a value as a string.\r\n * @param json the input JSON object\r\n * @param defaultVal default value if json cannot be converted to string\r\n * @returns the value of json as a string, or default value\r\n */\r\n export function asString(json: any, defaultVal = \"\"): string {\r\n return isNullOrUndefined(json) ? defaultVal : json.toString();\r\n }\r\n\r\n /** Get a value as an array.\r\n * @param json the input JSON object\r\n * @returns the input JSON object if it is an array, otherwise undefined\r\n */\r\n export function asArray(json: any): any {\r\n return Array.isArray(json) ? json : undefined;\r\n }\r\n\r\n /** Get a value as an object.\r\n * @param json the input JSON object\r\n * @returns the input JSON object if it is an object, otherwise undefined\r\n */\r\n export function asObject(json: any): any {\r\n return \"object\" === typeof json ? json : undefined;\r\n }\r\n\r\n /** Set or remove a number on a json object, given a key name, a value, and a default value. Sets `json[key] = val` if val is *not* equal to the default,\r\n * otherwise `delete json[key]`. This is used to omit values from JSON strings that are of known defaults.\r\n * @param json the JSON object to affect\r\n * @param key the name of the member to set or remove\r\n * @param val the value to set\r\n * @param defaultVal the default value.\r\n */\r\n export function setOrRemoveNumber(json: any, key: string, val: number, defaultVal: number) {\r\n if (val === defaultVal)\r\n delete json[key];\r\n else\r\n json[key] = val;\r\n }\r\n\r\n /** Set or remove a boolean on a json object, given a key name, a value, and a default value. Sets `json[key] = val` if val is *not* equal to the default,\r\n * otherwise `delete json[key]`. This is used to omit values from JSON strings that are of known defaults.\r\n * @param json the JSON object to affect\r\n * @param key the name of the member to set or remove\r\n * @param val the value to set\r\n * @param defaultVal the default value.\r\n */\r\n export function setOrRemoveBoolean(json: any, key: string, val: boolean, defaultVal: boolean) {\r\n if (val === defaultVal)\r\n delete json[key];\r\n else\r\n json[key] = val;\r\n }\r\n\r\n /** Determine if a Javascript object is equivalent to `{}`.\r\n * @param json The JSON object to test.\r\n * @returns true if `json` is an Object with no keys.\r\n */\r\n export function isEmptyObject(json: any): boolean {\r\n return \"object\" === typeof json && 0 === Object.keys(json).length;\r\n }\r\n\r\n /** Determine if the input is undefined or an empty Javascript object.\r\n * @param json The JSON object to test.\r\n * @returns true if `json` is undefined or is an Object with no keys (equivalent to `{}`).\r\n */\r\n export function isEmptyObjectOrUndefined(json: any): boolean {\r\n return undefined === json || isEmptyObject(json);\r\n }\r\n\r\n function isNullOrUndefined(json: any): boolean {\r\n return null === json || undefined === json;\r\n }\r\n\r\n /** Determine if the input is a non-empty Javascript object.\r\n * @param value The value to test.\r\n * @returns true if `value` is an Object with at least one key.\r\n */\r\n export function isNonEmptyObject(value: any): value is Object {\r\n return !isEmptyObjectOrUndefined(value);\r\n }\r\n\r\n /**\r\n * Convert the input object into a \"pure\" JavaScript object, with only instances of \"object\" or primitives in the returned value.\r\n * Works recursively for object members, and over arrays entries. Calls \"toJSON\" on any members that implement it.\r\n */\r\n export function toObject(val: any): any {\r\n if (typeof val === \"boolean\" || typeof val === \"number\" || typeof val === \"string\")\r\n return val;\r\n\r\n if (typeof val !== \"object\")\r\n return undefined;\r\n\r\n // See if the object has toJSON() function defined.\r\n if (typeof val.toJSON !== \"undefined\")\r\n return toObject(val.toJSON());\r\n\r\n // if it's an array, convert each member.\r\n if (Array.isArray(val)) {\r\n const arr = new Array(val.length);\r\n val.forEach((el, i) => arr[i] = toObject(el));\r\n return arr;\r\n }\r\n\r\n // Convert each property\r\n const out: any = {};\r\n Object.getOwnPropertyNames(val).forEach((prop) => {\r\n const transformVal = toObject(val[prop]);\r\n if (transformVal !== undefined)\r\n out[prop] = transformVal;\r\n });\r\n\r\n return out;\r\n }\r\n\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"LRUMap.d.ts","sourceRoot":"","sources":["../../src/LRUMap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LRUMap.d.ts","sourceRoot":"","sources":["../../src/LRUMap.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LRUMap.js","sourceRoot":"","sources":["../../src/LRUMap.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 Collections\r\n */\r\n\r\nimport { OrderedComparator } from \"./Compare\";\r\nimport { Dictionary } from \"./Dictionary\";\r\n\r\n/**\r\n * Derived from:\r\n * Licensed under MIT. Copyright (c) 2010 Rasmus Andersson <http://hunch.se/>\r\n * See README.md at https://github.com/rsms/js-lru for details.\r\n */\r\n\r\n/** An entry holds the key and value, and pointers to any older and newer entries.\r\n * @public\r\n */\r\nexport class Entry<K, V> {\r\n public newer?: Entry<K, V>;\r\n public older?: Entry<K, V>;\r\n constructor(public key: K, public value: V) { }\r\n}\r\n\r\nclass EntryIterator<K, V> implements Iterator<[K, V] | undefined> {\r\n private _entry: Entry<K, V> | undefined;\r\n constructor(oldestEntry: Entry<K, V>) {\r\n this._entry = oldestEntry;\r\n }\r\n public next() {\r\n const ent = this._entry;\r\n if (!ent)\r\n return { done: true, value: undefined };\r\n this._entry = ent.newer;\r\n const val: [K, V] = [ent.key, ent.value];\r\n return { done: false, value: val };\r\n }\r\n}\r\n\r\nclass KeyIterator<K, V> implements Iterator<K | undefined> {\r\n private _entry: Entry<K, V> | undefined;\r\n constructor(oldestEntry: Entry<K, V>) {\r\n this._entry = oldestEntry;\r\n }\r\n public next() {\r\n const ent = this._entry;\r\n if (!ent)\r\n return { done: true, value: undefined };\r\n this._entry = ent.newer;\r\n return { done: false, value: ent.key };\r\n }\r\n}\r\n\r\nclass ValueIterator<K, V> implements Iterator<V | undefined> {\r\n private _entry: Entry<K, V> | undefined;\r\n constructor(oldestEntry: Entry<K, V>) {\r\n this._entry = oldestEntry;\r\n }\r\n public next() {\r\n const ent = this._entry;\r\n if (!ent)\r\n return { done: true, value: undefined };\r\n this._entry = ent.newer;\r\n return { done: false, value: ent.value };\r\n }\r\n}\r\n\r\n/** The interface that must be satisfied by the underlying container type used by a LRUCache.\r\n * Compatible with a [[Dictionary]] or a standard Map.\r\n * @public\r\n */\r\nexport interface EntryContainer<K, V> {\r\n readonly size: number;\r\n clear(): void;\r\n get(key: K): Entry<K, V> | undefined;\r\n set(key: K, value: Entry<K, V>): void;\r\n has(key: K): boolean;\r\n delete(key: K): void;\r\n}\r\n\r\n/**\r\n * A mapping of a key/value pairs, where the size of the cache can be limited.\r\n *\r\n * When entries are inserted, if the cache is \"full\", the\r\n * least-recently-used (LRU) value is dropped. When entries are retrieved, they are moved to the front of the LRU list.\r\n *\r\n * Illustration of the design:\r\n *\r\n * ```\r\n *\r\n * entry entry entry entry\r\n * ______ ______ ______ ______\r\n * | head |.newer => | |.newer => | |.newer => | tail |\r\n * | A | | B | | C | | D |\r\n * |______| <= older.|______| <= older.|______| <= older.|______|\r\n *\r\n * removed <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- added\r\n * ```\r\n * @public\r\n */\r\nexport class LRUCache<K, V> {\r\n private _container: EntryContainer<K, V>;\r\n\r\n /** Current number of items */\r\n public size: number;\r\n\r\n /** Maximum number of items this cache can hold */\r\n public limit: number;\r\n\r\n /** Least recently-used entry. Invalidated when cache is modified. */\r\n public oldest?: Entry<K, V>;\r\n\r\n /** Most recently-used entry. Invalidated when cache is modified. */\r\n public newest?: Entry<K, V>;\r\n\r\n /**\r\n * Construct a new LRUCache to hold up to `limit` entries.\r\n */\r\n public constructor(limit: number, container: EntryContainer<K, V>) {\r\n this.size = 0;\r\n this.limit = limit;\r\n this.oldest = this.newest = undefined;\r\n this._container = container;\r\n }\r\n\r\n private markEntryAsUsed(entry: Entry<K, V>) {\r\n if (entry === this.newest)\r\n return; // Already the most recently used entry, so no need to update the list\r\n\r\n // HEAD--------------TAIL\r\n // <.older .newer>\r\n // <--- add direction --\r\n // A B C <D> E\r\n if (entry.newer) {\r\n if (entry === this.oldest) {\r\n this.oldest = entry.newer;\r\n }\r\n entry.newer.older = entry.older; // C <-- E.\r\n }\r\n if (entry.older) {\r\n entry.older.newer = entry.newer; // C. --> E\r\n }\r\n entry.newer = undefined; // D --x\r\n entry.older = this.newest; // D. --> E\r\n if (this.newest) {\r\n this.newest.newer = entry; // E. <-- D\r\n }\r\n this.newest = entry;\r\n }\r\n\r\n /** Replace all values in this cache with key-value pairs (2-element Arrays) from provided iterable. */\r\n public assign(entries: Iterable<[K, V]>): void {\r\n let entry;\r\n let limit = this.limit || Number.MAX_VALUE;\r\n this._container.clear();\r\n const it = entries[Symbol.iterator]();\r\n for (let itv = it.next(); !itv.done; itv = it.next()) {\r\n const e = new Entry(itv.value[0], itv.value[1]);\r\n this._container.set(e.key, e);\r\n if (!entry) {\r\n this.oldest = e;\r\n } else {\r\n entry.newer = e;\r\n e.older = entry;\r\n }\r\n entry = e;\r\n if (limit-- === 0) {\r\n throw new Error(\"overflow\");\r\n }\r\n }\r\n this.newest = entry;\r\n this.size = this._container.size;\r\n }\r\n\r\n /** Get and register recent use of <key>.\r\n * Returns the value associated with <key> or undefined if not in cache.\r\n */\r\n public get(key: K): V | undefined {\r\n // First, find our cache entry\r\n const entry = this._container.get(key);\r\n if (!entry)\r\n return; // Not cached. Sorry.\r\n // As <key> was found in the cache, register it as being requested recently\r\n this.markEntryAsUsed(entry);\r\n return entry.value;\r\n }\r\n\r\n /** Put <value> into the cache associated with <key>. Replaces any existing entry with the same key.\r\n * @returns `this`.\r\n */\r\n public set(key: K, value: V): LRUCache<K, V> {\r\n let entry = this._container.get(key);\r\n if (entry) {\r\n // update existing\r\n entry.value = value;\r\n this.markEntryAsUsed(entry);\r\n return this;\r\n }\r\n\r\n // new entry\r\n this._container.set(key, (entry = new Entry(key, value)));\r\n\r\n if (this.newest) {\r\n // link previous tail to the new tail (entry)\r\n this.newest.newer = entry;\r\n entry.older = this.newest;\r\n } else {\r\n // we're first in\r\n this.oldest = entry;\r\n }\r\n\r\n // add new entry to the end of the linked list -- it is now the freshest entry.\r\n this.newest = entry;\r\n ++this.size;\r\n if (this.size > this.limit) {\r\n // we hit the limit -- remove the head\r\n this.shift();\r\n }\r\n return this;\r\n }\r\n\r\n /** Purge the least recently used (oldest) entry from the cache.\r\n * @returns The removed entry or undefined if the cache was empty.\r\n */\r\n public shift(): [K, V] | undefined {\r\n const entry = this.oldest;\r\n if (entry) {\r\n if (entry.newer) {\r\n // advance the list\r\n this.oldest = entry.newer;\r\n this.oldest.older = undefined;\r\n } else {\r\n // the cache is exhausted\r\n this.oldest = undefined;\r\n this.newest = undefined;\r\n }\r\n // Remove last strong reference to <entry> and remove links from the purged\r\n // entry being returned:\r\n entry.newer = entry.older = undefined;\r\n this._container.delete(entry.key);\r\n --this.size;\r\n return [entry.key, entry.value];\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Access value for `key` without registering recent use. Useful if you do not\r\n * want to change the state of the cache, but only \"peek\" at it.\r\n * @returns The value associated with `key` if found, or undefined if not found.\r\n */\r\n public find(key: K): V | undefined {\r\n const e = this._container.get(key);\r\n return e ? e.value : undefined;\r\n }\r\n\r\n /** Check if there's a value for key in the cache without registering recent use. */\r\n public has(key: K): boolean {\r\n return this._container.has(key);\r\n }\r\n\r\n /** Remove entry `key` from cache and return its value.\r\n * @returns The removed value, or undefined if not found.\r\n */\r\n public delete(key: K): V | undefined {\r\n const entry = this._container.get(key);\r\n if (!entry) return;\r\n this._container.delete(entry.key);\r\n if (entry.newer && entry.older) {\r\n // re-link the older entry with the newer entry\r\n entry.older.newer = entry.newer;\r\n entry.newer.older = entry.older;\r\n } else if (entry.newer) {\r\n // remove the link to us\r\n entry.newer.older = undefined;\r\n // link the newer entry to head\r\n this.oldest = entry.newer;\r\n } else if (entry.older) {\r\n // remove the link to us\r\n entry.older.newer = undefined;\r\n // link the newer entry to head\r\n this.newest = entry.older;\r\n } else { // if(entry.older === undefined && entry.newer === undefined) {\r\n this.oldest = this.newest = undefined;\r\n }\r\n\r\n this.size--;\r\n return entry.value;\r\n }\r\n\r\n /** Removes all entries */\r\n public clear(): void {\r\n // Note: clearing links should be safe, as we don't expose live links to user\r\n this.oldest = this.newest = undefined;\r\n this.size = 0;\r\n this._container.clear();\r\n }\r\n\r\n /** Returns an iterator over all keys, starting with the oldest. */\r\n public keys(): Iterator<K | undefined> | undefined {\r\n return this.oldest ? new KeyIterator(this.oldest) : undefined;\r\n }\r\n\r\n /** Returns an iterator over all values, starting with the oldest. */\r\n public values(): Iterator<V | undefined> | undefined {\r\n return this.oldest ? new ValueIterator(this.oldest) : undefined;\r\n }\r\n\r\n /** Returns an iterator over all entries, starting with the oldest. */\r\n public entries(): Iterator<[K, V] | undefined> | undefined {\r\n return this.oldest ? new EntryIterator(this.oldest) : undefined;\r\n }\r\n\r\n /** Call `fun` for each entry, starting with the oldest entry. */\r\n public forEach(fun: (value: V, key: K, m: LRUCache<K, V>) => void, thisObj?: any): void {\r\n if (typeof thisObj !== \"object\") {\r\n thisObj = this;\r\n }\r\n let entry = this.oldest;\r\n while (entry) {\r\n fun.call(thisObj, entry.value, entry.key, this);\r\n entry = entry.newer;\r\n }\r\n }\r\n\r\n /** Returns a JSON (array) representation */\r\n public toJSON(): Array<{ key: K, value: V }> {\r\n const s = new Array(this.size);\r\n let i = 0;\r\n let entry = this.oldest;\r\n while (entry) {\r\n s[i++] = { key: entry.key, value: entry.value };\r\n entry = entry.newer;\r\n }\r\n return s;\r\n }\r\n\r\n /** Returns a String representation */\r\n public toString(): string {\r\n let s = \"\";\r\n let entry = this.oldest;\r\n while (entry) {\r\n s += `${String(entry.key)}:${entry.value}`;\r\n entry = entry.newer;\r\n if (entry) {\r\n s += \" < \";\r\n }\r\n }\r\n return s;\r\n }\r\n}\r\n\r\n/** A [[LRUCache]] using a standard Map as its internal storage.\r\n * @public\r\n */\r\nexport class LRUMap<K, V> extends LRUCache<K, V> {\r\n /**\r\n * Construct a new LRUMap to hold up to `limit` entries.\r\n */\r\n constructor(limit: number) {\r\n super(limit, new Map<K, Entry<K, V>>());\r\n }\r\n}\r\n\r\n/** A [[LRUCache]] using a [[Dictionary]] as its internal storage, permitting custom key comparison logic.\r\n * @public\r\n */\r\nexport class LRUDictionary<K, V> extends LRUCache<K, V> {\r\n /**\r\n * Construct a new LRUDictionary to hold up to `limit` entries.\r\n * @param limit The maximum number of entries permitted in the dictionary.\r\n * @param compareKeys The function used to compare keys within the dictionary.\r\n */\r\n constructor(limit: number, compareKeys: OrderedComparator<K>) {\r\n super(limit, new Dictionary<K, Entry<K, V>>(compareKeys));\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"LRUMap.js","sourceRoot":"","sources":["../../src/LRUMap.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;GAIG;AAEH;;GAEG;AACH,MAAM,OAAO,KAAK;IAGhB,YAAmB,GAAM,EAAS,KAAQ;QAAvB,QAAG,GAAH,GAAG,CAAG;QAAS,UAAK,GAAL,KAAK,CAAG;IAAI,CAAC;CAChD;AAED,MAAM,aAAa;IAEjB,YAAY,WAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;IAC5B,CAAC;IACM,IAAI;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,MAAM,GAAG,GAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IACrC,CAAC;CACF;AAED,MAAM,WAAW;IAEf,YAAY,WAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;IAC5B,CAAC;IACM,IAAI;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IACzC,CAAC;CACF;AAED,MAAM,aAAa;IAEjB,YAAY,WAAwB;QAClC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;IAC5B,CAAC;IACM,IAAI;QACT,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,IAAI,CAAC,GAAG;YACN,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC;QACxB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC;IAC3C,CAAC;CACF;AAeD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,QAAQ;IAenB;;OAEG;IACH,YAAmB,KAAa,EAAE,SAA+B;QAC/D,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,CAAC;IAEO,eAAe,CAAC,KAAkB;QACxC,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM;YACvB,OAAO,CAAC,sEAAsE;QAEhF,yBAAyB;QACzB,sBAAsB;QACtB,yBAAyB;QACzB,oBAAoB;QACpB,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,IAAI,KAAK,KAAK,IAAI,CAAC,MAAM,EAAE;gBACzB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;aAC3B;YACD,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW;SAC7C;QACD,IAAI,KAAK,CAAC,KAAK,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW;SAC7C;QACD,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,QAAQ;QACjC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW;QACtC,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,WAAW;SACvC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,wGAAwG;IACjG,MAAM,CAAC,OAAyB;QACrC,IAAI,KAAK,CAAC;QACV,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,SAAS,CAAC;QAC3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtC,KAAK,IAAI,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACpD,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,KAAK,EAAE;gBACV,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACjB;iBAAM;gBACL,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;gBAChB,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;aACjB;YACD,KAAK,GAAG,CAAC,CAAC;YACV,IAAI,KAAK,EAAE,KAAK,CAAC,EAAE;gBACjB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;aAC7B;SACF;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;IACnC,CAAC;IAED;;OAEG;IACI,GAAG,CAAC,GAAM;QACf,8BAA8B;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,qBAAqB;QAC/B,2EAA2E;QAC3E,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,GAAG,CAAC,GAAM,EAAE,KAAQ;QACzB,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,EAAE;YACT,kBAAkB;YAClB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;YACpB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;SACb;QAED,YAAY;QACZ,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAE1D,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,6CAA6C;YAC7C,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YAC1B,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;SAC3B;aAAM;YACL,iBAAiB;YACjB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;SACrB;QAED,+EAA+E;QAC/E,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,EAAE,IAAI,CAAC,IAAI,CAAC;QACZ,IAAI,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE;YAC1B,sCAAsC;YACtC,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACI,KAAK;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,IAAI,KAAK,EAAE;YACT,IAAI,KAAK,CAAC,KAAK,EAAE;gBACf,mBAAmB;gBACnB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;gBAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;aAC/B;iBAAM;gBACL,yBAAyB;gBACzB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBACxB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;aACzB;YACD,2EAA2E;YAC3E,wBAAwB;YACxB,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YACtC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClC,EAAE,IAAI,CAAC,IAAI,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;SACjC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;;OAGG;IACI,IAAI,CAAC,GAAM;QAChB,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACjC,CAAC;IAED,oFAAoF;IAC7E,GAAG,CAAC,GAAM;QACf,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,GAAM;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YACR,OAAO;QAET,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE;YAC9B,+CAA+C;YAC/C,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YAChC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACjC;aAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACtB,wBAAwB;YACxB,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAC9B,+BAA+B;YAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;SAC3B;aAAM,IAAI,KAAK,CAAC,KAAK,EAAE;YACtB,wBAAwB;YACxB,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC;YAC9B,+BAA+B;YAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC;SAC3B;aAAM,EAAE,+DAA+D;YACtE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;SACvC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,2BAA2B;IACpB,KAAK;QACV,6EAA6E;QAC7E,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,mEAAmE;IAC5D,IAAI;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;IAED,qEAAqE;IAC9D,MAAM;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,CAAC;IAED,sEAAsE;IAC/D,OAAO;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,CAAC;IAED,kEAAkE;IAC3D,OAAO,CAAC,GAAkD,EAAE,OAAa;QAC9E,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;YAC/B,OAAO,GAAG,IAAI,CAAC;SAChB;QACD,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,OAAO,KAAK,EAAE;YACZ,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAChD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACrB;IACH,CAAC;IAED,4CAA4C;IACrC,MAAM;QACX,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,OAAO,KAAK,EAAE;YACZ,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;YAChD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACrB;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,sCAAsC;IAC/B,QAAQ;QACb,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QACxB,OAAO,KAAK,EAAE;YACZ,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC3C,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;YACpB,IAAI,KAAK,EAAE;gBACT,CAAC,IAAI,KAAK,CAAC;aACZ;SACF;QACD,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,MAAa,SAAQ,QAAc;IAC9C;;OAEG;IACH,YAAY,KAAa;QACvB,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,EAAkB,CAAC,CAAC;IAC1C,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,aAAoB,SAAQ,QAAc;IACrD;;;;OAIG;IACH,YAAY,KAAa,EAAE,WAAiC;QAC1D,KAAK,CAAC,KAAK,EAAE,IAAI,UAAU,CAAiB,WAAW,CAAC,CAAC,CAAC;IAC5D,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 Collections\r\n */\r\n\r\nimport { OrderedComparator } from \"./Compare\";\r\nimport { Dictionary } from \"./Dictionary\";\r\n\r\n/**\r\n * Derived from:\r\n * Licensed under MIT. Copyright (c) 2010 Rasmus Andersson <http://hunch.se/>\r\n * See README.md at https://github.com/rsms/js-lru for details.\r\n */\r\n\r\n/** An entry holds the key and value, and pointers to any older and newer entries.\r\n * @public\r\n */\r\nexport class Entry<K, V> {\r\n public newer?: Entry<K, V>;\r\n public older?: Entry<K, V>;\r\n constructor(public key: K, public value: V) { }\r\n}\r\n\r\nclass EntryIterator<K, V> implements Iterator<[K, V] | undefined> {\r\n private _entry: Entry<K, V> | undefined;\r\n constructor(oldestEntry: Entry<K, V>) {\r\n this._entry = oldestEntry;\r\n }\r\n public next() {\r\n const ent = this._entry;\r\n if (!ent)\r\n return { done: true, value: undefined };\r\n this._entry = ent.newer;\r\n const val: [K, V] = [ent.key, ent.value];\r\n return { done: false, value: val };\r\n }\r\n}\r\n\r\nclass KeyIterator<K, V> implements Iterator<K | undefined> {\r\n private _entry: Entry<K, V> | undefined;\r\n constructor(oldestEntry: Entry<K, V>) {\r\n this._entry = oldestEntry;\r\n }\r\n public next() {\r\n const ent = this._entry;\r\n if (!ent)\r\n return { done: true, value: undefined };\r\n this._entry = ent.newer;\r\n return { done: false, value: ent.key };\r\n }\r\n}\r\n\r\nclass ValueIterator<K, V> implements Iterator<V | undefined> {\r\n private _entry: Entry<K, V> | undefined;\r\n constructor(oldestEntry: Entry<K, V>) {\r\n this._entry = oldestEntry;\r\n }\r\n public next() {\r\n const ent = this._entry;\r\n if (!ent)\r\n return { done: true, value: undefined };\r\n this._entry = ent.newer;\r\n return { done: false, value: ent.value };\r\n }\r\n}\r\n\r\n/** The interface that must be satisfied by the underlying container type used by a LRUCache.\r\n * Compatible with a [[Dictionary]] or a standard Map.\r\n * @public\r\n */\r\nexport interface EntryContainer<K, V> {\r\n readonly size: number;\r\n clear(): void;\r\n get(key: K): Entry<K, V> | undefined;\r\n set(key: K, value: Entry<K, V>): void;\r\n has(key: K): boolean;\r\n delete(key: K): void;\r\n}\r\n\r\n/**\r\n * A mapping of a key/value pairs, where the size of the cache can be limited.\r\n *\r\n * When entries are inserted, if the cache is \"full\", the\r\n * least-recently-used (LRU) value is dropped. When entries are retrieved, they are moved to the front of the LRU list.\r\n *\r\n * Illustration of the design:\r\n *\r\n * ```\r\n *\r\n * entry entry entry entry\r\n * ______ ______ ______ ______\r\n * | head |.newer => | |.newer => | |.newer => | tail |\r\n * | A | | B | | C | | D |\r\n * |______| <= older.|______| <= older.|______| <= older.|______|\r\n *\r\n * removed <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- <-- added\r\n * ```\r\n * @public\r\n */\r\nexport class LRUCache<K, V> {\r\n private _container: EntryContainer<K, V>;\r\n\r\n /** Current number of items */\r\n public size: number;\r\n\r\n /** Maximum number of items this cache can hold */\r\n public limit: number;\r\n\r\n /** Least recently-used entry. Invalidated when cache is modified. */\r\n public oldest?: Entry<K, V>;\r\n\r\n /** Most recently-used entry. Invalidated when cache is modified. */\r\n public newest?: Entry<K, V>;\r\n\r\n /**\r\n * Construct a new LRUCache to hold up to `limit` entries.\r\n */\r\n public constructor(limit: number, container: EntryContainer<K, V>) {\r\n this.size = 0;\r\n this.limit = limit;\r\n this.oldest = this.newest = undefined;\r\n this._container = container;\r\n }\r\n\r\n private markEntryAsUsed(entry: Entry<K, V>) {\r\n if (entry === this.newest)\r\n return; // Already the most recently used entry, so no need to update the list\r\n\r\n // HEAD--------------TAIL\r\n // <.older .newer>\r\n // <--- add direction --\r\n // A B C <D> E\r\n if (entry.newer) {\r\n if (entry === this.oldest) {\r\n this.oldest = entry.newer;\r\n }\r\n entry.newer.older = entry.older; // C <-- E.\r\n }\r\n if (entry.older) {\r\n entry.older.newer = entry.newer; // C. --> E\r\n }\r\n entry.newer = undefined; // D --x\r\n entry.older = this.newest; // D. --> E\r\n if (this.newest) {\r\n this.newest.newer = entry; // E. <-- D\r\n }\r\n this.newest = entry;\r\n }\r\n\r\n /** Replace all values in this cache with key-value pairs (2-element Arrays) from provided iterable. */\r\n public assign(entries: Iterable<[K, V]>): void {\r\n let entry;\r\n let limit = this.limit || Number.MAX_VALUE;\r\n this._container.clear();\r\n const it = entries[Symbol.iterator]();\r\n for (let itv = it.next(); !itv.done; itv = it.next()) {\r\n const e = new Entry(itv.value[0], itv.value[1]);\r\n this._container.set(e.key, e);\r\n if (!entry) {\r\n this.oldest = e;\r\n } else {\r\n entry.newer = e;\r\n e.older = entry;\r\n }\r\n entry = e;\r\n if (limit-- === 0) {\r\n throw new Error(\"overflow\");\r\n }\r\n }\r\n this.newest = entry;\r\n this.size = this._container.size;\r\n }\r\n\r\n /** Get and register recent use of <key>.\r\n * Returns the value associated with <key> or undefined if not in cache.\r\n */\r\n public get(key: K): V | undefined {\r\n // First, find our cache entry\r\n const entry = this._container.get(key);\r\n if (!entry)\r\n return; // Not cached. Sorry.\r\n // As <key> was found in the cache, register it as being requested recently\r\n this.markEntryAsUsed(entry);\r\n return entry.value;\r\n }\r\n\r\n /** Put <value> into the cache associated with <key>. Replaces any existing entry with the same key.\r\n * @returns `this`.\r\n */\r\n public set(key: K, value: V): LRUCache<K, V> {\r\n let entry = this._container.get(key);\r\n if (entry) {\r\n // update existing\r\n entry.value = value;\r\n this.markEntryAsUsed(entry);\r\n return this;\r\n }\r\n\r\n // new entry\r\n this._container.set(key, (entry = new Entry(key, value)));\r\n\r\n if (this.newest) {\r\n // link previous tail to the new tail (entry)\r\n this.newest.newer = entry;\r\n entry.older = this.newest;\r\n } else {\r\n // we're first in\r\n this.oldest = entry;\r\n }\r\n\r\n // add new entry to the end of the linked list -- it is now the freshest entry.\r\n this.newest = entry;\r\n ++this.size;\r\n if (this.size > this.limit) {\r\n // we hit the limit -- remove the head\r\n this.shift();\r\n }\r\n return this;\r\n }\r\n\r\n /** Purge the least recently used (oldest) entry from the cache.\r\n * @returns The removed entry or undefined if the cache was empty.\r\n */\r\n public shift(): [K, V] | undefined {\r\n const entry = this.oldest;\r\n if (entry) {\r\n if (entry.newer) {\r\n // advance the list\r\n this.oldest = entry.newer;\r\n this.oldest.older = undefined;\r\n } else {\r\n // the cache is exhausted\r\n this.oldest = undefined;\r\n this.newest = undefined;\r\n }\r\n // Remove last strong reference to <entry> and remove links from the purged\r\n // entry being returned:\r\n entry.newer = entry.older = undefined;\r\n this._container.delete(entry.key);\r\n --this.size;\r\n return [entry.key, entry.value];\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Access value for `key` without registering recent use. Useful if you do not\r\n * want to change the state of the cache, but only \"peek\" at it.\r\n * @returns The value associated with `key` if found, or undefined if not found.\r\n */\r\n public find(key: K): V | undefined {\r\n const e = this._container.get(key);\r\n return e ? e.value : undefined;\r\n }\r\n\r\n /** Check if there's a value for key in the cache without registering recent use. */\r\n public has(key: K): boolean {\r\n return this._container.has(key);\r\n }\r\n\r\n /** Remove entry `key` from cache and return its value.\r\n * @returns The removed value, or undefined if not found.\r\n */\r\n public delete(key: K): V | undefined {\r\n const entry = this._container.get(key);\r\n if (!entry)\r\n return;\r\n\r\n this._container.delete(entry.key);\r\n if (entry.newer && entry.older) {\r\n // re-link the older entry with the newer entry\r\n entry.older.newer = entry.newer;\r\n entry.newer.older = entry.older;\r\n } else if (entry.newer) {\r\n // remove the link to us\r\n entry.newer.older = undefined;\r\n // link the newer entry to head\r\n this.oldest = entry.newer;\r\n } else if (entry.older) {\r\n // remove the link to us\r\n entry.older.newer = undefined;\r\n // link the newer entry to head\r\n this.newest = entry.older;\r\n } else { // if(entry.older === undefined && entry.newer === undefined) {\r\n this.oldest = this.newest = undefined;\r\n }\r\n\r\n this.size--;\r\n return entry.value;\r\n }\r\n\r\n /** Removes all entries */\r\n public clear(): void {\r\n // Note: clearing links should be safe, as we don't expose live links to user\r\n this.oldest = this.newest = undefined;\r\n this.size = 0;\r\n this._container.clear();\r\n }\r\n\r\n /** Returns an iterator over all keys, starting with the oldest. */\r\n public keys(): Iterator<K | undefined> | undefined {\r\n return this.oldest ? new KeyIterator(this.oldest) : undefined;\r\n }\r\n\r\n /** Returns an iterator over all values, starting with the oldest. */\r\n public values(): Iterator<V | undefined> | undefined {\r\n return this.oldest ? new ValueIterator(this.oldest) : undefined;\r\n }\r\n\r\n /** Returns an iterator over all entries, starting with the oldest. */\r\n public entries(): Iterator<[K, V] | undefined> | undefined {\r\n return this.oldest ? new EntryIterator(this.oldest) : undefined;\r\n }\r\n\r\n /** Call `fun` for each entry, starting with the oldest entry. */\r\n public forEach(fun: (value: V, key: K, m: LRUCache<K, V>) => void, thisObj?: any): void {\r\n if (typeof thisObj !== \"object\") {\r\n thisObj = this;\r\n }\r\n let entry = this.oldest;\r\n while (entry) {\r\n fun.call(thisObj, entry.value, entry.key, this);\r\n entry = entry.newer;\r\n }\r\n }\r\n\r\n /** Returns a JSON (array) representation */\r\n public toJSON(): Array<{ key: K, value: V }> {\r\n const s = new Array(this.size);\r\n let i = 0;\r\n let entry = this.oldest;\r\n while (entry) {\r\n s[i++] = { key: entry.key, value: entry.value };\r\n entry = entry.newer;\r\n }\r\n return s;\r\n }\r\n\r\n /** Returns a String representation */\r\n public toString(): string {\r\n let s = \"\";\r\n let entry = this.oldest;\r\n while (entry) {\r\n s += `${String(entry.key)}:${entry.value}`;\r\n entry = entry.newer;\r\n if (entry) {\r\n s += \" < \";\r\n }\r\n }\r\n return s;\r\n }\r\n}\r\n\r\n/** A [[LRUCache]] using a standard Map as its internal storage.\r\n * @public\r\n */\r\nexport class LRUMap<K, V> extends LRUCache<K, V> {\r\n /**\r\n * Construct a new LRUMap to hold up to `limit` entries.\r\n */\r\n constructor(limit: number) {\r\n super(limit, new Map<K, Entry<K, V>>());\r\n }\r\n}\r\n\r\n/** A [[LRUCache]] using a [[Dictionary]] as its internal storage, permitting custom key comparison logic.\r\n * @public\r\n */\r\nexport class LRUDictionary<K, V> extends LRUCache<K, V> {\r\n /**\r\n * Construct a new LRUDictionary to hold up to `limit` entries.\r\n * @param limit The maximum number of entries permitted in the dictionary.\r\n * @param compareKeys The function used to compare keys within the dictionary.\r\n */\r\n constructor(limit: number, compareKeys: OrderedComparator<K>) {\r\n super(limit, new Dictionary<K, Entry<K, V>>(compareKeys));\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"OneAtATimeAction.d.ts","sourceRoot":"","sources":["../../src/OneAtATimeAction.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,YAAY;AACZ,qBAAa,cAAe,SAAQ,KAAK;CAAI;AAqC7C;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB,CAAC,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAwB;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,IAAI,CAAiC;IACtC,GAAG,EAAE,MAAM,CAAC;IAEnB;;OAEG;gBACS,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,SAAc;IAElE;;OAEG;IACU,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;CAuBjD"}
1
+ {"version":3,"file":"OneAtATimeAction.d.ts","sourceRoot":"","sources":["../../src/OneAtATimeAction.ts"],"names":[],"mappings":"AAIA;;GAEG;AAIH,YAAY;AACZ,qBAAa,cAAe,SAAQ,KAAK;CAAI;AAqC7C;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB,CAAC,CAAC;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAwB;IACxC,OAAO,CAAC,QAAQ,CAAC,CAAwB;IACzC,OAAO,CAAC,IAAI,CAAiC;IACtC,GAAG,EAAE,MAAM,CAAC;IAEnB;;OAEG;gBACS,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,GAAG,SAAc;IAKlE;;OAEG;IACU,OAAO,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;CAuBjD"}
@@ -56,7 +56,10 @@ export class OneAtATimeAction {
56
56
  /** Ctor for OneAtATimePromise.
57
57
  * @param run The method that performs an action that creates the Promise.
58
58
  */
59
- constructor(run, msg = "abandoned") { this._run = run; this.msg = msg; }
59
+ constructor(run, msg = "abandoned") {
60
+ this._run = run;
61
+ this.msg = msg;
62
+ }
60
63
  /** Add a new request to this OneAtATimePromise. The request will only run when no other outstanding requests are active.
61
64
  * @note Callers of this method *must* handle AbandonedError rejections.
62
65
  */
@@ -1 +1 @@
1
- {"version":3,"file":"OneAtATimeAction.js","sourceRoot":"","sources":["../../src/OneAtATimeAction.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY;AACZ,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAI;AAE7C;;;;;GAKG;AACH,MAAM,kBAAkB;IAKtB;;;OAGG;IACH,YAAoB,IAAoC,EAAU,KAAY;QAA1D,SAAI,GAAJ,IAAI,CAAgC;QAAU,UAAK,GAAL,KAAK,CAAO;IAAI,CAAC;IAEnF,0GAA0G;IACnG,KAAK,CAAC,IAAI,CAAC,GAAW;QAC3B,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,GAAG,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IAC7E,KAAK,CAAC,KAAK;QAChB,IAAI;YACF,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAC/C;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,6EAA6E;SAC/H;IACH,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IAM3B;;OAEG;IACH,YAAY,GAAmC,EAAE,GAAG,GAAG,WAAW,IAAI,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;IAExG;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,GAAG,IAAW;QACjC,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,0CAA0C;QACpG,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,8FAA8F;QAEpI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,EAAE,8BAA8B;YAC9D,IAAI,IAAI,CAAC,QAAQ,EAAE,8FAA8F;gBAC/G,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,iEAAiE;YAC5F,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACvB;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,uCAAuC;YAC7D,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,8DAA8D;SAC9E;QAED,IAAI;YACF,OAAO,MAAM,OAAO,CAAC;SACtB;gBAAS;YACR,2DAA2D;YAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,2CAA2C;YACzE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,gBAAgB;YAC3C,IAAI,IAAI,CAAC,OAAO;gBACd,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,8DAA8D;SACvF;IACH,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 { BentleyError } from \"./BentleyError\";\r\n\r\n/** @beta */\r\nexport class AbandonedError extends Error { }\r\n\r\n/**\r\n * An object that returns a Promise when you call [[init]], but supplies a way to abandon the promise if it is no longer relevant.\r\n * When you call abandon, the promise will be rejected. You must supply a [[run]] method to the constructor that\r\n * creates the real Promise for the underlying action. Notice that to use this class there are really two\r\n * Promises involved that are chained together. That makes this class less efficient than just using a Promise directly.\r\n */\r\nclass PromiseWithAbandon<T> {\r\n /** Method to abandon the Promise created by [[init]] while it is outstanding. The promise will be rejected. */\r\n public abandon!: (msg?: string) => void;\r\n private _resolve!: (val: any) => void;\r\n\r\n /** Create a PromiseWithAbandon. After this call you must call [[init]] to create the underlying Promise.\r\n * @param _run The method that creates the underlying Promise.\r\n * @param _args An array of args to be passed to run when [[start]] is called.\r\n */\r\n constructor(private _run: (...args: any[]) => Promise<T>, private _args: any[]) { }\r\n\r\n /** Create a Promise that is chained to the underlying Promise, but is connected to the abandon method. */\r\n public async init(msg: string): Promise<T> {\r\n return new Promise<T>((resolve, reject) => {\r\n this.abandon = (message?: string) => reject(new AbandonedError(message ?? msg));\r\n this._resolve = resolve;\r\n });\r\n }\r\n\r\n /** Call the [[run]] method supplied to the ctor to start the underlying Promise. */\r\n public async start() {\r\n try {\r\n this._resolve(await this._run(...this._args));\r\n } catch (err) {\r\n this.abandon(BentleyError.getErrorMessage(err)); // turn all errors from execution into abandoned errors, but keep the message\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Orchestrator of a one-at-a-time activity. This concept is useful only for *replaceable* operations (that is, operations where subsequent requests replace and obviate\r\n * the need for previous requests. E.g. over slow HTTP connections, without this class, the stream of requests can overwhelm the connection, and cause the HTTP\r\n * request queue to grow such that the delay to service new requests is unbounded.\r\n *\r\n * With this class, we issue the initial request immediately. When the second request arrives before the first one completes, it becomes *pending*. If subsequent\r\n * requests arrive with a pending request, the current pending request is *abandoned* (its Promise is rejected) and the new request becomes pending.\r\n * When the active request completes, the pending request (if present) is started. In this manner there will only ever be one outstanding HTTP request for this type\r\n * of operation, but the first and last request will always eventually complete.\r\n * @beta\r\n */\r\nexport class OneAtATimeAction<T> {\r\n private _active?: PromiseWithAbandon<T>;\r\n private _pending?: PromiseWithAbandon<T>;\r\n private _run: (...args: any[]) => Promise<T>;\r\n public msg: string;\r\n\r\n /** Ctor for OneAtATimePromise.\r\n * @param run The method that performs an action that creates the Promise.\r\n */\r\n constructor(run: (...args: any[]) => Promise<T>, msg = \"abandoned\") { this._run = run; this.msg = msg; }\r\n\r\n /** Add a new request to this OneAtATimePromise. The request will only run when no other outstanding requests are active.\r\n * @note Callers of this method *must* handle AbandonedError rejections.\r\n */\r\n public async request(...args: any[]): Promise<T> {\r\n const entry = new PromiseWithAbandon<T>(this._run, args); // create an \"abandon-able promise\" object\r\n const promise = entry.init(this.msg); // create the Promise from PromiseWithAbandon. Note: this must be called before we call start.\r\n\r\n if (this._active !== undefined) { // is there an active request?\r\n if (this._pending) // yes. If there is also a pending request, this one replaces it and previous one is abandoned\r\n this._pending.abandon(); // rejects previous call to this method, throwing AbandonedError.\r\n this._pending = entry;\r\n } else {\r\n this._active = entry; // this is the first request, start it.\r\n entry.start(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n\r\n try {\r\n return await promise;\r\n } finally {\r\n // do all of this whether promise was fulfilled or rejected\r\n this._active = this._pending; // see if there's a pending request waiting\r\n this._pending = undefined; // clear pending\r\n if (this._active)\r\n this._active.start(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"OneAtATimeAction.js","sourceRoot":"","sources":["../../src/OneAtATimeAction.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,YAAY;AACZ,MAAM,OAAO,cAAe,SAAQ,KAAK;CAAI;AAE7C;;;;;GAKG;AACH,MAAM,kBAAkB;IAKtB;;;OAGG;IACH,YAAoB,IAAoC,EAAU,KAAY;QAA1D,SAAI,GAAJ,IAAI,CAAgC;QAAU,UAAK,GAAL,KAAK,CAAO;IAAI,CAAC;IAEnF,0GAA0G;IACnG,KAAK,CAAC,IAAI,CAAC,GAAW;QAC3B,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACxC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,GAAG,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,oFAAoF;IAC7E,KAAK,CAAC,KAAK;QAChB,IAAI;YACF,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;SAC/C;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,6EAA6E;SAC/H;IACH,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,OAAO,gBAAgB;IAM3B;;OAEG;IACH,YAAY,GAAmC,EAAE,GAAG,GAAG,WAAW;QAChE,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,GAAG,IAAW;QACjC,MAAM,KAAK,GAAG,IAAI,kBAAkB,CAAI,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,0CAA0C;QACpG,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,8FAA8F;QAEpI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,EAAE,8BAA8B;YAC9D,IAAI,IAAI,CAAC,QAAQ,EAAE,8FAA8F;gBAC/G,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,iEAAiE;YAC5F,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;SACvB;aAAM;YACL,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,uCAAuC;YAC7D,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,8DAA8D;SAC9E;QAED,IAAI;YACF,OAAO,MAAM,OAAO,CAAC;SACtB;gBAAS;YACR,2DAA2D;YAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,2CAA2C;YACzE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,gBAAgB;YAC3C,IAAI,IAAI,CAAC,OAAO;gBACd,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,8DAA8D;SACvF;IACH,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 { BentleyError } from \"./BentleyError\";\r\n\r\n/** @beta */\r\nexport class AbandonedError extends Error { }\r\n\r\n/**\r\n * An object that returns a Promise when you call [[init]], but supplies a way to abandon the promise if it is no longer relevant.\r\n * When you call abandon, the promise will be rejected. You must supply a [[run]] method to the constructor that\r\n * creates the real Promise for the underlying action. Notice that to use this class there are really two\r\n * Promises involved that are chained together. That makes this class less efficient than just using a Promise directly.\r\n */\r\nclass PromiseWithAbandon<T> {\r\n /** Method to abandon the Promise created by [[init]] while it is outstanding. The promise will be rejected. */\r\n public abandon!: (msg?: string) => void;\r\n private _resolve!: (val: any) => void;\r\n\r\n /** Create a PromiseWithAbandon. After this call you must call [[init]] to create the underlying Promise.\r\n * @param _run The method that creates the underlying Promise.\r\n * @param _args An array of args to be passed to run when [[start]] is called.\r\n */\r\n constructor(private _run: (...args: any[]) => Promise<T>, private _args: any[]) { }\r\n\r\n /** Create a Promise that is chained to the underlying Promise, but is connected to the abandon method. */\r\n public async init(msg: string): Promise<T> {\r\n return new Promise<T>((resolve, reject) => {\r\n this.abandon = (message?: string) => reject(new AbandonedError(message ?? msg));\r\n this._resolve = resolve;\r\n });\r\n }\r\n\r\n /** Call the [[run]] method supplied to the ctor to start the underlying Promise. */\r\n public async start() {\r\n try {\r\n this._resolve(await this._run(...this._args));\r\n } catch (err) {\r\n this.abandon(BentleyError.getErrorMessage(err)); // turn all errors from execution into abandoned errors, but keep the message\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Orchestrator of a one-at-a-time activity. This concept is useful only for *replaceable* operations (that is, operations where subsequent requests replace and obviate\r\n * the need for previous requests. E.g. over slow HTTP connections, without this class, the stream of requests can overwhelm the connection, and cause the HTTP\r\n * request queue to grow such that the delay to service new requests is unbounded.\r\n *\r\n * With this class, we issue the initial request immediately. When the second request arrives before the first one completes, it becomes *pending*. If subsequent\r\n * requests arrive with a pending request, the current pending request is *abandoned* (its Promise is rejected) and the new request becomes pending.\r\n * When the active request completes, the pending request (if present) is started. In this manner there will only ever be one outstanding HTTP request for this type\r\n * of operation, but the first and last request will always eventually complete.\r\n * @beta\r\n */\r\nexport class OneAtATimeAction<T> {\r\n private _active?: PromiseWithAbandon<T>;\r\n private _pending?: PromiseWithAbandon<T>;\r\n private _run: (...args: any[]) => Promise<T>;\r\n public msg: string;\r\n\r\n /** Ctor for OneAtATimePromise.\r\n * @param run The method that performs an action that creates the Promise.\r\n */\r\n constructor(run: (...args: any[]) => Promise<T>, msg = \"abandoned\") {\r\n this._run = run;\r\n this.msg = msg;\r\n }\r\n\r\n /** Add a new request to this OneAtATimePromise. The request will only run when no other outstanding requests are active.\r\n * @note Callers of this method *must* handle AbandonedError rejections.\r\n */\r\n public async request(...args: any[]): Promise<T> {\r\n const entry = new PromiseWithAbandon<T>(this._run, args); // create an \"abandon-able promise\" object\r\n const promise = entry.init(this.msg); // create the Promise from PromiseWithAbandon. Note: this must be called before we call start.\r\n\r\n if (this._active !== undefined) { // is there an active request?\r\n if (this._pending) // yes. If there is also a pending request, this one replaces it and previous one is abandoned\r\n this._pending.abandon(); // rejects previous call to this method, throwing AbandonedError.\r\n this._pending = entry;\r\n } else {\r\n this._active = entry; // this is the first request, start it.\r\n entry.start(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n\r\n try {\r\n return await promise;\r\n } finally {\r\n // do all of this whether promise was fulfilled or rejected\r\n this._active = this._pending; // see if there's a pending request waiting\r\n this._pending = undefined; // clear pending\r\n if (this._active)\r\n this._active.start(); // eslint-disable-line @typescript-eslint/no-floating-promises\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SortedArray.d.ts","sourceRoot":"","sources":["../../src/SortedArray.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SortedArray.d.ts","sourceRoot":"","sources":["../../src/SortedArray.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,9 @@
12
12
  * @returns the input value.
13
13
  * @public
14
14
  */
15
- export function shallowClone(value) { return value; }
15
+ export function shallowClone(value) {
16
+ return value;
17
+ }
16
18
  /**
17
19
  * Given a sorted array, computes the position at which the specified value should be inserted into the array so that the array remains sorted.
18
20
  * @param value The value whose position is to be computed.