@itwin/core-bentley 3.4.0-dev.8 → 3.5.0-dev.11
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.
- package/CHANGELOG.md +25 -1
- package/lib/cjs/ByteStream.d.ts.map +1 -1
- package/lib/cjs/ByteStream.js +14 -4
- package/lib/cjs/ByteStream.js.map +1 -1
- package/lib/cjs/Compare.d.ts.map +1 -1
- package/lib/cjs/Compare.js +18 -6
- package/lib/cjs/Compare.js.map +1 -1
- package/lib/cjs/Dictionary.d.ts.map +1 -1
- package/lib/cjs/Dictionary.js.map +1 -1
- package/lib/cjs/Id.d.ts.map +1 -1
- package/lib/cjs/Id.js +15 -5
- package/lib/cjs/Id.js.map +1 -1
- package/lib/cjs/JsonUtils.d.ts.map +1 -1
- package/lib/cjs/JsonUtils.js +34 -16
- package/lib/cjs/JsonUtils.js.map +1 -1
- package/lib/cjs/LRUMap.d.ts.map +1 -1
- package/lib/cjs/LRUMap.js.map +1 -1
- package/lib/cjs/OneAtATimeAction.d.ts.map +1 -1
- package/lib/cjs/OneAtATimeAction.js +4 -1
- package/lib/cjs/OneAtATimeAction.js.map +1 -1
- package/lib/cjs/SortedArray.d.ts.map +1 -1
- package/lib/cjs/SortedArray.js +3 -1
- package/lib/cjs/SortedArray.js.map +1 -1
- package/lib/cjs/StringUtils.d.ts.map +1 -1
- package/lib/cjs/StringUtils.js +3 -1
- package/lib/cjs/StringUtils.js.map +1 -1
- package/lib/cjs/Time.d.ts +1 -1
- package/lib/cjs/Time.d.ts.map +1 -1
- package/lib/cjs/Time.js +9 -3
- package/lib/cjs/Time.js.map +1 -1
- package/lib/cjs/Tracing.d.ts +2 -2
- package/lib/cjs/Tracing.d.ts.map +1 -1
- package/lib/cjs/Tracing.js +4 -1
- package/lib/cjs/Tracing.js.map +1 -1
- package/lib/cjs/TypedArrayBuilder.d.ts +98 -0
- package/lib/cjs/TypedArrayBuilder.d.ts.map +1 -0
- package/lib/cjs/TypedArrayBuilder.js +135 -0
- package/lib/cjs/TypedArrayBuilder.js.map +1 -0
- package/lib/cjs/UnexpectedErrors.d.ts.map +1 -1
- package/lib/cjs/UnexpectedErrors.js +5 -2
- package/lib/cjs/UnexpectedErrors.js.map +1 -1
- package/lib/cjs/core-bentley.d.ts +1 -0
- package/lib/cjs/core-bentley.d.ts.map +1 -1
- package/lib/cjs/core-bentley.js +1 -0
- package/lib/cjs/core-bentley.js.map +1 -1
- package/lib/esm/ByteStream.d.ts.map +1 -1
- package/lib/esm/ByteStream.js +14 -4
- package/lib/esm/ByteStream.js.map +1 -1
- package/lib/esm/Compare.d.ts.map +1 -1
- package/lib/esm/Compare.js +18 -6
- package/lib/esm/Compare.js.map +1 -1
- package/lib/esm/Dictionary.d.ts.map +1 -1
- package/lib/esm/Dictionary.js.map +1 -1
- package/lib/esm/Id.d.ts.map +1 -1
- package/lib/esm/Id.js +15 -5
- package/lib/esm/Id.js.map +1 -1
- package/lib/esm/JsonUtils.d.ts.map +1 -1
- package/lib/esm/JsonUtils.js +34 -16
- package/lib/esm/JsonUtils.js.map +1 -1
- package/lib/esm/LRUMap.d.ts.map +1 -1
- package/lib/esm/LRUMap.js.map +1 -1
- package/lib/esm/OneAtATimeAction.d.ts.map +1 -1
- package/lib/esm/OneAtATimeAction.js +4 -1
- package/lib/esm/OneAtATimeAction.js.map +1 -1
- package/lib/esm/SortedArray.d.ts.map +1 -1
- package/lib/esm/SortedArray.js +3 -1
- package/lib/esm/SortedArray.js.map +1 -1
- package/lib/esm/StringUtils.d.ts.map +1 -1
- package/lib/esm/StringUtils.js +3 -1
- package/lib/esm/StringUtils.js.map +1 -1
- package/lib/esm/Time.d.ts +1 -1
- package/lib/esm/Time.d.ts.map +1 -1
- package/lib/esm/Time.js +9 -3
- package/lib/esm/Time.js.map +1 -1
- package/lib/esm/Tracing.d.ts +2 -2
- package/lib/esm/Tracing.d.ts.map +1 -1
- package/lib/esm/Tracing.js +4 -1
- package/lib/esm/Tracing.js.map +1 -1
- package/lib/esm/TypedArrayBuilder.d.ts +98 -0
- package/lib/esm/TypedArrayBuilder.d.ts.map +1 -0
- package/lib/esm/TypedArrayBuilder.js +128 -0
- package/lib/esm/TypedArrayBuilder.js.map +1 -0
- package/lib/esm/UnexpectedErrors.d.ts.map +1 -1
- package/lib/esm/UnexpectedErrors.js +5 -2
- package/lib/esm/UnexpectedErrors.js.map +1 -1
- package/lib/esm/core-bentley.d.ts +1 -0
- package/lib/esm/core-bentley.d.ts.map +1 -1
- package/lib/esm/core-bentley.js +1 -0
- package/lib/esm/core-bentley.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,30 @@
|
|
|
1
1
|
# Change Log - @itwin/core-bentley
|
|
2
2
|
|
|
3
|
-
This log was last generated on
|
|
3
|
+
This log was last generated on Thu, 01 Sep 2022 14:37:22 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 3.3.2
|
|
6
|
+
Thu, 01 Sep 2022 14:37:22 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
9
|
+
|
|
10
|
+
## 3.3.1
|
|
11
|
+
Fri, 26 Aug 2022 15:40:02 GMT
|
|
12
|
+
|
|
13
|
+
_Version update only_
|
|
14
|
+
|
|
15
|
+
## 3.3.0
|
|
16
|
+
Thu, 18 Aug 2022 19:08:02 GMT
|
|
17
|
+
|
|
18
|
+
### Updates
|
|
19
|
+
|
|
20
|
+
- upgrade mocha to version 10.0.0
|
|
21
|
+
- Add ExtractLiterals type.
|
|
22
|
+
- Remove AuthStatus from BentleyError.
|
|
23
|
+
|
|
24
|
+
## 3.2.9
|
|
25
|
+
Fri, 26 Aug 2022 14:21:40 GMT
|
|
26
|
+
|
|
27
|
+
_Version update only_
|
|
4
28
|
|
|
5
29
|
## 3.2.8
|
|
6
30
|
Tue, 09 Aug 2022 15:52:41 GMT
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ByteStream.d.ts","sourceRoot":"","sources":["../../src/ByteStream.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAQ,UAAU,EAAE,MAAM,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,OAAO,CAAa;IAE5B;;;;;;;;;;;;;OAaG;gBACgB,MAAM,EAAE,WAAW,GAAG,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAUhH;;OAEG;WACW,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAK3D;;;OAGG;WACW,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU;IAIxI,yCAAyC;IACzC,IAAW,MAAM,IAAI,MAAM,CAAkC;IAC7D;;OAEG;IACH,IAAW,YAAY,IAAI,OAAO,CAAsC;IACxE;;OAEG;IACH,IAAW,UAAU,IAAI,OAAO,CAAwC;IAExE,sEAAsE;IACtE,IAAW,MAAM,IAAI,MAAM,CAAyB;IACpD,IAAW,MAAM,CAAC,GAAG,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"ByteStream.d.ts","sourceRoot":"","sources":["../../src/ByteStream.ts"],"names":[],"mappings":"AAIA;;GAEG;AAGH,OAAO,EAAQ,UAAU,EAAE,MAAM,MAAM,CAAC;AAExC;;;;;;GAMG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAW;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,OAAO,CAAa;IAE5B;;;;;;;;;;;;;OAaG;gBACgB,MAAM,EAAE,WAAW,GAAG,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAUhH;;OAEG;WACW,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;IAK3D;;;OAGG;WACW,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,iBAAiB,EAAE,OAAO,CAAC,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,UAAU;IAIxI,yCAAyC;IACzC,IAAW,MAAM,IAAI,MAAM,CAAkC;IAC7D;;OAEG;IACH,IAAW,YAAY,IAAI,OAAO,CAAsC;IACxE;;OAEG;IACH,IAAW,UAAU,IAAI,OAAO,CAAwC;IAExE,sEAAsE;IACtE,IAAW,MAAM,IAAI,MAAM,CAAyB;IACpD,IAAW,MAAM,CAAC,GAAG,EAAE,MAAM,EAG5B;IAED,sEAAsE;IAC/D,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAKzC,6EAA6E;IACtE,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQxC,sEAAsE;IAC/D,KAAK,IAAI,IAAI;IAEpB,0FAA0F;IAC1F,IAAW,SAAS,IAAI,MAAM,CAA+D;IAC7F,6FAA6F;IAC7F,IAAW,UAAU,IAAI,MAAM,CAAsE;IACrG,6FAA6F;IAC7F,IAAW,UAAU,IAAI,MAAM,CAAsE;IACrG,0FAA0F;IAC1F,IAAW,SAAS,IAAI,MAAM,CAAqE;IACnG,iGAAiG;IACjG,IAAW,WAAW,IAAI,MAAM,CAAuE;IACvG,iGAAiG;IACjG,IAAW,WAAW,IAAI,MAAM,CAAuE;IACvG,wIAAwI;IACxI,IAAW,QAAQ,IAAI,UAAU,CAAkE;IACnG,6FAA6F;IAC7F,IAAW,UAAU,IAAI,MAAM,CAA4E;IAE3G;;OAEG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAM9C,qGAAqG;IAC9F,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU;IAI/D,0HAA0H;IACnH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW;IAOnD,0CAA0C;IAC1C,IAAW,WAAW,IAAI,WAAW,GAAG,iBAAiB,CAA8B;IAEvF,OAAO,CAAC,IAAI;CAKb"}
|
package/lib/cjs/ByteStream.js
CHANGED
|
@@ -69,12 +69,22 @@ class ByteStream {
|
|
|
69
69
|
get isAtTheEnd() { return this.curPos === this.length; }
|
|
70
70
|
/** The current read position as an index into the stream of bytes. */
|
|
71
71
|
get curPos() { return this._curPos; }
|
|
72
|
-
set curPos(pos) {
|
|
72
|
+
set curPos(pos) {
|
|
73
|
+
this._curPos = pos;
|
|
74
|
+
(0, Assert_1.assert)(!this.isPastTheEnd);
|
|
75
|
+
}
|
|
73
76
|
/** Adds the specified number of bytes to the current read position */
|
|
74
|
-
advance(numBytes) {
|
|
77
|
+
advance(numBytes) {
|
|
78
|
+
this.curPos = (this.curPos + numBytes);
|
|
79
|
+
return !this.isPastTheEnd;
|
|
80
|
+
}
|
|
75
81
|
/** Subtracts the specified number of bytes from the current read position */
|
|
76
|
-
rewind(numBytes) {
|
|
77
|
-
|
|
82
|
+
rewind(numBytes) {
|
|
83
|
+
if (this.curPos - numBytes < 0)
|
|
84
|
+
return false;
|
|
85
|
+
this.curPos = this.curPos - numBytes;
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
78
88
|
/** Resets the current read position to the beginning of the stream */
|
|
79
89
|
reset() { this.curPos = 0; }
|
|
80
90
|
/** Read a unsigned 8-bit integer from the current read position and advance by 1 byte. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ByteStream.js","sourceRoot":"","sources":["../../src/ByteStream.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\nimport { assert } from \"./Assert\";\r\nimport { Id64, Id64String } from \"./Id\";\r\n\r\n/** Allows the contents of an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)\r\n * to be consumed sequentially using methods to extract\r\n * data of a particular type from the bytes beginning at the current read position.\r\n * Methods and properties beginning with 'next' consume data at the current read position and advance it\r\n * by the size of the data read. The read position can also be directly adjusted by the caller.\r\n * @public\r\n */\r\nexport class ByteStream {\r\n private readonly _view: DataView;\r\n private readonly _byteOffset: number;\r\n private _curPos: number = 0;\r\n\r\n /** Construct a new ByteStream with the read position set to the beginning.\r\n * @param buffer The underlying buffer from which data is to be extracted.\r\n * @param subView If defined, specifies the subset of the underlying buffer's data to use.\r\n * This constructor is subject to two common mistakes:\r\n *\r\n * 1. Given `bytes: Uint8Array`, `new ByteStream(bytes)` will compile but at run-time will produce an error asserting that\r\n * the DataView constructor requires an ArrayBuffer. The correct usage is `new ByteStream(bytes.buffer)`.\r\n * 2. Given `bytes: Uint8Array`, `new ByteStream(bytes.buffer)` creates a stream for the entire range of bytes represented by the underlying\r\n * ArrayBuffer. If `bytes` represents only a **sub-range** of the underlying buffer's data, the results will be unexpected unless the optional `subView`\r\n * argument is supplied, with correct offset and length.\r\n *\r\n * For both of the above reasons, prefer to use [[fromUint8Array]].\r\n * @deprecated Use [[fromUint8Array]] or [[fromArrayBuffer]].\r\n */\r\n public constructor(buffer: ArrayBuffer | SharedArrayBuffer, subView?: { byteOffset: number, byteLength: number }) {\r\n if (undefined !== subView) {\r\n this._view = new DataView(buffer, subView.byteOffset, subView.byteLength);\r\n this._byteOffset = subView.byteOffset;\r\n } else {\r\n this._view = new DataView(buffer);\r\n this._byteOffset = 0;\r\n }\r\n }\r\n\r\n /** Construct a new ByteStream for the range of bytes represented by `bytes`, which may be a subset of the range of bytes\r\n * represented by the underlying ArrayBuffer. The read position will be set to the beginning of the range of bytes.\r\n */\r\n public static fromUint8Array(bytes: Uint8Array): ByteStream {\r\n const { byteOffset, byteLength } = bytes;\r\n return new ByteStream(bytes.buffer, { byteOffset, byteLength }); // eslint-disable-line deprecation/deprecation\r\n }\r\n\r\n /** Construct a new ByteStream with the read position set to the beginning.\r\n * @param buffer The underlying buffer from which data is to be extracted.\r\n * @param subView If defined, specifies the subset of the underlying buffer's data to use.\r\n */\r\n public static fromArrayBuffer(buffer: ArrayBuffer | SharedArrayBuffer, subView?: { byteOffset: number, byteLength: number }): ByteStream {\r\n return new ByteStream(buffer, subView); // eslint-disable-line deprecation/deprecation\r\n }\r\n\r\n /** The number of bytes in this stream */\r\n public get length(): number { return this._view.byteLength; }\r\n /** Returns true if the current read position has been advanced past the end of the stream. This generally indicates that an attempt was made to read more data than is available.\r\n * @see [[isAtTheEnd]]\r\n */\r\n public get isPastTheEnd(): boolean { return this.curPos > this.length; }\r\n /** Returns true if the current read position has advanced precisely to the end of the stream, indicating all of the data has been consumed.\r\n * @see [[isPastTheEnd]].\r\n */\r\n public get isAtTheEnd(): boolean { return this.curPos === this.length; }\r\n\r\n /** The current read position as an index into the stream of bytes. */\r\n public get curPos(): number { return this._curPos; }\r\n public set curPos(pos: number) { this._curPos = pos; assert(!this.isPastTheEnd); }\r\n\r\n /** Adds the specified number of bytes to the current read position */\r\n public advance(numBytes: number): boolean { this.curPos = (this.curPos + numBytes); return !this.isPastTheEnd; }\r\n /** Subtracts the specified number of bytes from the current read position */\r\n public rewind(numBytes: number): boolean { if (this.curPos - numBytes < 0) return false; this.curPos = this.curPos - numBytes; return true; }\r\n /** Resets the current read position to the beginning of the stream */\r\n public reset(): void { this.curPos = 0; }\r\n\r\n /** Read a unsigned 8-bit integer from the current read position and advance by 1 byte. */\r\n public get nextUint8(): number { return this.read(1, (view) => view.getUint8(this.curPos)); }\r\n /** Read an unsigned 16-bit integer from the current read position and advance by 2 bytes. */\r\n public get nextUint16(): number { return this.read(2, (view) => view.getUint16(this.curPos, true)); }\r\n /** Read an unsigned 32-bit integer from the current read position and advance by 4 bytes. */\r\n public get nextUint32(): number { return this.read(4, (view) => view.getUint32(this.curPos, true)); }\r\n /** Read a signed 32-bit integer from the current read position and advance by 4 bytes. */\r\n public get nextInt32(): number { return this.read(4, (view) => view.getInt32(this.curPos, true)); }\r\n /** Read a 32-bit floating point number from the current read position and advance by 4 bytes. */\r\n public get nextFloat32(): number { return this.read(4, (view) => view.getFloat32(this.curPos, true)); }\r\n /** Read a 64-bit floating point number from the current read position and advance by 8 bytes. */\r\n public get nextFloat64(): number { return this.read(8, (view) => view.getFloat64(this.curPos, true)); }\r\n /** Read an unsigned 64-bit integer from the current read position, advance by 8 bytes, and return the 64-bit value as an Id64String. */\r\n public get nextId64(): Id64String { return Id64.fromUint32Pair(this.nextUint32, this.nextUint32); }\r\n /** Read an unsigned 24-bit integer from the current read position and advance by 3 bytes. */\r\n public get nextUint24(): number { return this.nextUint8 | (this.nextUint8 << 8) | (this.nextUint8 << 16); }\r\n\r\n /** Read the specified number of bytes beginning at the current read position into a Uint8Array and advance by the specified number of byte.\r\n * @param numBytes The number of bytes to read.\r\n */\r\n public nextBytes(numBytes: number): Uint8Array {\r\n const bytes = new Uint8Array(this.arrayBuffer, this.curPos + this._byteOffset, numBytes);\r\n this.advance(numBytes);\r\n return bytes;\r\n }\r\n\r\n /** Read the specified number of bytes at the specified offset without changing the read position. */\r\n public readBytes(readPos: number, numBytes: number): Uint8Array {\r\n return new Uint8Array(this.arrayBuffer, readPos + this._byteOffset, numBytes);\r\n }\r\n\r\n /** Read the specified number of unsigned 32-bit integers from the current read position and advance the read position. */\r\n public nextUint32s(numUint32s: number): Uint32Array {\r\n const numBytes = numUint32s * 4;\r\n const uint32s = new Uint32Array(this.arrayBuffer, this.curPos + this._byteOffset, numUint32s);\r\n this.advance(numBytes);\r\n return uint32s;\r\n }\r\n\r\n /** Returns the underlying array buffer */\r\n public get arrayBuffer(): ArrayBuffer | SharedArrayBuffer { return this._view.buffer; }\r\n\r\n private read(numBytes: number, read: (view: DataView) => number) {\r\n const result = read(this._view);\r\n this.advance(numBytes);\r\n return result;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"ByteStream.js","sourceRoot":"","sources":["../../src/ByteStream.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\nimport { assert } from \"./Assert\";\r\nimport { Id64, Id64String } from \"./Id\";\r\n\r\n/** Allows the contents of an [ArrayBuffer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer)\r\n * to be consumed sequentially using methods to extract\r\n * data of a particular type from the bytes beginning at the current read position.\r\n * Methods and properties beginning with 'next' consume data at the current read position and advance it\r\n * by the size of the data read. The read position can also be directly adjusted by the caller.\r\n * @public\r\n */\r\nexport class ByteStream {\r\n private readonly _view: DataView;\r\n private readonly _byteOffset: number;\r\n private _curPos: number = 0;\r\n\r\n /** Construct a new ByteStream with the read position set to the beginning.\r\n * @param buffer The underlying buffer from which data is to be extracted.\r\n * @param subView If defined, specifies the subset of the underlying buffer's data to use.\r\n * This constructor is subject to two common mistakes:\r\n *\r\n * 1. Given `bytes: Uint8Array`, `new ByteStream(bytes)` will compile but at run-time will produce an error asserting that\r\n * the DataView constructor requires an ArrayBuffer. The correct usage is `new ByteStream(bytes.buffer)`.\r\n * 2. Given `bytes: Uint8Array`, `new ByteStream(bytes.buffer)` creates a stream for the entire range of bytes represented by the underlying\r\n * ArrayBuffer. If `bytes` represents only a **sub-range** of the underlying buffer's data, the results will be unexpected unless the optional `subView`\r\n * argument is supplied, with correct offset and length.\r\n *\r\n * For both of the above reasons, prefer to use [[fromUint8Array]].\r\n * @deprecated Use [[fromUint8Array]] or [[fromArrayBuffer]].\r\n */\r\n public constructor(buffer: ArrayBuffer | SharedArrayBuffer, subView?: { byteOffset: number, byteLength: number }) {\r\n if (undefined !== subView) {\r\n this._view = new DataView(buffer, subView.byteOffset, subView.byteLength);\r\n this._byteOffset = subView.byteOffset;\r\n } else {\r\n this._view = new DataView(buffer);\r\n this._byteOffset = 0;\r\n }\r\n }\r\n\r\n /** Construct a new ByteStream for the range of bytes represented by `bytes`, which may be a subset of the range of bytes\r\n * represented by the underlying ArrayBuffer. The read position will be set to the beginning of the range of bytes.\r\n */\r\n public static fromUint8Array(bytes: Uint8Array): ByteStream {\r\n const { byteOffset, byteLength } = bytes;\r\n return new ByteStream(bytes.buffer, { byteOffset, byteLength }); // eslint-disable-line deprecation/deprecation\r\n }\r\n\r\n /** Construct a new ByteStream with the read position set to the beginning.\r\n * @param buffer The underlying buffer from which data is to be extracted.\r\n * @param subView If defined, specifies the subset of the underlying buffer's data to use.\r\n */\r\n public static fromArrayBuffer(buffer: ArrayBuffer | SharedArrayBuffer, subView?: { byteOffset: number, byteLength: number }): ByteStream {\r\n return new ByteStream(buffer, subView); // eslint-disable-line deprecation/deprecation\r\n }\r\n\r\n /** The number of bytes in this stream */\r\n public get length(): number { return this._view.byteLength; }\r\n /** Returns true if the current read position has been advanced past the end of the stream. This generally indicates that an attempt was made to read more data than is available.\r\n * @see [[isAtTheEnd]]\r\n */\r\n public get isPastTheEnd(): boolean { return this.curPos > this.length; }\r\n /** Returns true if the current read position has advanced precisely to the end of the stream, indicating all of the data has been consumed.\r\n * @see [[isPastTheEnd]].\r\n */\r\n public get isAtTheEnd(): boolean { return this.curPos === this.length; }\r\n\r\n /** The current read position as an index into the stream of bytes. */\r\n public get curPos(): number { return this._curPos; }\r\n public set curPos(pos: number) {\r\n this._curPos = pos;\r\n assert(!this.isPastTheEnd);\r\n }\r\n\r\n /** Adds the specified number of bytes to the current read position */\r\n public advance(numBytes: number): boolean {\r\n this.curPos = (this.curPos + numBytes);\r\n return !this.isPastTheEnd;\r\n }\r\n\r\n /** Subtracts the specified number of bytes from the current read position */\r\n public rewind(numBytes: number): boolean {\r\n if (this.curPos - numBytes < 0)\r\n return false;\r\n\r\n this.curPos = this.curPos - numBytes;\r\n return true;\r\n }\r\n\r\n /** Resets the current read position to the beginning of the stream */\r\n public reset(): void { this.curPos = 0; }\r\n\r\n /** Read a unsigned 8-bit integer from the current read position and advance by 1 byte. */\r\n public get nextUint8(): number { return this.read(1, (view) => view.getUint8(this.curPos)); }\r\n /** Read an unsigned 16-bit integer from the current read position and advance by 2 bytes. */\r\n public get nextUint16(): number { return this.read(2, (view) => view.getUint16(this.curPos, true)); }\r\n /** Read an unsigned 32-bit integer from the current read position and advance by 4 bytes. */\r\n public get nextUint32(): number { return this.read(4, (view) => view.getUint32(this.curPos, true)); }\r\n /** Read a signed 32-bit integer from the current read position and advance by 4 bytes. */\r\n public get nextInt32(): number { return this.read(4, (view) => view.getInt32(this.curPos, true)); }\r\n /** Read a 32-bit floating point number from the current read position and advance by 4 bytes. */\r\n public get nextFloat32(): number { return this.read(4, (view) => view.getFloat32(this.curPos, true)); }\r\n /** Read a 64-bit floating point number from the current read position and advance by 8 bytes. */\r\n public get nextFloat64(): number { return this.read(8, (view) => view.getFloat64(this.curPos, true)); }\r\n /** Read an unsigned 64-bit integer from the current read position, advance by 8 bytes, and return the 64-bit value as an Id64String. */\r\n public get nextId64(): Id64String { return Id64.fromUint32Pair(this.nextUint32, this.nextUint32); }\r\n /** Read an unsigned 24-bit integer from the current read position and advance by 3 bytes. */\r\n public get nextUint24(): number { return this.nextUint8 | (this.nextUint8 << 8) | (this.nextUint8 << 16); }\r\n\r\n /** Read the specified number of bytes beginning at the current read position into a Uint8Array and advance by the specified number of byte.\r\n * @param numBytes The number of bytes to read.\r\n */\r\n public nextBytes(numBytes: number): Uint8Array {\r\n const bytes = new Uint8Array(this.arrayBuffer, this.curPos + this._byteOffset, numBytes);\r\n this.advance(numBytes);\r\n return bytes;\r\n }\r\n\r\n /** Read the specified number of bytes at the specified offset without changing the read position. */\r\n public readBytes(readPos: number, numBytes: number): Uint8Array {\r\n return new Uint8Array(this.arrayBuffer, readPos + this._byteOffset, numBytes);\r\n }\r\n\r\n /** Read the specified number of unsigned 32-bit integers from the current read position and advance the read position. */\r\n public nextUint32s(numUint32s: number): Uint32Array {\r\n const numBytes = numUint32s * 4;\r\n const uint32s = new Uint32Array(this.arrayBuffer, this.curPos + this._byteOffset, numUint32s);\r\n this.advance(numBytes);\r\n return uint32s;\r\n }\r\n\r\n /** Returns the underlying array buffer */\r\n public get arrayBuffer(): ArrayBuffer | SharedArrayBuffer { return this._view.buffer; }\r\n\r\n private read(numBytes: number, read: (view: DataView) => number) {\r\n const result = read(this._view);\r\n this.advance(numBytes);\r\n return result;\r\n }\r\n}\r\n"]}
|
package/lib/cjs/Compare.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Compare.d.ts","sourceRoot":"","sources":["../../src/Compare.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,oBAAY,iBAAiB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;AAErE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAOlF;AAED,cAAc;AACd,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"Compare.d.ts","sourceRoot":"","sources":["../../src/Compare.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,oBAAY,iBAAiB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,MAAM,CAAC;AAErE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAOlF;AAED,cAAc;AACd,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,cAAc;AACd,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAE9D;AAED,cAAc;AACd,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,cAAc;AACd,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAOhH;AAED,cAAc;AACd,wBAAgB,yBAAyB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,cAAc;AACd,wBAAgB,yBAAyB,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,cAAc;AACd,wBAAgB,0BAA0B,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAE/E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAAG,OAAO,CAO9H"}
|
package/lib/cjs/Compare.js
CHANGED
|
@@ -22,13 +22,19 @@ function compareWithTolerance(a, b, tolerance = 0.1) {
|
|
|
22
22
|
}
|
|
23
23
|
exports.compareWithTolerance = compareWithTolerance;
|
|
24
24
|
/** @public */
|
|
25
|
-
function compareNumbers(a, b) {
|
|
25
|
+
function compareNumbers(a, b) {
|
|
26
|
+
return a - b;
|
|
27
|
+
}
|
|
26
28
|
exports.compareNumbers = compareNumbers;
|
|
27
29
|
/** @public */
|
|
28
|
-
function compareBooleans(a, b) {
|
|
30
|
+
function compareBooleans(a, b) {
|
|
31
|
+
return a !== b ? (a < b ? -1 : 1) : 0;
|
|
32
|
+
}
|
|
29
33
|
exports.compareBooleans = compareBooleans;
|
|
30
34
|
/** @public */
|
|
31
|
-
function compareStrings(a, b) {
|
|
35
|
+
function compareStrings(a, b) {
|
|
36
|
+
return a === b ? 0 : (a < b ? -1 : 1);
|
|
37
|
+
}
|
|
32
38
|
exports.compareStrings = compareStrings;
|
|
33
39
|
/** @public */
|
|
34
40
|
function comparePossiblyUndefined(compareDefined, lhs, rhs) {
|
|
@@ -41,13 +47,19 @@ function comparePossiblyUndefined(compareDefined, lhs, rhs) {
|
|
|
41
47
|
}
|
|
42
48
|
exports.comparePossiblyUndefined = comparePossiblyUndefined;
|
|
43
49
|
/** @public */
|
|
44
|
-
function compareStringsOrUndefined(lhs, rhs) {
|
|
50
|
+
function compareStringsOrUndefined(lhs, rhs) {
|
|
51
|
+
return comparePossiblyUndefined(compareStrings, lhs, rhs);
|
|
52
|
+
}
|
|
45
53
|
exports.compareStringsOrUndefined = compareStringsOrUndefined;
|
|
46
54
|
/** @public */
|
|
47
|
-
function compareNumbersOrUndefined(lhs, rhs) {
|
|
55
|
+
function compareNumbersOrUndefined(lhs, rhs) {
|
|
56
|
+
return comparePossiblyUndefined(compareNumbers, lhs, rhs);
|
|
57
|
+
}
|
|
48
58
|
exports.compareNumbersOrUndefined = compareNumbersOrUndefined;
|
|
49
59
|
/** @public */
|
|
50
|
-
function compareBooleansOrUndefined(lhs, rhs) {
|
|
60
|
+
function compareBooleansOrUndefined(lhs, rhs) {
|
|
61
|
+
return comparePossiblyUndefined(compareBooleans, lhs, rhs);
|
|
62
|
+
}
|
|
51
63
|
exports.compareBooleansOrUndefined = compareBooleansOrUndefined;
|
|
52
64
|
/** Compare two possibly-undefined values for equality. If both are undefined, the comparison is performed by the supplied `areEqual` function.
|
|
53
65
|
* @public
|
package/lib/cjs/Compare.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Compare.js","sourceRoot":"","sources":["../../src/Compare.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAwBH;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,CAAS,EAAE,CAAS,EAAE,SAAS,GAAG,GAAG;IACxE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;QACnB,OAAO,CAAC,CAAC,CAAC;SACP,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;QACxB,OAAO,CAAC,CAAC;;QAET,OAAO,CAAC,CAAC;AACb,CAAC;AAPD,oDAOC;AAED,cAAc;AACd,SAAgB,cAAc,CAAC,CAAS,EAAE,CAAS,
|
|
1
|
+
{"version":3,"file":"Compare.js","sourceRoot":"","sources":["../../src/Compare.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAwBH;;;GAGG;AACH,SAAgB,oBAAoB,CAAC,CAAS,EAAE,CAAS,EAAE,SAAS,GAAG,GAAG;IACxE,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;QACnB,OAAO,CAAC,CAAC,CAAC;SACP,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS;QACxB,OAAO,CAAC,CAAC;;QAET,OAAO,CAAC,CAAC;AACb,CAAC;AAPD,oDAOC;AAED,cAAc;AACd,SAAgB,cAAc,CAAC,CAAS,EAAE,CAAS;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAFD,wCAEC;AAED,cAAc;AACd,SAAgB,eAAe,CAAC,CAAU,EAAE,CAAU;IACpD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAFD,0CAEC;AAED,cAAc;AACd,SAAgB,cAAc,CAAC,CAAS,EAAE,CAAS;IACjD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxC,CAAC;AAFD,wCAEC;AAED,cAAc;AACd,SAAgB,wBAAwB,CAAI,cAA0C,EAAE,GAAO,EAAE,GAAO;IACtG,IAAI,SAAS,KAAK,GAAG;QACnB,OAAO,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC/B,IAAI,SAAS,KAAK,GAAG;QACxB,OAAO,CAAC,CAAC;;QAET,OAAO,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACpC,CAAC;AAPD,4DAOC;AAED,cAAc;AACd,SAAgB,yBAAyB,CAAC,GAAY,EAAE,GAAY;IAClE,OAAO,wBAAwB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AAFD,8DAEC;AAED,cAAc;AACd,SAAgB,yBAAyB,CAAC,GAAY,EAAE,GAAY;IAClE,OAAO,wBAAwB,CAAC,cAAc,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5D,CAAC;AAFD,8DAEC;AAED,cAAc;AACd,SAAgB,0BAA0B,CAAC,GAAa,EAAE,GAAa;IACrE,OAAO,wBAAwB,CAAC,eAAe,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC;AAFD,gEAEC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAO,CAAgB,EAAE,CAAgB,EAAE,QAAiC;IACnH,IAAI,SAAS,KAAK,CAAC;QACjB,OAAO,SAAS,KAAK,CAAC,CAAC;SACpB,IAAI,SAAS,KAAK,CAAC;QACtB,OAAO,KAAK,CAAC;;QAEb,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,CAAC;AAPD,8DAOC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\n/**\r\n * A function that returns a numerical value indicating how two objects are ordered in relation to one another.\r\n * Such functions are used by various collection classes throughout the library.\r\n * Given values `lhs` and `rhs`, the function returns:\r\n * - Zero if lhs == rhs\r\n * - A negative number if lhs < rhs\r\n * - A positive number if lhs > rhs\r\n *\r\n * An OrderedComparator `must` implement [strict weak ordering](https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings), which can be summarized by the following rules:\r\n * - `compare(x, x)` returns zero.\r\n * - If `compare(x, y)` returns zero, then so does `compare(y, x)` (i.e., `x == y` implies `y == x`).\r\n * - If `compare(x, y)` returns non-zero, then `compare(y, x)` returns a value with an opposite sign (i.e., `x < y` implies `y > x`).\r\n * - If `compare(x, y)` and `compare(y, z)` return non-zero values with the same sign, then `compare(x, z)` returns a value with the same sign (i.e., `x < y < z` implies `x < z`).\r\n *\r\n * @see SortedArray\r\n * @see Dictionary\r\n * @see IndexMap\r\n * @see PriorityQueue\r\n * @public\r\n */\r\nexport type OrderedComparator<T, U = T> = (lhs: T, rhs: U) => number;\r\n\r\n/**\r\n * An [[OrderedComparator]] for numbers that treats two numbers as equal if the absolute value of their difference is less than a specified tolerance.\r\n * @public\r\n */\r\nexport function compareWithTolerance(a: number, b: number, tolerance = 0.1): number {\r\n if (a < b - tolerance)\r\n return -1;\r\n else if (a > b + tolerance)\r\n return 1;\r\n else\r\n return 0;\r\n}\r\n\r\n/** @public */\r\nexport function compareNumbers(a: number, b: number): number {\r\n return a - b;\r\n}\r\n\r\n/** @public */\r\nexport function compareBooleans(a: boolean, b: boolean): number {\r\n return a !== b ? (a < b ? -1 : 1) : 0;\r\n}\r\n\r\n/** @public */\r\nexport function compareStrings(a: string, b: string): number {\r\n return a === b ? 0 : (a < b ? -1 : 1);\r\n}\r\n\r\n/** @public */\r\nexport function comparePossiblyUndefined<T>(compareDefined: (lhs: T, rhs: T) => number, lhs?: T, rhs?: T): number {\r\n if (undefined === lhs)\r\n return undefined === rhs ? 0 : -1;\r\n else if (undefined === rhs)\r\n return 1;\r\n else\r\n return compareDefined(lhs, rhs);\r\n}\r\n\r\n/** @public */\r\nexport function compareStringsOrUndefined(lhs?: string, rhs?: string): number {\r\n return comparePossiblyUndefined(compareStrings, lhs, rhs);\r\n}\r\n\r\n/** @public */\r\nexport function compareNumbersOrUndefined(lhs?: number, rhs?: number): number {\r\n return comparePossiblyUndefined(compareNumbers, lhs, rhs);\r\n}\r\n\r\n/** @public */\r\nexport function compareBooleansOrUndefined(lhs?: boolean, rhs?: boolean): number {\r\n return comparePossiblyUndefined(compareBooleans, lhs, rhs);\r\n}\r\n\r\n/** Compare two possibly-undefined values for equality. If both are undefined, the comparison is performed by the supplied `areEqual` function.\r\n * @public\r\n */\r\nexport function areEqualPossiblyUndefined<T, U>(t: T | undefined, u: U | undefined, areEqual: (t: T, u: U) => boolean): boolean {\r\n if (undefined === t)\r\n return undefined === u;\r\n else if (undefined === u)\r\n return false;\r\n else\r\n return areEqual(t, u);\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dictionary.d.ts","sourceRoot":"","sources":["../../src/Dictionary.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAA4B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Dictionary.d.ts","sourceRoot":"","sources":["../../src/Dictionary.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,aAAa,EAA4B,MAAM,eAAe,CAAC;AA4BxE;;;GAGG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,EAAE,CAAC;IACnC,iDAAiD;IACjD,GAAG,EAAE,CAAC,CAAC;IACP,2DAA2D;IAC3D,KAAK,EAAE,CAAC,CAAC;CACV;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,UAAU,CAAC,CAAC,EAAE,CAAC,CAAE,YAAW,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtE,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,CAAM;IAC1B,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACtD,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAC/C,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAM;IAC5B,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IAEjD;;;;;OAKG;gBACgB,WAAW,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAE,aAAa,CAAC,CAAC,CAAgB,EAAE,UAAU,GAAE,aAAa,CAAC,CAAC,CAAgB;IAM5I,+CAA+C;IAC/C,IAAW,IAAI,IAAI,MAAM,CAA8B;IAEvD,sJAAsJ;IAC/I,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAI3D,4EAA4E;IACrE,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC;IAW1B,wGAAwG;IACjG,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;IAW5B,+CAA+C;IACxC,KAAK,IAAI,IAAI;IAKpB;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS;IAKjC;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAI3B;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAW9B;;;;;;OAMG;IACI,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO;IAKxC;;;;OAIG;IACI,YAAY,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG;QAAE,KAAK,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE;IAWtE;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAWlC;;;OAGG;IACI,YAAY,IAAI,KAAK,CAAC;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC;IASlD;;;;;OAKG;IACI,aAAa,IAAI;QAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAAC,MAAM,EAAE,CAAC,EAAE,CAAA;KAAE;IAMlD;;OAEG;IACI,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,GAAG,IAAI;IAKtD;;;;OAIG;IACH,SAAS,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE;CAChE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dictionary.js","sourceRoot":"","sources":["../../src/Dictionary.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 { CloneFunction, lowerBound, shallowClone } from \"./SortedArray\";\r\n\r\nclass DictionaryIterator<K, V> implements Iterator<DictionaryEntry<K, V>> {\r\n private _keys: K[];\r\n private _values: V[];\r\n private _curIndex = -1;\r\n\r\n public constructor(keys: K[], values: V[]) { this._keys = keys; this._values = values; }\r\n\r\n public next(): IteratorResult<DictionaryEntry<K, V>> {\r\n if (++this._curIndex >= this._keys.length) {\r\n // The ECMAScript spec states that value=undefined is valid if done=true. The TypeScript interface violates the spec hence the cast to any and back below.\r\n return { done: true } as any as IteratorResult<DictionaryEntry<K, V>>;\r\n } else {\r\n return {\r\n value: {\r\n key: this._keys[this._curIndex],\r\n value: this._values[this._curIndex],\r\n },\r\n done: false,\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Represents an entry in a [[Dictionary]].\r\n * @public\r\n */\r\nexport interface DictionaryEntry<K, V> {\r\n /** The key used for lookup in the Dictionary. */\r\n key: K;\r\n /** The value associated with the key in the Dictionary. */\r\n value: V;\r\n}\r\n\r\n/**\r\n * Maintains a mapping of keys to values.\r\n * Unlike the standard Map<K, V>, a Dictionary<K, V> supports custom comparison logic for keys of object type (and for any other type).\r\n * The user supplies a key comparison function to the constructor, that must meet the following criteria given 'lhs' and 'rhs' of type K:\r\n * - If lhs is equal to rhs, returns 0\r\n * - If lhs is less than rhs, returns a negative value\r\n * - If lhs is greater than rhs, returns a positive value\r\n * - If compare(lhs, rhs) returns 0, then compare(rhs, lhs) must also return 0\r\n * - If compare(lhs, rhs) returns a negative value, then compare(rhs, lhs) must return a positive value, and vice versa.\r\n *\r\n * Modifying a key in a way that affects the comparison function will produce unpredictable results, the\r\n * most likely of which is that keys will cease to map to the values with which they were initially inserted.\r\n * @public\r\n */\r\nexport class Dictionary<K, V> implements Iterable<DictionaryEntry<K, V>> {\r\n protected _keys: K[] = [];\r\n protected readonly _compareKeys: OrderedComparator<K>;\r\n protected readonly _cloneKey: CloneFunction<K>;\r\n protected _values: V[] = [];\r\n protected readonly _cloneValue: CloneFunction<V>;\r\n\r\n /**\r\n * Construct a new Dictionary<K, V>.\r\n * @param compareKeys The function used to compare keys within the dictionary.\r\n * @param cloneKey The function invoked to clone a key for insertion into the dictionary. The default implementation simply returns its input.\r\n * @param cloneValue The function invoked to clone a value for insertion into the dictionary. The default implementation simply returns its input.\r\n */\r\n public constructor(compareKeys: OrderedComparator<K>, cloneKey: CloneFunction<K> = shallowClone, cloneValue: CloneFunction<V> = shallowClone) {\r\n this._compareKeys = compareKeys;\r\n this._cloneKey = cloneKey;\r\n this._cloneValue = cloneValue;\r\n }\r\n\r\n /** The number of entries in the dictionary. */\r\n public get size(): number { return this._keys.length; }\r\n\r\n /** Returns an iterator over the key-value pairs in the Dictionary suitable for use in `for-of` loops. Entries are returned in sorted order by key. */\r\n public [Symbol.iterator](): Iterator<DictionaryEntry<K, V>> {\r\n return new DictionaryIterator<K, V>(this._keys, this._values);\r\n }\r\n\r\n /** Provides iteration over the keys in this Dictionary, in sorted order. */\r\n public keys(): Iterable<K> {\r\n function * iterator(dict: Dictionary<K, V>) {\r\n for (const entry of dict)\r\n yield entry.key;\r\n }\r\n\r\n return {\r\n [Symbol.iterator]: () => iterator(this),\r\n };\r\n }\r\n\r\n /** Provides iteration over the values in this Dictionary, in sorted order by the corresponding keys. */\r\n public values(): Iterable<V> {\r\n function * iterator(dict: Dictionary<K, V>) {\r\n for (const entry of dict)\r\n yield entry.value;\r\n }\r\n\r\n return {\r\n [Symbol.iterator]: () => iterator(this),\r\n };\r\n }\r\n\r\n /** Removes all entries from this dictionary */\r\n public clear(): void {\r\n this._keys = [];\r\n this._values = [];\r\n }\r\n\r\n /**\r\n * Looks up a value by its key.\r\n * @param key The key to search for\r\n * @returns the value associated with the key, or undefined if the key is not present in the dictionary.\r\n */\r\n public get(key: K): V | undefined {\r\n const bound = this.lowerBound(key);\r\n return bound.equal ? this._values[bound.index] : undefined;\r\n }\r\n\r\n /**\r\n * Determines if an entry exists for the specified key\r\n * @param key The key to search for\r\n * @returns true if an entry exists in this dictionary corresponding to the specified key.\r\n */\r\n public has(key: K): boolean {\r\n return this.lowerBound(key).equal;\r\n }\r\n\r\n /**\r\n * Deletes a value using its key.\r\n * @param key The key to delete\r\n * @returns true if the key was found and deleted.\r\n */\r\n public delete(key: K): boolean {\r\n const bound = this.lowerBound(key);\r\n if (bound.equal) {\r\n this._values.splice(bound.index, 1);\r\n this._keys.splice(bound.index, 1);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Attempts to insert a new entry into the dictionary. If an entry with an equivalent key exists, the dictionary is unmodified.\r\n * If the new entry is in fact inserted, both the key and value will be cloned using the functions supplied to the dictionary's constructor.\r\n * @param key The key to associate with the value\r\n * @param value The value to associate with the key\r\n * @returns true if the new entry was inserted, false if an entry with an equivalent key already exists.\r\n */\r\n public insert(key: K, value: V): boolean {\r\n const result = this.findOrInsert(key, value);\r\n return result.inserted;\r\n }\r\n\r\n /** Obtains the value associated with the specified key, or inserts it if the specified key does not yet exist.\r\n * @param key The key to search for.\r\n * @param value The value to associate with `key` if `key` does not yet exist in the dictionary.\r\n * @returns The found or inserted value and a flag indicating whether the new value was inserted.\r\n */\r\n public findOrInsert(key: K, value: V): { value: V, inserted: boolean } {\r\n const bound = this.lowerBound(key);\r\n if (bound.equal)\r\n return { value: this._values[bound.index], inserted: false };\r\n\r\n value = this._cloneValue(value);\r\n this._keys.splice(bound.index, 0, this._cloneKey(key));\r\n this._values.splice(bound.index, 0, this._cloneValue(value));\r\n return { value, inserted: true };\r\n }\r\n\r\n /**\r\n * Sets the value associated with the specified key in the dictionary.\r\n * If no such key already exists, this is equivalent to insert(key, value); otherwise, the existing value associated with the key is replaced.\r\n * In either case, the value will be cloned using the function supplied to the dictionary's constructor.\r\n */\r\n public set(key: K, value: V): void {\r\n value = this._cloneValue(value);\r\n const bound = this.lowerBound(key);\r\n if (bound.equal) {\r\n this._values[bound.index] = value;\r\n } else {\r\n this._keys.splice(bound.index, 0, this._cloneKey(key));\r\n this._values.splice(bound.index, 0, value);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts the contents of this dictionary as an array of { key, value } pairs, and empties this dictionary.\r\n * @returns An array of { key, value } pairs sorted by key.\r\n */\r\n public extractPairs(): Array<{ key: K, value: V }> {\r\n const pairs: Array<{ key: K, value: V }> = [];\r\n for (let i = 0; i < this.size; i++)\r\n pairs.push({ key: this._keys[i], value: this._values[i] });\r\n\r\n this.clear();\r\n return pairs;\r\n }\r\n\r\n /**\r\n * Extracts the contents of this dictionary as a pair of { keys, values } arrays, and empties this dictionary.\r\n * The array of keys is sorted according to the comparison criterion.\r\n * The position of each value in the array of values corresponds the the position of the corresponding key in the array of keys.\r\n * @returns a pair of { keys, values } arrays in which key[i] corresponds to value[i] in this dictionary and the keys are in sorted order.\r\n */\r\n public extractArrays(): { keys: K[], values: V[] } {\r\n const result = { keys: this._keys, values: this._values };\r\n this.clear();\r\n return result;\r\n }\r\n\r\n /** Apply a function to each (key, value) pair in the dictionary, in sorted order.\r\n * @param func The function to be applied.\r\n */\r\n public forEach(func: (key: K, value: V) => void): void {\r\n for (let i = 0; i < this.size; i++)\r\n func(this._keys[i], this._values[i]);\r\n }\r\n\r\n /**\r\n * Computes the position at which the specified key should be inserted to maintain sorted order.\r\n * @param key The key whose position is to be computed.\r\n * @returns an object with 'index' corresponding to the computed position and 'equal' set to true if an equivalent key already exists at that index.\r\n */\r\n protected lowerBound(key: K): { index: number, equal: boolean } { return lowerBound(key, this._keys, this._compareKeys); }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"Dictionary.js","sourceRoot":"","sources":["../../src/Dictionary.ts"],"names":[],"mappings":"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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 { CloneFunction, lowerBound, shallowClone } from \"./SortedArray\";\r\n\r\nclass DictionaryIterator<K, V> implements Iterator<DictionaryEntry<K, V>> {\r\n private _keys: K[];\r\n private _values: V[];\r\n private _curIndex = -1;\r\n\r\n public constructor(keys: K[], values: V[]) {\r\n this._keys = keys;\r\n this._values = values;\r\n }\r\n\r\n public next(): IteratorResult<DictionaryEntry<K, V>> {\r\n if (++this._curIndex >= this._keys.length) {\r\n // The ECMAScript spec states that value=undefined is valid if done=true. The TypeScript interface violates the spec hence the cast to any and back below.\r\n return { done: true } as any as IteratorResult<DictionaryEntry<K, V>>;\r\n } else {\r\n return {\r\n value: {\r\n key: this._keys[this._curIndex],\r\n value: this._values[this._curIndex],\r\n },\r\n done: false,\r\n };\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Represents an entry in a [[Dictionary]].\r\n * @public\r\n */\r\nexport interface DictionaryEntry<K, V> {\r\n /** The key used for lookup in the Dictionary. */\r\n key: K;\r\n /** The value associated with the key in the Dictionary. */\r\n value: V;\r\n}\r\n\r\n/**\r\n * Maintains a mapping of keys to values.\r\n * Unlike the standard Map<K, V>, a Dictionary<K, V> supports custom comparison logic for keys of object type (and for any other type).\r\n * The user supplies a key comparison function to the constructor, that must meet the following criteria given 'lhs' and 'rhs' of type K:\r\n * - If lhs is equal to rhs, returns 0\r\n * - If lhs is less than rhs, returns a negative value\r\n * - If lhs is greater than rhs, returns a positive value\r\n * - If compare(lhs, rhs) returns 0, then compare(rhs, lhs) must also return 0\r\n * - If compare(lhs, rhs) returns a negative value, then compare(rhs, lhs) must return a positive value, and vice versa.\r\n *\r\n * Modifying a key in a way that affects the comparison function will produce unpredictable results, the\r\n * most likely of which is that keys will cease to map to the values with which they were initially inserted.\r\n * @public\r\n */\r\nexport class Dictionary<K, V> implements Iterable<DictionaryEntry<K, V>> {\r\n protected _keys: K[] = [];\r\n protected readonly _compareKeys: OrderedComparator<K>;\r\n protected readonly _cloneKey: CloneFunction<K>;\r\n protected _values: V[] = [];\r\n protected readonly _cloneValue: CloneFunction<V>;\r\n\r\n /**\r\n * Construct a new Dictionary<K, V>.\r\n * @param compareKeys The function used to compare keys within the dictionary.\r\n * @param cloneKey The function invoked to clone a key for insertion into the dictionary. The default implementation simply returns its input.\r\n * @param cloneValue The function invoked to clone a value for insertion into the dictionary. The default implementation simply returns its input.\r\n */\r\n public constructor(compareKeys: OrderedComparator<K>, cloneKey: CloneFunction<K> = shallowClone, cloneValue: CloneFunction<V> = shallowClone) {\r\n this._compareKeys = compareKeys;\r\n this._cloneKey = cloneKey;\r\n this._cloneValue = cloneValue;\r\n }\r\n\r\n /** The number of entries in the dictionary. */\r\n public get size(): number { return this._keys.length; }\r\n\r\n /** Returns an iterator over the key-value pairs in the Dictionary suitable for use in `for-of` loops. Entries are returned in sorted order by key. */\r\n public [Symbol.iterator](): Iterator<DictionaryEntry<K, V>> {\r\n return new DictionaryIterator<K, V>(this._keys, this._values);\r\n }\r\n\r\n /** Provides iteration over the keys in this Dictionary, in sorted order. */\r\n public keys(): Iterable<K> {\r\n function * iterator(dict: Dictionary<K, V>) {\r\n for (const entry of dict)\r\n yield entry.key;\r\n }\r\n\r\n return {\r\n [Symbol.iterator]: () => iterator(this),\r\n };\r\n }\r\n\r\n /** Provides iteration over the values in this Dictionary, in sorted order by the corresponding keys. */\r\n public values(): Iterable<V> {\r\n function * iterator(dict: Dictionary<K, V>) {\r\n for (const entry of dict)\r\n yield entry.value;\r\n }\r\n\r\n return {\r\n [Symbol.iterator]: () => iterator(this),\r\n };\r\n }\r\n\r\n /** Removes all entries from this dictionary */\r\n public clear(): void {\r\n this._keys = [];\r\n this._values = [];\r\n }\r\n\r\n /**\r\n * Looks up a value by its key.\r\n * @param key The key to search for\r\n * @returns the value associated with the key, or undefined if the key is not present in the dictionary.\r\n */\r\n public get(key: K): V | undefined {\r\n const bound = this.lowerBound(key);\r\n return bound.equal ? this._values[bound.index] : undefined;\r\n }\r\n\r\n /**\r\n * Determines if an entry exists for the specified key\r\n * @param key The key to search for\r\n * @returns true if an entry exists in this dictionary corresponding to the specified key.\r\n */\r\n public has(key: K): boolean {\r\n return this.lowerBound(key).equal;\r\n }\r\n\r\n /**\r\n * Deletes a value using its key.\r\n * @param key The key to delete\r\n * @returns true if the key was found and deleted.\r\n */\r\n public delete(key: K): boolean {\r\n const bound = this.lowerBound(key);\r\n if (bound.equal) {\r\n this._values.splice(bound.index, 1);\r\n this._keys.splice(bound.index, 1);\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Attempts to insert a new entry into the dictionary. If an entry with an equivalent key exists, the dictionary is unmodified.\r\n * If the new entry is in fact inserted, both the key and value will be cloned using the functions supplied to the dictionary's constructor.\r\n * @param key The key to associate with the value\r\n * @param value The value to associate with the key\r\n * @returns true if the new entry was inserted, false if an entry with an equivalent key already exists.\r\n */\r\n public insert(key: K, value: V): boolean {\r\n const result = this.findOrInsert(key, value);\r\n return result.inserted;\r\n }\r\n\r\n /** Obtains the value associated with the specified key, or inserts it if the specified key does not yet exist.\r\n * @param key The key to search for.\r\n * @param value The value to associate with `key` if `key` does not yet exist in the dictionary.\r\n * @returns The found or inserted value and a flag indicating whether the new value was inserted.\r\n */\r\n public findOrInsert(key: K, value: V): { value: V, inserted: boolean } {\r\n const bound = this.lowerBound(key);\r\n if (bound.equal)\r\n return { value: this._values[bound.index], inserted: false };\r\n\r\n value = this._cloneValue(value);\r\n this._keys.splice(bound.index, 0, this._cloneKey(key));\r\n this._values.splice(bound.index, 0, this._cloneValue(value));\r\n return { value, inserted: true };\r\n }\r\n\r\n /**\r\n * Sets the value associated with the specified key in the dictionary.\r\n * If no such key already exists, this is equivalent to insert(key, value); otherwise, the existing value associated with the key is replaced.\r\n * In either case, the value will be cloned using the function supplied to the dictionary's constructor.\r\n */\r\n public set(key: K, value: V): void {\r\n value = this._cloneValue(value);\r\n const bound = this.lowerBound(key);\r\n if (bound.equal) {\r\n this._values[bound.index] = value;\r\n } else {\r\n this._keys.splice(bound.index, 0, this._cloneKey(key));\r\n this._values.splice(bound.index, 0, value);\r\n }\r\n }\r\n\r\n /**\r\n * Extracts the contents of this dictionary as an array of { key, value } pairs, and empties this dictionary.\r\n * @returns An array of { key, value } pairs sorted by key.\r\n */\r\n public extractPairs(): Array<{ key: K, value: V }> {\r\n const pairs: Array<{ key: K, value: V }> = [];\r\n for (let i = 0; i < this.size; i++)\r\n pairs.push({ key: this._keys[i], value: this._values[i] });\r\n\r\n this.clear();\r\n return pairs;\r\n }\r\n\r\n /**\r\n * Extracts the contents of this dictionary as a pair of { keys, values } arrays, and empties this dictionary.\r\n * The array of keys is sorted according to the comparison criterion.\r\n * The position of each value in the array of values corresponds the the position of the corresponding key in the array of keys.\r\n * @returns a pair of { keys, values } arrays in which key[i] corresponds to value[i] in this dictionary and the keys are in sorted order.\r\n */\r\n public extractArrays(): { keys: K[], values: V[] } {\r\n const result = { keys: this._keys, values: this._values };\r\n this.clear();\r\n return result;\r\n }\r\n\r\n /** Apply a function to each (key, value) pair in the dictionary, in sorted order.\r\n * @param func The function to be applied.\r\n */\r\n public forEach(func: (key: K, value: V) => void): void {\r\n for (let i = 0; i < this.size; i++)\r\n func(this._keys[i], this._values[i]);\r\n }\r\n\r\n /**\r\n * Computes the position at which the specified key should be inserted to maintain sorted order.\r\n * @param key The key whose position is to be computed.\r\n * @returns an object with 'index' corresponding to the computed position and 'equal' set to true if an equivalent key already exists at that index.\r\n */\r\n protected lowerBound(key: K): { index: number, equal: boolean } { return lowerBound(key, this._keys, this._compareKeys); }\r\n}\r\n"]}
|
package/lib/cjs/Id.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Id.d.ts","sourceRoot":"","sources":["../../src/Id.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Id.d.ts","sourceRoot":"","sources":["../../src/Id.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/Id.js
CHANGED
|
@@ -390,18 +390,24 @@ var Id64;
|
|
|
390
390
|
* @see [[Id64.isInvalid]]
|
|
391
391
|
* @see [[Id64.isValidId64]]
|
|
392
392
|
*/
|
|
393
|
-
function isValid(id) {
|
|
393
|
+
function isValid(id) {
|
|
394
|
+
return Id64.invalid !== id;
|
|
395
|
+
}
|
|
394
396
|
Id64.isValid = isValid;
|
|
395
397
|
/** Returns true if the input is a well-formed [[Id64String]] representing a valid Id.
|
|
396
398
|
* @see [[Id64.isValid]]
|
|
397
399
|
* @see [[Id64.isId64]]
|
|
398
400
|
*/
|
|
399
|
-
function isValidId64(id) {
|
|
401
|
+
function isValidId64(id) {
|
|
402
|
+
return Id64.invalid !== id && Id64.isId64(id);
|
|
403
|
+
}
|
|
400
404
|
Id64.isValidId64 = isValidId64;
|
|
401
405
|
/** Returns true if the input is a well-formed [[Id64String]] representing an invalid Id.
|
|
402
406
|
* @see [[Id64.isValid]]
|
|
403
407
|
*/
|
|
404
|
-
function isInvalid(id) {
|
|
408
|
+
function isInvalid(id) {
|
|
409
|
+
return Id64.invalid === id;
|
|
410
|
+
}
|
|
405
411
|
Id64.isInvalid = isInvalid;
|
|
406
412
|
/** A specialized replacement for Set<Id64String> optimized for performance-critical code which represents large sets of [[Id64]]s as pairs of
|
|
407
413
|
* 32-bit integers.
|
|
@@ -578,10 +584,14 @@ var Guid;
|
|
|
578
584
|
/** Determine whether the input string is "guid-like". That is, it follows the 8-4-4-4-12 pattern. This does not enforce
|
|
579
585
|
* that the string is actually in valid UUID format.
|
|
580
586
|
*/
|
|
581
|
-
function isGuid(value) {
|
|
587
|
+
function isGuid(value) {
|
|
588
|
+
return uuidPattern.test(value);
|
|
589
|
+
}
|
|
582
590
|
Guid.isGuid = isGuid;
|
|
583
591
|
/** Determine whether the input string is a valid V4 Guid string */
|
|
584
|
-
function isV4Guid(value) {
|
|
592
|
+
function isV4Guid(value) {
|
|
593
|
+
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);
|
|
594
|
+
}
|
|
585
595
|
Guid.isV4Guid = isV4Guid;
|
|
586
596
|
/** Create a new V4 Guid value */
|
|
587
597
|
function createValue() {
|
package/lib/cjs/Id.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Id.js","sourceRoot":"","sources":["../../src/Id.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AA4BH,SAAS,KAAK,CAAC,GAAW;IACxB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,0BAA0B,CAAC,GAAW,EAAE,KAAa;IAC5D,OAAO,mBAAmB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,KAAa,EAAE,YAAqB,IAAI;IAChF,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,eAAe,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,gBAAgB;IACjE,OAAO,CAAC,QAAQ,IAAI,eAAe,IAAI,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,oBAAoB;AAC1H,CAAC;AAED,SAAS,gBAAgB,CAAC,EAAU,EAAE,UAAkB,EAAE,GAAW;IACnE,IAAI,GAAG,KAAK,CAAC;QACX,OAAO,KAAK,CAAC;IAEf,uBAAuB;IACvB,IAAI,CAAC,0BAA0B,CAAC,EAAE,EAAE,UAAU,CAAC;QAC7C,OAAO,KAAK,CAAC;IAEf,qDAAqD;IACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE;QAC1B,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,UAAU,GAAG,CAAC,CAAC;YAC1C,OAAO,KAAK,CAAC;IAEjB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,IAAiB,IAAI,CA+jBpB;AA/jBD,WAAiB,IAAI;IACnB,2GAA2G;IAC3G,SAAgB,UAAU,CAAC,EAAc;QACvC,IAAI,SAAS,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,CAAC;QAEX,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,OAAO,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC;IAPe,eAAU,aAOzB,CAAA;IAED,6GAA6G;IAC7G,SAAgB,cAAc,CAAC,EAAc;QAC3C,IAAI,SAAS,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,CAAC;QAEX,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;IANe,mBAAc,iBAM7B,CAAA;IAED;;;;;OAKG;IACH,SAAgB,QAAQ,CAAC,IAAa;QACpC,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IACzE,CAAC;IAFe,aAAQ,WAEvB,CAAA;IAED;;;;;;OAMG;IACH,SAAgB,UAAU,CAAC,GAAW;QACpC,iFAAiF;QACjF,IAAI,OAAO,GAAG,KAAK,QAAQ;YACzB,OAAO,KAAA,OAAO,CAAC;QAEjB,6EAA6E;QAC7E,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;YAClB,OAAO,GAAG,CAAC;QAEb,8DAA8D;QAC9D,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG;YAC7C,OAAO,KAAA,OAAO,CAAC;QAEjB,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,GAAG,GAAG,EAAE,EAAE;YACZ,KAAK,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;YACnB,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;SACnC;QAED,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9B,OAAO,wBAAwB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAzBe,eAAU,aAyBzB,CAAA;IAED,mFAAmF;IACnF,MAAM,6BAA6B,GAAG;QACpC,YAAY;QACZ,WAAW;QACX,UAAU;QACV,SAAS;QACT,QAAQ;QACR,OAAO;QACP,MAAM;QACN,KAAK;QACL,IAAI;QACJ,GAAG;QACH,EAAE;KACH,CAAC;IAEF;;;;;OAKG;IACH,SAAgB,wBAAwB,CAAC,OAAe,EAAE,WAAmB;QAC3E,8CAA8C;QAC9C,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ;YAChE,OAAO,KAAA,OAAO,CAAC;QAEjB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,OAAO;YACf,OAAO,KAAA,OAAO,CAAC;QAEjB,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,6BAA6B,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC;IACpI,CAAC;IAZe,6BAAwB,2BAYvC,CAAA;IAED,qHAAqH;IACrH,MAAM,gBAAgB,GAAG;QACvB,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;KACL,CAAC;IAEF,yFAAyF;IACzF,SAAS,eAAe,CAAC,KAAa;QACpC,OAAO,KAAK,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,yFAAyF;IACzF,SAAS,eAAe,CAAC,IAAY;QACnC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,qFAAqF;IACrF,SAAS,iBAAiB,CAAC,EAAc,EAAE,KAAa,EAAE,GAAW;QACnE,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAChC,MAAM,KAAK,GAAG,eAAe,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,KAAK,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,KAAK,IAAI,KAAK,CAAC;YAC5B,MAAM,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,6CAA6C;SAC9E;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;OAMG;IACH,SAAgB,cAAc,CAAC,QAAgB,EAAE,SAAiB;QAChE,MAAM,UAAU,GAAG,QAAQ,KAAK,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,+BAA+B;QAChG,MAAM,OAAO,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC,+BAA+B;QACzE,IAAI,CAAC,KAAK,OAAO;YACf,OAAO,KAAA,OAAO,CAAC;QAEjB,6CAA6C;QAC7C,MAAM,MAAM,GAAG,gBAAgB,CAAC;QAChC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC;YAC1B,MAAM,KAAK,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC;YAC3C,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;gBAC1B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;SAC5C;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;YACrB,MAAM,IAAI,GAAG,GAAG,IAAI,KAAK,CAAC;YAC1B,MAAM,KAAK,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,CAAC;YAC1C,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK;gBAC1B,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;SAC5C;QAED,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK;YACzB,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QAExB,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,gBAAgB,CAAC,CAAC;IAClD,CAAC;IA9Be,mBAAc,iBA8B7B,CAAA;IAED;;OAEG;IACH,SAAgB,oBAAoB,CAAC,IAAgB;QACnD,OAAO,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAFe,yBAAoB,uBAEnC,CAAA;IAED;;OAEG;IACH,SAAgB,iBAAiB,CAAC,QAAgB,EAAE,SAAiB;QACnE,0BAA0B;QAC1B,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,UAAU,CAAC,CAAC;IAC1D,CAAC;IAHe,sBAAiB,oBAGhC,CAAA;IAeD;;;;OAIG;IACH,SAAgB,aAAa,CAAC,EAAc,EAAE,GAAgB;QAC5D,IAAI,CAAC,GAAG;YACN,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAE/B,GAAG,CAAC,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAC/B,GAAG,CAAC,KAAK,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IAPe,kBAAa,gBAO5B,CAAA;IAED,kFAAkF;IAClF,SAAgB,cAAc,CAAC,EAAc;QAC3C,IAAI,SAAS,CAAC,EAAE,CAAC;YACf,OAAO,CAAC,CAAC;QAEX,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,MAAM,KAAK,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,iBAAiB,CAAC,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAPe,mBAAc,iBAO7B,CAAA;IAED,kFAAkF;IAClF,SAAgB,cAAc,CAAC,EAAc;QAC3C,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,IAAI,GAAG,IAAI,EAAE,IAAI,SAAS,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,CAAC;QAEX,OAAO,iBAAiB,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;IANe,mBAAc,iBAM7B,CAAA;IAED;;;;;;;;;;;;OAYG;IACH,SAAgB,OAAO,CAAC,GAAY,EAAE,WAAoB,KAAK;QAC7D,IAAI,GAAG,YAAY,GAAG;YACpB,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QAE/C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAc,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,QAAQ;YACzB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;aACV,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC3B,GAAG,CAAC,OAAO,CAAC,CAAC,EAAc,EAAE,EAAE;gBAC7B,IAAI,OAAO,EAAE,KAAK,QAAQ;oBACxB,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;SACJ;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAfe,YAAO,UAetB,CAAA;IAED;;OAEG;IACH,QAAe,CAAC,CAAC,QAAQ,CAAC,GAAY;QACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;YAC3B,MAAM,GAAG,CAAC;SACX;aAAM;YACL,KAAK,MAAM,EAAE,IAAI,GAAG;gBAClB,MAAM,EAAE,CAAC;SACZ;IACH,CAAC;IAPgB,aAAQ,WAOxB,CAAA;IAED;;;;;;OAMG;IACH,SAAgB,QAAQ,CAAC,GAAY;QACnC,OAAO;YACL,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;SACvC,CAAC;IACJ,CAAC;IAJe,aAAQ,WAIvB,CAAA;IAED,yDAAyD;IACzD,SAAgB,QAAQ,CAAC,GAAY;QACnC,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;IACnG,CAAC;IAFe,aAAQ,WAEvB,CAAA;IAED,0EAA0E;IAC1E,SAAgB,MAAM,CAAC,GAAY;QACjC,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpF,CAAC;IAFe,WAAM,SAErB,CAAA;IAED,iEAAiE;IACjE,SAAgB,GAAG,CAAC,GAAY,EAAE,EAAc;QAC9C,IAAI,OAAO,GAAG,KAAK,QAAQ;YACzB,OAAO,GAAG,KAAK,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;YACpB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEhC,OAAO,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrB,CAAC;IAPe,QAAG,MAOlB,CAAA;IAED,kDAAkD;IACrC,YAAO,GAAG,GAAG,CAAC;IAE3B;;;;;;OAMG;IACH,SAAgB,WAAW,CAAC,EAAc;QACxC,oHAAoH;QACpH,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACvD,CAAC;IAHe,gBAAW,cAG1B,CAAA;IAED;;;;OAIG;IACH,SAAgB,eAAe,CAAC,EAAU;QACxC,OAAO,WAAW,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,EAAE,CAAC,CAAC;IAC5C,CAAC;IAFe,oBAAe,kBAE9B,CAAA;IAED;;;;OAIG;IACH,SAAgB,MAAM,CAAC,EAAU;QAC/B,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACtB,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,GAAG;YACvB,OAAO,KAAK,CAAC;QAEf,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;YACf,OAAO,KAAK,CAAC;QAEf,8BAA8B;QAC9B,IAAI,CAAC,KAAK,GAAG;YACX,OAAO,IAAI,CAAC;QAEd,mFAAmF;QACnF,IAAI,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;YAC5B,OAAO,KAAK,CAAC;QAEf,iGAAiG;QACjG,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,GAAG,GAAG,EAAE,EAAE;YACZ,YAAY,GAAG,GAAG,GAAG,EAAE,CAAC;YAExB,sBAAsB;YACtB,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC;gBAC5C,OAAO,KAAK,CAAC;YAEf,kCAAkC;YAClC,KAAK,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;gBACvC,IAAI,IAAI,KAAK,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,MAAM;oBACnC,MAAM;;oBAEN,YAAY,EAAE,CAAC;aAClB;YAED,IAAI,YAAY,IAAI,GAAG;gBACrB,OAAO,KAAK,CAAC;SAChB;QAED,OAAO,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,GAAG,GAAG,YAAY,CAAC,CAAC;IAChE,CAAC;IAtCe,WAAM,SAsCrB,CAAA;IAED;;;;OAIG;IACH,SAAgB,OAAO,CAAC,EAAc,IAAa,OAAO,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IAAhE,YAAO,UAAyD,CAAA;IAEhF;;;OAGG;IACH,SAAgB,WAAW,CAAC,EAAU,IAAa,OAAO,IAAI,CAAC,OAAO,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAAnF,gBAAW,cAAwE,CAAA;IAEnG;;OAEG;IACH,SAAgB,SAAS,CAAC,EAAc,IAAa,OAAO,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC;IAAlE,cAAS,YAAyD,CAAA;IAElF;;;;;;;;;OASG;IACH,MAAa,SAAS;QAGpB;;WAEG;QACH,YAAmB,GAAa;YALb,SAAI,GAAG,IAAI,GAAG,EAAuB,CAAC;YAMvD,IAAI,SAAS,KAAK,GAAG;gBACnB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,uCAAuC;QAChC,KAAK;YACV,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;QAED,4BAA4B;QACrB,KAAK,CAAC,EAAc;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,wCAAwC;QACjC,MAAM,CAAC,GAAY;YACxB,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACjC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAED,yDAAyD;QAClD,KAAK,CAAC,EAAc,IAAa,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAE5G,4BAA4B;QACrB,GAAG,CAAC,GAAW,EAAE,IAAY;YAClC,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,SAAS,KAAK,GAAG,EAAE;gBACrB,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aAC1B;YAED,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACf,CAAC;QAED,iCAAiC;QAC1B,QAAQ,CAAC,EAAc;YAC5B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,6CAA6C;QACtC,SAAS,CAAC,GAAY;YAC3B,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC;QAED,iCAAiC;QAC1B,MAAM,CAAC,GAAW,EAAE,IAAY;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,SAAS,KAAK,GAAG;gBACnB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QAED,yDAAyD;QAClD,GAAG,CAAC,GAAW,EAAE,IAAY;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,SAAS,KAAK,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QAED,mEAAmE;QAC5D,OAAO,CAAC,IAAgB;YAC7B,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC;QAED,+CAA+C;QAC/C,IAAW,OAAO,KAAc,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAE9D,sDAAsD;QACtD,IAAW,IAAI;YACb,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;gBAC3B,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAExB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sEAAsE;QAC/D,WAAW;YAChB,MAAM,GAAG,GAAc,EAAE,CAAC;YAC1B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;gBAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,mEAAmE;QAC5D,SAAS;YACd,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;YAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;gBAC3B,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;oBACxB,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,OAAO,GAAG,CAAC;QACb,CAAC;QAED,sDAAsD;QAC/C,OAAO,CAAC,IAAsC;YACnD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;gBAC3B,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC;oBACvB,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;KACF;IA5GY,cAAS,YA4GrB,CAAA;IAED;;;OAGG;IACH,MAAa,SAAS;QAAtB;YACqB,SAAI,GAAG,IAAI,GAAG,EAA0B,CAAC;QA2C9D,CAAC;QAzCC,uCAAuC;QAChC,KAAK,KAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3C,sCAAsC;QAC/B,OAAO,CAAC,EAAc,IAAmB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpH,qCAAqC;QAC9B,OAAO,CAAC,EAAc,EAAE,KAAQ,IAAU,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QAErH,gDAAgD;QACzC,GAAG,CAAC,GAAW,EAAE,IAAY,EAAE,KAAQ;YAC5C,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,SAAS,KAAK,GAAG,EAAE;gBACrB,GAAG,GAAG,IAAI,GAAG,EAAa,CAAC;gBAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;aAC1B;YAED,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtB,CAAC;QAED,kDAAkD;QAC3C,GAAG,CAAC,GAAW,EAAE,IAAY;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACtD,CAAC;QAED,mDAAmD;QACnD,IAAW,OAAO,KAAc,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,gDAAgD;QAChD,IAAW,IAAI;YACb,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;gBAC3B,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAExB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,yDAAyD;QAClD,OAAO,CAAC,IAAgD;YAC7D,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,IAAI;gBAChC,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC;oBACpC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;KACF;IA5CY,cAAS,YA4CrB,CAAA;AACH,CAAC,EA/jBgB,IAAI,GAAJ,YAAI,KAAJ,YAAI,QA+jBpB;AAED;;;;;GAKG;AACH,MAAa,mBAAmB;IAAhC;QACU,aAAQ,GAAW,CAAC,CAAC;IAI/B,CAAC;IAFC,yEAAyE;IACzE,IAAW,IAAI,KAAiB,OAAO,IAAI,CAAC,wBAAwB,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CACnG;AALD,kDAKC;AAED;;;;;;GAMG;AACH,IAAiB,IAAI,CAmDpB;AAnDD,WAAiB,IAAI;IACnB,MAAM,WAAW,GAAG,IAAI,MAAM,CAAC,+EAA+E,CAAC,CAAC;IAEhH,qEAAqE;IACxD,UAAK,GAAe,sCAAsC,CAAC;IAExE;;OAEG;IACH,SAAgB,MAAM,CAAC,KAAa,IAAa,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAAlE,WAAM,SAA4D,CAAA;IAElF,mEAAmE;IACnE,SAAgB,QAAQ,CAAC,KAAa,IAAa,OAAO,wFAAwF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAAjJ,aAAQ,WAAyI,CAAA;IAEjK,iCAAiC;IACjC,SAAgB,WAAW;QACzB,4EAA4E;QAC5E,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACnE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;YAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAPe,gBAAW,cAO1B,CAAA;IAED;;;;;;;OAOG;IACH,SAAgB,SAAS,CAAC,KAAiB;QACzC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAE9C,gDAAgD;QAChD,IAAI,MAAM,CAAC,UAAU,CAAC;YACpB,OAAO,UAAU,CAAC;QAEpB,gHAAgH;QAChH,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,aAAa,GAAG,sEAAsE,CAAC;QAC7F,IAAI,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACnC,OAAO,WAAW,CAAC,OAAO,CAAC,aAAa,EACtC,CAAC,MAAc,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAE,CAC7E,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;SACtC;QAED,8DAA8D;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IAlBe,cAAS,YAkBxB,CAAA;AACH,CAAC,EAnDgB,IAAI,GAAJ,YAAI,KAAJ,YAAI,QAmDpB","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,
|
|
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"}
|