@20syldev/api 3.5.0 → 4.0.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 (180) hide show
  1. package/.prettierrc +7 -0
  2. package/README.md +32 -33
  3. package/dist/app.js +36 -0
  4. package/dist/app.js.map +1 -0
  5. package/dist/config/env.js +73 -0
  6. package/dist/config/env.js.map +1 -0
  7. package/dist/config/versions.js +72 -0
  8. package/dist/config/versions.js.map +1 -0
  9. package/dist/constants.js +42 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/middleware/cors.js +15 -0
  12. package/dist/middleware/cors.js.map +1 -0
  13. package/dist/middleware/error.js +6 -0
  14. package/dist/middleware/error.js.map +1 -0
  15. package/dist/middleware/json.js +8 -0
  16. package/dist/middleware/json.js.map +1 -0
  17. package/dist/middleware/logger.js +26 -0
  18. package/dist/middleware/logger.js.map +1 -0
  19. package/dist/middleware/ratelimit.js +58 -0
  20. package/dist/middleware/ratelimit.js.map +1 -0
  21. package/dist/middleware/version.js +30 -0
  22. package/dist/middleware/version.js.map +1 -0
  23. package/dist/modules/v3/algorithms.js +221 -0
  24. package/dist/modules/v3/algorithms.js.map +1 -0
  25. package/{modules → dist/modules}/v3/captcha.js +4 -13
  26. package/dist/modules/v3/captcha.js.map +1 -0
  27. package/dist/modules/v3/chat.js +103 -0
  28. package/dist/modules/v3/chat.js.map +1 -0
  29. package/{modules → dist/modules}/v3/color.js +12 -13
  30. package/dist/modules/v3/color.js.map +1 -0
  31. package/dist/modules/v3/convert.js +41 -0
  32. package/dist/modules/v3/convert.js.map +1 -0
  33. package/dist/modules/v3/domain.js +83 -0
  34. package/dist/modules/v3/domain.js.map +1 -0
  35. package/dist/modules/v3/hash.js +16 -0
  36. package/dist/modules/v3/hash.js.map +1 -0
  37. package/dist/modules/v3/hyperplanning.js +50 -0
  38. package/dist/modules/v3/hyperplanning.js.map +1 -0
  39. package/dist/modules/v3/levenshtein.js +38 -0
  40. package/dist/modules/v3/levenshtein.js.map +1 -0
  41. package/dist/modules/v3/personal.js +129 -0
  42. package/dist/modules/v3/personal.js.map +1 -0
  43. package/dist/modules/v3/qrcode.js +21 -0
  44. package/dist/modules/v3/qrcode.js.map +1 -0
  45. package/dist/modules/v3/tic_tac_toe.js +221 -0
  46. package/dist/modules/v3/tic_tac_toe.js.map +1 -0
  47. package/dist/modules/v3/time.js +88 -0
  48. package/dist/modules/v3/time.js.map +1 -0
  49. package/{modules → dist/modules}/v3/token.js +10 -11
  50. package/dist/modules/v3/token.js.map +1 -0
  51. package/dist/modules/v3/username.js +92 -0
  52. package/dist/modules/v3/username.js.map +1 -0
  53. package/dist/modules/v3/utils.js +70 -0
  54. package/dist/modules/v3/utils.js.map +1 -0
  55. package/dist/modules/v3.js +16 -0
  56. package/dist/modules/v3.js.map +1 -0
  57. package/dist/modules/v4/algorithms.js +200 -0
  58. package/dist/modules/v4/algorithms.js.map +1 -0
  59. package/dist/modules/v4/captcha.js +35 -0
  60. package/dist/modules/v4/captcha.js.map +1 -0
  61. package/dist/modules/v4/chat.js +92 -0
  62. package/dist/modules/v4/chat.js.map +1 -0
  63. package/dist/modules/v4/color.js +43 -0
  64. package/dist/modules/v4/color.js.map +1 -0
  65. package/dist/modules/v4/convert.js +33 -0
  66. package/dist/modules/v4/convert.js.map +1 -0
  67. package/dist/modules/v4/dice.js +30 -0
  68. package/dist/modules/v4/dice.js.map +1 -0
  69. package/dist/modules/v4/domain.js +78 -0
  70. package/dist/modules/v4/domain.js.map +1 -0
  71. package/dist/modules/v4/encode.js +165 -0
  72. package/dist/modules/v4/encode.js.map +1 -0
  73. package/dist/modules/v4/geo.js +41 -0
  74. package/dist/modules/v4/geo.js.map +1 -0
  75. package/dist/modules/v4/hash.js +9 -0
  76. package/dist/modules/v4/hash.js.map +1 -0
  77. package/dist/modules/v4/hyperplanning.js +42 -0
  78. package/dist/modules/v4/hyperplanning.js.map +1 -0
  79. package/dist/modules/v4/levenshtein.js +29 -0
  80. package/dist/modules/v4/levenshtein.js.map +1 -0
  81. package/dist/modules/v4/palette.js +89 -0
  82. package/dist/modules/v4/palette.js.map +1 -0
  83. package/dist/modules/v4/personal.js +125 -0
  84. package/dist/modules/v4/personal.js.map +1 -0
  85. package/dist/modules/v4/placeholder.js +96 -0
  86. package/dist/modules/v4/placeholder.js.map +1 -0
  87. package/dist/modules/v4/qrcode.js +12 -0
  88. package/dist/modules/v4/qrcode.js.map +1 -0
  89. package/dist/modules/v4/statistics.js +41 -0
  90. package/dist/modules/v4/statistics.js.map +1 -0
  91. package/dist/modules/v4/text.js +293 -0
  92. package/dist/modules/v4/text.js.map +1 -0
  93. package/dist/modules/v4/tic_tac_toe.js +206 -0
  94. package/dist/modules/v4/tic_tac_toe.js.map +1 -0
  95. package/dist/modules/v4/time.js +73 -0
  96. package/dist/modules/v4/time.js.map +1 -0
  97. package/dist/modules/v4/token.js +36 -0
  98. package/dist/modules/v4/token.js.map +1 -0
  99. package/dist/modules/v4/username.js +87 -0
  100. package/dist/modules/v4/username.js.map +1 -0
  101. package/dist/modules/v4/utils.js +26 -0
  102. package/dist/modules/v4/utils.js.map +1 -0
  103. package/dist/modules/v4/validate.js +54 -0
  104. package/dist/modules/v4/validate.js.map +1 -0
  105. package/dist/modules/v4.js +18 -0
  106. package/dist/modules/v4.js.map +1 -0
  107. package/dist/routes/delete.js +65 -0
  108. package/dist/routes/delete.js.map +1 -0
  109. package/dist/routes/get.js +441 -0
  110. package/dist/routes/get.js.map +1 -0
  111. package/dist/routes/index.js +50 -0
  112. package/dist/routes/index.js.map +1 -0
  113. package/dist/routes/patch.js +41 -0
  114. package/dist/routes/patch.js.map +1 -0
  115. package/dist/routes/post.js +185 -0
  116. package/dist/routes/post.js.map +1 -0
  117. package/dist/storage/index.js +13 -0
  118. package/dist/storage/index.js.map +1 -0
  119. package/dist/types/storage.js +2 -0
  120. package/dist/types/storage.js.map +1 -0
  121. package/dist/utils/response.js +10 -0
  122. package/dist/utils/response.js.map +1 -0
  123. package/dist/utils/version.js +3 -0
  124. package/dist/utils/version.js.map +1 -0
  125. package/eslint.config.js +20 -0
  126. package/package.json +30 -15
  127. package/src/app.ts +44 -0
  128. package/src/config/env.ts +81 -0
  129. package/src/config/versions.ts +80 -0
  130. package/src/constants.ts +28 -0
  131. package/src/middleware/cors.ts +17 -0
  132. package/src/middleware/error.ts +7 -0
  133. package/src/middleware/json.ts +9 -0
  134. package/src/middleware/logger.ts +31 -0
  135. package/src/middleware/ratelimit.ts +66 -0
  136. package/src/middleware/version.ts +39 -0
  137. package/{modules → src/modules}/v3/algorithms.js +1 -1
  138. package/src/modules/v3/captcha.js +60 -0
  139. package/{modules → src/modules}/v3/chat.js +6 -4
  140. package/src/modules/v3/color.js +60 -0
  141. package/{modules → src/modules}/v3/convert.js +5 -5
  142. package/{modules → src/modules}/v3/domain.js +51 -4
  143. package/{modules → src/modules}/v3/hash.js +1 -1
  144. package/{modules → src/modules}/v3/hyperplanning.js +11 -10
  145. package/{modules → src/modules}/v3/levenshtein.js +3 -3
  146. package/{modules → src/modules}/v3/personal.js +20 -8
  147. package/{modules → src/modules}/v3/qrcode.js +1 -1
  148. package/{modules → src/modules}/v3/tic_tac_toe.js +24 -18
  149. package/{modules → src/modules}/v3/time.js +22 -11
  150. package/src/modules/v3/token.js +54 -0
  151. package/src/modules/v3/username.js +94 -0
  152. package/{modules → src/modules}/v3/utils.js +2 -2
  153. package/{modules → src/modules}/v3.js +1 -1
  154. package/src/modules/v4/algorithms.ts +155 -0
  155. package/src/modules/v4/captcha.ts +49 -0
  156. package/src/modules/v4/chat.ts +99 -0
  157. package/src/modules/v4/color.ts +64 -0
  158. package/src/modules/v4/convert.ts +38 -0
  159. package/src/modules/v4/domain.ts +81 -0
  160. package/src/modules/v4/hash.ts +9 -0
  161. package/src/modules/v4/hyperplanning.ts +58 -0
  162. package/src/modules/v4/levenshtein.ts +38 -0
  163. package/src/modules/v4/personal.ts +147 -0
  164. package/src/modules/v4/qrcode.ts +11 -0
  165. package/src/modules/v4/tic_tac_toe.ts +223 -0
  166. package/src/modules/v4/time.ts +92 -0
  167. package/src/modules/v4/token.ts +43 -0
  168. package/src/modules/v4/username.ts +89 -0
  169. package/src/modules/v4/utils.ts +38 -0
  170. package/src/modules/v4.ts +15 -0
  171. package/src/routes/get.ts +461 -0
  172. package/src/routes/index.ts +58 -0
  173. package/src/routes/post.ts +200 -0
  174. package/src/storage/index.ts +16 -0
  175. package/src/types/express.d.ts +17 -0
  176. package/src/types/storage.ts +48 -0
  177. package/src/utils/response.ts +11 -0
  178. package/tsconfig.json +17 -0
  179. package/app.js +0 -865
  180. package/modules/v3/username.js +0 -32
