@g9tm/syncdata 1.5.0 → 1.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE.md +21 -21
  2. package/PARITY.md +96 -96
  3. package/README.md +71 -71
  4. package/THIRD-PARTY-NOTICES.md +31 -31
  5. package/dist/abstractions/digest.js.map +1 -1
  6. package/dist/abstractions/enums.js.map +1 -1
  7. package/dist/abstractions/errors.js.map +1 -1
  8. package/dist/abstractions/guid.js.map +1 -1
  9. package/dist/abstractions/key.js.map +1 -1
  10. package/dist/abstractions/long.js.map +1 -1
  11. package/dist/abstractions/parameters.js.map +1 -1
  12. package/dist/brotli-js/decode.js.map +1 -1
  13. package/dist/brotli-js/index.js.map +1 -1
  14. package/dist/client/engine.js.map +1 -1
  15. package/dist/client/model.js.map +1 -1
  16. package/dist/client/progress.js.map +1 -1
  17. package/dist/client/runs.js.map +1 -1
  18. package/dist/client/storeTypes.js.map +1 -1
  19. package/dist/client/transport.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/internal/abort.js.map +1 -1
  24. package/dist/internal/base64.js.map +1 -1
  25. package/dist/internal/dotnetFormat.js.map +1 -1
  26. package/dist/internal/md5.js.map +1 -1
  27. package/dist/internal/sha256.js.map +1 -1
  28. package/dist/internal/utf8.js.map +1 -1
  29. package/dist/node/index.js.map +1 -1
  30. package/dist/node/snapshotFileSink.js.map +1 -1
  31. package/dist/node/sqliteDriver.js.map +1 -1
  32. package/dist/protocol/dtos.js.map +1 -1
  33. package/dist/protocol/protocol.js.map +1 -1
  34. package/dist/protocol/rowBatch/columnLayout.js.map +1 -1
  35. package/dist/protocol/rowBatch/format.js.map +1 -1
  36. package/dist/protocol/rowBatch/reader.js.map +1 -1
  37. package/dist/protocol/rowBatch/writer.js.map +1 -1
  38. package/dist/protocol/wire.js.map +1 -1
  39. package/dist/signalr/index.js.map +1 -1
  40. package/dist/signalr/protocols.js.map +1 -1
  41. package/dist/signalr/transport.d.ts +7 -3
  42. package/dist/signalr/transport.js +2 -1
  43. package/dist/signalr/transport.js.map +1 -1
  44. package/dist/sqlite/apply.js.map +1 -1
  45. package/dist/sqlite/commands.js.map +1 -1
  46. package/dist/sqlite/connection.js.map +1 -1
  47. package/dist/sqlite/driver.js.map +1 -1
  48. package/dist/sqlite/index.js.map +1 -1
  49. package/dist/sqlite/internals.js.map +1 -1
  50. package/dist/sqlite/options.js.map +1 -1
  51. package/dist/sqlite/push.js.map +1 -1
  52. package/dist/sqlite/query.js.map +1 -1
  53. package/dist/sqlite/revocation.js.map +1 -1
  54. package/dist/sqlite/sql.js +113 -113
  55. package/dist/sqlite/sql.js.map +1 -1
  56. package/dist/sqlite/store.js.map +1 -1
  57. package/dist/sqlite/values.js.map +1 -1
  58. package/dist/testing/index.js.map +1 -1
  59. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"guid.js","sourceRoot":"","sources":["../../src/abstractions/guid.ts"],"names":[],"mappings":"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","sourcesContent":["// GUID text and bytes, the twins of the .NET forms G9SyncData uses: canonical text is lower-case \"D\"\n// (`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`, PostgreSQL's uuid::text), and the wire bytes are the big-endian (RFC 4122)\n// order of that text (`Guid.TryWriteBytes(bigEndian: true)`).\n\nconst HEX_DIGIT = /^[0-9a-fA-F]{32}$/;\n\n/** The nil GUID in canonical form. */\nexport const EMPTY_GUID = '00000000-0000-0000-0000-000000000000';\n\n/**\n * Parses a GUID the way `Guid.TryParse` reads the forms G9SyncData meets — \"D\" (`8-4-4-4-12`), \"N\" (32 digits),\n * \"B\" (`{D}`) and \"P\" (`(D)`), any case, surrounding white space ignored — and returns its 32 lower-case hex digits,\n * or null. (The rare \"X\" form `{0x…,{0x…}}` is not accepted; PARITY.md.)\n */\nexport function guidDigits(text: string | null | undefined): string | null {\n if (typeof text !== 'string') return null;\n let s = text.trim();\n if (s.length === 38 && ((s.charAt(0) === '{' && s.charAt(37) === '}') || (s.charAt(0) === '(' && s.charAt(37) === ')'))) {\n s = s.slice(1, 37);\n }\n let digits: string;\n if (s.length === 36) {\n if (s.charAt(8) !== '-' || s.charAt(13) !== '-' || s.charAt(18) !== '-' || s.charAt(23) !== '-') return null;\n digits = s.slice(0, 8) + s.slice(9, 13) + s.slice(14, 18) + s.slice(19, 23) + s.slice(24);\n } else if (s.length === 32) {\n digits = s;\n } else {\n return null;\n }\n return HEX_DIGIT.test(digits) ? digits.toLowerCase() : null;\n}\n\n/** Canonical lower-case \"D\" text of 32 hex digits. */\nfunction formatDigits(digits: string): string {\n return digits.slice(0, 8) + '-' + digits.slice(8, 12) + '-' + digits.slice(12, 16) + '-' + digits.slice(16, 20) + '-' + digits.slice(20);\n}\n\n/** Canonical text of a GUID (`Guid.Parse(text).ToString(\"D\")`), or null when `text` is not a GUID. */\nexport function tryNormalizeGuid(text: string | null | undefined): string | null {\n const digits = guidDigits(text);\n return digits === null ? null : formatDigits(digits);\n}\n\n/** Canonical text of a GUID; throws `SyntaxError` (the .NET `FormatException`) when `text` is not one. */\nexport function normalizeGuid(text: string): string {\n const canonical = tryNormalizeGuid(text);\n if (canonical === null) throw new SyntaxError(`'${text}' is not a GUID.`);\n return canonical;\n}\n\n/** \"N\" form: 32 lower-case hex digits (`Guid.ToString(\"N\")`). */\nexport function guidToN(text: string): string {\n const digits = guidDigits(text);\n if (digits === null) throw new SyntaxError(`'${text}' is not a GUID.`);\n return digits;\n}\n\n/** Writes the 16 big-endian bytes of a GUID. */\nexport function writeGuidBytes(text: string, bytes: Uint8Array, offset: number): void {\n const digits = guidDigits(text);\n if (digits === null) throw new SyntaxError(`'${text}' is not a GUID.`);\n for (let i = 0; i < 16; i++) bytes[offset + i] = parseInt(digits.substr(i * 2, 2), 16);\n}\n\nconst HEX = '0123456789abcdef';\n\n/** Canonical text of 16 big-endian GUID bytes. */\nexport function readGuidBytes(bytes: Uint8Array, offset: number): string {\n let digits = '';\n for (let i = 0; i < 16; i++) {\n const b = bytes[offset + i] as number;\n digits += HEX.charAt(b >> 4) + HEX.charAt(b & 15);\n }\n return formatDigits(digits);\n}\n\n/**\n * A random (version 4) GUID in canonical form, the `Guid.NewGuid()` twin. Uses `crypto.getRandomValues` where the\n * runtime has it (Lynx's background thread has no `crypto`; it falls back to `Math.random`, which is enough for ids that\n * are unique, not secret).\n */\nexport function newGuid(): string {\n const bytes = new Uint8Array(16);\n const cryptoObject = (globalThis as { crypto?: { getRandomValues?: (array: Uint8Array) => Uint8Array } }).crypto;\n if (cryptoObject && typeof cryptoObject.getRandomValues === 'function') {\n cryptoObject.getRandomValues(bytes);\n } else {\n for (let i = 0; i < 16; i++) bytes[i] = Math.floor(Math.random() * 256);\n }\n bytes[6] = ((bytes[6] as number) & 0x0f) | 0x40;\n bytes[8] = ((bytes[8] as number) & 0x3f) | 0x80;\n return readGuidBytes(bytes, 0);\n}\n"]}
