@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.
- package/.prettierrc +7 -0
- package/README.md +32 -33
- package/dist/app.js +36 -0
- package/dist/app.js.map +1 -0
- package/dist/config/env.js +73 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/versions.js +72 -0
- package/dist/config/versions.js.map +1 -0
- package/dist/constants.js +42 -0
- package/dist/constants.js.map +1 -0
- package/dist/middleware/cors.js +15 -0
- package/dist/middleware/cors.js.map +1 -0
- package/dist/middleware/error.js +6 -0
- package/dist/middleware/error.js.map +1 -0
- package/dist/middleware/json.js +8 -0
- package/dist/middleware/json.js.map +1 -0
- package/dist/middleware/logger.js +26 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/ratelimit.js +58 -0
- package/dist/middleware/ratelimit.js.map +1 -0
- package/dist/middleware/version.js +30 -0
- package/dist/middleware/version.js.map +1 -0
- package/dist/modules/v3/algorithms.js +221 -0
- package/dist/modules/v3/algorithms.js.map +1 -0
- package/{modules → dist/modules}/v3/captcha.js +4 -13
- package/dist/modules/v3/captcha.js.map +1 -0
- package/dist/modules/v3/chat.js +103 -0
- package/dist/modules/v3/chat.js.map +1 -0
- package/{modules → dist/modules}/v3/color.js +12 -13
- package/dist/modules/v3/color.js.map +1 -0
- package/dist/modules/v3/convert.js +41 -0
- package/dist/modules/v3/convert.js.map +1 -0
- package/dist/modules/v3/domain.js +83 -0
- package/dist/modules/v3/domain.js.map +1 -0
- package/dist/modules/v3/hash.js +16 -0
- package/dist/modules/v3/hash.js.map +1 -0
- package/dist/modules/v3/hyperplanning.js +50 -0
- package/dist/modules/v3/hyperplanning.js.map +1 -0
- package/dist/modules/v3/levenshtein.js +38 -0
- package/dist/modules/v3/levenshtein.js.map +1 -0
- package/dist/modules/v3/personal.js +129 -0
- package/dist/modules/v3/personal.js.map +1 -0
- package/dist/modules/v3/qrcode.js +21 -0
- package/dist/modules/v3/qrcode.js.map +1 -0
- package/dist/modules/v3/tic_tac_toe.js +221 -0
- package/dist/modules/v3/tic_tac_toe.js.map +1 -0
- package/dist/modules/v3/time.js +88 -0
- package/dist/modules/v3/time.js.map +1 -0
- package/{modules → dist/modules}/v3/token.js +10 -11
- package/dist/modules/v3/token.js.map +1 -0
- package/dist/modules/v3/username.js +92 -0
- package/dist/modules/v3/username.js.map +1 -0
- package/dist/modules/v3/utils.js +70 -0
- package/dist/modules/v3/utils.js.map +1 -0
- package/dist/modules/v3.js +16 -0
- package/dist/modules/v3.js.map +1 -0
- package/dist/modules/v4/algorithms.js +200 -0
- package/dist/modules/v4/algorithms.js.map +1 -0
- package/dist/modules/v4/captcha.js +35 -0
- package/dist/modules/v4/captcha.js.map +1 -0
- package/dist/modules/v4/chat.js +92 -0
- package/dist/modules/v4/chat.js.map +1 -0
- package/dist/modules/v4/color.js +43 -0
- package/dist/modules/v4/color.js.map +1 -0
- package/dist/modules/v4/convert.js +33 -0
- package/dist/modules/v4/convert.js.map +1 -0
- package/dist/modules/v4/dice.js +30 -0
- package/dist/modules/v4/dice.js.map +1 -0
- package/dist/modules/v4/domain.js +78 -0
- package/dist/modules/v4/domain.js.map +1 -0
- package/dist/modules/v4/encode.js +165 -0
- package/dist/modules/v4/encode.js.map +1 -0
- package/dist/modules/v4/geo.js +41 -0
- package/dist/modules/v4/geo.js.map +1 -0
- package/dist/modules/v4/hash.js +9 -0
- package/dist/modules/v4/hash.js.map +1 -0
- package/dist/modules/v4/hyperplanning.js +42 -0
- package/dist/modules/v4/hyperplanning.js.map +1 -0
- package/dist/modules/v4/levenshtein.js +29 -0
- package/dist/modules/v4/levenshtein.js.map +1 -0
- package/dist/modules/v4/palette.js +89 -0
- package/dist/modules/v4/palette.js.map +1 -0
- package/dist/modules/v4/personal.js +125 -0
- package/dist/modules/v4/personal.js.map +1 -0
- package/dist/modules/v4/placeholder.js +96 -0
- package/dist/modules/v4/placeholder.js.map +1 -0
- package/dist/modules/v4/qrcode.js +12 -0
- package/dist/modules/v4/qrcode.js.map +1 -0
- package/dist/modules/v4/statistics.js +41 -0
- package/dist/modules/v4/statistics.js.map +1 -0
- package/dist/modules/v4/text.js +293 -0
- package/dist/modules/v4/text.js.map +1 -0
- package/dist/modules/v4/tic_tac_toe.js +206 -0
- package/dist/modules/v4/tic_tac_toe.js.map +1 -0
- package/dist/modules/v4/time.js +73 -0
- package/dist/modules/v4/time.js.map +1 -0
- package/dist/modules/v4/token.js +36 -0
- package/dist/modules/v4/token.js.map +1 -0
- package/dist/modules/v4/username.js +87 -0
- package/dist/modules/v4/username.js.map +1 -0
- package/dist/modules/v4/utils.js +26 -0
- package/dist/modules/v4/utils.js.map +1 -0
- package/dist/modules/v4/validate.js +54 -0
- package/dist/modules/v4/validate.js.map +1 -0
- package/dist/modules/v4.js +18 -0
- package/dist/modules/v4.js.map +1 -0
- package/dist/routes/delete.js +65 -0
- package/dist/routes/delete.js.map +1 -0
- package/dist/routes/get.js +441 -0
- package/dist/routes/get.js.map +1 -0
- package/dist/routes/index.js +50 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/patch.js +41 -0
- package/dist/routes/patch.js.map +1 -0
- package/dist/routes/post.js +185 -0
- package/dist/routes/post.js.map +1 -0
- package/dist/storage/index.js +13 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/types/storage.js +2 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/utils/response.js +10 -0
- package/dist/utils/response.js.map +1 -0
- package/dist/utils/version.js +3 -0
- package/dist/utils/version.js.map +1 -0
- package/eslint.config.js +20 -0
- package/package.json +30 -15
- package/src/app.ts +44 -0
- package/src/config/env.ts +81 -0
- package/src/config/versions.ts +80 -0
- package/src/constants.ts +28 -0
- package/src/middleware/cors.ts +17 -0
- package/src/middleware/error.ts +7 -0
- package/src/middleware/json.ts +9 -0
- package/src/middleware/logger.ts +31 -0
- package/src/middleware/ratelimit.ts +66 -0
- package/src/middleware/version.ts +39 -0
- package/{modules → src/modules}/v3/algorithms.js +1 -1
- package/src/modules/v3/captcha.js +60 -0
- package/{modules → src/modules}/v3/chat.js +6 -4
- package/src/modules/v3/color.js +60 -0
- package/{modules → src/modules}/v3/convert.js +5 -5
- package/{modules → src/modules}/v3/domain.js +51 -4
- package/{modules → src/modules}/v3/hash.js +1 -1
- package/{modules → src/modules}/v3/hyperplanning.js +11 -10
- package/{modules → src/modules}/v3/levenshtein.js +3 -3
- package/{modules → src/modules}/v3/personal.js +20 -8
- package/{modules → src/modules}/v3/qrcode.js +1 -1
- package/{modules → src/modules}/v3/tic_tac_toe.js +24 -18
- package/{modules → src/modules}/v3/time.js +22 -11
- package/src/modules/v3/token.js +54 -0
- package/src/modules/v3/username.js +94 -0
- package/{modules → src/modules}/v3/utils.js +2 -2
- package/{modules → src/modules}/v3.js +1 -1
- package/src/modules/v4/algorithms.ts +155 -0
- package/src/modules/v4/captcha.ts +49 -0
- package/src/modules/v4/chat.ts +99 -0
- package/src/modules/v4/color.ts +64 -0
- package/src/modules/v4/convert.ts +38 -0
- package/src/modules/v4/domain.ts +81 -0
- package/src/modules/v4/hash.ts +9 -0
- package/src/modules/v4/hyperplanning.ts +58 -0
- package/src/modules/v4/levenshtein.ts +38 -0
- package/src/modules/v4/personal.ts +147 -0
- package/src/modules/v4/qrcode.ts +11 -0
- package/src/modules/v4/tic_tac_toe.ts +223 -0
- package/src/modules/v4/time.ts +92 -0
- package/src/modules/v4/token.ts +43 -0
- package/src/modules/v4/username.ts +89 -0
- package/src/modules/v4/utils.ts +38 -0
- package/src/modules/v4.ts +15 -0
- package/src/routes/get.ts +461 -0
- package/src/routes/index.ts +58 -0
- package/src/routes/post.ts +200 -0
- package/src/storage/index.ts +16 -0
- package/src/types/express.d.ts +17 -0
- package/src/types/storage.ts +48 -0
- package/src/utils/response.ts +11 -0
- package/tsconfig.json +17 -0
- package/app.js +0 -865
- 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":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAevD,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,MAAc;IAC7C,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC7D,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAE3F,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3D,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACzE,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACtE,IAAI,GAAG,CAAC,MAAM,GAAG,iBAAiB;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,iBAAiB,SAAS,CAAC,CAAC;IAE5G,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC;IACzB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC;IAEzB,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAE,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAE,CAAC;IAEpH,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,GAAG;QAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAE3G,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;IAC1E,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEnC,OAAO;QACH,KAAK;QACL,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACpB,GAAG;QACH,GAAG;QACH,KAAK,EAAE,GAAG,GAAG,GAAG;QAChB,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1B,IAAI;QACJ,QAAQ,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KAC7B,CAAC;AACN,CAAC"}
|
|
@@ -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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"}
|