@@ -1,6 +1,5 @@
1
1
  import { randomBytes } from 'crypto';
2
2
  import { v4 } from 'uuid';
3
-
4
3
  /**
5
4
  * Generate a random token of specified length and type.
6
5
  *
@@ -14,35 +13,35 @@ export default function token(len, type = 'alphanum') {
14
13
  if (isNaN(len) || len < 12) {
15
14
  throw new Error('Length must be a number greater than or equal to 12');
16
15
  }
17
-
18
16
  if (len > 4096) {
19
17
  throw new Error('Length cannot exceed 4096');
20
18
  }
21
-
22
19
  // Helper function to generate token from character set
23
20
  const genToken = (chars, length) => {
24
21
  return Array.from({ length }, () => {
25
22
  return chars[Math.floor(Math.random() * chars.length)];
26
23
  }).join('');
27
- }
28
-
24
+ };
29
25
  // Token type definitions
30
26
  const tokenTypes = {
31
27
  alpha: () => genToken('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', len),
32
28
  alphanum: () => genToken('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', len),
33
- base64: () => randomBytes(Math.ceil(len * 0.75)).toString('base64').slice(0, len),
34
- hex: () => randomBytes(Math.ceil(len * 0.5)).toString('hex').slice(0, len),
29
+ base64: () => randomBytes(Math.ceil(len * 0.75))
30
+ .toString('base64')
31
+ .slice(0, len),
32
+ hex: () => randomBytes(Math.ceil(len * 0.5))
33
+ .toString('hex')
34
+ .slice(0, len),
35
35
  num: () => genToken('0123456789', len),
36
36
  punct: () => genToken('!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~', len),
37
37
  urlsafe: () => genToken('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_', len),
38
- uuid: () => v4().replace(/-/g, '').slice(0, len)
38
+ uuid: () => v4().replace(/-/g, '').slice(0, len),
39
39
  };
40
-
41
40
  // Generate token based on type or default to alphanum
42
41
  if (!tokenTypes[type.toLowerCase()]) {
43
42
  throw new Error(`Invalid token type. Valid types: ${Object.keys(tokenTypes).join(', ')}`);
44
43
  }
45
-
46
44
  // Generate token based on type or default to alphanum
47
45
  return (tokenTypes[type.toLowerCase()] || tokenTypes.alphanum)();
48
- }
46
+ }
47
+ //# sourceMappingURL=token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/modules/v3/token.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAE1B;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,GAAG,EAAE,IAAI,GAAG,UAAU;IAChD,mBAAmB;IACnB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,GAAG,GAAG,IAAI,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC;IAED,uDAAuD;IACvD,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE;YAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,yBAAyB;IACzB,MAAM,UAAU,GAAG;QACf,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,sDAAsD,EAAE,GAAG,CAAC;QAClF,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,gEAAgE,EAAE,GAAG,CAAC;QAC/F,MAAM,EAAE,GAAG,EAAE,CACT,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;aAC7B,QAAQ,CAAC,QAAQ,CAAC;aAClB,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QACtB,GAAG,EAAE,GAAG,EAAE,CACN,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;aAC5B,QAAQ,CAAC,KAAK,CAAC;aACf,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;QACtB,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,YAAY,EAAE,GAAG,CAAC;QACtC,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,oCAAoC,EAAE,GAAG,CAAC;QAChE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,kEAAkE,EAAE,GAAG,CAAC;QAChG,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;KACnD,CAAC;IAEF,sDAAsD;IACtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,oCAAoC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,sDAAsD;IACtD,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,92 @@
1
+ import { random, randomNumber } from './utils.js';
2
+ /**
3
+ * Generate a random username with related information
4
+ *
5
+ * @returns {Object} Object containing username and component parts
6
+ */
7
+ export default function username() {
8
+ const adj = [
9
+ 'Happy',
10
+ 'Silly',
11
+ 'Clever',
12
+ 'Creative',
13
+ 'Brave',
14
+ 'Gentle',
15
+ 'Kind',
16
+ 'Funny',
17
+ 'Wise',
18
+ 'Charming',
19
+ 'Sincere',
20
+ 'Resourceful',
21
+ 'Patient',
22
+ 'Energetic',
23
+ 'Adventurous',
24
+ 'Ambitious',
25
+ 'Courageous',
26
+ 'Courteous',
27
+ 'Determined',
28
+ ];
29
+ const ani = [
30
+ 'Cat',
31
+ 'Dog',
32
+ 'Tiger',
33
+ 'Elephant',
34
+ 'Monkey',
35
+ 'Penguin',
36
+ 'Dolphin',
37
+ 'Lion',
38
+ 'Bear',
39
+ 'Fox',
40
+ 'Owl',
41
+ 'Giraffe',
42
+ 'Zebra',
43
+ 'Koala',
44
+ 'Rabbit',
45
+ 'Squirrel',
46
+ 'Panda',
47
+ 'Horse',
48
+ 'Wolf',
49
+ 'Eagle',
50
+ ];
51
+ const job = [
52
+ 'Writer',
53
+ 'Artist',
54
+ 'Musician',
55
+ 'Explorer',
56
+ 'Scientist',
57
+ 'Engineer',
58
+ 'Athlete',
59
+ 'Chef',
60
+ 'Doctor',
61
+ 'Teacher',
62
+ 'Lawyer',
63
+ 'Entrepreneur',
64
+ 'Actor',
65
+ 'Dancer',
66
+ 'Photographer',
67
+ 'Architect',
68
+ 'Pilot',
69
+ 'Designer',
70
+ 'Journalist',
71
+ 'Veterinarian',
72
+ ];
73
+ const nombre = randomNumber(0, 99);
74
+ const choix = {
75
+ adj_num: () => random(adj) + nombre,
76
+ ani_num: () => random(ani) + nombre,
77
+ pro_num: () => random(job) + nombre,
78
+ adj_ani: () => random(adj) + random(ani),
79
+ adj_ani_num: () => random(adj) + random(ani) + nombre,
80
+ adj_pro: () => random(adj) + random(job),
81
+ pro_ani: () => random(job) + random(ani),
82
+ pro_ani_num: () => random(job) + random(ani) + nombre,
83
+ };
84
+ return {
85
+ username: choix[random(Object.keys(choix))](),
86
+ number: nombre,
87
+ adjective: random(adj),
88
+ animal: random(ani),
89
+ job: random(job),
90
+ };
91
+ }
92
+ //# sourceMappingURL=username.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"username.js","sourceRoot":"","sources":["../../../src/modules/v3/username.js"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ;IAC5B,MAAM,GAAG,GAAG;QACR,OAAO;QACP,OAAO;QACP,QAAQ;QACR,UAAU;QACV,OAAO;QACP,QAAQ;QACR,MAAM;QACN,OAAO;QACP,MAAM;QACN,UAAU;QACV,SAAS;QACT,aAAa;QACb,SAAS;QACT,WAAW;QACX,aAAa;QACb,WAAW;QACX,YAAY;QACZ,WAAW;QACX,YAAY;KACf,CAAC;IACF,MAAM,GAAG,GAAG;QACR,KAAK;QACL,KAAK;QACL,OAAO;QACP,UAAU;QACV,QAAQ;QACR,SAAS;QACT,SAAS;QACT,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,SAAS;QACT,OAAO;QACP,OAAO;QACP,QAAQ;QACR,UAAU;QACV,OAAO;QACP,OAAO;QACP,MAAM;QACN,OAAO;KACV,CAAC;IACF,MAAM,GAAG,GAAG;QACR,QAAQ;QACR,QAAQ;QACR,UAAU;QACV,UAAU;QACV,WAAW;QACX,UAAU;QACV,SAAS;QACT,MAAM;QACN,QAAQ;QACR,SAAS;QACT,QAAQ;QACR,cAAc;QACd,OAAO;QACP,QAAQ;QACR,cAAc;QACd,WAAW;QACX,OAAO;QACP,UAAU;QACV,YAAY;QACZ,cAAc;KACjB,CAAC;IAEF,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG;QACV,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;QACnC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QACxC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;QACrD,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QACxC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;QACxC,WAAW,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM;KACxD,CAAC;IAEF,OAAO;QACH,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;QAC7C,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC;QACtB,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC;KACnB,CAAC;AACN,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Shared utility functions for the API modules
3
+ */
4
+ /**
5
+ * Return a random element from an array.
6
+ *
7
+ * @param {Array} arr - The array to choose from.
8
+ * @returns {*} - A random element from the array.
9
+ */
10
+ export function random(arr) {
11
+ return arr[Math.floor(Math.random() * arr.length)];
12
+ }
13
+ /**
14
+ * Return a random number between min and max (inclusive).
15
+ *
16
+ * @param {number} min - The minimum number.
17
+ * @param {number} max - The maximum number.
18
+ * @returns {number} - A random number between min and max.
19
+ */
20
+ export function randomNumber(min, max) {
21
+ return Math.floor(Math.random() * (max - min + 1)) + min;
22
+ }
23
+ /**
24
+ * Generate a random IP address.
25
+ *
26
+ * @returns {string} - A random IP address in the format "X.X.X.X".
27
+ */
28
+ export function genIP() {
29
+ return `${randomNumber(0, 255)}.${randomNumber(0, 255)}.${randomNumber(0, 255)}.${randomNumber(0, 255)}`;
30
+ }
31
+ /**
32
+ * Format a JavaScript Date object to ISO format without timezone.
33
+ *
34
+ * @param {Date} date - Date object to format
35
+ * @returns {string} - Formatted date string
36
+ */
37
+ export function formatDate(date) {
38
+ return new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().replace('Z', '');
39
+ }
40
+ /**
41
+ * Parse a space-separated env variable into an array, or return null.
42
+ *
43
+ * @param {string} key - The environment variable name.
44
+ * @returns {string[]|null} - The parsed array or null.
45
+ */
46
+ export function envList(key) {
47
+ const v = process.env[key];
48
+ return v && v !== 'undefined' ? v.split(' ') : null;
49
+ }
50
+ /**
51
+ * Manage rate limiting for users
52
+ *
53
+ * @param {Object} rateLimits - Rate limits object
54
+ * @param {string} userId - User ID
55
+ * @param {number} timestamp - Current timestamp
56
+ * @param {number} window - Time window in milliseconds
57
+ * @param {number} limit - Maximum requests in window
58
+ * @returns {boolean} - True if rate limit is exceeded
59
+ * @throws {Error} - If rate limit is exceeded
60
+ */
61
+ export function checkRateLimit(rateLimits, userId, timestamp, window = 10000, limit = 50) {
62
+ rateLimits[userId] = (rateLimits[userId] || []).filter((ts) => timestamp - ts < window);
63
+ if (rateLimits[userId].length > limit) {
64
+ const remainingTime = Math.ceil((rateLimits[userId][0] + window - timestamp) / 1000);
65
+ throw new Error(`Rate limit exceeded. Try again in ${remainingTime} seconds.`);
66
+ }
67
+ rateLimits[userId].push(timestamp);
68
+ return false;
69
+ }
70
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/modules/v3/utils.js"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,GAAG;IACtB,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,GAAG,EAAE,GAAG;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC7D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK;IACjB,OAAO,GAAG,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,IAAI;IAC3B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACtG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG;IACvB,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,KAAK,EAAE,KAAK,GAAG,EAAE;IACpF,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;IAExF,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;QACpC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,CAAC;QACrF,MAAM,IAAI,KAAK,CAAC,qCAAqC,aAAa,WAAW,CAAC,CAAC;IACnF,CAAC;IAED,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC;AACjB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export * as algorithms from './v3/algorithms.js';
2
+ export { default as chat } from './v3/chat.js';
3
+ export { default as captcha } from './v3/captcha.js';
4
+ export { default as color } from './v3/color.js';
5
+ export { default as convert } from './v3/convert.js';
6
+ export { default as domain } from './v3/domain.js';
7
+ export { default as hash } from './v3/hash.js';
8
+ export { default as hyperplanning } from './v3/hyperplanning.js';
9
+ export { default as levenshtein } from './v3/levenshtein.js';
10
+ export { default as personal } from './v3/personal.js';
11
+ export { default as qrcode } from './v3/qrcode.js';
12
+ export { default as tic_tac_toe } from './v3/tic_tac_toe.js';
13
+ export { default as time } from './v3/time.js';
14
+ export { default as token } from './v3/token.js';
15
+ export { default as username } from './v3/username.js';
16
+ //# sourceMappingURL=v3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v3.js","sourceRoot":"","sources":["../../src/modules/v3.js"],"names":[],"mappings":"AAAA,OAAO,KAAK,UAAU,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,200 @@
1
+ import { MAX_FACTORIAL, MAX_GCD_VALUE, MAX_PRIME_LIST, MAX_STRING_LENGTH, ROMAN_VALUES } from '../../constants.js';
2
+ export function anagram(value, value2) {
3
+ if (!value)
4
+ throw new Error('First value is required');
5
+ if (!value2)
6
+ throw new Error('Second value is required');
7
+ if (typeof value !== 'string')
8
+ throw new Error('First value must be a string');
9
+ if (typeof value2 !== 'string')
10
+ throw new Error('Second value must be a string');
11
+ if (value.length < 2)
12
+ throw new Error('First value must be at least two characters long');
13
+ if (value.length > MAX_STRING_LENGTH)
14
+ throw new Error('First value must be less than 1000 characters long');
15
+ if (value2.length < 2)
16
+ throw new Error('Second value must be at least two characters long');
17
+ if (value2.length > MAX_STRING_LENGTH)
18
+ throw new Error('Second value must be less than 1000 characters long');
19
+ return value.split('').sort().join('') === value2.split('').sort().join('');
20
+ }
21
+ export function bubblesort(value) {
22
+ if (!value)
23
+ throw new Error('A value is required');
24
+ if (typeof value !== 'string')
25
+ throw new Error('Value must be a string');
26
+ const arr = value.split(',').map(Number);
27
+ if (arr.some(isNaN))
28
+ throw new Error('Array must contain only numbers');
29
+ if (arr.length < 2)
30
+ throw new Error('Array must contain at least two numbers');
31
+ if (arr.length > MAX_STRING_LENGTH)
32
+ throw new Error('Array must contain less than 1000 numbers');
33
+ for (let i = 0; i < arr.length - 1; i++) {
34
+ for (let j = 0; j < arr.length - i - 1; j++) {
35
+ if (arr[j] > arr[j + 1])
36
+ [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
37
+ }
38
+ }
39
+ return arr;
40
+ }
41
+ export function factorial(value) {
42
+ const num = Number(value);
43
+ if (isNaN(num))
44
+ throw new Error('Value must be a number');
45
+ if (num < 0)
46
+ throw new Error('Number must be positive');
47
+ if (num > MAX_FACTORIAL)
48
+ throw new Error('Number must be between 0 and 170');
49
+ return num <= 1 ? 1 : num * factorial(num - 1);
50
+ }
51
+ export function fibonacci(value) {
52
+ const num = Number(value);
53
+ if (isNaN(num))
54
+ throw new Error('Value must be a number');
55
+ if (num < 0)
56
+ throw new Error('Number must be positive');
57
+ if (num > 1000)
58
+ throw new Error('Number must be between 0 and 1000');
59
+ const fib = [0, 1];
60
+ for (let i = 2; i < num; i++) {
61
+ fib.push(fib[i - 1] + fib[i - 2]);
62
+ }
63
+ return fib.slice(0, num);
64
+ }
65
+ export function gcd(value, value2) {
66
+ let a = Number(value);
67
+ let b = Number(value2);
68
+ if (isNaN(a))
69
+ throw new Error('First value must be a number');
70
+ if (isNaN(b))
71
+ throw new Error('Second value must be a number');
72
+ if (a <= 0)
73
+ throw new Error('First number must be strictly positive');
74
+ if (b <= 0)
75
+ throw new Error('Second number must be strictly positive');
76
+ if (a > MAX_GCD_VALUE)
77
+ throw new Error('First number must be between 0 and 100000');
78
+ if (b > MAX_GCD_VALUE)
79
+ throw new Error('Second number must be between 0 and 100000');
80
+ a = Math.abs(a);
81
+ b = Math.abs(b);
82
+ while (b)
83
+ [a, b] = [b, a % b];
84
+ return a;
85
+ }
86
+ export function isprime(value) {
87
+ const num = Number(value);
88
+ if (isNaN(num))
89
+ throw new Error('Value must be a number');
90
+ if (num < 1)
91
+ throw new Error('Number must be positive');
92
+ if (num > MAX_GCD_VALUE)
93
+ throw new Error('Number must be between 1 and 100000');
94
+ for (let i = 2; i <= Math.sqrt(num); i++) {
95
+ if (num % i === 0)
96
+ return false;
97
+ }
98
+ return true;
99
+ }
100
+ export function palindrome(value) {
101
+ if (!value)
102
+ throw new Error('A value is required');
103
+ if (typeof value !== 'string')
104
+ throw new Error('Value must be a string');
105
+ if (value.length < 2)
106
+ throw new Error('Value must be at least two characters long');
107
+ if (value.length > MAX_STRING_LENGTH)
108
+ throw new Error('Value must be less than 1000 characters long');
109
+ return value === value.split('').reverse().join('');
110
+ }
111
+ export function primefactors(value) {
112
+ let num = Number(value);
113
+ if (isNaN(num))
114
+ throw new Error('Value must be a number');
115
+ if (num < 2)
116
+ throw new Error('Number must be positive and greater than 1');
117
+ if (num > MAX_GCD_VALUE)
118
+ throw new Error('Number must be between 2 and 100000');
119
+ const factors = [];
120
+ for (let i = 2; i <= num; i++) {
121
+ while (num % i === 0) {
122
+ factors.push(i);
123
+ num /= i;
124
+ }
125
+ }
126
+ return factors;
127
+ }
128
+ export function primelist(value) {
129
+ const num = Number(value);
130
+ if (isNaN(num))
131
+ throw new Error('Value must be a number');
132
+ if (num < 2)
133
+ throw new Error('Number must be positive and greater than 1');
134
+ if (num > MAX_PRIME_LIST)
135
+ throw new Error('Number must be between 2 and 10000');
136
+ const primes = [];
137
+ for (let i = 2; i <= num; i++) {
138
+ let isPrime = true;
139
+ for (let j = 2; j <= Math.sqrt(i); j++) {
140
+ if (i % j === 0) {
141
+ isPrime = false;
142
+ break;
143
+ }
144
+ }
145
+ if (isPrime)
146
+ primes.push(i);
147
+ }
148
+ return primes;
149
+ }
150
+ export function reverse(value) {
151
+ if (!value)
152
+ throw new Error('A value is required');
153
+ if (typeof value !== 'string')
154
+ throw new Error('Value must be a string');
155
+ return value.split('').reverse().join('');
156
+ }
157
+ export function roman(value) {
158
+ if (!value)
159
+ throw new Error('A value is required');
160
+ const num = Number(value);
161
+ if (!isNaN(num)) {
162
+ if (!Number.isInteger(num))
163
+ throw new Error('Value must be an integer');
164
+ if (num < 1 || num > 3999)
165
+ throw new Error('Number must be between 1 and 3999');
166
+ let result = '';
167
+ let n = num;
168
+ for (const [val, sym] of ROMAN_VALUES) {
169
+ while (n >= val) {
170
+ result += sym;
171
+ n -= val;
172
+ }
173
+ }
174
+ return result;
175
+ }
176
+ if (typeof value !== 'string')
177
+ throw new Error('Value must be a number or a Roman numeral');
178
+ const upper = value.toUpperCase();
179
+ if (!/^[MDCLXVI]+$/.test(upper))
180
+ throw new Error('Invalid Roman numeral');
181
+ let result = 0;
182
+ let i = 0;
183
+ while (i < upper.length) {
184
+ const two = upper.slice(i, i + 2);
185
+ const match = ROMAN_VALUES.find(([, sym]) => sym === two);
186
+ if (match) {
187
+ result += match[0];
188
+ i += 2;
189
+ }
190
+ else {
191
+ const one = ROMAN_VALUES.find(([, sym]) => sym === upper[i]);
192
+ if (!one)
193
+ throw new Error('Invalid Roman numeral');
194
+ result += one[0];
195
+ i += 1;
196
+ }
197
+ }
198
+ return result;
199
+ }
200
+ //# sourceMappingURL=algorithms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"algorithms.js","sourceRoot":"","sources":["../../../src/modules/v4/algorithms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { createCanvas } from 'canvas';
2
+ export default function captcha(text) {
3
+ if (!text)
4
+ throw new Error('Text is required to generate a captcha.');
5
+ const size = 60, font = '60px Comic Sans Ms', width = text.length * size, height = 120;
6
+ const canvas = createCanvas(width, height), ctx = canvas.getContext('2d');
7
+ ctx.fillStyle = 'white';
8
+ ctx.fillRect(0, 0, width, height);
9
+ for (let i = 0; i < 20; i++) {
10
+ ctx.strokeStyle = 'rgba(0, 0, 0, 0.3)';
11
+ ctx.beginPath();
12
+ ctx.moveTo(Math.random() * width, Math.random() * height);
13
+ ctx.lineTo(Math.random() * width, Math.random() * height);
14
+ ctx.lineWidth = Math.random() * 2;
15
+ ctx.stroke();
16
+ }
17
+ let x = (canvas.width + 20 - width) / 2;
18
+ for (let i = 0; i < text.length; i++) {
19
+ const offsetX = Math.cos(i * 0.3) * 10, y = height / 2.5 + Math.floor(Math.random() * (height / 2));
20
+ ctx.font = font;
21
+ ctx.fillStyle = `rgb(${Math.floor(Math.random() * 192)}, ${Math.floor(Math.random() * 192)}, ${Math.floor(Math.random() * 192)})`;
22
+ ctx.save();
23
+ ctx.translate(x + size / 2, y);
24
+ ctx.rotate((Math.random() - 0.5) * 0.5);
25
+ ctx.fillText(text[i], -size / 2 + offsetX, 0);
26
+ ctx.restore();
27
+ x += size;
28
+ }
29
+ for (let i = 0; i < 200; i++) {
30
+ ctx.fillStyle = 'black';
31
+ ctx.fillRect(Math.floor(Math.random() * width), Math.floor(Math.random() * height), 1.2, 1.2);
32
+ }
33
+ return canvas.toBuffer('image/png');
34
+ }
35
+ //# sourceMappingURL=captcha.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captcha.js","sourceRoot":"","sources":["../../../src/modules/v4/captcha.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ import { checkRateLimit } from './utils.js';
2
+ import { SESSION_TTL } from '../../constants.js';
3
+ export default function chat(action, params) {
4
+ const storage = params.storage;
5
+ storage.messages ??= [];
6
+ storage.privateChats ??= {};
7
+ storage.sessions ??= {};
8
+ storage.rateLimits ??= {};
9
+ const { messages, privateChats, sessions, rateLimits } = storage;
10
+ if (!params.username)
11
+ throw new Error('Please provide a username');
12
+ const u = params.username.toLowerCase();
13
+ const now = Date.now();
14
+ checkRateLimit(rateLimits, u, now);
15
+ if (action === 'message') {
16
+ return sendMessage(params, messages, privateChats, sessions, u, now);
17
+ }
18
+ else if (action === 'private') {
19
+ return getPrivateChat(params, privateChats);
20
+ }
21
+ else if (action === 'fetch') {
22
+ return fetchMessages(messages);
23
+ }
24
+ else if (action === 'clear') {
25
+ return clearPrivateChat(params, privateChats, sessions, u);
26
+ }
27
+ else {
28
+ throw new Error('Invalid action. Use "message", "private", "fetch", or "clear"');
29
+ }
30
+ }
31
+ function sendMessage(params, messages, privateChats, sessions, u, now) {
32
+ const { message, session, token } = params;
33
+ if (!message)
34
+ throw new Error('Please provide a message');
35
+ if (!session)
36
+ throw new Error('Please provide a valid session ID');
37
+ if (sessions[u] && sessions[u].user !== session) {
38
+ throw new Error('Session ID mismatch');
39
+ }
40
+ const msg = {
41
+ username: params.username,
42
+ message,
43
+ timestamp: params.timestamp || new Date().toISOString(),
44
+ };
45
+ if (token) {
46
+ privateChats[token] = privateChats[token] || [];
47
+ privateChats[token].push(msg);
48
+ setTimeout(() => {
49
+ delete privateChats[token];
50
+ }, SESSION_TTL);
51
+ }
52
+ else {
53
+ messages.push(msg);
54
+ setTimeout(() => messages.splice(messages.indexOf(msg), 1), SESSION_TTL);
55
+ }
56
+ sessions[u] = sessions[u] || { user: session, last: now };
57
+ sessions[u].last = now;
58
+ setTimeout(() => {
59
+ if (sessions[u] && now - sessions[u].last >= SESSION_TTL)
60
+ delete sessions[u];
61
+ }, SESSION_TTL);
62
+ return { message: 'Message sent successfully' };
63
+ }
64
+ function getPrivateChat(params, privateChats) {
65
+ const { token } = params;
66
+ if (!token)
67
+ throw new Error('Please provide a valid token');
68
+ if (privateChats[token])
69
+ return privateChats[token];
70
+ throw new Error('Invalid or expired token.');
71
+ }
72
+ function fetchMessages(messages) {
73
+ if (messages.length > 0)
74
+ return messages;
75
+ throw new Error('No messages stored.');
76
+ }
77
+ function clearPrivateChat(params, privateChats, sessions, u) {
78
+ const { token, session } = params;
79
+ if (!token)
80
+ throw new Error('Please provide a valid token');
81
+ if (!session)
82
+ throw new Error('Please provide a valid session ID');
83
+ if (sessions[u] && sessions[u].user !== session) {
84
+ throw new Error('Session ID mismatch');
85
+ }
86
+ if (!privateChats[token])
87
+ throw new Error('Invalid or expired token.');
88
+ delete privateChats[token];
89
+ delete sessions[u];
90
+ return { message: 'Private chat cleared successfully' };
91
+ }
92
+ //# sourceMappingURL=chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../../src/modules/v4/chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export default function color() {
2
+ const r = Math.floor(Math.random() * 256), g = Math.floor(Math.random() * 256), b = Math.floor(Math.random() * 256);
3
+ const hsl = (() => {
4
+ const r1 = r / 255, g1 = g / 255, b1 = b / 255, max = Math.max(r1, g1, b1), min = Math.min(r1, g1, b1), l = (max + min) / 2;
5
+ if (max === min)
6
+ return [0, 0, l * 100];
7
+ const d = max - min, s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
8
+ const h = {
9
+ [r1]: (g1 - b1) / d + (g1 < b1 ? 6 : 0),
10
+ [g1]: (b1 - r1) / d + 2,
11
+ [b1]: (r1 - g1) / d + 4,
12
+ }[max] ?? 0;
13
+ return [(h * 60) % 360, s * 100, l * 100];
14
+ })();
15
+ const hsv = (() => {
16
+ const max = Math.max(r, g, b), min = Math.min(r, g, b), v = max / 255, s = max ? (max - min) / max : 0;
17
+ const h = max === min
18
+ ? 0
19
+ : ({
20
+ [r]: (g - b) / (max - min),
21
+ [g]: 2 + (b - r) / (max - min),
22
+ [b]: 4 + (r - g) / (max - min),
23
+ }[max] ?? 0);
24
+ return [(h * 60) % 360, s * 100, v * 100];
25
+ })();
26
+ const hwb = (() => {
27
+ const [h] = hsv, whiteness = Math.min(r, g, b) / 255, blackness = 1 - Math.max(r, g, b) / 255;
28
+ return [h, whiteness * 100, blackness * 100];
29
+ })();
30
+ const cmyk = (() => {
31
+ const k = 1 - Math.max(r, g, b) / 255, c = (1 - r / 255 - k) / (1 - k) || 0, m = (1 - g / 255 - k) / (1 - k) || 0, y = (1 - b / 255 - k) / (1 - k) || 0;
32
+ return [c * 100, m * 100, y * 100, k * 100];
33
+ })();
34
+ return {
35
+ hex: `#${[r, g, b].map((x) => x.toString(16).padStart(2, '0')).join('')}`,
36
+ rgb: `rgb(${r}, ${g}, ${b})`,
37
+ hsl: `hsl(${hsl[0].toFixed(1)}, ${hsl[1].toFixed(1)}%, ${hsl[2].toFixed(1)}%)`,
38
+ hsv: `hsv(${hsv[0].toFixed(1)}, ${hsv[1].toFixed(1)}%, ${hsv[2].toFixed(1)}%)`,
39
+ hwb: `hwb(${hwb[0].toFixed(1)}, ${hwb[1].toFixed(1)}%, ${hwb[2].toFixed(1)}%)`,
40
+ cmyk: `cmyk(${cmyk.map((x) => x.toFixed(1)).join('%, ')}%)`,
41
+ };
42
+ }
43
+ //# sourceMappingURL=color.js.map