t3code-cli 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/README.md +87 -1
  2. package/dist/application.d.ts +2 -0
  3. package/dist/application.js +1 -1
  4. package/dist/auth.d.ts +50 -0
  5. package/dist/auth.js +1 -1
  6. package/dist/bin.d.ts +1 -0
  7. package/dist/bin.js +348 -603
  8. package/dist/cli.d.ts +66 -0
  9. package/dist/cli.js +1 -1
  10. package/dist/client-runtime/authorization.d.ts +2 -0
  11. package/dist/client-runtime/authorization.js +2 -0
  12. package/dist/client-runtime/connection.d.ts +2 -0
  13. package/dist/client-runtime/connection.js +2 -0
  14. package/dist/client-runtime/environment.d.ts +57 -0
  15. package/dist/client-runtime/environment.js +2 -0
  16. package/dist/client-runtime/errors.d.ts +28 -0
  17. package/dist/client-runtime/errors.js +35 -0
  18. package/dist/client-runtime/operations/projects.d.ts +2 -0
  19. package/dist/client-runtime/operations/projects.js +2 -0
  20. package/dist/client-runtime/operations.d.ts +2 -0
  21. package/dist/client-runtime/operations.js +2 -0
  22. package/dist/client-runtime/platform.d.ts +26 -0
  23. package/dist/client-runtime/platform.js +74 -0
  24. package/dist/client-runtime/relay.d.ts +121 -0
  25. package/dist/client-runtime/relay.js +245 -0
  26. package/dist/client-runtime/rpc.d.ts +2 -0
  27. package/dist/client-runtime/rpc.js +2 -0
  28. package/dist/client-runtime/state/assets.d.ts +40 -0
  29. package/dist/client-runtime/state/assets.js +53 -0
  30. package/dist/client-runtime/state/auth.d.ts +98 -0
  31. package/dist/client-runtime/state/auth.js +48 -0
  32. package/dist/client-runtime/state/connections.d.ts +2 -0
  33. package/dist/client-runtime/state/connections.js +52 -0
  34. package/dist/client-runtime/state/entities.d.ts +33 -0
  35. package/dist/client-runtime/state/entities.js +2 -0
  36. package/dist/client-runtime/state/filesystem.d.ts +42 -0
  37. package/dist/client-runtime/state/filesystem.js +48 -0
  38. package/dist/client-runtime/state/git.d.ts +43 -0
  39. package/dist/client-runtime/state/git.js +18 -0
  40. package/dist/client-runtime/state/models.d.ts +2 -0
  41. package/dist/client-runtime/state/models.js +2 -0
  42. package/dist/client-runtime/state/orchestration.d.ts +128 -0
  43. package/dist/client-runtime/state/orchestration.js +20 -0
  44. package/dist/client-runtime/state/presentation.d.ts +277 -0
  45. package/dist/client-runtime/state/presentation.js +34 -0
  46. package/dist/client-runtime/state/preview.d.ts +447 -0
  47. package/dist/client-runtime/state/preview.js +103 -0
  48. package/dist/client-runtime/state/project-grouping.d.ts +26 -0
  49. package/dist/client-runtime/state/project-grouping.js +73 -0
  50. package/dist/client-runtime/state/projects.d.ts +192 -0
  51. package/dist/client-runtime/state/projects.js +2 -0
  52. package/dist/client-runtime/state/relay.d.ts +10 -0
  53. package/dist/client-runtime/state/relay.js +19 -0
  54. package/dist/client-runtime/state/review.d.ts +28 -0
  55. package/dist/client-runtime/state/review.js +11 -0
  56. package/dist/client-runtime/state/runtime.d.ts +2 -0
  57. package/dist/client-runtime/state/runtime.js +2 -0
  58. package/dist/client-runtime/state/server.d.ts +1495 -0
  59. package/dist/client-runtime/state/server.js +207 -0
  60. package/dist/client-runtime/state/session.d.ts +532 -0
  61. package/dist/client-runtime/state/session.js +21 -0
  62. package/dist/client-runtime/state/shell.d.ts +529 -0
  63. package/dist/client-runtime/state/shell.js +2 -0
  64. package/dist/client-runtime/state/source-control.d.ts +92 -0
  65. package/dist/client-runtime/state/source-control.js +36 -0
  66. package/dist/client-runtime/state/terminal.d.ts +237 -0
  67. package/dist/client-runtime/state/terminal.js +173 -0
  68. package/dist/client-runtime/state/thread-settled.d.ts +104 -0
  69. package/dist/client-runtime/state/thread-settled.js +157 -0
  70. package/dist/client-runtime/state/thread-sort.d.ts +23 -0
  71. package/dist/client-runtime/state/thread-sort.js +47 -0
  72. package/dist/client-runtime/state/threads.d.ts +538 -0
  73. package/dist/client-runtime/state/threads.js +934 -0
  74. package/dist/client-runtime/state/vcs.d.ts +442 -0
  75. package/dist/client-runtime/state/vcs.js +756 -0
  76. package/dist/config.d.ts +84 -0
  77. package/dist/config.js +1 -1
  78. package/dist/connection.d.ts +7 -0
  79. package/dist/connection.js +1 -1
  80. package/dist/contracts.d.ts +2 -0
  81. package/dist/contracts.js +2 -1
  82. package/dist/index.d.ts +2 -0
  83. package/dist/index.js +1 -1
  84. package/dist/node.d.ts +6 -0
  85. package/dist/node.js +1 -1
  86. package/dist/orchestration.d.ts +1420 -0
  87. package/dist/orchestration.js +1 -1
  88. package/dist/preview.d.ts +2 -0
  89. package/dist/preview.js +2 -0
  90. package/dist/rpc.d.ts +6043 -0
  91. package/dist/rpc.js +1 -1
  92. package/dist/runtime.d.ts +2 -0
  93. package/dist/runtime.js +2 -2
  94. package/dist/shared/DrainableWorker.d.ts +28 -0
  95. package/dist/shared/DrainableWorker.js +24 -0
  96. package/dist/shared/KeyedCoalescingWorker.d.ts +13 -0
  97. package/dist/shared/KeyedCoalescingWorker.js +89 -0
  98. package/dist/shared/Net.d.ts +43 -0
  99. package/dist/shared/Net.js +126 -0
  100. package/dist/shared/String.d.ts +4 -0
  101. package/dist/shared/String.js +8 -0
  102. package/dist/shared/Struct.d.ts +5 -0
  103. package/dist/shared/Struct.js +2 -0
  104. package/dist/shared/advertisedEndpoint.d.ts +2 -0
  105. package/dist/shared/advertisedEndpoint.js +2 -0
  106. package/dist/shared/agentAwareness.d.ts +27 -0
  107. package/dist/shared/agentAwareness.js +54 -0
  108. package/dist/shared/backgroundActivitySettings.d.ts +23 -0
  109. package/dist/shared/backgroundActivitySettings.js +2 -0
  110. package/dist/shared/chatList.d.ts +12 -0
  111. package/dist/shared/chatList.js +14 -0
  112. package/dist/shared/cliArgs.d.ts +33 -0
  113. package/dist/shared/cliArgs.js +103 -0
  114. package/dist/shared/composerInlineTokens.d.ts +20 -0
  115. package/dist/shared/composerInlineTokens.js +72 -0
  116. package/dist/shared/composerTrigger.d.ts +26 -0
  117. package/dist/shared/composerTrigger.js +97 -0
  118. package/dist/shared/connectAuth.d.ts +58 -0
  119. package/dist/shared/connectAuth.js +89 -0
  120. package/dist/shared/devHome.d.ts +21 -0
  121. package/dist/shared/devHome.js +65 -0
  122. package/dist/shared/devProxy.d.ts +15 -0
  123. package/dist/shared/devProxy.js +22 -0
  124. package/dist/shared/dpop.d.ts +32 -0
  125. package/dist/shared/dpop.js +2724 -0
  126. package/dist/shared/dpopCommon.d.ts +2 -0
  127. package/dist/shared/dpopCommon.js +2 -0
  128. package/dist/shared/filePreview.d.ts +8 -0
  129. package/dist/shared/filePreview.js +31 -0
  130. package/dist/shared/git.d.ts +41 -0
  131. package/dist/shared/git.js +2 -0
  132. package/dist/shared/hostProcess.d.ts +13 -0
  133. package/dist/shared/hostProcess.js +2 -0
  134. package/dist/shared/httpObservability.d.ts +5 -0
  135. package/dist/shared/httpObservability.js +2 -0
  136. package/dist/shared/httpReadiness.d.ts +38 -0
  137. package/dist/shared/httpReadiness.js +110 -0
  138. package/dist/shared/keybindings.d.ts +35 -0
  139. package/dist/shared/keybindings.js +330 -0
  140. package/dist/shared/logging.d.ts +39 -0
  141. package/dist/shared/logging.js +2 -0
  142. package/dist/shared/model.d.ts +44 -0
  143. package/dist/shared/model.js +2 -0
  144. package/dist/shared/oauthScope.d.ts +23 -0
  145. package/dist/shared/oauthScope.js +2 -0
  146. package/dist/shared/observability.d.ts +105 -0
  147. package/dist/shared/observability.js +346 -0
  148. package/dist/shared/orchestrationTiming.d.ts +16 -0
  149. package/dist/shared/orchestrationTiming.js +32 -0
  150. package/dist/shared/path.d.ts +2 -0
  151. package/dist/shared/path.js +2 -0
  152. package/dist/shared/preview.d.ts +35 -0
  153. package/dist/shared/preview.js +103 -0
  154. package/dist/shared/previewViewport.d.ts +16 -0
  155. package/dist/shared/previewViewport.js +159 -0
  156. package/dist/shared/projectFavicon.d.ts +5 -0
  157. package/dist/shared/projectFavicon.js +13 -0
  158. package/dist/shared/projectScripts.d.ts +19 -0
  159. package/dist/shared/projectScripts.js +18 -0
  160. package/dist/shared/qrCode.d.ts +87 -0
  161. package/dist/shared/qrCode.js +870 -0
  162. package/dist/shared/relayAuth.d.ts +27 -0
  163. package/dist/shared/relayAuth.js +83 -0
  164. package/dist/shared/relayClient.d.ts +58 -0
  165. package/dist/shared/relayClient.js +245 -0
  166. package/dist/shared/relayJwt.d.ts +39 -0
  167. package/dist/shared/relayJwt.js +2 -0
  168. package/dist/shared/relaySigning.d.ts +4 -0
  169. package/dist/shared/relaySigning.js +2 -0
  170. package/dist/shared/relayTracing.d.ts +25 -0
  171. package/dist/shared/relayTracing.js +2 -0
  172. package/dist/shared/relayUrl.d.ts +5 -0
  173. package/dist/shared/relayUrl.js +2 -0
  174. package/dist/shared/remote.d.ts +57 -0
  175. package/dist/shared/remote.js +2 -0
  176. package/dist/shared/schemaJson.d.ts +35 -0
  177. package/dist/shared/schemaJson.js +2 -0
  178. package/dist/shared/schemaYaml.d.ts +86 -0
  179. package/dist/shared/schemaYaml.js +99 -0
  180. package/dist/shared/searchRanking.d.ts +30 -0
  181. package/dist/shared/searchRanking.js +99 -0
  182. package/dist/shared/semver.d.ts +23 -0
  183. package/dist/shared/semver.js +124 -0
  184. package/dist/shared/serverSettings.d.ts +19 -0
  185. package/dist/shared/serverSettings.js +103 -0
  186. package/dist/shared/shell.d.ts +51 -0
  187. package/dist/shared/shell.js +408 -0
  188. package/dist/shared/sourceControl.d.ts +26 -0
  189. package/dist/shared/sourceControl.js +2 -0
  190. package/dist/shared/t3ProjectFile.d.ts +27 -0
  191. package/dist/shared/t3ProjectFile.js +25 -0
  192. package/dist/shared/terminalLabels.d.ts +16 -0
  193. package/dist/shared/terminalLabels.js +28 -0
  194. package/dist/shared/toolActivity.d.ts +16 -0
  195. package/dist/shared/toolActivity.js +159 -0
  196. package/dist/shared.d.ts +43036 -0
  197. package/dist/shared.js +25428 -12277
  198. package/dist/t3tools.d.ts +2 -0
  199. package/dist/t3tools.js +1 -1
  200. package/package.json +39 -21
  201. package/src/auth/index.ts +2 -0
  202. package/src/auth/pairing.ts +8 -5
  203. package/src/auth/service.ts +2 -1
  204. package/src/auth/transport.ts +4 -0
  205. package/src/auth/type.ts +6 -0
  206. package/src/cli/auth.ts +7 -1
  207. package/src/contracts/index.ts +8 -0
  208. package/src/orchestration/layer.ts +36 -0
  209. package/src/orchestration/service.ts +5 -0
  210. package/src/preview/index.ts +11 -0
  211. package/src/preview/service.ts +52 -0
  212. package/src/rpc/error.ts +2 -0
  213. package/src/rpc/layer.ts +5 -4
  214. package/src/rpc/operation.ts +5 -4
  215. package/src/rpc/ws-group.ts +6 -0
  216. package/src/runtime/index.ts +1 -0
  217. package/src/runtime/layer.ts +5 -0
  218. package/src/sql/node-sqlite-client.ts +3 -0
  219. package/dist/src/application/actions.d.ts +0 -25
  220. package/dist/src/application/error.d.ts +0 -3
  221. package/dist/src/application/index.d.ts +0 -4
  222. package/dist/src/application/layer.d.ts +0 -117
  223. package/dist/src/application/model-selection.d.ts +0 -34
  224. package/dist/src/application/models.d.ts +0 -8
  225. package/dist/src/application/project-commands.d.ts +0 -44
  226. package/dist/src/application/projects.d.ts +0 -23
  227. package/dist/src/application/service.d.ts +0 -243
  228. package/dist/src/application/shell-sequence.d.ts +0 -96
  229. package/dist/src/application/terminals.d.ts +0 -66
  230. package/dist/src/application/thread-commands.d.ts +0 -157
  231. package/dist/src/application/thread-update.d.ts +0 -8
  232. package/dist/src/application/thread-wait.d.ts +0 -106
  233. package/dist/src/application/threads.d.ts +0 -660
  234. package/dist/src/auth/error.d.ts +0 -50
  235. package/dist/src/auth/index.d.ts +0 -10
  236. package/dist/src/auth/layer.d.ts +0 -53
  237. package/dist/src/auth/local-base-dir.d.ts +0 -8
  238. package/dist/src/auth/local-origin.d.ts +0 -18
  239. package/dist/src/auth/local-token.d.ts +0 -26
  240. package/dist/src/auth/local.d.ts +0 -24
  241. package/dist/src/auth/pairing.d.ts +0 -22
  242. package/dist/src/auth/remote-error.d.ts +0 -3
  243. package/dist/src/auth/schema.d.ts +0 -58
  244. package/dist/src/auth/service.d.ts +0 -27
  245. package/dist/src/auth/transport.d.ts +0 -22
  246. package/dist/src/auth/type.d.ts +0 -83
  247. package/dist/src/cli/env/flag.d.ts +0 -2
  248. package/dist/src/cli/env/index.d.ts +0 -2
  249. package/dist/src/cli/env/selection-layer.d.ts +0 -3
  250. package/dist/src/cli/flags.d.ts +0 -20
  251. package/dist/src/cli/format/index.d.ts +0 -1
  252. package/dist/src/cli/format/output.d.ts +0 -12
  253. package/dist/src/cli/index.d.ts +0 -5
  254. package/dist/src/cli/runtime/index.d.ts +0 -1
  255. package/dist/src/cli/runtime/service.d.ts +0 -16
  256. package/dist/src/cli/scope/index.d.ts +0 -1
  257. package/dist/src/cli/scope/resolve.d.ts +0 -20
  258. package/dist/src/cli-path/layer.d.ts +0 -3
  259. package/dist/src/cli-path/service.d.ts +0 -8
  260. package/dist/src/config/config.d.ts +0 -49
  261. package/dist/src/config/credential/cipher-node.d.ts +0 -3
  262. package/dist/src/config/credential/cipher-web.d.ts +0 -3
  263. package/dist/src/config/credential/cipher.d.ts +0 -29
  264. package/dist/src/config/credential/env.d.ts +0 -3
  265. package/dist/src/config/credential/error.d.ts +0 -8
  266. package/dist/src/config/credential/index.d.ts +0 -6
  267. package/dist/src/config/credential/service.d.ts +0 -34
  268. package/dist/src/config/env/env.d.ts +0 -55
  269. package/dist/src/config/env/index.d.ts +0 -2
  270. package/dist/src/config/env/layout.d.ts +0 -11
  271. package/dist/src/config/environment-name/index.d.ts +0 -1
  272. package/dist/src/config/environment-name/name.d.ts +0 -10
  273. package/dist/src/config/error.d.ts +0 -11
  274. package/dist/src/config/index.d.ts +0 -10
  275. package/dist/src/config/keystore/error.d.ts +0 -8
  276. package/dist/src/config/keystore/file.d.ts +0 -9
  277. package/dist/src/config/keystore/index.d.ts +0 -4
  278. package/dist/src/config/keystore/keyring-node.d.ts +0 -4
  279. package/dist/src/config/keystore/service.d.ts +0 -33
  280. package/dist/src/config/paths/index.d.ts +0 -1
  281. package/dist/src/config/paths/paths.d.ts +0 -6
  282. package/dist/src/config/persist/file-mode.d.ts +0 -4
  283. package/dist/src/config/persist/migration.d.ts +0 -68
  284. package/dist/src/config/persist/persist.d.ts +0 -40
  285. package/dist/src/config/persist/schema.d.ts +0 -68
  286. package/dist/src/config/resolve/resolve.d.ts +0 -40
  287. package/dist/src/config/selection/index.d.ts +0 -1
  288. package/dist/src/config/selection/resolve.d.ts +0 -4
  289. package/dist/src/config/selection/service.d.ts +0 -10
  290. package/dist/src/config/types.d.ts +0 -36
  291. package/dist/src/config/url/error.d.ts +0 -10
  292. package/dist/src/config/url/index.d.ts +0 -2
  293. package/dist/src/config/url/url.d.ts +0 -6
  294. package/dist/src/connection/error.d.ts +0 -10
  295. package/dist/src/connection/index.d.ts +0 -4
  296. package/dist/src/connection/layer.d.ts +0 -3
  297. package/dist/src/connection/prepared.d.ts +0 -14
  298. package/dist/src/connection/service.d.ts +0 -13
  299. package/dist/src/connection/type.d.ts +0 -10
  300. package/dist/src/contracts/index.d.ts +0 -1
  301. package/dist/src/domain/error.d.ts +0 -57
  302. package/dist/src/domain/helpers.d.ts +0 -179
  303. package/dist/src/domain/model-config.d.ts +0 -330
  304. package/dist/src/domain/thread-activities.d.ts +0 -14
  305. package/dist/src/domain/thread-lifecycle.d.ts +0 -120
  306. package/dist/src/index.d.ts +0 -3
  307. package/dist/src/node/connection.d.ts +0 -2
  308. package/dist/src/node/index.d.ts +0 -1
  309. package/dist/src/orchestration/index.d.ts +0 -2
  310. package/dist/src/orchestration/layer.d.ts +0 -1419
  311. package/dist/src/orchestration/service.d.ts +0 -28
  312. package/dist/src/rpc/error.d.ts +0 -16
  313. package/dist/src/rpc/index.d.ts +0 -6
  314. package/dist/src/rpc/layer.d.ts +0 -5862
  315. package/dist/src/rpc/operation.d.ts +0 -24
  316. package/dist/src/rpc/service.d.ts +0 -15
  317. package/dist/src/rpc/session.d.ts +0 -22
  318. package/dist/src/rpc/ws-group.d.ts +0 -1984
  319. package/dist/src/runtime/index.d.ts +0 -1
  320. package/dist/src/runtime/layer.d.ts +0 -15
  321. package/dist/src/sql/node-sqlite-client.d.ts +0 -10
  322. package/dist/src/sql/service.d.ts +0 -17
  323. package/dist/src/t3tools/index.d.ts +0 -1
