@rudderjs/support 0.0.3

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/dist/str.d.ts ADDED
@@ -0,0 +1,99 @@
1
+ export declare class Str {
2
+ /** Convert to camelCase. */
3
+ static camel(value: string): string;
4
+ /** Convert to snake_case. */
5
+ static snake(value: string): string;
6
+ /** Convert to kebab-case. */
7
+ static kebab(value: string): string;
8
+ /** Convert to StudlyCase (PascalCase). */
9
+ static studly(value: string): string;
10
+ /** Convert to Title Case (each word capitalised). */
11
+ static title(value: string): string;
12
+ /**
13
+ * Convert snake_case, kebab-case, or camelCase to a human-readable headline.
14
+ * @example Str.headline('user_profile') → 'User Profile'
15
+ */
16
+ static headline(value: string): string;
17
+ /** Limit string to `limit` characters. */
18
+ static limit(value: string, limit?: number, end?: string): string;
19
+ /** Limit to `words` words. */
20
+ static words(value: string, words?: number, end?: string): string;
21
+ /**
22
+ * Extract a short excerpt around a search phrase.
23
+ * @example Str.excerpt('The quick brown fox', 'quick', { radius: 5 }) → '...The quick brown...'
24
+ */
25
+ static excerpt(value: string, phrase: string, options?: {
26
+ radius?: number;
27
+ omission?: string;
28
+ }): string;
29
+ /** True if value contains any of the needles. */
30
+ static contains(value: string, needles: string | string[]): boolean;
31
+ /** True if value contains all needles. */
32
+ static containsAll(value: string, needles: string[]): boolean;
33
+ /** True if value starts with any of the needles. */
34
+ static startsWith(value: string, needles: string | string[]): boolean;
35
+ /** True if value ends with any of the needles. */
36
+ static endsWith(value: string, needles: string | string[]): boolean;
37
+ /** Everything before the first occurrence of `search`. */
38
+ static before(value: string, search: string): string;
39
+ /** Everything before the last occurrence of `search`. */
40
+ static beforeLast(value: string, search: string): string;
41
+ /** Everything after the first occurrence of `search`. */
42
+ static after(value: string, search: string): string;
43
+ /** Everything after the last occurrence of `search`. */
44
+ static afterLast(value: string, search: string): string;
45
+ /** Everything between `from` and the first `to`. */
46
+ static between(value: string, from: string, to: string): string;
47
+ /** Replace the first occurrence of `search` with `replace`. */
48
+ static replaceFirst(value: string, search: string, replace: string): string;
49
+ /** Replace the last occurrence of `search` with `replace`. */
50
+ static replaceLast(value: string, search: string, replace: string): string;
51
+ /** Pad the left side. */
52
+ static padLeft(value: string, length: number, pad?: string): string;
53
+ /** Pad the right side. */
54
+ static padRight(value: string, length: number, pad?: string): string;
55
+ /** Pad both sides (centres the string). */
56
+ static padBoth(value: string, length: number, pad?: string): string;
57
+ /** Collapse all whitespace runs to a single space and trim. */
58
+ static squish(value: string): string;
59
+ /**
60
+ * Trim the string. If `chars` is provided, trims those characters instead of whitespace.
61
+ * @example Str.trim('/path/', '/') → 'path'
62
+ */
63
+ static trim(value: string, chars?: string): string;
64
+ /**
65
+ * Mask a portion of the string.
66
+ * @example Str.mask('john@example.com', '*', 4) → 'john*************'
67
+ * @example Str.mask('4111 1111 1111 1111', '*', 0, 14) → '************** 1111'
68
+ */
69
+ static mask(value: string, char?: string, start?: number, length?: number): string;
70
+ /** Strip diacritics and non-ASCII characters. */
71
+ static ascii(value: string): string;
72
+ /**
73
+ * Convert to a URL-friendly slug.
74
+ * @example Str.slug('Hello World!') → 'hello-world'
75
+ */
76
+ static slug(value: string, separator?: string): string;
77
+ /** Generate a UUID v4. */
78
+ static uuid(): string;
79
+ /** True if value is a valid UUID v4 (any variant). */
80
+ static isUuid(value: string): boolean;
81
+ /** True if value is a valid ULID. */
82
+ static isUlid(value: string): boolean;
83
+ /** Generate a cryptographically-random alphanumeric string. */
84
+ static random(length?: number): string;
85
+ /** Generate a cryptographically-random password. */
86
+ static password(length?: number, symbols?: boolean): string;
87
+ /**
88
+ * Pluralise an English word.
89
+ * @example Str.plural('post') → 'posts'
90
+ * @example Str.plural('post', 1) → 'post'
91
+ */
92
+ static plural(value: string, count?: number): string;
93
+ /**
94
+ * Singularise an English word.
95
+ * @example Str.singular('posts') → 'post'
96
+ */
97
+ static singular(value: string): string;
98
+ }
99
+ //# sourceMappingURL=str.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"str.d.ts","sourceRoot":"","sources":["../src/str.ts"],"names":[],"mappings":"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"}
package/dist/str.js ADDED
@@ -0,0 +1,300 @@
1
+ // ─── Str ───────────────────────────────────────────────────
2
+ export class Str {
3
+ // ── Case conversion ─────────────────────────────────────
4
+ /** Convert to camelCase. */
5
+ static camel(value) {
6
+ return value
7
+ .replace(/[-_\s]+(.)/g, (_, c) => c.toUpperCase())
8
+ .replace(/^(.)/, c => c.toLowerCase());
9
+ }
10
+ /** Convert to snake_case. */
11
+ static snake(value) {
12
+ return value
13
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
14
+ .replace(/([a-z\d])([A-Z])/g, '$1_$2')
15
+ .replace(/[-\s]+/g, '_')
16
+ .toLowerCase()
17
+ .replace(/^_/, '');
18
+ }
19
+ /** Convert to kebab-case. */
20
+ static kebab(value) {
21
+ return Str.snake(value).replace(/_/g, '-');
22
+ }
23
+ /** Convert to StudlyCase (PascalCase). */
24
+ static studly(value) {
25
+ return value
26
+ .replace(/[-_\s]+(.)/g, (_, c) => c.toUpperCase())
27
+ .replace(/^(.)/, c => c.toUpperCase());
28
+ }
29
+ /** Convert to Title Case (each word capitalised). */
30
+ static title(value) {
31
+ return value.replace(/\b\w/g, c => c.toUpperCase());
32
+ }
33
+ /**
34
+ * Convert snake_case, kebab-case, or camelCase to a human-readable headline.
35
+ * @example Str.headline('user_profile') → 'User Profile'
36
+ */
37
+ static headline(value) {
38
+ const words = value
39
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
40
+ .replace(/([a-z\d])([A-Z])/g, '$1 $2')
41
+ .replace(/[-_]+/g, ' ')
42
+ .trim()
43
+ .split(/\s+/);
44
+ return words.map(w => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(' ');
45
+ }
46
+ // ── Truncation ──────────────────────────────────────────
47
+ /** Limit string to `limit` characters. */
48
+ static limit(value, limit = 100, end = '...') {
49
+ if (value.length <= limit)
50
+ return value;
51
+ return value.slice(0, limit) + end;
52
+ }
53
+ /** Limit to `words` words. */
54
+ static words(value, words = 100, end = '...') {
55
+ const arr = value.split(/\s+/);
56
+ if (arr.length <= words)
57
+ return value;
58
+ return arr.slice(0, words).join(' ') + end;
59
+ }
60
+ /**
61
+ * Extract a short excerpt around a search phrase.
62
+ * @example Str.excerpt('The quick brown fox', 'quick', { radius: 5 }) → '...The quick brown...'
63
+ */
64
+ static excerpt(value, phrase, options = {}) {
65
+ const radius = options.radius ?? 100;
66
+ const omission = options.omission ?? '...';
67
+ const idx = value.toLowerCase().indexOf(phrase.toLowerCase());
68
+ if (idx === -1)
69
+ return value.slice(0, radius * 2) + (value.length > radius * 2 ? omission : '');
70
+ const start = Math.max(0, idx - radius);
71
+ const end = Math.min(value.length, idx + phrase.length + radius);
72
+ const prefix = start > 0 ? omission : '';
73
+ const suffix = end < value.length ? omission : '';
74
+ return prefix + value.slice(start, end) + suffix;
75
+ }
76
+ // ── Search ──────────────────────────────────────────────
77
+ /** True if value contains any of the needles. */
78
+ static contains(value, needles) {
79
+ const arr = Array.isArray(needles) ? needles : [needles];
80
+ return arr.some(n => value.includes(n));
81
+ }
82
+ /** True if value contains all needles. */
83
+ static containsAll(value, needles) {
84
+ return needles.every(n => value.includes(n));
85
+ }
86
+ /** True if value starts with any of the needles. */
87
+ static startsWith(value, needles) {
88
+ const arr = Array.isArray(needles) ? needles : [needles];
89
+ return arr.some(n => value.startsWith(n));
90
+ }
91
+ /** True if value ends with any of the needles. */
92
+ static endsWith(value, needles) {
93
+ const arr = Array.isArray(needles) ? needles : [needles];
94
+ return arr.some(n => value.endsWith(n));
95
+ }
96
+ // ── Extraction ──────────────────────────────────────────
97
+ /** Everything before the first occurrence of `search`. */
98
+ static before(value, search) {
99
+ const idx = value.indexOf(search);
100
+ return idx === -1 ? value : value.slice(0, idx);
101
+ }
102
+ /** Everything before the last occurrence of `search`. */
103
+ static beforeLast(value, search) {
104
+ const idx = value.lastIndexOf(search);
105
+ return idx === -1 ? value : value.slice(0, idx);
106
+ }
107
+ /** Everything after the first occurrence of `search`. */
108
+ static after(value, search) {
109
+ const idx = value.indexOf(search);
110
+ return idx === -1 ? value : value.slice(idx + search.length);
111
+ }
112
+ /** Everything after the last occurrence of `search`. */
113
+ static afterLast(value, search) {
114
+ const idx = value.lastIndexOf(search);
115
+ return idx === -1 ? value : value.slice(idx + search.length);
116
+ }
117
+ /** Everything between `from` and the first `to`. */
118
+ static between(value, from, to) {
119
+ return Str.before(Str.after(value, from), to);
120
+ }
121
+ // ── Replacement ─────────────────────────────────────────
122
+ /** Replace the first occurrence of `search` with `replace`. */
123
+ static replaceFirst(value, search, replace) {
124
+ const idx = value.indexOf(search);
125
+ return idx === -1 ? value : value.slice(0, idx) + replace + value.slice(idx + search.length);
126
+ }
127
+ /** Replace the last occurrence of `search` with `replace`. */
128
+ static replaceLast(value, search, replace) {
129
+ const idx = value.lastIndexOf(search);
130
+ return idx === -1 ? value : value.slice(0, idx) + replace + value.slice(idx + search.length);
131
+ }
132
+ // ── Padding ─────────────────────────────────────────────
133
+ /** Pad the left side. */
134
+ static padLeft(value, length, pad = ' ') {
135
+ return value.padStart(length, pad);
136
+ }
137
+ /** Pad the right side. */
138
+ static padRight(value, length, pad = ' ') {
139
+ return value.padEnd(length, pad);
140
+ }
141
+ /** Pad both sides (centres the string). */
142
+ static padBoth(value, length, pad = ' ') {
143
+ const total = length - value.length;
144
+ if (total <= 0)
145
+ return value;
146
+ const left = Math.floor(total / 2);
147
+ const right = total - left;
148
+ return pad.repeat(Math.ceil(left / pad.length)).slice(0, left)
149
+ + value
150
+ + pad.repeat(Math.ceil(right / pad.length)).slice(0, right);
151
+ }
152
+ // ── Whitespace ──────────────────────────────────────────
153
+ /** Collapse all whitespace runs to a single space and trim. */
154
+ static squish(value) {
155
+ return value.trim().replace(/\s+/g, ' ');
156
+ }
157
+ /**
158
+ * Trim the string. If `chars` is provided, trims those characters instead of whitespace.
159
+ * @example Str.trim('/path/', '/') → 'path'
160
+ */
161
+ static trim(value, chars) {
162
+ if (!chars)
163
+ return value.trim();
164
+ const escaped = chars.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
165
+ return value.replace(new RegExp(`^[${escaped}]+|[${escaped}]+$`, 'g'), '');
166
+ }
167
+ // ── Masking & Security ──────────────────────────────────
168
+ /**
169
+ * Mask a portion of the string.
170
+ * @example Str.mask('john@example.com', '*', 4) → 'john*************'
171
+ * @example Str.mask('4111 1111 1111 1111', '*', 0, 14) → '************** 1111'
172
+ */
173
+ static mask(value, char = '*', start = 0, length) {
174
+ const end = length !== undefined ? start + length : value.length;
175
+ return value.split('').map((c, i) => (i >= start && i < end ? char : c)).join('');
176
+ }
177
+ // ── Encoding / Normalisation ────────────────────────────
178
+ /** Strip diacritics and non-ASCII characters. */
179
+ static ascii(value) {
180
+ return value
181
+ .normalize('NFD')
182
+ .replace(/[\u0300-\u036f]/g, '')
183
+ .replace(/[^\u0000-\u007F]/g, ''); // eslint-disable-line no-control-regex
184
+ }
185
+ /**
186
+ * Convert to a URL-friendly slug.
187
+ * @example Str.slug('Hello World!') → 'hello-world'
188
+ */
189
+ static slug(value, separator = '-') {
190
+ return Str.ascii(value)
191
+ .toLowerCase()
192
+ .replace(/[^a-z0-9\s-]/g, '')
193
+ .trim()
194
+ .replace(/[\s-]+/g, separator);
195
+ }
196
+ // ── Identification ──────────────────────────────────────
197
+ /** Generate a UUID v4. */
198
+ static uuid() {
199
+ return crypto.randomUUID();
200
+ }
201
+ /** True if value is a valid UUID v4 (any variant). */
202
+ static isUuid(value) {
203
+ return /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value);
204
+ }
205
+ /** True if value is a valid ULID. */
206
+ static isUlid(value) {
207
+ return /^[0-9A-HJKMNP-TV-Z]{26}$/i.test(value);
208
+ }
209
+ // ── Generation ──────────────────────────────────────────
210
+ /** Generate a cryptographically-random alphanumeric string. */
211
+ static random(length = 16) {
212
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
213
+ const bytes = crypto.getRandomValues(new Uint8Array(length));
214
+ return Array.from(bytes, b => chars[b % chars.length]).join('');
215
+ }
216
+ /** Generate a cryptographically-random password. */
217
+ static password(length = 32, symbols = true) {
218
+ const alpha = 'abcdefghijklmnopqrstuvwxyz';
219
+ const upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
220
+ const digits = '0123456789';
221
+ const syms = '!@#$%^&*()_+-=[]{}|;:,.<>?';
222
+ const chars = alpha + upper + digits + (symbols ? syms : '');
223
+ const bytes = crypto.getRandomValues(new Uint8Array(length));
224
+ return Array.from(bytes, b => chars[b % chars.length]).join('');
225
+ }
226
+ // ── Pluralisation ───────────────────────────────────────
227
+ /**
228
+ * Pluralise an English word.
229
+ * @example Str.plural('post') → 'posts'
230
+ * @example Str.plural('post', 1) → 'post'
231
+ */
232
+ static plural(value, count = 2) {
233
+ if (Math.abs(count) === 1)
234
+ return value;
235
+ const lower = value.toLowerCase();
236
+ // Irregular
237
+ const irregulars = {
238
+ person: 'people', man: 'men', woman: 'women', child: 'children',
239
+ tooth: 'teeth', foot: 'feet', goose: 'geese', mouse: 'mice',
240
+ ox: 'oxen', leaf: 'leaves', life: 'lives', knife: 'knives',
241
+ wolf: 'wolves', half: 'halves', self: 'selves', elf: 'elves',
242
+ shelf: 'shelves', loaf: 'loaves', potato: 'potatoes', tomato: 'tomatoes',
243
+ echo: 'echoes', hero: 'heroes', veto: 'vetoes',
244
+ };
245
+ if (lower in irregulars) {
246
+ const p = irregulars[lower];
247
+ return value === value.toUpperCase() ? p.toUpperCase() : value[0] === value[0]?.toUpperCase() ? Str.title(p) : p;
248
+ }
249
+ // Uncountable
250
+ const uncountable = ['sheep', 'fish', 'deer', 'species', 'aircraft', 'news', 'series', 'feedback', 'staff', 'equipment', 'information', 'rice', 'money', 'police'];
251
+ if (uncountable.includes(lower))
252
+ return value;
253
+ // Rules
254
+ if (/(?:s|x|z|ch|sh)$/i.test(value))
255
+ return value + 'es';
256
+ if (/[^aeiou]y$/i.test(value))
257
+ return value.slice(0, -1) + 'ies';
258
+ if (/(?:[^aeiou])o$/i.test(value))
259
+ return value + 'es';
260
+ if (/(?:f)$/i.test(value))
261
+ return value.slice(0, -1) + 'ves';
262
+ if (/(?:fe)$/i.test(value))
263
+ return value.slice(0, -2) + 'ves';
264
+ return value + 's';
265
+ }
266
+ /**
267
+ * Singularise an English word.
268
+ * @example Str.singular('posts') → 'post'
269
+ */
270
+ static singular(value) {
271
+ const lower = value.toLowerCase();
272
+ // Irregular (reverse lookup)
273
+ const irregulars = {
274
+ people: 'person', men: 'man', women: 'woman', children: 'child',
275
+ teeth: 'tooth', feet: 'foot', geese: 'goose', mice: 'mouse',
276
+ oxen: 'ox', leaves: 'leaf', lives: 'life', knives: 'knife',
277
+ wolves: 'wolf', halves: 'half', selves: 'self', elves: 'elf',
278
+ shelves: 'shelf', loaves: 'loaf', potatoes: 'potato', tomatoes: 'tomato',
279
+ echoes: 'echo', heroes: 'hero', vetoes: 'veto',
280
+ };
281
+ if (lower in irregulars)
282
+ return irregulars[lower];
283
+ // Uncountable
284
+ const uncountable = ['sheep', 'fish', 'deer', 'species', 'aircraft', 'news', 'series', 'feedback', 'staff', 'equipment', 'information', 'rice', 'money', 'police'];
285
+ if (uncountable.includes(lower))
286
+ return value;
287
+ if (/ies$/i.test(value))
288
+ return value.slice(0, -3) + 'y';
289
+ if (/ves$/i.test(value))
290
+ return value.slice(0, -3) + 'f';
291
+ if (/(?:s|x|z|ch|sh)es$/i.test(value))
292
+ return value.slice(0, -2);
293
+ if (/oes$/i.test(value))
294
+ return value.slice(0, -2);
295
+ if (/s$/i.test(value) && !/ss$/i.test(value))
296
+ return value.slice(0, -1);
297
+ return value;
298
+ }
299
+ }
300
+ //# sourceMappingURL=str.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"str.js","sourceRoot":"","sources":["../src/str.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@rudderjs/support",
3
+ "version": "0.0.3",
4
+ "license": "MIT",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/rudderjs/rudder",
8
+ "directory": "packages/support"
9
+ },
10
+ "type": "module",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "sideEffects": false,
17
+ "exports": {
18
+ ".": {
19
+ "import": "./dist/index.js",
20
+ "types": "./dist/index.d.ts"
21
+ }
22
+ },
23
+ "dependencies": {
24
+ "zod": "^4.0.0"
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^20.0.0",
28
+ "typescript": "^5.4.0",
29
+ "tsx": "^4.0.0"
30
+ },
31
+ "author": "Suleiman Shahbari",
32
+ "scripts": {
33
+ "build": "tsc -p tsconfig.build.json",
34
+ "dev": "tsc -p tsconfig.build.json --watch",
35
+ "typecheck": "tsc --noEmit",
36
+ "lint": "eslint src",
37
+ "clean": "rm -rf dist",
38
+ "test": "tsc -p tsconfig.test.json && node --test dist-test/index.test.js; EXIT=$?; rm -rf dist-test; exit $EXIT"
39
+ }
40
+ }