@moxon/api 6.0.0-pre

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 (246) hide show
  1. package/.prettierignore +5 -0
  2. package/LICENSE +28 -0
  3. package/README.md +277 -0
  4. package/dist/app.d.ts +2 -0
  5. package/dist/app.js +55 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/config/env.d.ts +22 -0
  8. package/dist/config/env.js +36 -0
  9. package/dist/config/env.js.map +1 -0
  10. package/dist/config/plans.d.ts +26 -0
  11. package/dist/config/plans.js +44 -0
  12. package/dist/config/plans.js.map +1 -0
  13. package/dist/config/versions.d.ts +18 -0
  14. package/dist/config/versions.js +248 -0
  15. package/dist/config/versions.js.map +1 -0
  16. package/dist/constants.d.ts +48 -0
  17. package/dist/constants.js +75 -0
  18. package/dist/constants.js.map +1 -0
  19. package/dist/middleware/cors.d.ts +2 -0
  20. package/dist/middleware/cors.js +31 -0
  21. package/dist/middleware/cors.js.map +1 -0
  22. package/dist/middleware/error.d.ts +4 -0
  23. package/dist/middleware/error.js +8 -0
  24. package/dist/middleware/error.js.map +1 -0
  25. package/dist/middleware/json.d.ts +2 -0
  26. package/dist/middleware/json.js +8 -0
  27. package/dist/middleware/json.js.map +1 -0
  28. package/dist/middleware/logger.d.ts +26 -0
  29. package/dist/middleware/logger.js +65 -0
  30. package/dist/middleware/logger.js.map +1 -0
  31. package/dist/middleware/ratelimit.d.ts +2 -0
  32. package/dist/middleware/ratelimit.js +83 -0
  33. package/dist/middleware/ratelimit.js.map +1 -0
  34. package/dist/middleware/version.d.ts +3 -0
  35. package/dist/middleware/version.js +30 -0
  36. package/dist/middleware/version.js.map +1 -0
  37. package/dist/modules/v4/address.d.ts +20 -0
  38. package/dist/modules/v4/address.js +381 -0
  39. package/dist/modules/v4/address.js.map +1 -0
  40. package/dist/modules/v4/agent.d.ts +30 -0
  41. package/dist/modules/v4/agent.js +92 -0
  42. package/dist/modules/v4/agent.js.map +1 -0
  43. package/dist/modules/v4/algorithms.d.ts +90 -0
  44. package/dist/modules/v4/algorithms.js +279 -0
  45. package/dist/modules/v4/algorithms.js.map +1 -0
  46. package/dist/modules/v4/avatar.d.ts +23 -0
  47. package/dist/modules/v4/avatar.js +136 -0
  48. package/dist/modules/v4/avatar.js.map +1 -0
  49. package/dist/modules/v4/barcode.d.ts +27 -0
  50. package/dist/modules/v4/barcode.js +440 -0
  51. package/dist/modules/v4/barcode.js.map +1 -0
  52. package/dist/modules/v4/captcha.d.ts +22 -0
  53. package/dist/modules/v4/captcha.js +79 -0
  54. package/dist/modules/v4/captcha.js.map +1 -0
  55. package/dist/modules/v4/chat.d.ts +21 -0
  56. package/dist/modules/v4/chat.js +100 -0
  57. package/dist/modules/v4/chat.js.map +1 -0
  58. package/dist/modules/v4/color.d.ts +16 -0
  59. package/dist/modules/v4/color.js +59 -0
  60. package/dist/modules/v4/color.js.map +1 -0
  61. package/dist/modules/v4/convert.d.ts +15 -0
  62. package/dist/modules/v4/convert.js +116 -0
  63. package/dist/modules/v4/convert.js.map +1 -0
  64. package/dist/modules/v4/credit.d.ts +22 -0
  65. package/dist/modules/v4/credit.js +104 -0
  66. package/dist/modules/v4/credit.js.map +1 -0
  67. package/dist/modules/v4/cron.d.ts +17 -0
  68. package/dist/modules/v4/cron.js +202 -0
  69. package/dist/modules/v4/cron.js.map +1 -0
  70. package/dist/modules/v4/dice.d.ts +16 -0
  71. package/dist/modules/v4/dice.js +37 -0
  72. package/dist/modules/v4/dice.js.map +1 -0
  73. package/dist/modules/v4/domain.d.ts +6 -0
  74. package/dist/modules/v4/domain.js +83 -0
  75. package/dist/modules/v4/domain.js.map +1 -0
  76. package/dist/modules/v4/encode.d.ts +81 -0
  77. package/dist/modules/v4/encode.js +236 -0
  78. package/dist/modules/v4/encode.js.map +1 -0
  79. package/dist/modules/v4/geo.d.ts +30 -0
  80. package/dist/modules/v4/geo.js +51 -0
  81. package/dist/modules/v4/geo.js.map +1 -0
  82. package/dist/modules/v4/hash.d.ts +15 -0
  83. package/dist/modules/v4/hash.js +25 -0
  84. package/dist/modules/v4/hash.js.map +1 -0
  85. package/dist/modules/v4/hyperplanning.d.ts +19 -0
  86. package/dist/modules/v4/hyperplanning.js +80 -0
  87. package/dist/modules/v4/hyperplanning.js.map +1 -0
  88. package/dist/modules/v4/ip.d.ts +19 -0
  89. package/dist/modules/v4/ip.js +132 -0
  90. package/dist/modules/v4/ip.js.map +1 -0
  91. package/dist/modules/v4/levenshtein.d.ts +13 -0
  92. package/dist/modules/v4/levenshtein.js +37 -0
  93. package/dist/modules/v4/levenshtein.js.map +1 -0
  94. package/dist/modules/v4/palette.d.ts +19 -0
  95. package/dist/modules/v4/palette.js +56 -0
  96. package/dist/modules/v4/palette.js.map +1 -0
  97. package/dist/modules/v4/password.d.ts +25 -0
  98. package/dist/modules/v4/password.js +343 -0
  99. package/dist/modules/v4/password.js.map +1 -0
  100. package/dist/modules/v4/personal.d.ts +6 -0
  101. package/dist/modules/v4/personal.js +121 -0
  102. package/dist/modules/v4/personal.js.map +1 -0
  103. package/dist/modules/v4/placeholder.d.ts +30 -0
  104. package/dist/modules/v4/placeholder.js +160 -0
  105. package/dist/modules/v4/placeholder.js.map +1 -0
  106. package/dist/modules/v4/qrcode.d.ts +25 -0
  107. package/dist/modules/v4/qrcode.js +92 -0
  108. package/dist/modules/v4/qrcode.js.map +1 -0
  109. package/dist/modules/v4/regex.d.ts +23 -0
  110. package/dist/modules/v4/regex.js +48 -0
  111. package/dist/modules/v4/regex.js.map +1 -0
  112. package/dist/modules/v4/statistics.d.ts +20 -0
  113. package/dist/modules/v4/statistics.js +48 -0
  114. package/dist/modules/v4/statistics.js.map +1 -0
  115. package/dist/modules/v4/text.d.ts +43 -0
  116. package/dist/modules/v4/text.js +323 -0
  117. package/dist/modules/v4/text.js.map +1 -0
  118. package/dist/modules/v4/tic_tac_toe.d.ts +19 -0
  119. package/dist/modules/v4/tic_tac_toe.js +214 -0
  120. package/dist/modules/v4/tic_tac_toe.js.map +1 -0
  121. package/dist/modules/v4/time.d.ts +15 -0
  122. package/dist/modules/v4/time.js +124 -0
  123. package/dist/modules/v4/time.js.map +1 -0
  124. package/dist/modules/v4/token.d.ts +9 -0
  125. package/dist/modules/v4/token.js +45 -0
  126. package/dist/modules/v4/token.js.map +1 -0
  127. package/dist/modules/v4/username.d.ts +6 -0
  128. package/dist/modules/v4/username.js +92 -0
  129. package/dist/modules/v4/username.js.map +1 -0
  130. package/dist/modules/v4/validate.d.ts +34 -0
  131. package/dist/modules/v4/validate.js +75 -0
  132. package/dist/modules/v4/validate.js.map +1 -0
  133. package/dist/modules/v4.d.ts +32 -0
  134. package/dist/modules/v4.js +33 -0
  135. package/dist/modules/v4.js.map +1 -0
  136. package/dist/modules/v5/address.d.ts +5 -0
  137. package/dist/modules/v5/address.js +20 -0
  138. package/dist/modules/v5/address.js.map +1 -0
  139. package/dist/modules/v5/algorithms.d.ts +9 -0
  140. package/dist/modules/v5/algorithms.js +39 -0
  141. package/dist/modules/v5/algorithms.js.map +1 -0
  142. package/dist/modules/v5/asymmetric.d.ts +26 -0
  143. package/dist/modules/v5/asymmetric.js +74 -0
  144. package/dist/modules/v5/asymmetric.js.map +1 -0
  145. package/dist/modules/v5/barcode.d.ts +27 -0
  146. package/dist/modules/v5/barcode.js +424 -0
  147. package/dist/modules/v5/barcode.js.map +1 -0
  148. package/dist/modules/v5/base.d.ts +16 -0
  149. package/dist/modules/v5/base.js +41 -0
  150. package/dist/modules/v5/base.js.map +1 -0
  151. package/dist/modules/v5/captcha.d.ts +27 -0
  152. package/dist/modules/v5/captcha.js +136 -0
  153. package/dist/modules/v5/captcha.js.map +1 -0
  154. package/dist/modules/v5/case.d.ts +10 -0
  155. package/dist/modules/v5/case.js +57 -0
  156. package/dist/modules/v5/case.js.map +1 -0
  157. package/dist/modules/v5/chart.d.ts +53 -0
  158. package/dist/modules/v5/chart.js +385 -0
  159. package/dist/modules/v5/chart.js.map +1 -0
  160. package/dist/modules/v5/chat.d.ts +21 -0
  161. package/dist/modules/v5/chat.js +107 -0
  162. package/dist/modules/v5/chat.js.map +1 -0
  163. package/dist/modules/v5/csv.d.ts +29 -0
  164. package/dist/modules/v5/csv.js +143 -0
  165. package/dist/modules/v5/csv.js.map +1 -0
  166. package/dist/modules/v5/diff.d.ts +20 -0
  167. package/dist/modules/v5/diff.js +81 -0
  168. package/dist/modules/v5/diff.js.map +1 -0
  169. package/dist/modules/v5/evaluate.d.ts +14 -0
  170. package/dist/modules/v5/evaluate.js +284 -0
  171. package/dist/modules/v5/evaluate.js.map +1 -0
  172. package/dist/modules/v5/jwt.d.ts +11 -0
  173. package/dist/modules/v5/jwt.js +42 -0
  174. package/dist/modules/v5/jwt.js.map +1 -0
  175. package/dist/modules/v5/matrix.d.ts +77 -0
  176. package/dist/modules/v5/matrix.js +239 -0
  177. package/dist/modules/v5/matrix.js.map +1 -0
  178. package/dist/modules/v5/otp.d.ts +30 -0
  179. package/dist/modules/v5/otp.js +117 -0
  180. package/dist/modules/v5/otp.js.map +1 -0
  181. package/dist/modules/v5/pow.d.ts +29 -0
  182. package/dist/modules/v5/pow.js +49 -0
  183. package/dist/modules/v5/pow.js.map +1 -0
  184. package/dist/modules/v5/read.d.ts +20 -0
  185. package/dist/modules/v5/read.js +59 -0
  186. package/dist/modules/v5/read.js.map +1 -0
  187. package/dist/modules/v5/semver.d.ts +33 -0
  188. package/dist/modules/v5/semver.js +99 -0
  189. package/dist/modules/v5/semver.js.map +1 -0
  190. package/dist/modules/v5/symmetric.d.ts +15 -0
  191. package/dist/modules/v5/symmetric.js +88 -0
  192. package/dist/modules/v5/symmetric.js.map +1 -0
  193. package/dist/modules/v5/text.d.ts +5 -0
  194. package/dist/modules/v5/text.js +12 -0
  195. package/dist/modules/v5/text.js.map +1 -0
  196. package/dist/modules/v5/tic_tac_toe.d.ts +19 -0
  197. package/dist/modules/v5/tic_tac_toe.js +226 -0
  198. package/dist/modules/v5/tic_tac_toe.js.map +1 -0
  199. package/dist/modules/v5/url.d.ts +18 -0
  200. package/dist/modules/v5/url.js +51 -0
  201. package/dist/modules/v5/url.js.map +1 -0
  202. package/dist/modules/v5/uuid.d.ts +25 -0
  203. package/dist/modules/v5/uuid.js +40 -0
  204. package/dist/modules/v5/uuid.js.map +1 -0
  205. package/dist/modules/v5.d.ts +24 -0
  206. package/dist/modules/v5.js +25 -0
  207. package/dist/modules/v5.js.map +1 -0
  208. package/dist/modules/v6.d.ts +1 -0
  209. package/dist/modules/v6.js +2 -0
  210. package/dist/modules/v6.js.map +1 -0
  211. package/dist/routes/delete.d.ts +2 -0
  212. package/dist/routes/delete.js +73 -0
  213. package/dist/routes/delete.js.map +1 -0
  214. package/dist/routes/get.d.ts +2 -0
  215. package/dist/routes/get.js +857 -0
  216. package/dist/routes/get.js.map +1 -0
  217. package/dist/routes/index.d.ts +2 -0
  218. package/dist/routes/index.js +95 -0
  219. package/dist/routes/index.js.map +1 -0
  220. package/dist/routes/patch.d.ts +2 -0
  221. package/dist/routes/patch.js +45 -0
  222. package/dist/routes/patch.js.map +1 -0
  223. package/dist/routes/post.d.ts +2 -0
  224. package/dist/routes/post.js +604 -0
  225. package/dist/routes/post.js.map +1 -0
  226. package/dist/storage/index.d.ts +5 -0
  227. package/dist/storage/index.js +14 -0
  228. package/dist/storage/index.js.map +1 -0
  229. package/dist/types/storage.d.ts +52 -0
  230. package/dist/types/storage.js +2 -0
  231. package/dist/types/storage.js.map +1 -0
  232. package/dist/utils/challenge.d.ts +40 -0
  233. package/dist/utils/challenge.js +75 -0
  234. package/dist/utils/challenge.js.map +1 -0
  235. package/dist/utils/colors.d.ts +44 -0
  236. package/dist/utils/colors.js +93 -0
  237. package/dist/utils/colors.js.map +1 -0
  238. package/dist/utils/helpers.d.ts +55 -0
  239. package/dist/utils/helpers.js +82 -0
  240. package/dist/utils/helpers.js.map +1 -0
  241. package/dist/utils/response.d.ts +9 -0
  242. package/dist/utils/response.js +24 -0
  243. package/dist/utils/response.js.map +1 -0
  244. package/package.json +90 -0
  245. package/robots.txt +74 -0
  246. package/src/favicon.ico +0 -0