1
+ {"version":3,"file":"guid.js","sourceRoot":"","sources":["../../src/abstractions/guid.ts"],"names":[],"mappings":"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","sourcesContent":["// GUID text and bytes, the twins of the .NET forms G9SyncData uses: canonical text is lower-case \"D\"\r\n// (`xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx`, PostgreSQL's uuid::text), and the wire bytes are the big-endian (RFC 4122)\r\n// order of that text (`Guid.TryWriteBytes(bigEndian: true)`).\r\n\r\nconst HEX_DIGIT = /^[0-9a-fA-F]{32}$/;\r\n\r\n/** The nil GUID in canonical form. */\r\nexport const EMPTY_GUID = '00000000-0000-0000-0000-000000000000';\r\n\r\n/**\r\n * Parses a GUID the way `Guid.TryParse` reads the forms G9SyncData meets — \"D\" (`8-4-4-4-12`), \"N\" (32 digits),\r\n * \"B\" (`{D}`) and \"P\" (`(D)`), any case, surrounding white space ignored — and returns its 32 lower-case hex digits,\r\n * or null. (The rare \"X\" form `{0x…,{0x…}}` is not accepted; PARITY.md.)\r\n */\r\nexport function guidDigits(text: string | null | undefined): string | null {\r\n if (typeof text !== 'string') return null;\r\n let s = text.trim();\r\n if (s.length === 38 && ((s.charAt(0) === '{' && s.charAt(37) === '}') || (s.charAt(0) === '(' && s.charAt(37) === ')'))) {\r\n s = s.slice(1, 37);\r\n }\r\n let digits: string;\r\n if (s.length === 36) {\r\n if (s.charAt(8) !== '-' || s.charAt(13) !== '-' || s.charAt(18) !== '-' || s.charAt(23) !== '-') return null;\r\n digits = s.slice(0, 8) + s.slice(9, 13) + s.slice(14, 18) + s.slice(19, 23) + s.slice(24);\r\n } else if (s.length === 32) {\r\n digits = s;\r\n } else {\r\n return null;\r\n }\r\n return HEX_DIGIT.test(digits) ? digits.toLowerCase() : null;\r\n}\r\n\r\n/** Canonical lower-case \"D\" text of 32 hex digits. */\r\nfunction formatDigits(digits: string): string {\r\n return digits.slice(0, 8) + '-' + digits.slice(8, 12) + '-' + digits.slice(12, 16) + '-' + digits.slice(16, 20) + '-' + digits.slice(20);\r\n}\r\n\r\n/** Canonical text of a GUID (`Guid.Parse(text).ToString(\"D\")`), or null when `text` is not a GUID. */\r\nexport function tryNormalizeGuid(text: string | null | undefined): string | null {\r\n const digits = guidDigits(text);\r\n return digits === null ? null : formatDigits(digits);\r\n}\r\n\r\n/** Canonical text of a GUID; throws `SyntaxError` (the .NET `FormatException`) when `text` is not one. */\r\nexport function normalizeGuid(text: string): string {\r\n const canonical = tryNormalizeGuid(text);\r\n if (canonical === null) throw new SyntaxError(`'${text}' is not a GUID.`);\r\n return canonical;\r\n}\r\n\r\n/** \"N\" form: 32 lower-case hex digits (`Guid.ToString(\"N\")`). */\r\nexport function guidToN(text: string): string {\r\n const digits = guidDigits(text);\r\n if (digits === null) throw new SyntaxError(`'${text}' is not a GUID.`);\r\n return digits;\r\n}\r\n\r\n/** Writes the 16 big-endian bytes of a GUID. */\r\nexport function writeGuidBytes(text: string, bytes: Uint8Array, offset: number): void {\r\n const digits = guidDigits(text);\r\n if (digits === null) throw new SyntaxError(`'${text}' is not a GUID.`);\r\n for (let i = 0; i < 16; i++) bytes[offset + i] = parseInt(digits.substr(i * 2, 2), 16);\r\n}\r\n\r\nconst HEX = '0123456789abcdef';\r\n\r\n/** Canonical text of 16 big-endian GUID bytes. */\r\nexport function readGuidBytes(bytes: Uint8Array, offset: number): string {\r\n let digits = '';\r\n for (let i = 0; i < 16; i++) {\r\n const b = bytes[offset + i] as number;\r\n digits += HEX.charAt(b >> 4) + HEX.charAt(b & 15);\r\n }\r\n return formatDigits(digits);\r\n}\r\n\r\n/**\r\n * A random (version 4) GUID in canonical form, the `Guid.NewGuid()` twin. Uses `crypto.getRandomValues` where the\r\n * runtime has it (Lynx's background thread has no `crypto`; it falls back to `Math.random`, which is enough for ids that\r\n * are unique, not secret).\r\n */\r\nexport function newGuid(): string {\r\n const bytes = new Uint8Array(16);\r\n const cryptoObject = (globalThis as { crypto?: { getRandomValues?: (array: Uint8Array) => Uint8Array } }).crypto;\r\n if (cryptoObject && typeof cryptoObject.getRandomValues === 'function') {\r\n cryptoObject.getRandomValues(bytes);\r\n } else {\r\n for (let i = 0; i < 16; i++) bytes[i] = Math.floor(Math.random() * 256);\r\n }\r\n bytes[6] = ((bytes[6] as number) & 0x0f) | 0x40;\r\n bytes[8] = ((bytes[8] as number) & 0x3f) | 0x80;\r\n return readGuidBytes(bytes, 0);\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/abstractions/key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,6CAA6C;IAC7C,kBAAkB,CAAC,IAAY;QAC7B,OAAO,IAAI,KAAK,iBAAiB,CAAC,IAAI,IAAI,IAAI,KAAK,iBAAiB,CAAC,MAAM,IAAI,IAAI,KAAK,iBAAiB,CAAC,KAAK,IAAI,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC;IACtJ,CAAC;IAED,uFAAuF;IACvF,SAAS,CAAC,KAAsB;QAC9B,OAAO,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1F,CAAC;IAED,yHAAyH;IACzH,SAAS,CAAC,OAAe,EAAE,GAAW;QACpC,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,wBAAwB,OAAO,GAAG,CAAC,CAAC;YACrG,MAAM,IAAI,WAAW,CAAC,IAAI,GAAG,gCAAgC,OAAO,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,oDAAoD;IACpD,YAAY,CAAC,OAAe,EAAE,GAA8B;QAC1D,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACzC,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,iBAAiB,CAAC,IAAI;gBACzB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC/B,KAAK,iBAAiB,CAAC,KAAK,CAAC;YAC7B,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACpC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpD,CAAC;YACD,KAAK,iBAAiB,CAAC,MAAM;gBAC3B,OAAO,GAAG,CAAC;YACb;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["import { G9ESyncColumnType } from './enums.js';\nimport { tryNormalizeGuid } from './guid.js';\nimport { G9Long } from './long.js';\n\n/**\n * Canonical primary-key text (twin of `G9CSyncKey`). Every place a key is compared, hashed or stored as text uses this\n * form, so the same row can never appear under two spellings. v1 supports single-column keys of type Guid, String,\n * Int32 and Int64 (ADR-0006).\n */\nexport const G9SyncKey = {\n /** True when `type` can be a primary key. */\n isSupportedKeyType(type: number): boolean {\n return type === G9ESyncColumnType.Guid || type === G9ESyncColumnType.String || type === G9ESyncColumnType.Int32 || type === G9ESyncColumnType.Int64;\n },\n\n /** Canonical text of an integer key (invariant decimal, PostgreSQL `bigint::text`). */\n fromInt64(value: number | G9Long): string {\n return value instanceof G9Long ? value.toString() : G9Long.fromNumber(value).toString();\n },\n\n /** Normalises a textual key of the given type to canonical form; throws `SyntaxError` (FormatException) when invalid. */\n normalize(keyType: number, key: string): string {\n const canonical = G9SyncKey.tryNormalize(keyType, key);\n if (canonical === null) {\n if (!G9SyncKey.isSupportedKeyType(keyType)) throw new RangeError(`Unsupported key type ${keyType}.`);\n throw new SyntaxError(`'${key}' is not a valid key of type ${keyType}.`);\n }\n return canonical;\n },\n\n /** Tries to normalise; null instead of throwing. */\n tryNormalize(keyType: number, key: string | null | undefined): string | null {\n if (typeof key !== 'string') return null;\n switch (keyType) {\n case G9ESyncColumnType.Guid:\n return tryNormalizeGuid(key);\n case G9ESyncColumnType.Int32:\n case G9ESyncColumnType.Int64: {\n const parsed = G9Long.tryParse(key);\n return parsed === null ? null : parsed.toString();\n }\n case G9ESyncColumnType.String:\n return key;\n default:\n return null;\n }\n },\n};\n"]}
1
+ {"version":3,"file":"key.js","sourceRoot":"","sources":["../../src/abstractions/key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC;;;;GAIG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,6CAA6C;IAC7C,kBAAkB,CAAC,IAAY;QAC7B,OAAO,IAAI,KAAK,iBAAiB,CAAC,IAAI,IAAI,IAAI,KAAK,iBAAiB,CAAC,MAAM,IAAI,IAAI,KAAK,iBAAiB,CAAC,KAAK,IAAI,IAAI,KAAK,iBAAiB,CAAC,KAAK,CAAC;IACtJ,CAAC;IAED,uFAAuF;IACvF,SAAS,CAAC,KAAsB;QAC9B,OAAO,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC1F,CAAC;IAED,yHAAyH;IACzH,SAAS,CAAC,OAAe,EAAE,GAAW;QACpC,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACvD,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,wBAAwB,OAAO,GAAG,CAAC,CAAC;YACrG,MAAM,IAAI,WAAW,CAAC,IAAI,GAAG,gCAAgC,OAAO,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,oDAAoD;IACpD,YAAY,CAAC,OAAe,EAAE,GAA8B;QAC1D,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QACzC,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,iBAAiB,CAAC,IAAI;gBACzB,OAAO,gBAAgB,CAAC,GAAG,CAAC,CAAC;YAC/B,KAAK,iBAAiB,CAAC,KAAK,CAAC;YAC7B,KAAK,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACpC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACpD,CAAC;YACD,KAAK,iBAAiB,CAAC,MAAM;gBAC3B,OAAO,GAAG,CAAC;YACb;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAC","sourcesContent":["import { G9ESyncColumnType } from './enums.js';\r\nimport { tryNormalizeGuid } from './guid.js';\r\nimport { G9Long } from './long.js';\r\n\r\n/**\r\n * Canonical primary-key text (twin of `G9CSyncKey`). Every place a key is compared, hashed or stored as text uses this\r\n * form, so the same row can never appear under two spellings. v1 supports single-column keys of type Guid, String,\r\n * Int32 and Int64 (ADR-0006).\r\n */\r\nexport const G9SyncKey = {\r\n /** True when `type` can be a primary key. */\r\n isSupportedKeyType(type: number): boolean {\r\n return type === G9ESyncColumnType.Guid || type === G9ESyncColumnType.String || type === G9ESyncColumnType.Int32 || type === G9ESyncColumnType.Int64;\r\n },\r\n\r\n /** Canonical text of an integer key (invariant decimal, PostgreSQL `bigint::text`). */\r\n fromInt64(value: number | G9Long): string {\r\n return value instanceof G9Long ? value.toString() : G9Long.fromNumber(value).toString();\r\n },\r\n\r\n /** Normalises a textual key of the given type to canonical form; throws `SyntaxError` (FormatException) when invalid. */\r\n normalize(keyType: number, key: string): string {\r\n const canonical = G9SyncKey.tryNormalize(keyType, key);\r\n if (canonical === null) {\r\n if (!G9SyncKey.isSupportedKeyType(keyType)) throw new RangeError(`Unsupported key type ${keyType}.`);\r\n throw new SyntaxError(`'${key}' is not a valid key of type ${keyType}.`);\r\n }\r\n return canonical;\r\n },\r\n\r\n /** Tries to normalise; null instead of throwing. */\r\n tryNormalize(keyType: number, key: string | null | undefined): string | null {\r\n if (typeof key !== 'string') return null;\r\n switch (keyType) {\r\n case G9ESyncColumnType.Guid:\r\n return tryNormalizeGuid(key);\r\n case G9ESyncColumnType.Int32:\r\n case G9ESyncColumnType.Int64: {\r\n const parsed = G9Long.tryParse(key);\r\n return parsed === null ? null : parsed.toString();\r\n }\r\n case G9ESyncColumnType.String:\r\n return key;\r\n default:\r\n return null;\r\n }\r\n },\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"long.js","sourceRoot":"","sources":["../../src/abstractions/long.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * An exact signed 64-bit integer without BigInt (Lynx's PrimJS does not guarantee it): two 32-bit halves, `hi` signed\n * and `lo` unsigned. It is the twin of .NET `long` wherever a value may exceed ±(2^53 − 1) and must stay exact:\n * reconciliation digests and row hashes, dirty masks (up to 62 bits), DateTime ticks, int64 column values.\n *\n * Everything else in the protocol that .NET types as `long` (versions, batch ids, row counts, byte counts) is a plain\n * `number` in TypeScript: those values are far below 2^53 in practice.\n */\nexport class G9Long {\n /** High 32 bits, signed (two's complement). */\n readonly hi: number;\n /** Low 32 bits, unsigned. */\n readonly lo: number;\n\n constructor(hi: number, lo: number) {\n this.hi = hi | 0;\n this.lo = lo >>> 0;\n }\n\n static readonly ZERO = new G9Long(0, 0);\n static readonly ONE = new G9Long(0, 1);\n static readonly MINUS_ONE = new G9Long(-1, 0xffffffff);\n static readonly MIN_VALUE = new G9Long(0x80000000 | 0, 0);\n static readonly MAX_VALUE = new G9Long(0x7fffffff, 0xffffffff);\n\n /** From any integer `number`. Exact for safe integers; larger magnitudes are taken from the double as it is. */\n static fromNumber(value: number): G9Long {\n if (!isFinite(value) || Math.floor(value) !== value) throw new RangeError(`${value} is not an integer.`);\n if (value >= 9223372036854775807) return G9Long.MAX_VALUE;\n if (value <= -9223372036854775808) return G9Long.MIN_VALUE;\n if (value < 0) return G9Long.fromNumber(-value).negate();\n const hi = Math.floor(value / TWO_32);\n return new G9Long(hi, value - hi * TWO_32);\n }\n\n /** From the two halves (hi signed or unsigned, lo unsigned or signed: both are normalised). */\n static fromBits(hi: number, lo: number): G9Long {\n return new G9Long(hi, lo);\n }\n\n /**\n * Parses invariant decimal text (optional sign, digits only, no white space), the .NET\n * `long.Parse(s, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture)` twin. Throws `RangeError` for anything\n * else or a value outside the int64 range.\n */\n static parse(text: string): G9Long {\n const parsed = G9Long.tryParse(text);\n if (!parsed) throw new RangeError(`'${text}' is not a 64-bit integer.`);\n return parsed;\n }\n\n /** {@link parse} that returns null instead of throwing. */\n static tryParse(text: string | null | undefined): G9Long | null {\n if (typeof text !== 'string') return null;\n const m = /^([+-]?)(\\d+)$/.exec(text);\n if (!m) return null;\n const negative = m[1] === '-';\n const digits = m[2] as string;\n // Four 16-bit limbs, little-endian; value = value * 10 + digit, failing past 2^64.\n const limbs = [0, 0, 0, 0];\n for (let i = 0; i < digits.length; i++) {\n let carry = digits.charCodeAt(i) - 48;\n for (let k = 0; k < 4; k++) {\n const v = (limbs[k] as number) * 10 + carry;\n limbs[k] = v & 0xffff;\n carry = Math.floor(v / 65536);\n }\n if (carry !== 0) return null;\n }\n const hiU = ((limbs[3] as number) * 65536 + (limbs[2] as number)) >>> 0;\n const lo = ((limbs[1] as number) * 65536 + (limbs[0] as number)) >>> 0;\n // Range: magnitude ≤ 2^63 − 1, or exactly 2^63 when negative.\n if (hiU > 0x7fffffff) {\n if (!(negative && hiU === 0x80000000 && lo === 0)) return null;\n return G9Long.MIN_VALUE;\n }\n const magnitude = new G9Long(hiU, lo);\n return negative ? magnitude.negate() : magnitude;\n }\n\n /** Coerces a number, decimal text or G9Long. */\n static from(value: G9Long | number | string | { int64: string }): G9Long {\n if (value instanceof G9Long) return value;\n if (typeof value === 'number') return G9Long.fromNumber(value);\n if (typeof value === 'string') return G9Long.parse(value);\n if (value && typeof value === 'object' && typeof (value as { int64?: unknown }).int64 === 'string') {\n return G9Long.parse((value as { int64: string }).int64);\n }\n throw new TypeError('Not a 64-bit integer.');\n }\n\n /** Reads 8 little-endian bytes. */\n static readLE(bytes: Uint8Array, offset: number): G9Long {\n const lo = (bytes[offset] as number) | ((bytes[offset + 1] as number) << 8) | ((bytes[offset + 2] as number) << 16) | ((bytes[offset + 3] as number) << 24);\n const hi =\n (bytes[offset + 4] as number) | ((bytes[offset + 5] as number) << 8) | ((bytes[offset + 6] as number) << 16) | ((bytes[offset + 7] as number) << 24);\n return new G9Long(hi, lo);\n }\n\n /** Reads 8 big-endian bytes. */\n static readBE(bytes: Uint8Array, offset: number): G9Long {\n const hi = ((bytes[offset] as number) << 24) | ((bytes[offset + 1] as number) << 16) | ((bytes[offset + 2] as number) << 8) | (bytes[offset + 3] as number);\n const lo =\n ((bytes[offset + 4] as number) << 24) | ((bytes[offset + 5] as number) << 16) | ((bytes[offset + 6] as number) << 8) | (bytes[offset + 7] as number);\n return new G9Long(hi, lo);\n }\n\n /** Writes 8 little-endian bytes. */\n writeLE(bytes: Uint8Array, offset: number): void {\n const lo = this.lo;\n const hi = this.hi;\n bytes[offset] = lo & 0xff;\n bytes[offset + 1] = (lo >>> 8) & 0xff;\n bytes[offset + 2] = (lo >>> 16) & 0xff;\n bytes[offset + 3] = (lo >>> 24) & 0xff;\n bytes[offset + 4] = hi & 0xff;\n bytes[offset + 5] = (hi >>> 8) & 0xff;\n bytes[offset + 6] = (hi >>> 16) & 0xff;\n bytes[offset + 7] = (hi >>> 24) & 0xff;\n }\n\n isZero(): boolean {\n return this.hi === 0 && this.lo === 0;\n }\n\n isNegative(): boolean {\n return this.hi < 0;\n }\n\n /** True when the value lies within ±(2^53 − 1), i.e. {@link toNumber} is exact. */\n isSafe(): boolean {\n const hi = this.hi;\n if (hi >= 0) return hi < 0x200000;\n // -2^53 < v ⇔ hi > -0x200000, or hi == -0x200000 and lo > 0.\n return hi > -0x200000 || (hi === -0x200000 && this.lo > 0);\n }\n\n /** The value as a number: exact when {@link isSafe}, the nearest double otherwise. */\n toNumber(): number {\n return this.hi * TWO_32 + this.lo;\n }\n\n equals(other: G9Long): boolean {\n return this.hi === other.hi && this.lo === other.lo;\n }\n\n /** Signed comparison: negative, zero or positive. */\n compare(other: G9Long): number {\n if (this.hi !== other.hi) return this.hi < other.hi ? -1 : 1;\n if (this.lo !== other.lo) return this.lo < other.lo ? -1 : 1;\n return 0;\n }\n\n negate(): G9Long {\n return this.not().add(G9Long.ONE);\n }\n\n not(): G9Long {\n return new G9Long(~this.hi, ~this.lo);\n }\n\n and(other: G9Long): G9Long {\n return new G9Long(this.hi & other.hi, this.lo & other.lo);\n }\n\n or(other: G9Long): G9Long {\n return new G9Long(this.hi | other.hi, this.lo | other.lo);\n }\n\n xor(other: G9Long): G9Long {\n return new G9Long(this.hi ^ other.hi, this.lo ^ other.lo);\n }\n\n /** Wrapping addition (two's complement), like unchecked C#. */\n add(other: G9Long): G9Long {\n const lo = this.lo + other.lo;\n const carry = lo >= TWO_32 ? 1 : 0;\n return new G9Long((this.hi + other.hi + carry) | 0, lo >>> 0);\n }\n\n subtract(other: G9Long): G9Long {\n return this.add(other.negate());\n }\n\n /** Wrapping multiplication by a small non-negative integer (< 2^21). */\n multiplySmall(factor: number): G9Long {\n // 16-bit limbs keep every partial product below 2^37.\n const l0 = (this.lo & 0xffff) * factor;\n const l1 = (this.lo >>> 16) * factor + Math.floor(l0 / 65536);\n const l2 = (this.hi & 0xffff) * factor + Math.floor(l1 / 65536);\n const l3 = (this.hi >>> 16) * factor + Math.floor(l2 / 65536);\n return new G9Long(((l3 & 0xffff) << 16) | (l2 & 0xffff), ((l1 & 0xffff) << 16) | (l0 & 0xffff));\n }\n\n /** Shift left (C# `<<` with the count masked to 0..63). */\n shiftLeft(count: number): G9Long {\n const n = count & 63;\n if (n === 0) return this;\n if (n >= 32) return new G9Long(this.lo << (n - 32), 0);\n return new G9Long((this.hi << n) | (this.lo >>> (32 - n)), this.lo << n);\n }\n\n /** Arithmetic shift right (C# `>>` on long). */\n shiftRight(count: number): G9Long {\n const n = count & 63;\n if (n === 0) return this;\n if (n >= 32) return new G9Long(this.hi >> 31, this.hi >> (n - 32));\n return new G9Long(this.hi >> n, (this.lo >>> n) | (this.hi << (32 - n)));\n }\n\n /** Logical shift right (C# `>>>` / ulong `>>`). */\n shiftRightUnsigned(count: number): G9Long {\n const n = count & 63;\n if (n === 0) return this;\n if (n >= 32) return new G9Long(0, this.hi >>> (n - 32));\n return new G9Long(this.hi >>> n, (this.lo >>> n) | (this.hi << (32 - n)));\n }\n\n /** True when bit `index` (0..63) is set. */\n testBit(index: number): boolean {\n return index >= 32 ? ((this.hi >>> (index - 32)) & 1) !== 0 : ((this.lo >>> index) & 1) !== 0;\n }\n\n /**\n * Divides the value as UNSIGNED 64 bits by a small divisor (1..2^21) and returns quotient and remainder. Used for\n * decimal formatting and tick arithmetic.\n */\n divModUnsignedSmall(divisor: number): { quotient: G9Long; remainder: number } {\n const limbs = [this.hi >>> 16, this.hi & 0xffff, this.lo >>> 16, this.lo & 0xffff];\n let remainder = 0;\n for (let i = 0; i < 4; i++) {\n const value = remainder * 65536 + (limbs[i] as number);\n limbs[i] = Math.floor(value / divisor);\n remainder = value - (limbs[i] as number) * divisor;\n }\n return {\n quotient: new G9Long((((limbs[0] as number) << 16) | (limbs[1] as number)) >>> 0, (((limbs[2] as number) << 16) | (limbs[3] as number)) >>> 0),\n remainder,\n };\n }\n\n /** Invariant decimal text, the .NET `long.ToString(CultureInfo.InvariantCulture)` twin. */\n toString(): string {\n if (this.isSafe()) return String(this.toNumber());\n if (this.equals(G9Long.MIN_VALUE)) return '-9223372036854775808';\n const negative = this.isNegative();\n let magnitude: G9Long = negative ? this.negate() : this;\n let out = '';\n while (!magnitude.isZero()) {\n const { quotient, remainder } = magnitude.divModUnsignedSmall(10000000);\n magnitude = quotient;\n const chunk = String(remainder);\n out = (magnitude.isZero() ? chunk : '0000000'.slice(chunk.length) + chunk) + out;\n }\n return negative ? '-' + out : out;\n }\n\n /** The value as UNSIGNED decimal text (C# `ulong`). */\n toUnsignedString(): string {\n if (!this.isNegative()) return this.toString();\n let magnitude: G9Long = this;\n let out = '';\n while (!magnitude.isZero()) {\n const { quotient, remainder } = magnitude.divModUnsignedSmall(10000000);\n magnitude = quotient;\n const chunk = String(remainder);\n out = (magnitude.isZero() ? chunk : '0000000'.slice(chunk.length) + chunk) + out;\n }\n return out;\n }\n\n /**\n * JSON form: a sentinel string that {@link stringifyJson} turns into a bare JSON number, so `JSON.stringify` of a DTO\n * holding a G9Long writes the exact integer.\n */\n toJSON(): string {\n return LONG_SENTINEL + this.toString();\n }\n\n /** The SQLite driver form (G9LynxControls `G9SqlValue`): a number when safe, `{ int64 }` otherwise. */\n toSqlValue(): number | { int64: string } {\n return this.isSafe() ? this.toNumber() : { int64: this.toString() };\n }\n}\n\nconst TWO_32 = 4294967296;\n\n/** Marks a G9Long inside `JSON.stringify` output (a NUL, so no ordinary text produces it). */\nexport const LONG_SENTINEL = '\\u0000g9long:';\nconst LONG_SENTINEL_JSON = /\"\\\\u0000g9long:(-?\\d+)\"/g;\n\n/** `JSON.stringify` that writes every {@link G9Long} as an exact JSON number. */\nexport function stringifyJson(value: unknown): string {\n return replaceLongSentinels(JSON.stringify(value));\n}\n\n/** Turns the G9Long sentinels in `JSON.stringify` output (G9Long.toJSON) into bare JSON numbers. */\nexport function replaceLongSentinels(text: string): string {\n return text.indexOf('\\\\u0000g9long:') < 0 ? text : text.replace(LONG_SENTINEL_JSON, '$1');\n}\n\n/**\n * `JSON.parse` that keeps integers outside ±(2^53 − 1) exact: they come back as {@link G9Long} instead of a rounded\n * number. Text without such an integer takes the plain `JSON.parse` path.\n */\nexport function parseJson(text: string): unknown {\n if (!/\\d{16}/.test(text)) return JSON.parse(text);\n // Quote the long integer literals OUTSIDE strings, tagged, then let JSON.parse do the rest.\n let out = '';\n let last = 0;\n let i = 0;\n const n = text.length;\n while (i < n) {\n const c = text.charCodeAt(i);\n if (c === 34) {\n // Skip a string, honouring escapes.\n i++;\n while (i < n) {\n const d = text.charCodeAt(i);\n if (d === 92) i += 2;\n else if (d === 34) break;\n else i++;\n }\n i++;\n continue;\n }\n if (c === 45 || (c >= 48 && c <= 57)) {\n const start = i;\n i++;\n while (i < n) {\n const d = text.charCodeAt(i);\n if ((d >= 48 && d <= 57) || d === 46 || d === 101 || d === 69 || d === 43 || d === 45) i++;\n else break;\n }\n const literal = text.slice(start, i);\n if (/^-?\\d{16,}$/.test(literal)) {\n const parsed = G9Long.tryParse(literal);\n if (parsed && !parsed.isSafe()) {\n // An escaped U+0001 in the JSON text: JSON.parse turns it into the tag the reviver looks for.\n out += text.slice(last, start) + '\"\\\\u0001g9long:' + literal + '\"';\n last = i;\n }\n }\n continue;\n }\n i++;\n }\n if (last === 0) return JSON.parse(text);\n out += text.slice(last);\n return JSON.parse(out, (_key, value: unknown) =>\n typeof value === 'string' && value.indexOf(LONG_SENTINEL_TEXT) === 0 ? G9Long.parse(value.slice(LONG_SENTINEL_TEXT.length)) : value,\n );\n}\n\n/** The tag parseJson puts in front of a long literal (a code point no JSON integer literal contains). */\nconst LONG_SENTINEL_TEXT = '\\u0001g9long:';\n\n/** A protocol `long` read as a number (exact when it fits; a G9Long rounds to the nearest double). */\nexport function longToNumber(value: unknown): number {\n if (typeof value === 'number') return value;\n if (value instanceof G9Long) return value.toNumber();\n if (typeof value === 'string' && value !== '') return Number(value);\n return 0;\n}\n"]}
1
+ {"version":3,"file":"long.js","sourceRoot":"","sources":["../../src/abstractions/long.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * An exact signed 64-bit integer without BigInt (Lynx's PrimJS does not guarantee it): two 32-bit halves, `hi` signed\r\n * and `lo` unsigned. It is the twin of .NET `long` wherever a value may exceed ±(2^53 − 1) and must stay exact:\r\n * reconciliation digests and row hashes, dirty masks (up to 62 bits), DateTime ticks, int64 column values.\r\n *\r\n * Everything else in the protocol that .NET types as `long` (versions, batch ids, row counts, byte counts) is a plain\r\n * `number` in TypeScript: those values are far below 2^53 in practice.\r\n */\r\nexport class G9Long {\r\n /** High 32 bits, signed (two's complement). */\r\n readonly hi: number;\r\n /** Low 32 bits, unsigned. */\r\n readonly lo: number;\r\n\r\n constructor(hi: number, lo: number) {\r\n this.hi = hi | 0;\r\n this.lo = lo >>> 0;\r\n }\r\n\r\n static readonly ZERO = new G9Long(0, 0);\r\n static readonly ONE = new G9Long(0, 1);\r\n static readonly MINUS_ONE = new G9Long(-1, 0xffffffff);\r\n static readonly MIN_VALUE = new G9Long(0x80000000 | 0, 0);\r\n static readonly MAX_VALUE = new G9Long(0x7fffffff, 0xffffffff);\r\n\r\n /** From any integer `number`. Exact for safe integers; larger magnitudes are taken from the double as it is. */\r\n static fromNumber(value: number): G9Long {\r\n if (!isFinite(value) || Math.floor(value) !== value) throw new RangeError(`${value} is not an integer.`);\r\n if (value >= 9223372036854775807) return G9Long.MAX_VALUE;\r\n if (value <= -9223372036854775808) return G9Long.MIN_VALUE;\r\n if (value < 0) return G9Long.fromNumber(-value).negate();\r\n const hi = Math.floor(value / TWO_32);\r\n return new G9Long(hi, value - hi * TWO_32);\r\n }\r\n\r\n /** From the two halves (hi signed or unsigned, lo unsigned or signed: both are normalised). */\r\n static fromBits(hi: number, lo: number): G9Long {\r\n return new G9Long(hi, lo);\r\n }\r\n\r\n /**\r\n * Parses invariant decimal text (optional sign, digits only, no white space), the .NET\r\n * `long.Parse(s, NumberStyles.AllowLeadingSign, CultureInfo.InvariantCulture)` twin. Throws `RangeError` for anything\r\n * else or a value outside the int64 range.\r\n */\r\n static parse(text: string): G9Long {\r\n const parsed = G9Long.tryParse(text);\r\n if (!parsed) throw new RangeError(`'${text}' is not a 64-bit integer.`);\r\n return parsed;\r\n }\r\n\r\n /** {@link parse} that returns null instead of throwing. */\r\n static tryParse(text: string | null | undefined): G9Long | null {\r\n if (typeof text !== 'string') return null;\r\n const m = /^([+-]?)(\\d+)$/.exec(text);\r\n if (!m) return null;\r\n const negative = m[1] === '-';\r\n const digits = m[2] as string;\r\n // Four 16-bit limbs, little-endian; value = value * 10 + digit, failing past 2^64.\r\n const limbs = [0, 0, 0, 0];\r\n for (let i = 0; i < digits.length; i++) {\r\n let carry = digits.charCodeAt(i) - 48;\r\n for (let k = 0; k < 4; k++) {\r\n const v = (limbs[k] as number) * 10 + carry;\r\n limbs[k] = v & 0xffff;\r\n carry = Math.floor(v / 65536);\r\n }\r\n if (carry !== 0) return null;\r\n }\r\n const hiU = ((limbs[3] as number) * 65536 + (limbs[2] as number)) >>> 0;\r\n const lo = ((limbs[1] as number) * 65536 + (limbs[0] as number)) >>> 0;\r\n // Range: magnitude ≤ 2^63 − 1, or exactly 2^63 when negative.\r\n if (hiU > 0x7fffffff) {\r\n if (!(negative && hiU === 0x80000000 && lo === 0)) return null;\r\n return G9Long.MIN_VALUE;\r\n }\r\n const magnitude = new G9Long(hiU, lo);\r\n return negative ? magnitude.negate() : magnitude;\r\n }\r\n\r\n /** Coerces a number, decimal text or G9Long. */\r\n static from(value: G9Long | number | string | { int64: string }): G9Long {\r\n if (value instanceof G9Long) return value;\r\n if (typeof value === 'number') return G9Long.fromNumber(value);\r\n if (typeof value === 'string') return G9Long.parse(value);\r\n if (value && typeof value === 'object' && typeof (value as { int64?: unknown }).int64 === 'string') {\r\n return G9Long.parse((value as { int64: string }).int64);\r\n }\r\n throw new TypeError('Not a 64-bit integer.');\r\n }\r\n\r\n /** Reads 8 little-endian bytes. */\r\n static readLE(bytes: Uint8Array, offset: number): G9Long {\r\n const lo = (bytes[offset] as number) | ((bytes[offset + 1] as number) << 8) | ((bytes[offset + 2] as number) << 16) | ((bytes[offset + 3] as number) << 24);\r\n const hi =\r\n (bytes[offset + 4] as number) | ((bytes[offset + 5] as number) << 8) | ((bytes[offset + 6] as number) << 16) | ((bytes[offset + 7] as number) << 24);\r\n return new G9Long(hi, lo);\r\n }\r\n\r\n /** Reads 8 big-endian bytes. */\r\n static readBE(bytes: Uint8Array, offset: number): G9Long {\r\n const hi = ((bytes[offset] as number) << 24) | ((bytes[offset + 1] as number) << 16) | ((bytes[offset + 2] as number) << 8) | (bytes[offset + 3] as number);\r\n const lo =\r\n ((bytes[offset + 4] as number) << 24) | ((bytes[offset + 5] as number) << 16) | ((bytes[offset + 6] as number) << 8) | (bytes[offset + 7] as number);\r\n return new G9Long(hi, lo);\r\n }\r\n\r\n /** Writes 8 little-endian bytes. */\r\n writeLE(bytes: Uint8Array, offset: number): void {\r\n const lo = this.lo;\r\n const hi = this.hi;\r\n bytes[offset] = lo & 0xff;\r\n bytes[offset + 1] = (lo >>> 8) & 0xff;\r\n bytes[offset + 2] = (lo >>> 16) & 0xff;\r\n bytes[offset + 3] = (lo >>> 24) & 0xff;\r\n bytes[offset + 4] = hi & 0xff;\r\n bytes[offset + 5] = (hi >>> 8) & 0xff;\r\n bytes[offset + 6] = (hi >>> 16) & 0xff;\r\n bytes[offset + 7] = (hi >>> 24) & 0xff;\r\n }\r\n\r\n isZero(): boolean {\r\n return this.hi === 0 && this.lo === 0;\r\n }\r\n\r\n isNegative(): boolean {\r\n return this.hi < 0;\r\n }\r\n\r\n /** True when the value lies within ±(2^53 − 1), i.e. {@link toNumber} is exact. */\r\n isSafe(): boolean {\r\n const hi = this.hi;\r\n if (hi >= 0) return hi < 0x200000;\r\n // -2^53 < v ⇔ hi > -0x200000, or hi == -0x200000 and lo > 0.\r\n return hi > -0x200000 || (hi === -0x200000 && this.lo > 0);\r\n }\r\n\r\n /** The value as a number: exact when {@link isSafe}, the nearest double otherwise. */\r\n toNumber(): number {\r\n return this.hi * TWO_32 + this.lo;\r\n }\r\n\r\n equals(other: G9Long): boolean {\r\n return this.hi === other.hi && this.lo === other.lo;\r\n }\r\n\r\n /** Signed comparison: negative, zero or positive. */\r\n compare(other: G9Long): number {\r\n if (this.hi !== other.hi) return this.hi < other.hi ? -1 : 1;\r\n if (this.lo !== other.lo) return this.lo < other.lo ? -1 : 1;\r\n return 0;\r\n }\r\n\r\n negate(): G9Long {\r\n return this.not().add(G9Long.ONE);\r\n }\r\n\r\n not(): G9Long {\r\n return new G9Long(~this.hi, ~this.lo);\r\n }\r\n\r\n and(other: G9Long): G9Long {\r\n return new G9Long(this.hi & other.hi, this.lo & other.lo);\r\n }\r\n\r\n or(other: G9Long): G9Long {\r\n return new G9Long(this.hi | other.hi, this.lo | other.lo);\r\n }\r\n\r\n xor(other: G9Long): G9Long {\r\n return new G9Long(this.hi ^ other.hi, this.lo ^ other.lo);\r\n }\r\n\r\n /** Wrapping addition (two's complement), like unchecked C#. */\r\n add(other: G9Long): G9Long {\r\n const lo = this.lo + other.lo;\r\n const carry = lo >= TWO_32 ? 1 : 0;\r\n return new G9Long((this.hi + other.hi + carry) | 0, lo >>> 0);\r\n }\r\n\r\n subtract(other: G9Long): G9Long {\r\n return this.add(other.negate());\r\n }\r\n\r\n /** Wrapping multiplication by a small non-negative integer (< 2^21). */\r\n multiplySmall(factor: number): G9Long {\r\n // 16-bit limbs keep every partial product below 2^37.\r\n const l0 = (this.lo & 0xffff) * factor;\r\n const l1 = (this.lo >>> 16) * factor + Math.floor(l0 / 65536);\r\n const l2 = (this.hi & 0xffff) * factor + Math.floor(l1 / 65536);\r\n const l3 = (this.hi >>> 16) * factor + Math.floor(l2 / 65536);\r\n return new G9Long(((l3 & 0xffff) << 16) | (l2 & 0xffff), ((l1 & 0xffff) << 16) | (l0 & 0xffff));\r\n }\r\n\r\n /** Shift left (C# `<<` with the count masked to 0..63). */\r\n shiftLeft(count: number): G9Long {\r\n const n = count & 63;\r\n if (n === 0) return this;\r\n if (n >= 32) return new G9Long(this.lo << (n - 32), 0);\r\n return new G9Long((this.hi << n) | (this.lo >>> (32 - n)), this.lo << n);\r\n }\r\n\r\n /** Arithmetic shift right (C# `>>` on long). */\r\n shiftRight(count: number): G9Long {\r\n const n = count & 63;\r\n if (n === 0) return this;\r\n if (n >= 32) return new G9Long(this.hi >> 31, this.hi >> (n - 32));\r\n return new G9Long(this.hi >> n, (this.lo >>> n) | (this.hi << (32 - n)));\r\n }\r\n\r\n /** Logical shift right (C# `>>>` / ulong `>>`). */\r\n shiftRightUnsigned(count: number): G9Long {\r\n const n = count & 63;\r\n if (n === 0) return this;\r\n if (n >= 32) return new G9Long(0, this.hi >>> (n - 32));\r\n return new G9Long(this.hi >>> n, (this.lo >>> n) | (this.hi << (32 - n)));\r\n }\r\n\r\n /** True when bit `index` (0..63) is set. */\r\n testBit(index: number): boolean {\r\n return index >= 32 ? ((this.hi >>> (index - 32)) & 1) !== 0 : ((this.lo >>> index) & 1) !== 0;\r\n }\r\n\r\n /**\r\n * Divides the value as UNSIGNED 64 bits by a small divisor (1..2^21) and returns quotient and remainder. Used for\r\n * decimal formatting and tick arithmetic.\r\n */\r\n divModUnsignedSmall(divisor: number): { quotient: G9Long; remainder: number } {\r\n const limbs = [this.hi >>> 16, this.hi & 0xffff, this.lo >>> 16, this.lo & 0xffff];\r\n let remainder = 0;\r\n for (let i = 0; i < 4; i++) {\r\n const value = remainder * 65536 + (limbs[i] as number);\r\n limbs[i] = Math.floor(value / divisor);\r\n remainder = value - (limbs[i] as number) * divisor;\r\n }\r\n return {\r\n quotient: new G9Long((((limbs[0] as number) << 16) | (limbs[1] as number)) >>> 0, (((limbs[2] as number) << 16) | (limbs[3] as number)) >>> 0),\r\n remainder,\r\n };\r\n }\r\n\r\n /** Invariant decimal text, the .NET `long.ToString(CultureInfo.InvariantCulture)` twin. */\r\n toString(): string {\r\n if (this.isSafe()) return String(this.toNumber());\r\n if (this.equals(G9Long.MIN_VALUE)) return '-9223372036854775808';\r\n const negative = this.isNegative();\r\n let magnitude: G9Long = negative ? this.negate() : this;\r\n let out = '';\r\n while (!magnitude.isZero()) {\r\n const { quotient, remainder } = magnitude.divModUnsignedSmall(10000000);\r\n magnitude = quotient;\r\n const chunk = String(remainder);\r\n out = (magnitude.isZero() ? chunk : '0000000'.slice(chunk.length) + chunk) + out;\r\n }\r\n return negative ? '-' + out : out;\r\n }\r\n\r\n /** The value as UNSIGNED decimal text (C# `ulong`). */\r\n toUnsignedString(): string {\r\n if (!this.isNegative()) return this.toString();\r\n let magnitude: G9Long = this;\r\n let out = '';\r\n while (!magnitude.isZero()) {\r\n const { quotient, remainder } = magnitude.divModUnsignedSmall(10000000);\r\n magnitude = quotient;\r\n const chunk = String(remainder);\r\n out = (magnitude.isZero() ? chunk : '0000000'.slice(chunk.length) + chunk) + out;\r\n }\r\n return out;\r\n }\r\n\r\n /**\r\n * JSON form: a sentinel string that {@link stringifyJson} turns into a bare JSON number, so `JSON.stringify` of a DTO\r\n * holding a G9Long writes the exact integer.\r\n */\r\n toJSON(): string {\r\n return LONG_SENTINEL + this.toString();\r\n }\r\n\r\n /** The SQLite driver form (G9LynxControls `G9SqlValue`): a number when safe, `{ int64 }` otherwise. */\r\n toSqlValue(): number | { int64: string } {\r\n return this.isSafe() ? this.toNumber() : { int64: this.toString() };\r\n }\r\n}\r\n\r\nconst TWO_32 = 4294967296;\r\n\r\n/** Marks a G9Long inside `JSON.stringify` output (a NUL, so no ordinary text produces it). */\r\nexport const LONG_SENTINEL = '\\u0000g9long:';\r\nconst LONG_SENTINEL_JSON = /\"\\\\u0000g9long:(-?\\d+)\"/g;\r\n\r\n/** `JSON.stringify` that writes every {@link G9Long} as an exact JSON number. */\r\nexport function stringifyJson(value: unknown): string {\r\n return replaceLongSentinels(JSON.stringify(value));\r\n}\r\n\r\n/** Turns the G9Long sentinels in `JSON.stringify` output (G9Long.toJSON) into bare JSON numbers. */\r\nexport function replaceLongSentinels(text: string): string {\r\n return text.indexOf('\\\\u0000g9long:') < 0 ? text : text.replace(LONG_SENTINEL_JSON, '$1');\r\n}\r\n\r\n/**\r\n * `JSON.parse` that keeps integers outside ±(2^53 − 1) exact: they come back as {@link G9Long} instead of a rounded\r\n * number. Text without such an integer takes the plain `JSON.parse` path.\r\n */\r\nexport function parseJson(text: string): unknown {\r\n if (!/\\d{16}/.test(text)) return JSON.parse(text);\r\n // Quote the long integer literals OUTSIDE strings, tagged, then let JSON.parse do the rest.\r\n let out = '';\r\n let last = 0;\r\n let i = 0;\r\n const n = text.length;\r\n while (i < n) {\r\n const c = text.charCodeAt(i);\r\n if (c === 34) {\r\n // Skip a string, honouring escapes.\r\n i++;\r\n while (i < n) {\r\n const d = text.charCodeAt(i);\r\n if (d === 92) i += 2;\r\n else if (d === 34) break;\r\n else i++;\r\n }\r\n i++;\r\n continue;\r\n }\r\n if (c === 45 || (c >= 48 && c <= 57)) {\r\n const start = i;\r\n i++;\r\n while (i < n) {\r\n const d = text.charCodeAt(i);\r\n if ((d >= 48 && d <= 57) || d === 46 || d === 101 || d === 69 || d === 43 || d === 45) i++;\r\n else break;\r\n }\r\n const literal = text.slice(start, i);\r\n if (/^-?\\d{16,}$/.test(literal)) {\r\n const parsed = G9Long.tryParse(literal);\r\n if (parsed && !parsed.isSafe()) {\r\n // An escaped U+0001 in the JSON text: JSON.parse turns it into the tag the reviver looks for.\r\n out += text.slice(last, start) + '\"\\\\u0001g9long:' + literal + '\"';\r\n last = i;\r\n }\r\n }\r\n continue;\r\n }\r\n i++;\r\n }\r\n if (last === 0) return JSON.parse(text);\r\n out += text.slice(last);\r\n return JSON.parse(out, (_key, value: unknown) =>\r\n typeof value === 'string' && value.indexOf(LONG_SENTINEL_TEXT) === 0 ? G9Long.parse(value.slice(LONG_SENTINEL_TEXT.length)) : value,\r\n );\r\n}\r\n\r\n/** The tag parseJson puts in front of a long literal (a code point no JSON integer literal contains). */\r\nconst LONG_SENTINEL_TEXT = '\\u0001g9long:';\r\n\r\n/** A protocol `long` read as a number (exact when it fits; a G9Long rounds to the nearest double). */\r\nexport function longToNumber(value: unknown): number {\r\n if (typeof value === 'number') return value;\r\n if (value instanceof G9Long) return value.toNumber();\r\n if (typeof value === 'string' && value !== '') return Number(value);\r\n return 0;\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"parameters.js","sourceRoot":"","sources":["../../src/abstractions/parameters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,MAAM,UAAU,GAAG,qBAAqB,CAAC;AACzC,MAAM,GAAG,GAAG,kBAAkB,CAAC;AAE/B;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAW,CAAC;QAC7B,MAAM,UAAU,GACd,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC;QACzH,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,CAAS,EAAE,CAAS;IACjD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,gBAAgB;IAA7B;QACmB,YAAO,GAA+B,MAAM,CAAC,MAAM,CAAC,IAAI,CAA+B,CAAC;QACjG,WAAM,GAAG,CAAC,CAAC;IA0GrB,CAAC;IAxGC,4DAA4D;IAC5D,IAAI,MAAM;QACR,MAAM,GAAG,GAA+B,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAW,CAAC;QAC1E,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED,wCAAwC;IACxC,KAAK;QACH,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACxD,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnG,CAAC;IAED,+CAA+C;IAC/C,OAAO,CAAC,IAAY,EAAE,KAAa;QACjC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,4CAA4C;IAC5C,QAAQ,CAAC,IAAY,EAAE,KAAsB;QAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,YAAY,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,qDAAqD;IACrD,QAAQ,CAAC,IAAY,EAAE,KAAa;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,UAAU,CAAC,IAAY,EAAE,KAAc;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACnD,CAAC;IAED,SAAS,CAAC,IAAY,EAAE,KAAa;QACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,MAAM,IAAI,SAAS,CAAC,6BAA6B,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,4EAA4E;IAC5E,WAAW,CAAC,IAAY,EAAE,MAAwB;QAChD,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE,cAAc,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,mEAAmE;IACnE,YAAY,CAAC,IAAY,EAAE,MAAiC;QAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3F,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,IAAI,QAAQ,GAAkB,IAAI,CAAC;QACnC,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;YAC1B,IAAI,QAAQ,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC7E,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,0FAA0F;IAC1F,aAAa,CAAC,IAAY,EAAE,MAAwB;QAClD,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;QAC3E,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;QAChG,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,sFAAsF;IACtF,MAAM,CAAC,UAAU,CAAC,MAAkF;QAClG,MAAM,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QACtC,IAAI,CAAC,MAAM;YAAE,OAAO,MAAM,CAAC;QAC3B,IAAI,OAAQ,MAAqC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EAAE,CAAC;YAClF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAoC;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7F,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,MAAoC,CAAC;YACpD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAW,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,yGAAyG;IACzG,iBAAiB;QACf,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAW,CAAC,CAAC,CAAC;QAC3H,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,oEAAoE;IACpE,MAAM,CAAC,oBAAoB,CAAC,gBAAwB,EAAE,UAAoC;QACxF,IAAI,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,kCAAkC,CAAC,CAAC;QACpI,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,GAAG,GAAG,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;IAC5H,CAAC;IAEO,IAAI,CAAC,IAAY,EAAE,KAAa;QACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,MAAM,IAAI,SAAS,CAAC,+BAA+B,CAAC,CAAC;QACzG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,MAAM,EAAE,CAAC;QAC7E,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED,SAAS,WAAW,CAAO,MAAmB,EAAE,GAAoB;IAClE,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,cAAc,CAAC,MAAgB,EAAE,OAAyC;IACjF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;QAAE,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAW,CAAC,CAAC;IAClH,OAAO,GAAG,CAAC;AACb,CAAC","sourcesContent":["import { utf8Encode } from '../internal/utf8.js';\nimport { normalizeGuid } from './guid.js';\nimport { G9Long } from './long.js';\n\nconst UNRESERVED = /^[A-Za-z0-9\\-._~]*$/;\nconst HEX = '0123456789ABCDEF';\n\n/**\n * `Uri.EscapeDataString`: every character except the RFC 3986 unreserved set (`A-Z a-z 0-9 - . _ ~`) as `%XX` of its\n * UTF-8 bytes, upper-case hex; a lone surrogate becomes U+FFFD. (`encodeURIComponent` differs: it keeps `!'()*` and\n * throws on lone surrogates.)\n */\nexport function escapeDataString(text: string): string {\n if (UNRESERVED.test(text)) return text;\n const bytes = utf8Encode(text);\n let out = '';\n for (let i = 0; i < bytes.length; i++) {\n const b = bytes[i] as number;\n const unreserved =\n (b >= 65 && b <= 90) || (b >= 97 && b <= 122) || (b >= 48 && b <= 57) || b === 45 || b === 46 || b === 95 || b === 126;\n out += unreserved ? String.fromCharCode(b) : '%' + HEX.charAt(b >> 4) + HEX.charAt(b & 15);\n }\n return out;\n}\n\n/** Ordinal (UTF-16 code unit) comparison, `StringComparer.Ordinal`. */\nexport function compareOrdinal(a: string, b: string): number {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\n/**\n * Typed, canonicalised subscription parameters (twin of `G9CSyncParameters`). Values are normalised on the way in\n * (GUIDs lower-case, lists sorted and de-duplicated), so two spellings of the same parameters always produce the same\n * subscription key.\n */\nexport class G9SyncParameters {\n private readonly _values: { [name: string]: string } = Object.create(null) as { [name: string]: string };\n private _count = 0;\n\n /** Canonical name → value pairs, names in ordinal order. */\n get values(): { [name: string]: string } {\n const out: { [name: string]: string } = {};\n for (const name of this.names()) out[name] = this._values[name] as string;\n return out;\n }\n\n get count(): number {\n return this._count;\n }\n\n /** Parameter names in ordinal order. */\n names(): string[] {\n return Object.keys(this._values).sort(compareOrdinal);\n }\n\n get(name: string): string | undefined {\n return Object.prototype.hasOwnProperty.call(this._values, name) ? this._values[name] : undefined;\n }\n\n /** A GUID value (canonical lower-case \"D\"). */\n setGuid(name: string, value: string): this {\n return this._set(name, normalizeGuid(value));\n }\n\n /** An integer value (invariant decimal). */\n setInt64(name: string, value: number | G9Long): this {\n return this._set(name, (value instanceof G9Long ? value : G9Long.fromNumber(value)).toString());\n }\n\n /** Same as {@link setInt64} (`Set(string, int)`). */\n setInt32(name: string, value: number): this {\n return this.setInt64(name, value);\n }\n\n setBoolean(name: string, value: boolean): this {\n return this._set(name, value ? 'true' : 'false');\n }\n\n setString(name: string, value: string): this {\n if (typeof value !== 'string') throw new TypeError('A string value is required.');\n return this._set(name, value);\n }\n\n /** A GUID list: canonical texts, distinct, ordinal-sorted, comma-joined. */\n setGuidList(name: string, values: Iterable<string>): this {\n const list = distinctSorted(mapIterable(values, normalizeGuid), compareOrdinal);\n return this._set(name, list.join(','));\n }\n\n /** An integer list: distinct, numerically sorted, comma-joined. */\n setInt64List(name: string, values: Iterable<number | G9Long>): this {\n const longs = mapIterable(values, (v) => (v instanceof G9Long ? v : G9Long.fromNumber(v)));\n longs.sort((a, b) => a.compare(b));\n const out: string[] = [];\n let previous: G9Long | null = null;\n for (const value of longs) {\n if (previous === null || !previous.equals(value)) out.push(value.toString());\n previous = value;\n }\n return this._set(name, out.join(','));\n }\n\n /** A string list: distinct, ordinal-sorted, comma-joined. Values must not contain ','. */\n setStringList(name: string, values: Iterable<string>): this {\n const list = distinctSorted(mapIterable(values, (v) => v), compareOrdinal);\n for (const value of list) {\n if (value.indexOf(',') >= 0) throw new RangeError(\"String list values must not contain ','.\");\n }\n return this._set(name, list.join(','));\n }\n\n /** Builds from wire values (trusted to be canonical only after server validation). */\n static fromValues(values: { [name: string]: string } | Iterable<[string, string]> | null | undefined): G9SyncParameters {\n const result = new G9SyncParameters();\n if (!values) return result;\n if (typeof (values as Iterable<[string, string]>)[Symbol.iterator] === 'function') {\n for (const [name, value] of values as Iterable<[string, string]>) result._set(name, value);\n } else {\n const record = values as { [name: string]: string };\n for (const name of Object.keys(record)) result._set(name, record[name] as string);\n }\n return result;\n }\n\n /** Stable text form `a=1&b=x`: names ordinal-sorted, names and values `Uri.EscapeDataString`-escaped. */\n toCanonicalString(): string {\n const parts: string[] = [];\n for (const name of this.names()) parts.push(escapeDataString(name) + '=' + escapeDataString(this._values[name] as string));\n return parts.join('&');\n }\n\n /** The subscription key: `name`, or `name?canonical-parameters`. */\n static buildSubscriptionKey(subscriptionName: string, parameters?: G9SyncParameters | null): string {\n if (typeof subscriptionName !== 'string' || subscriptionName.trim() === '') throw new TypeError('A subscription name is required.');\n return !parameters || parameters.count === 0 ? subscriptionName : subscriptionName + '?' + parameters.toCanonicalString();\n }\n\n private _set(name: string, value: string): this {\n if (typeof name !== 'string' || name.trim() === '') throw new TypeError('A parameter name is required.');\n if (!Object.prototype.hasOwnProperty.call(this._values, name)) this._count++;\n this._values[name] = value;\n return this;\n }\n}\n\nfunction mapIterable<T, R>(values: Iterable<T>, map: (value: T) => R): R[] {\n const out: R[] = [];\n for (const value of values) out.push(map(value));\n return out;\n}\n\nfunction distinctSorted(values: string[], compare: (a: string, b: string) => number): string[] {\n values.sort(compare);\n const out: string[] = [];\n for (let i = 0; i < values.length; i++) if (i === 0 || values[i] !== values[i - 1]) out.push(values[i] as string);\n return out;\n}\n"]}
1
+ {"version":3,"file":"parameters.js","sourceRoot":"","sources":["../../src/abstractions/parameters.ts"],"names":[],"mappings":"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","sourcesContent":["import { utf8Encode } from '../internal/utf8.js';\r\nimport { normalizeGuid } from './guid.js';\r\nimport { G9Long } from './long.js';\r\n\r\nconst UNRESERVED = /^[A-Za-z0-9\\-._~]*$/;\r\nconst HEX = '0123456789ABCDEF';\r\n\r\n/**\r\n * `Uri.EscapeDataString`: every character except the RFC 3986 unreserved set (`A-Z a-z 0-9 - . _ ~`) as `%XX` of its\r\n * UTF-8 bytes, upper-case hex; a lone surrogate becomes U+FFFD. (`encodeURIComponent` differs: it keeps `!'()*` and\r\n * throws on lone surrogates.)\r\n */\r\nexport function escapeDataString(text: string): string {\r\n if (UNRESERVED.test(text)) return text;\r\n const bytes = utf8Encode(text);\r\n let out = '';\r\n for (let i = 0; i < bytes.length; i++) {\r\n const b = bytes[i] as number;\r\n const unreserved =\r\n (b >= 65 && b <= 90) || (b >= 97 && b <= 122) || (b >= 48 && b <= 57) || b === 45 || b === 46 || b === 95 || b === 126;\r\n out += unreserved ? String.fromCharCode(b) : '%' + HEX.charAt(b >> 4) + HEX.charAt(b & 15);\r\n }\r\n return out;\r\n}\r\n\r\n/** Ordinal (UTF-16 code unit) comparison, `StringComparer.Ordinal`. */\r\nexport function compareOrdinal(a: string, b: string): number {\r\n return a < b ? -1 : a > b ? 1 : 0;\r\n}\r\n\r\n/**\r\n * Typed, canonicalised subscription parameters (twin of `G9CSyncParameters`). Values are normalised on the way in\r\n * (GUIDs lower-case, lists sorted and de-duplicated), so two spellings of the same parameters always produce the same\r\n * subscription key.\r\n */\r\nexport class G9SyncParameters {\r\n private readonly _values: { [name: string]: string } = Object.create(null) as { [name: string]: string };\r\n private _count = 0;\r\n\r\n /** Canonical name → value pairs, names in ordinal order. */\r\n get values(): { [name: string]: string } {\r\n const out: { [name: string]: string } = {};\r\n for (const name of this.names()) out[name] = this._values[name] as string;\r\n return out;\r\n }\r\n\r\n get count(): number {\r\n return this._count;\r\n }\r\n\r\n /** Parameter names in ordinal order. */\r\n names(): string[] {\r\n return Object.keys(this._values).sort(compareOrdinal);\r\n }\r\n\r\n get(name: string): string | undefined {\r\n return Object.prototype.hasOwnProperty.call(this._values, name) ? this._values[name] : undefined;\r\n }\r\n\r\n /** A GUID value (canonical lower-case \"D\"). */\r\n setGuid(name: string, value: string): this {\r\n return this._set(name, normalizeGuid(value));\r\n }\r\n\r\n /** An integer value (invariant decimal). */\r\n setInt64(name: string, value: number | G9Long): this {\r\n return this._set(name, (value instanceof G9Long ? value : G9Long.fromNumber(value)).toString());\r\n }\r\n\r\n /** Same as {@link setInt64} (`Set(string, int)`). */\r\n setInt32(name: string, value: number): this {\r\n return this.setInt64(name, value);\r\n }\r\n\r\n setBoolean(name: string, value: boolean): this {\r\n return this._set(name, value ? 'true' : 'false');\r\n }\r\n\r\n setString(name: string, value: string): this {\r\n if (typeof value !== 'string') throw new TypeError('A string value is required.');\r\n return this._set(name, value);\r\n }\r\n\r\n /** A GUID list: canonical texts, distinct, ordinal-sorted, comma-joined. */\r\n setGuidList(name: string, values: Iterable<string>): this {\r\n const list = distinctSorted(mapIterable(values, normalizeGuid), compareOrdinal);\r\n return this._set(name, list.join(','));\r\n }\r\n\r\n /** An integer list: distinct, numerically sorted, comma-joined. */\r\n setInt64List(name: string, values: Iterable<number | G9Long>): this {\r\n const longs = mapIterable(values, (v) => (v instanceof G9Long ? v : G9Long.fromNumber(v)));\r\n longs.sort((a, b) => a.compare(b));\r\n const out: string[] = [];\r\n let previous: G9Long | null = null;\r\n for (const value of longs) {\r\n if (previous === null || !previous.equals(value)) out.push(value.toString());\r\n previous = value;\r\n }\r\n return this._set(name, out.join(','));\r\n }\r\n\r\n /** A string list: distinct, ordinal-sorted, comma-joined. Values must not contain ','. */\r\n setStringList(name: string, values: Iterable<string>): this {\r\n const list = distinctSorted(mapIterable(values, (v) => v), compareOrdinal);\r\n for (const value of list) {\r\n if (value.indexOf(',') >= 0) throw new RangeError(\"String list values must not contain ','.\");\r\n }\r\n return this._set(name, list.join(','));\r\n }\r\n\r\n /** Builds from wire values (trusted to be canonical only after server validation). */\r\n static fromValues(values: { [name: string]: string } | Iterable<[string, string]> | null | undefined): G9SyncParameters {\r\n const result = new G9SyncParameters();\r\n if (!values) return result;\r\n if (typeof (values as Iterable<[string, string]>)[Symbol.iterator] === 'function') {\r\n for (const [name, value] of values as Iterable<[string, string]>) result._set(name, value);\r\n } else {\r\n const record = values as { [name: string]: string };\r\n for (const name of Object.keys(record)) result._set(name, record[name] as string);\r\n }\r\n return result;\r\n }\r\n\r\n /** Stable text form `a=1&b=x`: names ordinal-sorted, names and values `Uri.EscapeDataString`-escaped. */\r\n toCanonicalString(): string {\r\n const parts: string[] = [];\r\n for (const name of this.names()) parts.push(escapeDataString(name) + '=' + escapeDataString(this._values[name] as string));\r\n return parts.join('&');\r\n }\r\n\r\n /** The subscription key: `name`, or `name?canonical-parameters`. */\r\n static buildSubscriptionKey(subscriptionName: string, parameters?: G9SyncParameters | null): string {\r\n if (typeof subscriptionName !== 'string' || subscriptionName.trim() === '') throw new TypeError('A subscription name is required.');\r\n return !parameters || parameters.count === 0 ? subscriptionName : subscriptionName + '?' + parameters.toCanonicalString();\r\n }\r\n\r\n private _set(name: string, value: string): this {\r\n if (typeof name !== 'string' || name.trim() === '') throw new TypeError('A parameter name is required.');\r\n if (!Object.prototype.hasOwnProperty.call(this._values, name)) this._count++;\r\n this._values[name] = value;\r\n return this;\r\n }\r\n}\r\n\r\nfunction mapIterable<T, R>(values: Iterable<T>, map: (value: T) => R): R[] {\r\n const out: R[] = [];\r\n for (const value of values) out.push(map(value));\r\n return out;\r\n}\r\n\r\nfunction distinctSorted(values: string[], compare: (a: string, b: string) => number): string[] {\r\n values.sort(compare);\r\n const out: string[] = [];\r\n for (let i = 0; i < values.length; i++) if (i === 0 || values[i] !== values[i - 1]) out.push(values[i] as string);\r\n return out;\r\n}\r\n"]}