@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
@@ -0,0 +1,125 @@
1
+ import { random, randomNumber } from './utils.js';
2
+ export default function personal() {
3
+ const people = [
4
+ { name: 'John Doe', social: 'john_doe', email: 'john@example.com', country: 'US' },
5
+ { name: 'Jane Martin', social: 'jane_martin', email: 'jane@example.com', country: 'FR' },
6
+ { name: 'Michael Johnson', social: 'mike_johnson', email: 'michael@example.com', country: 'UK' },
7
+ { name: 'Emily Davis', social: 'emily_davis', email: 'emily@example.com', country: 'ES' },
8
+ { name: 'Alexis Barbos', social: 'alexis_barbos', email: 'alexis@example.com', country: 'DE' },
9
+ { name: 'Sarah Williams', social: 'sarah_williams', email: 'sarah@example.com', country: 'IT' },
10
+ { name: 'Daniel Brown', social: 'daniel_brown', email: 'daniel@example.com', country: 'JP' },
11
+ { name: 'Sophia Wilson', social: 'sophia_wilson', email: 'sophia@example.com', country: 'BR' },
12
+ { name: 'James Taylor', social: 'james_taylor', email: 'james@example.com', country: 'CA' },
13
+ { name: 'Olivia Thomas', social: 'olivia_thomas', email: 'olivia@example.com', country: 'AU' },
14
+ ];
15
+ const countries = {
16
+ US: { tel: '123-456-7890', code: '1', lang: 'English' },
17
+ FR: { tel: '06 78 90 12 34', code: '33', lang: 'French' },
18
+ UK: { tel: '7911 123456', code: '44', lang: 'English' },
19
+ ES: { tel: '678 901 234', code: '34', lang: 'Spanish' },
20
+ DE: { tel: '163 555 1584', code: '49', lang: 'German' },
21
+ IT: { tel: '345 678 9012', code: '39', lang: 'Italian' },
22
+ JP: { tel: '080-1234-5678', code: '81', lang: 'Japanese' },
23
+ BR: { tel: '(11) 98765-4321', code: '55', lang: 'Portuguese' },
24
+ CA: { tel: '416-123-4567', code: '1', lang: 'English' },
25
+ AU: { tel: '0412 345 678', code: '61', lang: 'English' },
26
+ };
27
+ const jobs = ['Writer', 'Artist', 'Musician', 'Explorer', 'Scientist', 'Engineer', 'Athlete', 'Doctor'];
28
+ const hobbies = ['Reading', 'Traveling', 'Gaming', 'Cooking', 'Fitness', 'Music', 'Photography', 'Writing'];
29
+ const cities = [
30
+ 'New York',
31
+ 'Paris',
32
+ 'London',
33
+ 'Madrid',
34
+ 'Berlin',
35
+ 'Rome',
36
+ 'Tokyo',
37
+ 'Los Angeles',
38
+ 'Sydney',
39
+ 'São Paulo',
40
+ 'Toronto',
41
+ ];
42
+ const streets = ['Main St', '2nd Ave', 'Broadway', 'Park Lane', 'Elm St', 'Sunset Blvd', 'Maple St', 'Highland Rd'];
43
+ const card = Array.from({ length: 4 }, () => randomNumber(1000, 9999)).join(' ');
44
+ const cvc = randomNumber(100, 999);
45
+ const expiration = `${String(randomNumber(1, 12)).padStart(2, '0')}/${(new Date().getFullYear() + randomNumber(0, 3)).toString().slice(-2)}`;
46
+ const person = random(people);
47
+ const social = person.social;
48
+ const country = person.country;
49
+ const countryInfo = countries[country];
50
+ const phone = countryInfo.tel;
51
+ const lang = countryInfo.lang;
52
+ const age = randomNumber(18, 67);
53
+ const birthday = new Date(Date.now() - randomNumber(18, 67) * 365.25 * 24 * 60 * 60 * 1000).toISOString();
54
+ const emergencyContacts = [];
55
+ const yearIncome = randomNumber(20000, 100000);
56
+ const subscriptions = [];
57
+ const pets = [];
58
+ const vehicles = [];
59
+ let civilStatus = 'Single';
60
+ let children = 0;
61
+ if (age >= 21 && Math.random() > 0.7)
62
+ civilStatus = 'Married';
63
+ if (civilStatus === 'Married' && age >= 25)
64
+ children = randomNumber(0, 3);
65
+ while (emergencyContacts.length < randomNumber(1, 3)) {
66
+ let emergencyContact = random(people);
67
+ while (emergencyContact.email === person.email ||
68
+ emergencyContacts.some((e) => e.name === emergencyContact.name)) {
69
+ emergencyContact = random(people);
70
+ }
71
+ const emergencyPhone = `${randomNumber(100, 999)}-${randomNumber(100, 999)}-${randomNumber(1000, 9999)}`;
72
+ emergencyContacts.push({
73
+ name: emergencyContact.name,
74
+ relationship: random(['Spouse', 'Parent', 'Sibling', 'Friend']),
75
+ phone: `+${countryInfo.code} ${emergencyPhone}`,
76
+ });
77
+ }
78
+ while (subscriptions.length < randomNumber(1, 3)) {
79
+ const subscription = random(['Netflix', 'Spotify', 'Amazon Prime', 'Disney+', 'Hulu']);
80
+ if (!subscriptions.includes(subscription))
81
+ subscriptions.push(subscription);
82
+ }
83
+ while (pets.length < randomNumber(1, 3)) {
84
+ const pet = random(['Dog', 'Cat', 'Fish', 'Bird', 'None']);
85
+ if (!pets.includes(pet))
86
+ pets.push(pet);
87
+ }
88
+ while (vehicles.length < randomNumber(1, 3)) {
89
+ const vehicle = random(['Car', 'Bike', 'Motorcycle', 'Bus', 'None']);
90
+ if (!vehicles.includes(vehicle))
91
+ vehicles.push(vehicle);
92
+ }
93
+ return {
94
+ name: person.name,
95
+ email: person.email,
96
+ localisation: country,
97
+ phone: `+${countryInfo.code} ${phone}`,
98
+ job: random(jobs),
99
+ hobbies: random(hobbies),
100
+ language: lang,
101
+ card,
102
+ cvc,
103
+ expiration,
104
+ address: `${randomNumber(1, 9999)} ${random(streets)}, ${random(cities)}`,
105
+ birthday,
106
+ civil_status: civilStatus,
107
+ children,
108
+ vehicle: vehicles,
109
+ social_profiles: {
110
+ twitter: `@${social}`,
111
+ facebook: `facebook.com/${social}`,
112
+ linkedin: `linkedin.com/in/${social}`,
113
+ instagram: `instagram.com/${social}`,
114
+ },
115
+ year_income: `${yearIncome} USD/year`,
116
+ month_income: `${(yearIncome / 12).toFixed(2)} USD/month`,
117
+ education: random(['High School', "Bachelor's", "Master's", 'PhD']),
118
+ work_experience: `${randomNumber(0, 20)} years`,
119
+ health_status: random(['Healthy', 'Minor Issues', 'Chronic Conditions']),
120
+ emergency_contacts: emergencyContacts,
121
+ subscriptions,
122
+ pets,
123
+ };
124
+ }
125
+ //# sourceMappingURL=personal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"personal.js","sourceRoot":"","sources":["../../../src/modules/v4/personal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ import { createCanvas } from 'canvas';
2
+ function parseSize(value, name, def) {
3
+ if (value === undefined)
4
+ return def;
5
+ const n = Number(value);
6
+ if (isNaN(n))
7
+ throw new Error(`${name} must be a number`);
8
+ if (n < 1 || n > 4000)
9
+ throw new Error(`${name} must be between 1 and 4000`);
10
+ return Math.floor(n);
11
+ }
12
+ function normalizeColor(value, def) {
13
+ if (!value)
14
+ return def;
15
+ const clean = value.startsWith('#') ? value : `#${value}`;
16
+ if (!/^#[0-9a-fA-F]{3,6}$/.test(clean))
17
+ throw new Error('Invalid color (use hex like #ff6600)');
18
+ return clean;
19
+ }
20
+ function generateImage(opts) {
21
+ const { width, height } = opts;
22
+ const bg = normalizeColor(opts.bg, '#cccccc');
23
+ const color = normalizeColor(opts.color, '#333333');
24
+ const text = opts.text ?? `${width}×${height}`;
25
+ const canvas = createCanvas(width, height);
26
+ const ctx = canvas.getContext('2d');
27
+ ctx.fillStyle = bg;
28
+ ctx.fillRect(0, 0, width, height);
29
+ const fontSize = Math.max(12, Math.min(width, height) / 8);
30
+ ctx.font = `bold ${fontSize}px sans-serif`;
31
+ ctx.fillStyle = color;
32
+ ctx.textAlign = 'center';
33
+ ctx.textBaseline = 'middle';
34
+ ctx.fillText(text, width / 2, height / 2);
35
+ return canvas.toBuffer('image/png');
36
+ }
37
+ function generateSkeleton(opts) {
38
+ const { width, height } = opts;
39
+ const bg = normalizeColor(opts.bg, '#e2e8f0');
40
+ const shimmer = normalizeColor(opts.color, '#f1f5f9');
41
+ const rows = Math.max(1, Math.min(20, opts.rows ?? 3));
42
+ const avatar = !!opts.avatar;
43
+ const padding = Math.min(width, height) * 0.05;
44
+ const avatarSize = avatar ? Math.min(width, height) * 0.2 : 0;
45
+ const lineHeight = (height - padding * 2 - avatarSize - (avatar ? padding : 0)) / rows;
46
+ const lineThickness = Math.max(8, lineHeight * 0.5);
47
+ const radius = lineThickness / 2;
48
+ const lines = [];
49
+ const startY = padding + (avatar ? avatarSize + padding : 0);
50
+ for (let i = 0; i < rows; i++) {
51
+ const y = startY + i * lineHeight + (lineHeight - lineThickness) / 2;
52
+ const lineWidth = (width - padding * 2) * (i === rows - 1 ? 0.6 : 0.95);
53
+ lines.push(`<rect x="${padding}" y="${y}" width="${lineWidth}" height="${lineThickness}" rx="${radius}" fill="url(#shimmer)" />`);
54
+ }
55
+ const avatarShape = avatar
56
+ ? `<circle cx="${padding + avatarSize / 2}" cy="${padding + avatarSize / 2}" r="${avatarSize / 2}" fill="url(#shimmer)" />`
57
+ : '';
58
+ return `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}">
59
+ <defs>
60
+ <linearGradient id="shimmer" x1="0%" y1="0%" x2="100%" y2="0%">
61
+ <stop offset="0%" stop-color="${bg}">
62
+ <animate attributeName="offset" values="-2; 1" dur="1.5s" repeatCount="indefinite" />
63
+ </stop>
64
+ <stop offset="50%" stop-color="${shimmer}">
65
+ <animate attributeName="offset" values="-1.5; 1.5" dur="1.5s" repeatCount="indefinite" />
66
+ </stop>
67
+ <stop offset="100%" stop-color="${bg}">
68
+ <animate attributeName="offset" values="-1; 2" dur="1.5s" repeatCount="indefinite" />
69
+ </stop>
70
+ </linearGradient>
71
+ </defs>
72
+ <rect width="${width}" height="${height}" fill="${bg}" />
73
+ ${avatarShape}
74
+ ${lines.join('\n ')}
75
+ </svg>`;
76
+ }
77
+ export default function placeholder(type, query) {
78
+ const opts = {
79
+ width: parseSize(query.width, 'width', 800),
80
+ height: parseSize(query.height, 'height', 600),
81
+ bg: query.bg,
82
+ color: query.color,
83
+ text: query.text,
84
+ rows: query.rows ? parseInt(query.rows, 10) : undefined,
85
+ avatar: query.avatar === 'true' || query.avatar === '1',
86
+ };
87
+ switch (type) {
88
+ case 'image':
89
+ return { type, contentType: 'image/png', body: generateImage(opts) };
90
+ case 'skeleton':
91
+ return { type, contentType: 'image/svg+xml', body: generateSkeleton(opts) };
92
+ default:
93
+ throw new Error('Type must be one of: image, skeleton');
94
+ }
95
+ }
96
+ //# sourceMappingURL=placeholder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/modules/v4/placeholder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { toDataURL } from 'qrcode';
2
+ export default async function qrcode(url) {
3
+ if (!url || typeof url !== 'string')
4
+ throw new Error('Please provide a valid URL');
5
+ try {
6
+ return await toDataURL(url);
7
+ }
8
+ catch (error) {
9
+ throw new Error(`Failed to generate QR code: ${error.message}`);
10
+ }
11
+ }
12
+ //# sourceMappingURL=qrcode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrcode.js","sourceRoot":"","sources":["../../../src/modules/v4/qrcode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEnC,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,MAAM,CAAC,GAAW;IAC5C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAEnF,IAAI,CAAC;QACD,OAAO,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,+BAAgC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,CAAC;AACL,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { MAX_STRING_LENGTH } from '../../constants.js';
2
+ export default function statistics(values) {
3
+ if (!values)
4
+ throw new Error('A list of values is required');
5
+ if (typeof values !== 'string')
6
+ throw new Error('Values must be a comma-separated string');
7
+ const arr = values.split(',').map((v) => Number(v.trim()));
8
+ if (arr.some(isNaN))
9
+ throw new Error('Values must contain only numbers');
10
+ if (arr.length < 1)
11
+ throw new Error('At least one value is required');
12
+ if (arr.length > MAX_STRING_LENGTH)
13
+ throw new Error(`Cannot process more than ${MAX_STRING_LENGTH} values`);
14
+ const count = arr.length;
15
+ const sum = arr.reduce((a, b) => a + b, 0);
16
+ const min = Math.min(...arr);
17
+ const max = Math.max(...arr);
18
+ const mean = sum / count;
19
+ const sorted = [...arr].sort((a, b) => a - b);
20
+ const median = count % 2 === 0 ? (sorted[count / 2 - 1] + sorted[count / 2]) / 2 : sorted[Math.floor(count / 2)];
21
+ const counts = new Map();
22
+ for (const n of arr)
23
+ counts.set(n, (counts.get(n) ?? 0) + 1);
24
+ const maxCount = Math.max(...counts.values());
25
+ const mode = maxCount === 1 ? [] : [...counts.entries()].filter(([, c]) => c === maxCount).map(([n]) => n);
26
+ const variance = arr.reduce((acc, n) => acc + (n - mean) ** 2, 0) / count;
27
+ const stddev = Math.sqrt(variance);
28
+ return {
29
+ count,
30
+ sum: +sum.toFixed(6),
31
+ min,
32
+ max,
33
+ range: max - min,
34
+ mean: +mean.toFixed(6),
35
+ median: +median.toFixed(6),
36
+ mode,
37
+ variance: +variance.toFixed(6),
38
+ stddev: +stddev.toFixed(6),
39
+ };
40
+ }
41
+ //# sourceMappingURL=statistics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statistics.js","sourceRoot":"","sources":["../../../src/modules/v4/statistics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,293 @@
1
+ import { MAX_STRING_LENGTH } from '../../constants.js';
2
+ const LOREM_WORDS = [
3
+ 'lorem',
4
+ 'ipsum',
5
+ 'dolor',
6
+ 'sit',
7
+ 'amet',
8
+ 'consectetur',
9
+ 'adipiscing',
10
+ 'elit',
11
+ 'sed',
12
+ 'do',
13
+ 'eiusmod',
14
+ 'tempor',
15
+ 'incididunt',
16
+ 'ut',
17
+ 'labore',
18
+ 'et',
19
+ 'dolore',
20
+ 'magna',
21
+ 'aliqua',
22
+ 'enim',
23
+ 'ad',
24
+ 'minim',
25
+ 'veniam',
26
+ 'quis',
27
+ 'nostrud',
28
+ 'exercitation',
29
+ 'ullamco',
30
+ 'laboris',
31
+ 'nisi',
32
+ 'aliquip',
33
+ 'ex',
34
+ 'ea',
35
+ 'commodo',
36
+ 'consequat',
37
+ 'duis',
38
+ 'aute',
39
+ 'irure',
40
+ 'in',
41
+ 'reprehenderit',
42
+ 'voluptate',
43
+ 'velit',
44
+ 'esse',
45
+ 'cillum',
46
+ 'eu',
47
+ 'fugiat',
48
+ 'nulla',
49
+ 'pariatur',
50
+ 'excepteur',
51
+ 'sint',
52
+ 'occaecat',
53
+ 'cupidatat',
54
+ 'non',
55
+ 'proident',
56
+ 'sunt',
57
+ 'culpa',
58
+ 'qui',
59
+ 'officia',
60
+ 'deserunt',
61
+ 'mollit',
62
+ 'anim',
63
+ 'id',
64
+ 'est',
65
+ 'laborum',
66
+ ];
67
+ const FR_UNITS = [
68
+ 'zéro',
69
+ 'un',
70
+ 'deux',
71
+ 'trois',
72
+ 'quatre',
73
+ 'cinq',
74
+ 'six',
75
+ 'sept',
76
+ 'huit',
77
+ 'neuf',
78
+ 'dix',
79
+ 'onze',
80
+ 'douze',
81
+ 'treize',
82
+ 'quatorze',
83
+ 'quinze',
84
+ 'seize',
85
+ 'dix-sept',
86
+ 'dix-huit',
87
+ 'dix-neuf',
88
+ ];
89
+ const FR_TENS = [
90
+ '',
91
+ '',
92
+ 'vingt',
93
+ 'trente',
94
+ 'quarante',
95
+ 'cinquante',
96
+ 'soixante',
97
+ 'soixante',
98
+ 'quatre-vingt',
99
+ 'quatre-vingt',
100
+ ];
101
+ const EN_UNITS = [
102
+ 'zero',
103
+ 'one',
104
+ 'two',
105
+ 'three',
106
+ 'four',
107
+ 'five',
108
+ 'six',
109
+ 'seven',
110
+ 'eight',
111
+ 'nine',
112
+ 'ten',
113
+ 'eleven',
114
+ 'twelve',
115
+ 'thirteen',
116
+ 'fourteen',
117
+ 'fifteen',
118
+ 'sixteen',
119
+ 'seventeen',
120
+ 'eighteen',
121
+ 'nineteen',
122
+ ];
123
+ const EN_TENS = ['', '', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'];
124
+ function checkText(value) {
125
+ if (!value)
126
+ throw new Error('A value is required');
127
+ if (typeof value !== 'string')
128
+ throw new Error('Value must be a string');
129
+ if (value.length > MAX_STRING_LENGTH)
130
+ throw new Error(`Value must be less than ${MAX_STRING_LENGTH} characters long`);
131
+ }
132
+ export function stats(value) {
133
+ checkText(value);
134
+ const characters = value.length;
135
+ const charactersNoSpaces = value.replace(/\s/g, '').length;
136
+ const words = value.trim().split(/\s+/).filter(Boolean).length;
137
+ const sentences = value.split(/[.!?]+/).filter((s) => s.trim().length > 0).length;
138
+ const paragraphs = value.split(/\n\s*\n/).filter((p) => p.trim().length > 0).length || 1;
139
+ const minutes = words / 200;
140
+ const readingTime = minutes < 1 ? `${Math.ceil(minutes * 60)}s` : `${Math.round(minutes)}min`;
141
+ const counts = new Map();
142
+ for (const c of value.replace(/\s/g, '').toLowerCase())
143
+ counts.set(c, (counts.get(c) ?? 0) + 1);
144
+ let mostFrequentChar = '';
145
+ let maxCount = 0;
146
+ for (const [char, count] of counts) {
147
+ if (count > maxCount) {
148
+ mostFrequentChar = char;
149
+ maxCount = count;
150
+ }
151
+ }
152
+ return { characters, charactersNoSpaces, words, sentences, paragraphs, readingTime, mostFrequentChar };
153
+ }
154
+ export function slug(value) {
155
+ checkText(value);
156
+ return value
157
+ .normalize('NFD')
158
+ .replace(/[\u0300-\u036f]/g, '')
159
+ .toLowerCase()
160
+ .replace(/[^a-z0-9\s-]/g, '')
161
+ .trim()
162
+ .replace(/[\s-]+/g, '-');
163
+ }
164
+ export function lorem(type, count) {
165
+ const n = Number(count) || 5;
166
+ if (n < 1 || n > 500)
167
+ throw new Error('Count must be between 1 and 500');
168
+ const randomWord = () => LOREM_WORDS[Math.floor(Math.random() * LOREM_WORDS.length)];
169
+ const randomSentence = () => {
170
+ const length = 5 + Math.floor(Math.random() * 10);
171
+ const words = Array.from({ length }, randomWord);
172
+ words[0] = words[0].charAt(0).toUpperCase() + words[0].slice(1);
173
+ return words.join(' ') + '.';
174
+ };
175
+ const randomParagraph = () => {
176
+ const length = 3 + Math.floor(Math.random() * 5);
177
+ return Array.from({ length }, randomSentence).join(' ');
178
+ };
179
+ switch (type) {
180
+ case 'words':
181
+ return Array.from({ length: n }, randomWord).join(' ');
182
+ case 'sentences':
183
+ return Array.from({ length: n }, randomSentence).join(' ');
184
+ case 'paragraphs':
185
+ return Array.from({ length: n }, randomParagraph).join('\n\n');
186
+ default:
187
+ throw new Error('Type must be one of: words, sentences, paragraphs');
188
+ }
189
+ }
190
+ function frBelowHundred(n) {
191
+ if (n < 20)
192
+ return FR_UNITS[n];
193
+ const t = Math.floor(n / 10);
194
+ const u = n % 10;
195
+ if (t === 7 || t === 9) {
196
+ const base = FR_TENS[t];
197
+ const sub = 10 + u;
198
+ return base + (base.endsWith('-') ? '' : '-') + FR_UNITS[sub];
199
+ }
200
+ if (t === 8 && u === 0)
201
+ return 'quatre-vingts';
202
+ if (u === 0)
203
+ return FR_TENS[t];
204
+ if (u === 1 && t < 8)
205
+ return FR_TENS[t] + ' et un';
206
+ return FR_TENS[t] + '-' + FR_UNITS[u];
207
+ }
208
+ function frBelowThousand(n) {
209
+ if (n < 100)
210
+ return frBelowHundred(n);
211
+ const h = Math.floor(n / 100);
212
+ const r = n % 100;
213
+ let result = '';
214
+ if (h === 1)
215
+ result = 'cent';
216
+ else
217
+ result = FR_UNITS[h] + ' cent' + (r === 0 ? 's' : '');
218
+ if (r > 0)
219
+ result += ' ' + frBelowHundred(r);
220
+ return result;
221
+ }
222
+ function numberToFrench(n) {
223
+ if (n === 0)
224
+ return 'zéro';
225
+ if (n < 0)
226
+ return 'moins ' + numberToFrench(-n);
227
+ if (n < 1000)
228
+ return frBelowThousand(n);
229
+ if (n < 1_000_000) {
230
+ const t = Math.floor(n / 1000);
231
+ const r = n % 1000;
232
+ const thousands = t === 1 ? 'mille' : frBelowThousand(t) + ' mille';
233
+ return r === 0 ? thousands : thousands + ' ' + frBelowThousand(r);
234
+ }
235
+ if (n < 1_000_000_000) {
236
+ const m = Math.floor(n / 1_000_000);
237
+ const r = n % 1_000_000;
238
+ const millions = m === 1 ? 'un million' : frBelowThousand(m) + ' millions';
239
+ return r === 0 ? millions : millions + ' ' + numberToFrench(r);
240
+ }
241
+ throw new Error('Number must be less than 1 billion');
242
+ }
243
+ function enBelowHundred(n) {
244
+ if (n < 20)
245
+ return EN_UNITS[n];
246
+ const t = Math.floor(n / 10);
247
+ const u = n % 10;
248
+ return u === 0 ? EN_TENS[t] : EN_TENS[t] + '-' + EN_UNITS[u];
249
+ }
250
+ function enBelowThousand(n) {
251
+ if (n < 100)
252
+ return enBelowHundred(n);
253
+ const h = Math.floor(n / 100);
254
+ const r = n % 100;
255
+ return r === 0 ? EN_UNITS[h] + ' hundred' : EN_UNITS[h] + ' hundred ' + enBelowHundred(r);
256
+ }
257
+ function numberToEnglish(n) {
258
+ if (n === 0)
259
+ return 'zero';
260
+ if (n < 0)
261
+ return 'minus ' + numberToEnglish(-n);
262
+ if (n < 1000)
263
+ return enBelowThousand(n);
264
+ if (n < 1_000_000) {
265
+ const t = Math.floor(n / 1000);
266
+ const r = n % 1000;
267
+ return r === 0 ? enBelowThousand(t) + ' thousand' : enBelowThousand(t) + ' thousand ' + enBelowThousand(r);
268
+ }
269
+ if (n < 1_000_000_000) {
270
+ const m = Math.floor(n / 1_000_000);
271
+ const r = n % 1_000_000;
272
+ return r === 0 ? enBelowThousand(m) + ' million' : enBelowThousand(m) + ' million ' + numberToEnglish(r);
273
+ }
274
+ throw new Error('Number must be less than 1 billion');
275
+ }
276
+ export function number(value, lang) {
277
+ const n = Number(value);
278
+ if (isNaN(n))
279
+ throw new Error('Value must be a number');
280
+ if (!Number.isInteger(n))
281
+ throw new Error('Value must be an integer');
282
+ if (Math.abs(n) >= 1_000_000_000)
283
+ throw new Error('Number must be less than 1 billion');
284
+ switch (lang) {
285
+ case 'fr':
286
+ return numberToFrench(n);
287
+ case 'en':
288
+ return numberToEnglish(n);
289
+ default:
290
+ throw new Error('Lang must be one of: fr, en');
291
+ }
292
+ }
293
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/modules/v4/text.ts"],"names":[],"mappings":"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"}