@@ -0,0 +1,870 @@
1
+ //#region upstream-t3code/packages/shared/src/qrCode.ts
2
+ var QrCode = class QrCode {
3
+ static Ecc;
4
+ static encodeText(text, ecl) {
5
+ const segs = QrSegment.makeSegments(text);
6
+ return QrCode.encodeSegments(segs, ecl);
7
+ }
8
+ static encodeBinary(data, ecl) {
9
+ const seg = QrSegment.makeBytes(data);
10
+ return QrCode.encodeSegments([seg], ecl);
11
+ }
12
+ static encodeSegments(segs, ecl, minVersion = 1, maxVersion = 40, mask = -1, boostEcl = true) {
13
+ if (!(QrCode.MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= QrCode.MAX_VERSION) || mask < -1 || mask > 7) throw new RangeError("Invalid value");
14
+ let version;
15
+ let dataUsedBits;
16
+ for (version = minVersion;; version++) {
17
+ const dataCapacityBits = QrCode.getNumDataCodewords(version, ecl) * 8;
18
+ const usedBits = QrSegment.getTotalBits(segs, version);
19
+ if (usedBits <= dataCapacityBits) {
20
+ dataUsedBits = usedBits;
21
+ break;
22
+ }
23
+ if (version >= maxVersion) throw new RangeError("Data too long");
24
+ }
25
+ for (const newEcl of [
26
+ QrCode.Ecc.MEDIUM,
27
+ QrCode.Ecc.QUARTILE,
28
+ QrCode.Ecc.HIGH
29
+ ]) if (boostEcl && dataUsedBits <= QrCode.getNumDataCodewords(version, newEcl) * 8) ecl = newEcl;
30
+ let bb = [];
31
+ for (const seg of segs) {
32
+ appendBits(seg.mode.modeBits, 4, bb);
33
+ appendBits(seg.numChars, seg.mode.numCharCountBits(version), bb);
34
+ for (const b of seg.getData()) bb.push(b);
35
+ }
36
+ assert(bb.length == dataUsedBits);
37
+ const dataCapacityBits = QrCode.getNumDataCodewords(version, ecl) * 8;
38
+ assert(bb.length <= dataCapacityBits);
39
+ appendBits(0, Math.min(4, dataCapacityBits - bb.length), bb);
40
+ appendBits(0, (8 - bb.length % 8) % 8, bb);
41
+ assert(bb.length % 8 == 0);
42
+ for (let padByte = 236; bb.length < dataCapacityBits; padByte ^= 253) appendBits(padByte, 8, bb);
43
+ let dataCodewords = [];
44
+ while (dataCodewords.length * 8 < bb.length) dataCodewords.push(0);
45
+ bb.forEach((b, i) => dataCodewords[i >>> 3] |= b << 7 - (i & 7));
46
+ return new QrCode(version, ecl, dataCodewords, mask);
47
+ }
48
+ version;
49
+ errorCorrectionLevel;
50
+ size;
51
+ mask;
52
+ modules = [];
53
+ isFunction = [];
54
+ constructor(version, errorCorrectionLevel, dataCodewords, msk) {
55
+ this.version = version;
56
+ this.errorCorrectionLevel = errorCorrectionLevel;
57
+ if (version < QrCode.MIN_VERSION || version > QrCode.MAX_VERSION) throw new RangeError("Version value out of range");
58
+ if (msk < -1 || msk > 7) throw new RangeError("Mask value out of range");
59
+ this.size = version * 4 + 17;
60
+ let row = [];
61
+ for (let i = 0; i < this.size; i++) row.push(false);
62
+ for (let i = 0; i < this.size; i++) {
63
+ this.modules.push(row.slice());
64
+ this.isFunction.push(row.slice());
65
+ }
66
+ this.drawFunctionPatterns();
67
+ const allCodewords = this.addEccAndInterleave(dataCodewords);
68
+ this.drawCodewords(allCodewords);
69
+ if (msk == -1) {
70
+ let minPenalty = 1e9;
71
+ for (let i = 0; i < 8; i++) {
72
+ this.applyMask(i);
73
+ this.drawFormatBits(i);
74
+ const penalty = this.getPenaltyScore();
75
+ if (penalty < minPenalty) {
76
+ msk = i;
77
+ minPenalty = penalty;
78
+ }
79
+ this.applyMask(i);
80
+ }
81
+ }
82
+ assert(0 <= msk && msk <= 7);
83
+ this.mask = msk;
84
+ this.applyMask(msk);
85
+ this.drawFormatBits(msk);
86
+ this.isFunction = [];
87
+ }
88
+ getModule(x, y) {
89
+ return 0 <= x && x < this.size && 0 <= y && y < this.size && this.modules[y][x];
90
+ }
91
+ drawFunctionPatterns() {
92
+ for (let i = 0; i < this.size; i++) {
93
+ this.setFunctionModule(6, i, i % 2 == 0);
94
+ this.setFunctionModule(i, 6, i % 2 == 0);
95
+ }
96
+ this.drawFinderPattern(3, 3);
97
+ this.drawFinderPattern(this.size - 4, 3);
98
+ this.drawFinderPattern(3, this.size - 4);
99
+ const alignPatPos = this.getAlignmentPatternPositions();
100
+ const numAlign = alignPatPos.length;
101
+ for (let i = 0; i < numAlign; i++) for (let j = 0; j < numAlign; j++) if (!(i == 0 && j == 0 || i == 0 && j == numAlign - 1 || i == numAlign - 1 && j == 0)) this.drawAlignmentPattern(alignPatPos[i], alignPatPos[j]);
102
+ this.drawFormatBits(0);
103
+ this.drawVersion();
104
+ }
105
+ drawFormatBits(mask) {
106
+ const data = this.errorCorrectionLevel.formatBits << 3 | mask;
107
+ let rem = data;
108
+ for (let i = 0; i < 10; i++) rem = rem << 1 ^ (rem >>> 9) * 1335;
109
+ const bits = (data << 10 | rem) ^ 21522;
110
+ assert(bits >>> 15 == 0);
111
+ for (let i = 0; i <= 5; i++) this.setFunctionModule(8, i, getBit(bits, i));
112
+ this.setFunctionModule(8, 7, getBit(bits, 6));
113
+ this.setFunctionModule(8, 8, getBit(bits, 7));
114
+ this.setFunctionModule(7, 8, getBit(bits, 8));
115
+ for (let i = 9; i < 15; i++) this.setFunctionModule(14 - i, 8, getBit(bits, i));
116
+ for (let i = 0; i < 8; i++) this.setFunctionModule(this.size - 1 - i, 8, getBit(bits, i));
117
+ for (let i = 8; i < 15; i++) this.setFunctionModule(8, this.size - 15 + i, getBit(bits, i));
118
+ this.setFunctionModule(8, this.size - 8, true);
119
+ }
120
+ drawVersion() {
121
+ if (this.version < 7) return;
122
+ let rem = this.version;
123
+ for (let i = 0; i < 12; i++) rem = rem << 1 ^ (rem >>> 11) * 7973;
124
+ const bits = this.version << 12 | rem;
125
+ assert(bits >>> 18 == 0);
126
+ for (let i = 0; i < 18; i++) {
127
+ const color = getBit(bits, i);
128
+ const a = this.size - 11 + i % 3;
129
+ const b = Math.floor(i / 3);
130
+ this.setFunctionModule(a, b, color);
131
+ this.setFunctionModule(b, a, color);
132
+ }
133
+ }
134
+ drawFinderPattern(x, y) {
135
+ for (let dy = -4; dy <= 4; dy++) for (let dx = -4; dx <= 4; dx++) {
136
+ const dist = Math.max(Math.abs(dx), Math.abs(dy));
137
+ const xx = x + dx;
138
+ const yy = y + dy;
139
+ if (0 <= xx && xx < this.size && 0 <= yy && yy < this.size) this.setFunctionModule(xx, yy, dist != 2 && dist != 4);
140
+ }
141
+ }
142
+ drawAlignmentPattern(x, y) {
143
+ for (let dy = -2; dy <= 2; dy++) for (let dx = -2; dx <= 2; dx++) this.setFunctionModule(x + dx, y + dy, Math.max(Math.abs(dx), Math.abs(dy)) != 1);
144
+ }
145
+ setFunctionModule(x, y, isDark) {
146
+ this.modules[y][x] = isDark;
147
+ this.isFunction[y][x] = true;
148
+ }
149
+ addEccAndInterleave(data) {
150
+ const ver = this.version;
151
+ const ecl = this.errorCorrectionLevel;
152
+ if (data.length != QrCode.getNumDataCodewords(ver, ecl)) throw new RangeError("Invalid argument");
153
+ const numBlocks = QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];
154
+ const blockEccLen = QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver];
155
+ const rawCodewords = Math.floor(QrCode.getNumRawDataModules(ver) / 8);
156
+ const numShortBlocks = numBlocks - rawCodewords % numBlocks;
157
+ const shortBlockLen = Math.floor(rawCodewords / numBlocks);
158
+ let blocks = [];
159
+ const rsDiv = QrCode.reedSolomonComputeDivisor(blockEccLen);
160
+ for (let i = 0, k = 0; i < numBlocks; i++) {
161
+ let dat = data.slice(k, k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1));
162
+ k += dat.length;
163
+ const ecc = QrCode.reedSolomonComputeRemainder(dat, rsDiv);
164
+ if (i < numShortBlocks) dat.push(0);
165
+ blocks.push(dat.concat(ecc));
166
+ }
167
+ let result = [];
168
+ for (let i = 0; i < blocks[0].length; i++) blocks.forEach((block, j) => {
169
+ if (i != shortBlockLen - blockEccLen || j >= numShortBlocks) result.push(block[i]);
170
+ });
171
+ assert(result.length == rawCodewords);
172
+ return result;
173
+ }
174
+ drawCodewords(data) {
175
+ if (data.length != Math.floor(QrCode.getNumRawDataModules(this.version) / 8)) throw new RangeError("Invalid argument");
176
+ let i = 0;
177
+ for (let right = this.size - 1; right >= 1; right -= 2) {
178
+ if (right == 6) right = 5;
179
+ for (let vert = 0; vert < this.size; vert++) for (let j = 0; j < 2; j++) {
180
+ const x = right - j;
181
+ const y = (right + 1 & 2) == 0 ? this.size - 1 - vert : vert;
182
+ if (!this.isFunction[y][x] && i < data.length * 8) {
183
+ this.modules[y][x] = getBit(data[i >>> 3], 7 - (i & 7));
184
+ i++;
185
+ }
186
+ }
187
+ }
188
+ assert(i == data.length * 8);
189
+ }
190
+ applyMask(mask) {
191
+ if (mask < 0 || mask > 7) throw new RangeError("Mask value out of range");
192
+ for (let y = 0; y < this.size; y++) for (let x = 0; x < this.size; x++) {
193
+ let invert;
194
+ switch (mask) {
195
+ case 0:
196
+ invert = (x + y) % 2 == 0;
197
+ break;
198
+ case 1:
199
+ invert = y % 2 == 0;
200
+ break;
201
+ case 2:
202
+ invert = x % 3 == 0;
203
+ break;
204
+ case 3:
205
+ invert = (x + y) % 3 == 0;
206
+ break;
207
+ case 4:
208
+ invert = (Math.floor(x / 3) + Math.floor(y / 2)) % 2 == 0;
209
+ break;
210
+ case 5:
211
+ invert = x * y % 2 + x * y % 3 == 0;
212
+ break;
213
+ case 6:
214
+ invert = (x * y % 2 + x * y % 3) % 2 == 0;
215
+ break;
216
+ case 7:
217
+ invert = ((x + y) % 2 + x * y % 3) % 2 == 0;
218
+ break;
219
+ default: throw new Error("Unreachable");
220
+ }
221
+ if (!this.isFunction[y][x] && invert) this.modules[y][x] = !this.modules[y][x];
222
+ }
223
+ }
224
+ getPenaltyScore() {
225
+ let result = 0;
226
+ for (let y = 0; y < this.size; y++) {
227
+ let runColor = false;
228
+ let runX = 0;
229
+ let runHistory = [
230
+ 0,
231
+ 0,
232
+ 0,
233
+ 0,
234
+ 0,
235
+ 0,
236
+ 0
237
+ ];
238
+ for (let x = 0; x < this.size; x++) if (this.modules[y][x] === runColor) {
239
+ runX++;
240
+ if (runX == 5) result += QrCode.PENALTY_N1;
241
+ else if (runX > 5) result++;
242
+ } else {
243
+ this.finderPenaltyAddHistory(runX, runHistory);
244
+ if (!runColor) result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3;
245
+ runColor = this.modules[y][x];
246
+ runX = 1;
247
+ }
248
+ result += this.finderPenaltyTerminateAndCount(runColor, runX, runHistory) * QrCode.PENALTY_N3;
249
+ }
250
+ for (let x = 0; x < this.size; x++) {
251
+ let runColor = false;
252
+ let runY = 0;
253
+ let runHistory = [
254
+ 0,
255
+ 0,
256
+ 0,
257
+ 0,
258
+ 0,
259
+ 0,
260
+ 0
261
+ ];
262
+ for (let y = 0; y < this.size; y++) if (this.modules[y][x] === runColor) {
263
+ runY++;
264
+ if (runY == 5) result += QrCode.PENALTY_N1;
265
+ else if (runY > 5) result++;
266
+ } else {
267
+ this.finderPenaltyAddHistory(runY, runHistory);
268
+ if (!runColor) result += this.finderPenaltyCountPatterns(runHistory) * QrCode.PENALTY_N3;
269
+ runColor = this.modules[y][x];
270
+ runY = 1;
271
+ }
272
+ result += this.finderPenaltyTerminateAndCount(runColor, runY, runHistory) * QrCode.PENALTY_N3;
273
+ }
274
+ for (let y = 0; y < this.size - 1; y++) for (let x = 0; x < this.size - 1; x++) {
275
+ const color = this.modules[y][x];
276
+ if (color == this.modules[y][x + 1] && color == this.modules[y + 1][x] && color == this.modules[y + 1][x + 1]) result += QrCode.PENALTY_N2;
277
+ }
278
+ let dark = 0;
279
+ for (const row of this.modules) dark = row.reduce((sum, color) => sum + (color ? 1 : 0), dark);
280
+ const total = this.size * this.size;
281
+ const k = Math.ceil(Math.abs(dark * 20 - total * 10) / total) - 1;
282
+ assert(0 <= k && k <= 9);
283
+ result += k * QrCode.PENALTY_N4;
284
+ assert(0 <= result && result <= 2568888);
285
+ return result;
286
+ }
287
+ getAlignmentPatternPositions() {
288
+ if (this.version == 1) return [];
289
+ else {
290
+ const numAlign = Math.floor(this.version / 7) + 2;
291
+ const step = this.version == 32 ? 26 : Math.ceil((this.version * 4 + 4) / (numAlign * 2 - 2)) * 2;
292
+ let result = [6];
293
+ for (let pos = this.size - 7; result.length < numAlign; pos -= step) result.splice(1, 0, pos);
294
+ return result;
295
+ }
296
+ }
297
+ static getNumRawDataModules(ver) {
298
+ if (ver < QrCode.MIN_VERSION || ver > QrCode.MAX_VERSION) throw new RangeError("Version number out of range");
299
+ let result = (16 * ver + 128) * ver + 64;
300
+ if (ver >= 2) {
301
+ const numAlign = Math.floor(ver / 7) + 2;
302
+ result -= (25 * numAlign - 10) * numAlign - 55;
303
+ if (ver >= 7) result -= 36;
304
+ }
305
+ assert(208 <= result && result <= 29648);
306
+ return result;
307
+ }
308
+ static getNumDataCodewords(ver, ecl) {
309
+ return Math.floor(QrCode.getNumRawDataModules(ver) / 8) - QrCode.ECC_CODEWORDS_PER_BLOCK[ecl.ordinal][ver] * QrCode.NUM_ERROR_CORRECTION_BLOCKS[ecl.ordinal][ver];
310
+ }
311
+ static reedSolomonComputeDivisor(degree) {
312
+ if (degree < 1 || degree > 255) throw new RangeError("Degree out of range");
313
+ let result = [];
314
+ for (let i = 0; i < degree - 1; i++) result.push(0);
315
+ result.push(1);
316
+ let root = 1;
317
+ for (let i = 0; i < degree; i++) {
318
+ for (let j = 0; j < result.length; j++) {
319
+ result[j] = QrCode.reedSolomonMultiply(result[j], root);
320
+ if (j + 1 < result.length) result[j] ^= result[j + 1];
321
+ }
322
+ root = QrCode.reedSolomonMultiply(root, 2);
323
+ }
324
+ return result;
325
+ }
326
+ static reedSolomonComputeRemainder(data, divisor) {
327
+ let result = divisor.map((_) => 0);
328
+ for (const b of data) {
329
+ const factor = b ^ result.shift();
330
+ result.push(0);
331
+ divisor.forEach((coef, i) => result[i] ^= QrCode.reedSolomonMultiply(coef, factor));
332
+ }
333
+ return result;
334
+ }
335
+ static reedSolomonMultiply(x, y) {
336
+ if (x >>> 8 != 0 || y >>> 8 != 0) throw new RangeError("Byte out of range");
337
+ let z = 0;
338
+ for (let i = 7; i >= 0; i--) {
339
+ z = z << 1 ^ (z >>> 7) * 285;
340
+ z ^= (y >>> i & 1) * x;
341
+ }
342
+ assert(z >>> 8 == 0);
343
+ return z;
344
+ }
345
+ finderPenaltyCountPatterns(runHistory) {
346
+ const n = runHistory[1];
347
+ assert(n <= this.size * 3);
348
+ const core = n > 0 && runHistory[2] === n && runHistory[3] === n * 3 && runHistory[4] === n && runHistory[5] === n;
349
+ return (core && runHistory[0] >= n * 4 && runHistory[6] >= n ? 1 : 0) + (core && runHistory[6] >= n * 4 && runHistory[0] >= n ? 1 : 0);
350
+ }
351
+ finderPenaltyTerminateAndCount(currentRunColor, currentRunLength, runHistory) {
352
+ if (currentRunColor) {
353
+ this.finderPenaltyAddHistory(currentRunLength, runHistory);
354
+ currentRunLength = 0;
355
+ }
356
+ currentRunLength += this.size;
357
+ this.finderPenaltyAddHistory(currentRunLength, runHistory);
358
+ return this.finderPenaltyCountPatterns(runHistory);
359
+ }
360
+ finderPenaltyAddHistory(currentRunLength, runHistory) {
361
+ if (runHistory[0] === 0) currentRunLength += this.size;
362
+ runHistory.pop();
363
+ runHistory.unshift(currentRunLength);
364
+ }
365
+ static MIN_VERSION = 1;
366
+ static MAX_VERSION = 40;
367
+ static PENALTY_N1 = 3;
368
+ static PENALTY_N2 = 3;
369
+ static PENALTY_N3 = 40;
370
+ static PENALTY_N4 = 10;
371
+ static ECC_CODEWORDS_PER_BLOCK = [
372
+ [
373
+ -1,
374
+ 7,
375
+ 10,
376
+ 15,
377
+ 20,
378
+ 26,
379
+ 18,
380
+ 20,
381
+ 24,
382
+ 30,
383
+ 18,
384
+ 20,
385
+ 24,
386
+ 26,
387
+ 30,
388
+ 22,
389
+ 24,
390
+ 28,
391
+ 30,
392
+ 28,
393
+ 28,
394
+ 28,
395
+ 28,
396
+ 30,
397
+ 30,
398
+ 26,
399
+ 28,
400
+ 30,
401
+ 30,
402
+ 30,
403
+ 30,
404
+ 30,
405
+ 30,
406
+ 30,
407
+ 30,
408
+ 30,
409
+ 30,
410
+ 30,
411
+ 30,
412
+ 30,
413
+ 30
414
+ ],
415
+ [
416
+ -1,
417
+ 10,
418
+ 16,
419
+ 26,
420
+ 18,
421
+ 24,
422
+ 16,
423
+ 18,
424
+ 22,
425
+ 22,
426
+ 26,
427
+ 30,
428
+ 22,
429
+ 22,
430
+ 24,
431
+ 24,
432
+ 28,
433
+ 28,
434
+ 26,
435
+ 26,
436
+ 26,
437
+ 26,
438
+ 28,
439
+ 28,
440
+ 28,
441
+ 28,
442
+ 28,
443
+ 28,
444
+ 28,
445
+ 28,
446
+ 28,
447
+ 28,
448
+ 28,
449
+ 28,
450
+ 28,
451
+ 28,
452
+ 28,
453
+ 28,
454
+ 28,
455
+ 28,
456
+ 28
457
+ ],
458
+ [
459
+ -1,
460
+ 13,
461
+ 22,
462
+ 18,
463
+ 26,
464
+ 18,
465
+ 24,
466
+ 18,
467
+ 22,
468
+ 20,
469
+ 24,
470
+ 28,
471
+ 26,
472
+ 24,
473
+ 20,
474
+ 30,
475
+ 24,
476
+ 28,
477
+ 28,
478
+ 26,
479
+ 30,
480
+ 28,
481
+ 30,
482
+ 30,
483
+ 30,
484
+ 30,
485
+ 28,
486
+ 30,
487
+ 30,
488
+ 30,
489
+ 30,
490
+ 30,
491
+ 30,
492
+ 30,
493
+ 30,
494
+ 30,
495
+ 30,
496
+ 30,
497
+ 30,
498
+ 30,
499
+ 30
500
+ ],
501
+ [
502
+ -1,
503
+ 17,
504
+ 28,
505
+ 22,
506
+ 16,
507
+ 22,
508
+ 28,
509
+ 26,
510
+ 26,
511
+ 24,
512
+ 28,
513
+ 24,
514
+ 28,
515
+ 22,
516
+ 24,
517
+ 24,
518
+ 30,
519
+ 28,
520
+ 28,
521
+ 26,
522
+ 28,
523
+ 30,
524
+ 24,
525
+ 30,
526
+ 30,
527
+ 30,
528
+ 30,
529
+ 30,
530
+ 30,
531
+ 30,
532
+ 30,
533
+ 30,
534
+ 30,
535
+ 30,
536
+ 30,
537
+ 30,
538
+ 30,
539
+ 30,
540
+ 30,
541
+ 30,
542
+ 30
543
+ ]
544
+ ];
545
+ static NUM_ERROR_CORRECTION_BLOCKS = [
546
+ [
547
+ -1,
548
+ 1,
549
+ 1,
550
+ 1,
551
+ 1,
552
+ 1,
553
+ 2,
554
+ 2,
555
+ 2,
556
+ 2,
557
+ 4,
558
+ 4,
559
+ 4,
560
+ 4,
561
+ 4,
562
+ 6,
563
+ 6,
564
+ 6,
565
+ 6,
566
+ 7,
567
+ 8,
568
+ 8,
569
+ 9,
570
+ 9,
571
+ 10,
572
+ 12,
573
+ 12,
574
+ 12,
575
+ 13,
576
+ 14,
577
+ 15,
578
+ 16,
579
+ 17,
580
+ 18,
581
+ 19,
582
+ 19,
583
+ 20,
584
+ 21,
585
+ 22,
586
+ 24,
587
+ 25
588
+ ],
589
+ [
590
+ -1,
591
+ 1,
592
+ 1,
593
+ 1,
594
+ 2,
595
+ 2,
596
+ 4,
597
+ 4,
598
+ 4,
599
+ 5,
600
+ 5,
601
+ 5,
602
+ 8,
603
+ 9,
604
+ 9,
605
+ 10,
606
+ 10,
607
+ 11,
608
+ 13,
609
+ 14,
610
+ 16,
611
+ 17,
612
+ 17,
613
+ 18,
614
+ 20,
615
+ 21,
616
+ 23,
617
+ 25,
618
+ 26,
619
+ 28,
620
+ 29,
621
+ 31,
622
+ 33,
623
+ 35,
624
+ 37,
625
+ 38,
626
+ 40,
627
+ 43,
628
+ 45,
629
+ 47,
630
+ 49
631
+ ],
632
+ [
633
+ -1,
634
+ 1,
635
+ 1,
636
+ 2,
637
+ 2,
638
+ 4,
639
+ 4,
640
+ 6,
641
+ 6,
642
+ 8,
643
+ 8,
644
+ 8,
645
+ 10,
646
+ 12,
647
+ 16,
648
+ 12,
649
+ 17,
650
+ 16,
651
+ 18,
652
+ 21,
653
+ 20,
654
+ 23,
655
+ 23,
656
+ 25,
657
+ 27,
658
+ 29,
659
+ 34,
660
+ 34,
661
+ 35,
662
+ 38,
663
+ 40,
664
+ 43,
665
+ 45,
666
+ 48,
667
+ 51,
668
+ 53,
669
+ 56,
670
+ 59,
671
+ 62,
672
+ 65,
673
+ 68
674
+ ],
675
+ [
676
+ -1,
677
+ 1,
678
+ 1,
679
+ 2,
680
+ 4,
681
+ 4,
682
+ 4,
683
+ 5,
684
+ 6,
685
+ 8,
686
+ 8,
687
+ 11,
688
+ 11,
689
+ 16,
690
+ 16,
691
+ 18,
692
+ 16,
693
+ 19,
694
+ 21,
695
+ 25,
696
+ 25,
697
+ 25,
698
+ 34,
699
+ 30,
700
+ 32,
701
+ 35,
702
+ 37,
703
+ 40,
704
+ 42,
705
+ 45,
706
+ 48,
707
+ 51,
708
+ 54,
709
+ 57,
710
+ 60,
711
+ 63,
712
+ 66,
713
+ 70,
714
+ 74,
715
+ 77,
716
+ 81
717
+ ]
718
+ ];
719
+ };
720
+ function appendBits(val, len, bb) {
721
+ if (len < 0 || len > 31 || val >>> len != 0) throw new RangeError("Value out of range");
722
+ for (let i = len - 1; i >= 0; i--) bb.push(val >>> i & 1);
723
+ }
724
+ function getBit(x, i) {
725
+ return (x >>> i & 1) != 0;
726
+ }
727
+ function assert(cond) {
728
+ if (!cond) throw new Error("Assertion error");
729
+ }
730
+ var QrSegment = class QrSegment {
731
+ static Mode;
732
+ static makeBytes(data) {
733
+ let bb = [];
734
+ for (const b of data) appendBits(b, 8, bb);
735
+ return new QrSegment(QrSegment.Mode.BYTE, data.length, bb);
736
+ }
737
+ static makeNumeric(digits) {
738
+ if (!QrSegment.isNumeric(digits)) throw new RangeError("String contains non-numeric characters");
739
+ let bb = [];
740
+ for (let i = 0; i < digits.length;) {
741
+ const n = Math.min(digits.length - i, 3);
742
+ appendBits(parseInt(digits.substring(i, i + n), 10), n * 3 + 1, bb);
743
+ i += n;
744
+ }
745
+ return new QrSegment(QrSegment.Mode.NUMERIC, digits.length, bb);
746
+ }
747
+ static makeAlphanumeric(text) {
748
+ if (!QrSegment.isAlphanumeric(text)) throw new RangeError("String contains unencodable characters in alphanumeric mode");
749
+ let bb = [];
750
+ let i;
751
+ for (i = 0; i + 2 <= text.length; i += 2) {
752
+ let temp = QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)) * 45;
753
+ temp += QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i + 1));
754
+ appendBits(temp, 11, bb);
755
+ }
756
+ if (i < text.length) appendBits(QrSegment.ALPHANUMERIC_CHARSET.indexOf(text.charAt(i)), 6, bb);
757
+ return new QrSegment(QrSegment.Mode.ALPHANUMERIC, text.length, bb);
758
+ }
759
+ static makeSegments(text) {
760
+ if (text == "") return [];
761
+ else if (QrSegment.isNumeric(text)) return [QrSegment.makeNumeric(text)];
762
+ else if (QrSegment.isAlphanumeric(text)) return [QrSegment.makeAlphanumeric(text)];
763
+ else return [QrSegment.makeBytes(QrSegment.toUtf8ByteArray(text))];
764
+ }
765
+ static makeEci(assignVal) {
766
+ let bb = [];
767
+ if (assignVal < 0) throw new RangeError("ECI assignment value out of range");
768
+ else if (assignVal < 128) appendBits(assignVal, 8, bb);
769
+ else if (assignVal < 16384) {
770
+ appendBits(2, 2, bb);
771
+ appendBits(assignVal, 14, bb);
772
+ } else if (assignVal < 1e6) {
773
+ appendBits(6, 3, bb);
774
+ appendBits(assignVal, 21, bb);
775
+ } else throw new RangeError("ECI assignment value out of range");
776
+ return new QrSegment(QrSegment.Mode.ECI, 0, bb);
777
+ }
778
+ static isNumeric(text) {
779
+ return QrSegment.NUMERIC_REGEX.test(text);
780
+ }
781
+ static isAlphanumeric(text) {
782
+ return QrSegment.ALPHANUMERIC_REGEX.test(text);
783
+ }
784
+ mode;
785
+ numChars;
786
+ bitData;
787
+ constructor(mode, numChars, bitData) {
788
+ this.mode = mode;
789
+ this.numChars = numChars;
790
+ if (numChars < 0) throw new RangeError("Invalid argument");
791
+ this.bitData = bitData.slice();
792
+ }
793
+ getData() {
794
+ return this.bitData.slice();
795
+ }
796
+ static getTotalBits(segs, version) {
797
+ let result = 0;
798
+ for (const seg of segs) {
799
+ const ccbits = seg.mode.numCharCountBits(version);
800
+ if (seg.numChars >= 1 << ccbits) return Infinity;
801
+ result += 4 + ccbits + seg.bitData.length;
802
+ }
803
+ return result;
804
+ }
805
+ static toUtf8ByteArray(str) {
806
+ str = encodeURI(str);
807
+ let result = [];
808
+ for (let i = 0; i < str.length; i++) if (str.charAt(i) != "%") result.push(str.charCodeAt(i));
809
+ else {
810
+ result.push(parseInt(str.substring(i + 1, i + 3), 16));
811
+ i += 2;
812
+ }
813
+ return result;
814
+ }
815
+ static NUMERIC_REGEX = /^[0-9]*$/;
816
+ static ALPHANUMERIC_REGEX = /^[A-Z0-9 $%*+.\/:-]*$/;
817
+ static ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:";
818
+ };
819
+ var QrCodeEcc = class QrCodeEcc {
820
+ static LOW = new QrCodeEcc(0, 1);
821
+ static MEDIUM = new QrCodeEcc(1, 0);
822
+ static QUARTILE = new QrCodeEcc(2, 3);
823
+ static HIGH = new QrCodeEcc(3, 2);
824
+ ordinal;
825
+ formatBits;
826
+ constructor(ordinal, formatBits) {
827
+ this.ordinal = ordinal;
828
+ this.formatBits = formatBits;
829
+ }
830
+ };
831
+ var QrSegmentMode = class QrSegmentMode {
832
+ static NUMERIC = new QrSegmentMode(1, [
833
+ 10,
834
+ 12,
835
+ 14
836
+ ]);
837
+ static ALPHANUMERIC = new QrSegmentMode(2, [
838
+ 9,
839
+ 11,
840
+ 13
841
+ ]);
842
+ static BYTE = new QrSegmentMode(4, [
843
+ 8,
844
+ 16,
845
+ 16
846
+ ]);
847
+ static KANJI = new QrSegmentMode(8, [
848
+ 8,
849
+ 10,
850
+ 12
851
+ ]);
852
+ static ECI = new QrSegmentMode(7, [
853
+ 0,
854
+ 0,
855
+ 0
856
+ ]);
857
+ modeBits;
858
+ numBitsCharCount;
859
+ constructor(modeBits, numBitsCharCount) {
860
+ this.modeBits = modeBits;
861
+ this.numBitsCharCount = numBitsCharCount;
862
+ }
863
+ numCharCountBits(ver) {
864
+ return this.numBitsCharCount[Math.floor((ver + 7) / 17)];
865
+ }
866
+ };
867
+ QrCode.Ecc = QrCodeEcc;
868
+ QrSegment.Mode = QrSegmentMode;
869
+ //#endregion
870
+ export { QrCode, QrSegment };