@@ -0,0 +1,74 @@
1
+ import { constants as cryptoConstants, createPublicKey, generateKeyPairSync, privateDecrypt, publicEncrypt, } from 'crypto';
2
+ import { MAX_RSA_MODULUS } from '../../constants.js';
3
+ const ALGORITHMS = {
4
+ 'rsa-oaep-sha256': { oaepHash: 'sha256', hashLength: 32 },
5
+ 'rsa-oaep-sha1': { oaepHash: 'sha1', hashLength: 20 },
6
+ };
7
+ const VALID_MODULUS = new Set([2048, 4096]);
8
+ /**
9
+ * RSA asymmetric key generation, encryption and decryption.
10
+ *
11
+ * @param action - "keygen", "encrypt", or "decrypt"
12
+ * @param options - Options object with text, publicKey, privateKey, modulusLength, algorithm
13
+ * @returns Keygen or crypt result object
14
+ */
15
+ export default function asymmetric(action, options = {}) {
16
+ if (!action || (action !== 'keygen' && action !== 'encrypt' && action !== 'decrypt'))
17
+ throw new Error('Action must be "keygen", "encrypt", or "decrypt"');
18
+ const algorithm = options.algorithm ?? 'rsa-oaep-sha256';
19
+ const algo = ALGORITHMS[algorithm];
20
+ if (!algo)
21
+ throw new Error(`Unsupported algorithm. Use one of: ${Object.keys(ALGORITHMS).join(', ')}`);
22
+ if (action === 'keygen') {
23
+ const modulusLength = options.modulusLength ?? 2048;
24
+ if (!VALID_MODULUS.has(modulusLength) || modulusLength > MAX_RSA_MODULUS)
25
+ throw new Error('Modulus length must be 2048 or 4096');
26
+ const { publicKey, privateKey } = generateKeyPairSync('rsa', {
27
+ modulusLength,
28
+ publicKeyEncoding: { type: 'spki', format: 'pem' },
29
+ privateKeyEncoding: { type: 'pkcs8', format: 'pem' },
30
+ });
31
+ return { action, algorithm, modulusLength, publicKey, privateKey };
32
+ }
33
+ if (action === 'encrypt') {
34
+ if (!options.text)
35
+ throw new Error('Text is required');
36
+ if (!options.publicKey)
37
+ throw new Error('Public key is required');
38
+ if (!options.publicKey.startsWith('-----BEGIN PUBLIC KEY-----'))
39
+ throw new Error('Invalid public key format');
40
+ let keyObject;
41
+ try {
42
+ keyObject = createPublicKey(options.publicKey);
43
+ }
44
+ catch {
45
+ throw new Error('Invalid public key format');
46
+ }
47
+ const modulusLength = keyObject.asymmetricKeyDetails?.modulusLength ?? 2048;
48
+ const maxBytes = modulusLength / 8 - 2 * algo.hashLength - 2;
49
+ if (Buffer.byteLength(options.text, 'utf8') > maxBytes)
50
+ throw new Error(`Text exceeds maximum length for this key size and algorithm (${maxBytes} bytes)`);
51
+ try {
52
+ const encrypted = publicEncrypt({ key: keyObject, oaepHash: algo.oaepHash, padding: cryptoConstants.RSA_PKCS1_OAEP_PADDING }, Buffer.from(options.text, 'utf8'));
53
+ return { action, algorithm, result: encrypted.toString('base64') };
54
+ }
55
+ catch {
56
+ throw new Error('Encryption failed: invalid key or data too large');
57
+ }
58
+ }
59
+ // action === 'decrypt'
60
+ if (!options.text)
61
+ throw new Error('Encrypted data is required');
62
+ if (!options.privateKey)
63
+ throw new Error('Private key is required');
64
+ if (!options.privateKey.startsWith('-----BEGIN PRIVATE KEY-----'))
65
+ throw new Error('Invalid private key format');
66
+ try {
67
+ const decrypted = privateDecrypt({ key: options.privateKey, oaepHash: algo.oaepHash, padding: cryptoConstants.RSA_PKCS1_OAEP_PADDING }, Buffer.from(options.text, 'base64'));
68
+ return { action, algorithm, result: decrypted.toString('utf8') };
69
+ }
70
+ catch {
71
+ throw new Error('Invalid key or corrupted data');
72
+ }
73
+ }
74
+ //# sourceMappingURL=asymmetric.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asymmetric.js","sourceRoot":"","sources":["../../../src/modules/v5/asymmetric.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export interface BarcodeOptions {
2
+ data: string;
3
+ type?: string;
4
+ width?: number;
5
+ height?: number;
6
+ format?: string;
7
+ color?: string;
8
+ bg?: string;
9
+ }
10
+ export interface BarcodeResult {
11
+ contentType: string;
12
+ body: Buffer | string;
13
+ }
14
+ /**
15
+ * Generates a barcode image in SVG or PNG format.
16
+ *
17
+ * @param options.data - Data to encode (required)
18
+ * @param options.type - Barcode type: code128, ean13, ean8, upca, code39 (default: code128)
19
+ * @param options.width - Bar unit width in px (1–5, default 2)
20
+ * @param options.height - Bar height in px (50–300, default 100)
21
+ * @param options.format - Output format: svg or png (default: svg)
22
+ * @param options.color - Bar color hex (default: #000000)
23
+ * @param options.bg - Background color hex (default: #ffffff)
24
+ * @returns Object with contentType and body
25
+ * @throws Error if data is missing, invalid for the type, or parameters are out of range
26
+ */
27
+ export default function barcode(options: BarcodeOptions): BarcodeResult;
@@ -0,0 +1,424 @@
1
+ import { createCanvas } from 'canvas';
2
+ import { normalizeColor } from '../../utils/colors.js';
3
+ const VALID_TYPES = ['code128', 'ean13', 'ean8', 'upca', 'code39'];
4
+ const VALID_FORMATS = ['svg', 'png'];
5
+ function clamp(val, min, max) {
6
+ return Math.max(min, Math.min(max, Math.round(val)));
7
+ }
8
+ const C128_PATTERNS = [
9
+ [2, 1, 2, 2, 2, 2],
10
+ [2, 2, 2, 1, 2, 2],
11
+ [2, 2, 2, 2, 2, 1],
12
+ [1, 2, 1, 2, 2, 3],
13
+ [1, 2, 1, 3, 2, 2],
14
+ [1, 3, 1, 2, 2, 2],
15
+ [1, 2, 2, 2, 1, 3],
16
+ [1, 2, 2, 3, 1, 2],
17
+ [1, 3, 2, 2, 1, 2],
18
+ [2, 2, 1, 2, 1, 3],
19
+ [2, 2, 1, 3, 1, 2],
20
+ [2, 3, 1, 2, 1, 2],
21
+ [1, 1, 2, 2, 3, 2],
22
+ [1, 2, 2, 1, 3, 2],
23
+ [1, 2, 2, 2, 3, 1],
24
+ [1, 1, 3, 2, 2, 2],
25
+ [1, 2, 3, 1, 2, 2],
26
+ [1, 2, 3, 2, 2, 1],
27
+ [2, 2, 3, 2, 1, 1],
28
+ [2, 2, 1, 1, 3, 2],
29
+ [2, 2, 1, 2, 3, 1],
30
+ [2, 1, 3, 2, 1, 2],
31
+ [2, 2, 3, 1, 1, 2],
32
+ [3, 1, 2, 1, 3, 1],
33
+ [3, 1, 1, 2, 2, 2],
34
+ [3, 2, 1, 1, 2, 2],
35
+ [3, 2, 1, 2, 2, 1],
36
+ [3, 1, 2, 2, 1, 2],
37
+ [3, 2, 2, 1, 1, 2],
38
+ [3, 2, 2, 2, 1, 1],
39
+ [2, 1, 2, 1, 2, 3],
40
+ [2, 1, 2, 3, 2, 1],
41
+ [2, 3, 2, 1, 2, 1],
42
+ [1, 1, 1, 3, 2, 3],
43
+ [1, 3, 1, 1, 2, 3],
44
+ [1, 3, 1, 3, 2, 1],
45
+ [1, 1, 2, 3, 1, 3],
46
+ [1, 3, 2, 1, 1, 3],
47
+ [1, 3, 2, 3, 1, 1],
48
+ [2, 1, 1, 3, 1, 3],
49
+ [2, 3, 1, 1, 1, 3],
50
+ [2, 3, 1, 3, 1, 1],
51
+ [1, 1, 2, 1, 3, 3],
52
+ [1, 1, 2, 3, 3, 1],
53
+ [1, 3, 2, 1, 3, 1],
54
+ [1, 1, 3, 1, 2, 3],
55
+ [1, 1, 3, 3, 2, 1],
56
+ [1, 3, 3, 1, 2, 1],
57
+ [3, 1, 3, 1, 2, 1],
58
+ [2, 1, 1, 3, 3, 1],
59
+ [2, 3, 1, 1, 3, 1],
60
+ [2, 1, 3, 1, 1, 3],
61
+ [2, 1, 3, 3, 1, 1],
62
+ [2, 1, 3, 1, 3, 1],
63
+ [3, 1, 1, 1, 2, 3],
64
+ [3, 1, 1, 3, 2, 1],
65
+ [3, 3, 1, 1, 2, 1],
66
+ [3, 1, 2, 1, 1, 3],
67
+ [3, 1, 2, 3, 1, 1],
68
+ [3, 3, 2, 1, 1, 1],
69
+ [3, 1, 4, 1, 1, 1],
70
+ [2, 2, 1, 4, 1, 1],
71
+ [4, 3, 1, 1, 1, 1],
72
+ [1, 1, 1, 2, 2, 4],
73
+ [1, 1, 1, 4, 2, 2],
74
+ [1, 2, 1, 1, 2, 4],
75
+ [1, 2, 1, 4, 2, 1],
76
+ [1, 4, 1, 1, 2, 2],
77
+ [1, 4, 1, 2, 2, 1],
78
+ [1, 1, 2, 2, 1, 4],
79
+ [1, 1, 2, 4, 1, 2],
80
+ [1, 2, 2, 1, 1, 4],
81
+ [1, 2, 2, 4, 1, 1],
82
+ [1, 4, 2, 1, 1, 2],
83
+ [1, 4, 2, 2, 1, 1],
84
+ [2, 4, 1, 2, 1, 1],
85
+ [2, 2, 1, 1, 1, 4],
86
+ [4, 1, 3, 1, 1, 1],
87
+ [2, 4, 1, 1, 1, 2],
88
+ [1, 3, 4, 1, 1, 1],
89
+ [1, 1, 1, 2, 4, 2],
90
+ [1, 2, 1, 1, 4, 2],
91
+ [1, 2, 1, 2, 4, 1],
92
+ [1, 1, 4, 2, 1, 2],
93
+ [1, 2, 4, 1, 1, 2],
94
+ [1, 2, 4, 2, 1, 1],
95
+ [4, 1, 1, 2, 1, 2],
96
+ [4, 2, 1, 1, 1, 2],
97
+ [4, 2, 1, 2, 1, 1],
98
+ [2, 1, 2, 1, 4, 1],
99
+ [2, 1, 4, 1, 2, 1],
100
+ [4, 1, 2, 1, 2, 1],
101
+ [1, 1, 1, 1, 4, 3],
102
+ [1, 1, 1, 3, 4, 1],
103
+ [1, 3, 1, 1, 4, 1],
104
+ [1, 1, 4, 1, 1, 3],
105
+ [1, 1, 4, 3, 1, 1],
106
+ [4, 1, 1, 1, 1, 3],
107
+ [4, 1, 1, 3, 1, 1],
108
+ [1, 1, 3, 1, 4, 1],
109
+ [1, 1, 4, 1, 3, 1],
110
+ [3, 1, 1, 1, 4, 1],
111
+ [4, 1, 1, 1, 3, 1],
112
+ [2, 1, 1, 4, 1, 2], // 100-103 (103 = Start A)
113
+ [2, 1, 1, 2, 1, 4],
114
+ [2, 1, 1, 2, 4, 1],
115
+ [2, 3, 3, 1, 1, 1], // 104 = Start B, 105 = Start C, 106 = Stop (partial)
116
+ ];
117
+ // Stop pattern for Code 128 is special: 2 3 3 1 1 1 2 (13 modules)
118
+ const C128_STOP = [2, 3, 3, 1, 1, 1, 2];
119
+ const EAN_L = [
120
+ '0001101',
121
+ '0011001',
122
+ '0010011',
123
+ '0111101',
124
+ '0100011',
125
+ '0110001',
126
+ '0101111',
127
+ '0111011',
128
+ '0110111',
129
+ '0001011',
130
+ ];
131
+ const EAN_G = [
132
+ '0100111',
133
+ '0110011',
134
+ '0011011',
135
+ '0100001',
136
+ '0011101',
137
+ '0111001',
138
+ '0000101',
139
+ '0010001',
140
+ '0001001',
141
+ '0010111',
142
+ ];
143
+ const EAN_R = [
144
+ '1110010',
145
+ '1100110',
146
+ '1101100',
147
+ '1000010',
148
+ '1011100',
149
+ '1001110',
150
+ '1010000',
151
+ '1000100',
152
+ '1001000',
153
+ '1110100',
154
+ ];
155
+ // First digit parity structure for EAN-13 (L=false, G=true)
156
+ const EAN13_PARITY = [
157
+ [false, false, false, false, false, false], // 0
158
+ [false, false, true, false, true, true], // 1
159
+ [false, false, true, true, false, true], // 2
160
+ [false, false, true, true, true, false], // 3
161
+ [false, true, false, false, true, true], // 4
162
+ [false, true, true, false, false, true], // 5
163
+ [false, true, true, true, false, false], // 6
164
+ [false, true, false, true, false, true], // 7
165
+ [false, true, false, true, true, false], // 8
166
+ [false, true, true, false, true, false], // 9
167
+ ];
168
+ function eanCheckDigit(digits) {
169
+ let sum = 0;
170
+ for (let i = 0; i < digits.length; i++) {
171
+ const fromRight = digits.length - 1 - i;
172
+ sum += digits[i] * (fromRight % 2 === 0 ? 3 : 1);
173
+ }
174
+ return (10 - (sum % 10)) % 10;
175
+ }
176
+ const C39_CHARS = {
177
+ '0': [1, 1, 1, 3, 3, 1, 3, 1, 1],
178
+ '1': [3, 1, 1, 3, 1, 1, 1, 1, 3],
179
+ '2': [1, 1, 3, 3, 1, 1, 1, 1, 3],
180
+ '3': [3, 1, 3, 3, 1, 1, 1, 1, 1],
181
+ '4': [1, 1, 1, 3, 3, 1, 1, 1, 3],
182
+ '5': [3, 1, 1, 3, 3, 1, 1, 1, 1],
183
+ '6': [1, 1, 3, 3, 3, 1, 1, 1, 1],
184
+ '7': [1, 1, 1, 3, 1, 1, 3, 1, 3],
185
+ '8': [3, 1, 1, 3, 1, 1, 3, 1, 1],
186
+ '9': [1, 1, 3, 3, 1, 1, 3, 1, 1],
187
+ A: [3, 1, 1, 1, 1, 3, 1, 1, 3],
188
+ B: [1, 1, 3, 1, 1, 3, 1, 1, 3],
189
+ C: [3, 1, 3, 1, 1, 3, 1, 1, 1],
190
+ D: [1, 1, 1, 1, 3, 3, 1, 1, 3],
191
+ E: [3, 1, 1, 1, 3, 3, 1, 1, 1],
192
+ F: [1, 1, 3, 1, 3, 3, 1, 1, 1],
193
+ G: [1, 1, 1, 1, 1, 3, 3, 1, 3],
194
+ H: [3, 1, 1, 1, 1, 3, 3, 1, 1],
195
+ I: [1, 1, 3, 1, 1, 3, 3, 1, 1],
196
+ J: [1, 1, 1, 1, 3, 3, 3, 1, 1],
197
+ K: [3, 1, 1, 1, 1, 1, 1, 3, 3],
198
+ L: [1, 1, 3, 1, 1, 1, 1, 3, 3],
199
+ M: [3, 1, 3, 1, 1, 1, 1, 3, 1],
200
+ N: [1, 1, 1, 1, 3, 1, 1, 3, 3],
201
+ O: [3, 1, 1, 1, 3, 1, 1, 3, 1],
202
+ P: [1, 1, 3, 1, 3, 1, 1, 3, 1],
203
+ Q: [1, 1, 1, 1, 1, 1, 3, 3, 3],
204
+ R: [3, 1, 1, 1, 1, 1, 3, 3, 1],
205
+ S: [1, 1, 3, 1, 1, 1, 3, 3, 1],
206
+ T: [1, 1, 1, 1, 3, 1, 3, 3, 1],
207
+ U: [3, 3, 1, 1, 1, 1, 1, 1, 3],
208
+ V: [1, 3, 3, 1, 1, 1, 1, 1, 3],
209
+ W: [3, 3, 3, 1, 1, 1, 1, 1, 1],
210
+ X: [1, 3, 1, 1, 3, 1, 1, 1, 3],
211
+ Y: [3, 3, 1, 1, 3, 1, 1, 1, 1],
212
+ Z: [1, 3, 3, 1, 3, 1, 1, 1, 1],
213
+ '-': [1, 3, 1, 1, 1, 1, 3, 1, 3],
214
+ '.': [3, 3, 1, 1, 1, 1, 3, 1, 1],
215
+ ' ': [1, 3, 3, 1, 1, 1, 3, 1, 1],
216
+ $: [1, 3, 1, 3, 1, 3, 1, 1, 1],
217
+ '/': [1, 3, 1, 3, 1, 1, 1, 3, 1],
218
+ '+': [1, 3, 1, 1, 1, 3, 1, 3, 1],
219
+ '%': [1, 1, 1, 3, 1, 3, 1, 3, 1],
220
+ '*': [1, 3, 1, 1, 3, 1, 3, 1, 1], // * = start/stop
221
+ };
222
+ function renderSvg(modules, barWidth, height, color, bg) {
223
+ const totalWidth = modules.reduce((a, b) => a + b, 0) * barWidth;
224
+ const rects = [`<rect width="${totalWidth}" height="${height}" fill="${bg}" />`];
225
+ let x = 0;
226
+ let isBar = false;
227
+ for (const w of modules) {
228
+ const px = w * barWidth;
229
+ if (isBar) {
230
+ rects.push(`<rect x="${x}" y="0" width="${px}" height="${height}" fill="${color}" />`);
231
+ }
232
+ x += px;
233
+ isBar = !isBar;
234
+ }
235
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${totalWidth}" height="${height}" viewBox="0 0 ${totalWidth} ${height}">${rects.join('')}</svg>`;
236
+ }
237
+ function renderPng(modules, barWidth, height, color, bg) {
238
+ const totalWidth = modules.reduce((a, b) => a + b, 0) * barWidth;
239
+ const canvas = createCanvas(totalWidth, height);
240
+ const ctx = canvas.getContext('2d');
241
+ ctx.fillStyle = bg;
242
+ ctx.fillRect(0, 0, totalWidth, height);
243
+ ctx.fillStyle = color;
244
+ let x = 0;
245
+ let isBar = false;
246
+ for (const w of modules) {
247
+ const px = w * barWidth;
248
+ if (isBar)
249
+ ctx.fillRect(x, 0, px, height);
250
+ x += px;
251
+ isBar = !isBar;
252
+ }
253
+ return canvas.toBuffer('image/png');
254
+ }
255
+ function encodeCode128(data) {
256
+ for (const ch of data) {
257
+ const code = ch.charCodeAt(0);
258
+ if (code < 32 || code > 126) {
259
+ throw new Error(`Code 128 only supports ASCII 32-126 (invalid char: "${ch}")`);
260
+ }
261
+ }
262
+ const START_B = 104;
263
+ const charValues = [...data].map((ch) => ch.charCodeAt(0) - 32);
264
+ let checksum = START_B;
265
+ for (let i = 0; i < charValues.length; i++) {
266
+ checksum += (i + 1) * charValues[i];
267
+ }
268
+ checksum %= 103;
269
+ const patterns = [C128_PATTERNS[START_B], ...charValues.map((v) => C128_PATTERNS[v]), C128_PATTERNS[checksum]];
270
+ const modules = [];
271
+ for (const pat of patterns) {
272
+ for (const w of pat)
273
+ modules.push(w);
274
+ }
275
+ for (const w of C128_STOP)
276
+ modules.push(w);
277
+ return [10, ...modules, 10];
278
+ }
279
+ function bitsToModules(bits) {
280
+ const modules = [];
281
+ let i = 0;
282
+ while (i < bits.length) {
283
+ let count = 1;
284
+ while (i + count < bits.length && bits[i + count] === bits[i])
285
+ count++;
286
+ modules.push(count);
287
+ i += count;
288
+ }
289
+ return modules;
290
+ }
291
+ function encodeEan13(data) {
292
+ const digits = data.replace(/\D/g, '');
293
+ if (digits.length !== 12 && digits.length !== 13) {
294
+ throw new Error('EAN-13 requires 12 or 13 digits');
295
+ }
296
+ const d = digits.split('').map(Number);
297
+ let nums;
298
+ if (d.length === 13) {
299
+ const expected = eanCheckDigit(d.slice(0, 12));
300
+ if (d[12] !== expected) {
301
+ throw new Error(`Invalid EAN-13 check digit (expected ${expected}, got ${d[12]})`);
302
+ }
303
+ nums = d;
304
+ }
305
+ else {
306
+ nums = [...d, eanCheckDigit(d)];
307
+ }
308
+ const first = nums[0];
309
+ const parity = EAN13_PARITY[first];
310
+ let bits = '101';
311
+ for (let i = 0; i < 6; i++) {
312
+ bits += parity[i] ? EAN_G[nums[i + 1]] : EAN_L[nums[i + 1]];
313
+ }
314
+ bits += '01010';
315
+ for (let i = 7; i <= 12; i++) {
316
+ bits += EAN_R[nums[i]];
317
+ }
318
+ bits += '101';
319
+ return [7, ...bitsToModules(bits), 7];
320
+ }
321
+ function encodeEan8(data) {
322
+ const digits = data.replace(/\D/g, '');
323
+ if (digits.length !== 7 && digits.length !== 8) {
324
+ throw new Error('EAN-8 requires 7 or 8 digits');
325
+ }
326
+ const d = digits.split('').map(Number);
327
+ let nums;
328
+ if (d.length === 8) {
329
+ const expected = eanCheckDigit(d.slice(0, 7));
330
+ if (d[7] !== expected) {
331
+ throw new Error(`Invalid EAN-8 check digit (expected ${expected}, got ${d[7]})`);
332
+ }
333
+ nums = d;
334
+ }
335
+ else {
336
+ nums = [...d, eanCheckDigit(d)];
337
+ }
338
+ let bits = '101';
339
+ for (let i = 0; i < 4; i++)
340
+ bits += EAN_L[nums[i]];
341
+ bits += '01010';
342
+ for (let i = 4; i < 8; i++)
343
+ bits += EAN_R[nums[i]];
344
+ bits += '101';
345
+ return [7, ...bitsToModules(bits), 7];
346
+ }
347
+ function encodeUpca(data) {
348
+ const digits = data.replace(/\D/g, '');
349
+ if (digits.length !== 11 && digits.length !== 12) {
350
+ throw new Error('UPC-A requires 11 or 12 digits');
351
+ }
352
+ return encodeEan13(digits.length === 11 ? `0${digits}` : `0${digits.slice(0, 11)}${digits[11]}`);
353
+ }
354
+ function encodeCode39(data) {
355
+ const upper = data.toUpperCase();
356
+ for (const ch of upper) {
357
+ if (!C39_CHARS[ch]) {
358
+ throw new Error(`Code 39 invalid character: "${ch}". Allowed: A-Z, 0-9, space, - . $ / + %`);
359
+ }
360
+ }
361
+ const NARROW = 1;
362
+ const GAP = NARROW;
363
+ const modules = [NARROW * 10];
364
+ const encode = (ch) => C39_CHARS[ch];
365
+ const chars = ['*', ...upper, '*'];
366
+ for (let i = 0; i < chars.length; i++) {
367
+ const pat = encode(chars[i]);
368
+ for (const w of pat)
369
+ modules.push(w);
370
+ if (i < chars.length - 1)
371
+ modules.push(GAP);
372
+ }
373
+ modules.push(NARROW * 10);
374
+ return modules;
375
+ }
376
+ /**
377
+ * Generates a barcode image in SVG or PNG format.
378
+ *
379
+ * @param options.data - Data to encode (required)
380
+ * @param options.type - Barcode type: code128, ean13, ean8, upca, code39 (default: code128)
381
+ * @param options.width - Bar unit width in px (1–5, default 2)
382
+ * @param options.height - Bar height in px (50–300, default 100)
383
+ * @param options.format - Output format: svg or png (default: svg)
384
+ * @param options.color - Bar color hex (default: #000000)
385
+ * @param options.bg - Background color hex (default: #ffffff)
386
+ * @returns Object with contentType and body
387
+ * @throws Error if data is missing, invalid for the type, or parameters are out of range
388
+ */
389
+ export default function barcode(options) {
390
+ if (!options.data)
391
+ throw new Error('Please provide data to encode (?data={string})');
392
+ const type = (options.type ?? 'code128');
393
+ const format = (options.format ?? 'svg');
394
+ const barWidth = clamp(options.width ?? 2, 1, 5);
395
+ const height = clamp(options.height ?? 100, 50, 300);
396
+ const color = normalizeColor(options.color, '#000000');
397
+ const bg = normalizeColor(options.bg, '#ffffff');
398
+ if (!VALID_TYPES.includes(type)) {
399
+ throw new Error(`Type must be one of: ${VALID_TYPES.join(', ')}`);
400
+ }
401
+ if (!VALID_FORMATS.includes(format)) {
402
+ throw new Error(`Format must be one of: ${VALID_FORMATS.join(', ')}`);
403
+ }
404
+ if (options.width !== undefined && (options.width < 1 || options.width > 5)) {
405
+ throw new Error('Width must be between 1 and 5');
406
+ }
407
+ if (options.height !== undefined && (options.height < 50 || options.height > 300)) {
408
+ throw new Error('Height must be between 50 and 300');
409
+ }
410
+ const encoders = {
411
+ code128: encodeCode128,
412
+ ean13: encodeEan13,
413
+ ean8: encodeEan8,
414
+ upca: encodeUpca,
415
+ code39: encodeCode39,
416
+ };
417
+ const modules = encoders[type](options.data);
418
+ const contentType = format === 'png' ? 'image/png' : 'image/svg+xml';
419
+ const body = format === 'png'
420
+ ? renderPng(modules, barWidth, height, color, bg)
421
+ : renderSvg(modules, barWidth, height, color, bg);
422
+ return { contentType, body };
423
+ }
424
+ //# sourceMappingURL=barcode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"barcode.js","sourceRoot":"","sources":["../../../src/modules/v5/barcode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAoBvD,MAAM,WAAW,GAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAClF,MAAM,aAAa,GAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAEtD,SAAS,KAAK,CAAC,GAAW,EAAE,GAAW,EAAE,GAAW;IAChD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,aAAa,GAAe;IAC9B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAA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C,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChC,GAAG,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"}
@@ -0,0 +1,16 @@
1
+ export interface BaseResult {
2
+ value: string;
3
+ from: number;
4
+ to: number;
5
+ result: string;
6
+ }
7
+ /**
8
+ * Converts a number between numeric bases (2-36) with arbitrary precision.
9
+ *
10
+ * @param value - The value to convert, optionally prefixed with a minus sign
11
+ * @param from - Input base (default 10)
12
+ * @param to - Output base (default 16)
13
+ * @returns Object with the original value, both bases and the lowercase result
14
+ * @throws Error if the value is missing, too long or invalid for the input base, or if a base is out of range
15
+ */
16
+ export default function base(value: string, from?: number, to?: number): BaseResult;
@@ -0,0 +1,41 @@
1
+ import { MAX_BASE_VALUE_LENGTH } from '../../constants.js';
2
+ const DIGITS = '0123456789abcdefghijklmnopqrstuvwxyz';
3
+ function parseDigits(digits, from) {
4
+ const radix = BigInt(from);
5
+ let parsed = 0n;
6
+ for (const char of digits) {
7
+ const digit = DIGITS.indexOf(char);
8
+ if (digit === -1 || digit >= from)
9
+ throw new Error(`Invalid value for base ${from}`);
10
+ parsed = parsed * radix + BigInt(digit);
11
+ }
12
+ return parsed;
13
+ }
14
+ /**
15
+ * Converts a number between numeric bases (2-36) with arbitrary precision.
16
+ *
17
+ * @param value - The value to convert, optionally prefixed with a minus sign
18
+ * @param from - Input base (default 10)
19
+ * @param to - Output base (default 16)
20
+ * @returns Object with the original value, both bases and the lowercase result
21
+ * @throws Error if the value is missing, too long or invalid for the input base, or if a base is out of range
22
+ */
23
+ export default function base(value, from = 10, to = 16) {
24
+ if (!value)
25
+ throw new Error('Please provide a value (?value={value})');
26
+ if (value.length > MAX_BASE_VALUE_LENGTH) {
27
+ throw new Error(`Value must be ${MAX_BASE_VALUE_LENGTH} characters or fewer`);
28
+ }
29
+ if (!Number.isInteger(from) || !Number.isInteger(to))
30
+ throw new Error('Base must be a number');
31
+ if (from < 2 || from > 36 || to < 2 || to > 36)
32
+ throw new Error('Base must be between 2 and 36');
33
+ const negative = value.startsWith('-');
34
+ const digits = (negative ? value.slice(1) : value).toLowerCase();
35
+ if (!digits)
36
+ throw new Error(`Invalid value for base ${from}`);
37
+ const parsed = parseDigits(digits, from);
38
+ const sign = negative && parsed !== 0n ? '-' : '';
39
+ return { value, from, to, result: sign + parsed.toString(to) };
40
+ }
41
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/modules/v5/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAS3D,MAAM,MAAM,GAAG,sCAAsC,CAAC;AAEtD,SAAS,WAAW,CAAC,MAAc,EAAE,IAAY;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACrF,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,KAAa,EAAE,OAAe,EAAE,EAAE,KAAa,EAAE;IAC1E,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IACvE,IAAI,KAAK,CAAC,MAAM,GAAG,qBAAqB,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,iBAAiB,qBAAqB,sBAAsB,CAAC,CAAC;IAClF,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC/F,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IAEjG,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACjE,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;IAE/D,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzC,MAAM,IAAI,GAAG,QAAQ,IAAI,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAElD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC"}