@nestia/e2e 10.0.1 → 11.0.0-dev.20260305

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.
@@ -1,480 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.RandomGenerator = void 0;
4
- /**
5
- * Comprehensive random data generation utilities for testing and development.
6
- *
7
- * RandomGenerator provides a collection of functions for generating random data
8
- * including strings, names, content, dates, and array sampling. All functions
9
- * are designed to be deterministic within a single execution but produce varied
10
- * output across different runs, making them ideal for testing scenarios.
11
- *
12
- * The namespace includes specialized generators for:
13
- *
14
- * - Text content (alphabets, alphanumeric, names, paragraphs)
15
- * - Phone numbers and contact information
16
- * - Date ranges and time-based data
17
- * - Array sampling and element selection
18
- *
19
- * @author Jeongho Nam - https://github.com/samchon
20
- * @example
21
- * ```typescript
22
- * // Generate test user data
23
- * const testUser = {
24
- * id: RandomGenerator.alphaNumeric(8),
25
- * name: RandomGenerator.name(),
26
- * bio: RandomGenerator.paragraph({ sentences: 3, wordMin: 5, wordMax: 10 }),
27
- * phone: RandomGenerator.mobile(),
28
- * createdAt: RandomGenerator.date(new Date(), 1000 * 60 * 60 * 24 * 30) // 30 days
29
- * };
30
- *
31
- * // Sample data for testing
32
- * const testSample = RandomGenerator.sample(allUsers, 5);
33
- * ```;
34
- */
35
- var RandomGenerator;
36
- (function (RandomGenerator) {
37
- /** Character set containing lowercase alphabetical characters a-z */
38
- var CHARACTERS = "abcdefghijklmnopqrstuvwxyz";
39
- /**
40
- * Character set containing digits (0-9) and lowercase alphabetical characters
41
- * (a-z)
42
- */
43
- var LETTERS = "0123456789" + CHARACTERS;
44
- /**
45
- * Generates a random string containing only lowercase alphabetical
46
- * characters.
47
- *
48
- * Creates a string of specified length using only characters a-z. Each
49
- * character is independently randomly selected, so the same character may
50
- * appear multiple times. Useful for generating random identifiers, test
51
- * names, or placeholder text.
52
- *
53
- * @example
54
- * ```typescript
55
- * RandomGenerator.alphabets(5); // e.g. "kxqpw"
56
- * RandomGenerator.alphabets(3); // e.g. "mzr"
57
- * RandomGenerator.alphabets(10); // e.g. "qwertasdfg"
58
- *
59
- * // Generate random CSS class names
60
- * const className = `test-${RandomGenerator.alphabets(6)}`;
61
- *
62
- * // Create random variable names for testing
63
- * const varName = RandomGenerator.alphabets(8);
64
- * ```
65
- *
66
- * @param length - The desired length of the generated alphabetic string
67
- * @returns A string containing only lowercase letters of the specified length
68
- */
69
- RandomGenerator.alphabets = function (length) {
70
- return new Array(length)
71
- .fill("")
72
- .map(function () { return CHARACTERS[randint(0, CHARACTERS.length - 1)]; })
73
- .join("");
74
- };
75
- /**
76
- * Generates a random alphanumeric string containing digits and lowercase
77
- * letters.
78
- *
79
- * Creates a string of specified length using characters from 0-9 and a-z.
80
- * Each position is independently randomly selected from the combined
81
- * character set. Ideal for generating random IDs, tokens, passwords, or
82
- * unique identifiers that need both numeric and alphabetic characters.
83
- *
84
- * @example
85
- * ```typescript
86
- * RandomGenerator.alphaNumeric(8); // e.g. "a1b2c3d4"
87
- * RandomGenerator.alphaNumeric(12); // e.g. "x9y8z7w6v5u4"
88
- *
89
- * // Generate random API keys
90
- * const apiKey = RandomGenerator.alphaNumeric(32);
91
- *
92
- * // Create session tokens
93
- * const sessionId = `sess_${RandomGenerator.alphaNumeric(16)}`;
94
- *
95
- * // Generate test database IDs
96
- * const testId = RandomGenerator.alphaNumeric(10);
97
- * ```
98
- *
99
- * @param length - The desired length of the generated alphanumeric string
100
- * @returns A string containing digits and lowercase letters of the specified
101
- * length
102
- */
103
- RandomGenerator.alphaNumeric = function (length) {
104
- return new Array(length)
105
- .fill("")
106
- .map(function () { return LETTERS[randint(0, LETTERS.length - 1)]; })
107
- .join("");
108
- };
109
- /**
110
- * Generates a random name-like string with realistic length variation.
111
- *
112
- * Creates a name by generating a paragraph with 2-3 words (randomly chosen).
113
- * The resulting string resembles typical human names in structure and length.
114
- * Each word is between 3-7 characters by default, creating realistic-looking
115
- * names.
116
- *
117
- * @example
118
- * ```typescript
119
- * RandomGenerator.name(); // e.g. "lorem ipsum" (2-3 words)
120
- * RandomGenerator.name(1); // e.g. "dolor" (single word)
121
- * RandomGenerator.name(3); // e.g. "sit amet consectetur" (3 words)
122
- *
123
- * // Generate test user names
124
- * const users = Array.from({ length: 10 }, () => ({
125
- * id: RandomGenerator.alphaNumeric(8),
126
- * name: RandomGenerator.name(),
127
- * email: `${RandomGenerator.name(1)}@test.com`
128
- * }));
129
- *
130
- * // Create random author names for blog posts
131
- * const authorName = RandomGenerator.name();
132
- * ```
133
- *
134
- * @param length - Number of words in the name (default: random between 2-3)
135
- * @returns A space-separated string of random words (each 3-7 chars by
136
- * default)
137
- */
138
- RandomGenerator.name = function (length) {
139
- if (length === void 0) { length = randint(2, 3); }
140
- return RandomGenerator.paragraph({
141
- sentences: length,
142
- });
143
- };
144
- /**
145
- * Generates a random paragraph with configurable sentence structure.
146
- *
147
- * Creates a paragraph consisting of a specified number of "sentences"
148
- * (words). Each sentence is a random alphabetic string, and sentences are
149
- * joined with spaces. Accepts an optional configuration object for fine-tuned
150
- * control over the paragraph structure.
151
- *
152
- * @example
153
- * ```typescript
154
- * // Generate with defaults (random 2-5 words, 3-7 characters each)
155
- * RandomGenerator.paragraph(); // e.g. "lorem ipsum dolor"
156
- *
157
- * // Specific number of sentences
158
- * RandomGenerator.paragraph({ sentences: 5 }); // "lorem ipsum dolor sit amet"
159
- *
160
- * // Custom word length ranges
161
- * RandomGenerator.paragraph({ sentences: 4, wordMin: 2, wordMax: 5 });
162
- * // "ab cd ef gh"
163
- *
164
- * // Generate product descriptions
165
- * const description = RandomGenerator.paragraph({
166
- * sentences: 8,
167
- * wordMin: 4,
168
- * wordMax: 8
169
- * });
170
- *
171
- * // Create test content for forms
172
- * const placeholder = RandomGenerator.paragraph({
173
- * sentences: 3,
174
- * wordMin: 5,
175
- * wordMax: 10
176
- * });
177
- * ```;
178
- *
179
- * @param props - Optional configuration object with sentences count and word
180
- * length ranges
181
- * @returns A string containing the generated paragraph
182
- */
183
- RandomGenerator.paragraph = function (props) {
184
- var _a;
185
- return new Array((_a = props === null || props === void 0 ? void 0 : props.sentences) !== null && _a !== void 0 ? _a : randint(2, 5))
186
- .fill("")
187
- .map(function () { var _a, _b; return RandomGenerator.alphabets(randint((_a = props === null || props === void 0 ? void 0 : props.wordMin) !== null && _a !== void 0 ? _a : 3, (_b = props === null || props === void 0 ? void 0 : props.wordMax) !== null && _b !== void 0 ? _b : 7)); })
188
- .join(" ");
189
- };
190
- /**
191
- * Generates random multi-paragraph content with customizable structure.
192
- *
193
- * Creates content consisting of multiple paragraphs separated by double
194
- * newlines. Accepts an optional configuration object to control content
195
- * structure including paragraph count, sentences per paragraph, and word
196
- * character lengths. Ideal for generating realistic-looking text content for
197
- * testing.
198
- *
199
- * @example
200
- * ```typescript
201
- * // Generate with all defaults
202
- * const article = RandomGenerator.content();
203
- *
204
- * // Specific structure: 5 paragraphs, 15-25 sentences each, 4-8 char words
205
- * const longContent = RandomGenerator.content({
206
- * paragraphs: 5,
207
- * sentenceMin: 15,
208
- * sentenceMax: 25,
209
- * wordMin: 4,
210
- * wordMax: 8
211
- * });
212
- *
213
- * // Short content with brief sentences
214
- * const shortContent = RandomGenerator.content({
215
- * paragraphs: 2,
216
- * sentenceMin: 5,
217
- * sentenceMax: 8,
218
- * wordMin: 2,
219
- * wordMax: 4
220
- * });
221
- *
222
- * // Generate blog post content
223
- * const blogPost = {
224
- * title: RandomGenerator.name(3),
225
- * content: RandomGenerator.content({
226
- * paragraphs: 4,
227
- * sentenceMin: 10,
228
- * sentenceMax: 20,
229
- * wordMin: 3,
230
- * wordMax: 7
231
- * }),
232
- * summary: RandomGenerator.paragraph({ sentences: 2 })
233
- * };
234
- *
235
- * // Create test data for CMS
236
- * const pages = Array.from({ length: 10 }, () => ({
237
- * id: RandomGenerator.alphaNumeric(8),
238
- * content: RandomGenerator.content({
239
- * paragraphs: randint(2, 6),
240
- * sentenceMin: 8,
241
- * sentenceMax: 15
242
- * })
243
- * }));
244
- * ```;
245
- *
246
- * @param props - Optional configuration object with paragraph, sentence, and
247
- * word parameters
248
- * @returns A string containing the generated multi-paragraph content
249
- */
250
- RandomGenerator.content = function (props) {
251
- var _a;
252
- return new Array((_a = props === null || props === void 0 ? void 0 : props.paragraphs) !== null && _a !== void 0 ? _a : randint(3, 8))
253
- .fill("")
254
- .map(function () {
255
- var _a, _b, _c, _d;
256
- return RandomGenerator.paragraph({
257
- sentences: randint((_a = props === null || props === void 0 ? void 0 : props.sentenceMin) !== null && _a !== void 0 ? _a : 10, (_b = props === null || props === void 0 ? void 0 : props.sentenceMax) !== null && _b !== void 0 ? _b : 40),
258
- wordMin: (_c = props === null || props === void 0 ? void 0 : props.wordMin) !== null && _c !== void 0 ? _c : 1,
259
- wordMax: (_d = props === null || props === void 0 ? void 0 : props.wordMax) !== null && _d !== void 0 ? _d : 7,
260
- });
261
- })
262
- .join("\n\n");
263
- };
264
- /**
265
- * Extracts a random substring from the provided content string.
266
- *
267
- * Selects two random positions within the content and returns the substring
268
- * between them. The starting position is always before the ending position.
269
- * Automatically trims whitespace from the beginning and end of the result.
270
- * Useful for creating excerpts, search terms, or partial content samples.
271
- *
272
- * @example
273
- * ```typescript
274
- * const text = "The quick brown fox jumps over the lazy dog";
275
- *
276
- * RandomGenerator.substring(text); // e.g. "quick brown fox"
277
- * RandomGenerator.substring(text); // e.g. "jumps over"
278
- * RandomGenerator.substring(text); // e.g. "fox jumps over the lazy"
279
- *
280
- * // Generate search terms from content
281
- * const searchQuery = RandomGenerator.substring(articleContent);
282
- *
283
- * // Create excerpts for previews
284
- * const excerpt = RandomGenerator.substring(fullBlogPost);
285
- *
286
- * // Generate partial matches for testing search functionality
287
- * const partialMatch = RandomGenerator.substring(productDescription);
288
- *
289
- * // Create random selections for highlight testing
290
- * const selectedText = RandomGenerator.substring(documentContent);
291
- * ```;
292
- *
293
- * @param content - The source string to extract a substring from
294
- * @returns A trimmed substring of the original content
295
- */
296
- RandomGenerator.substring = function (content) {
297
- var first = randint(0, content.length - 1);
298
- var last = randint(first + 1, content.length);
299
- return content.substring(first, last).trim();
300
- };
301
- /**
302
- * Generates a random mobile phone number with customizable prefix.
303
- *
304
- * Creates a mobile phone number in the format: [prefix][3-4 digits][4
305
- * digits]. The middle section is 3 digits if the random number is less than
306
- * 1000, otherwise 4 digits. The last section is always 4 digits, zero-padded
307
- * if necessary. Commonly used for generating Korean mobile phone numbers or
308
- * similar formats.
309
- *
310
- * @example
311
- * ```typescript
312
- * RandomGenerator.mobile(); // e.g. "0103341234" or "01012345678"
313
- * RandomGenerator.mobile("011"); // e.g. "0119876543" or "01112345678"
314
- * RandomGenerator.mobile("+82"); // e.g. "+823341234" or "+8212345678"
315
- *
316
- * // Generate test user phone numbers
317
- * const testUsers = Array.from({ length: 100 }, () => ({
318
- * name: RandomGenerator.name(),
319
- * phone: RandomGenerator.mobile(),
320
- * altPhone: RandomGenerator.mobile("011")
321
- * }));
322
- *
323
- * // Create international phone numbers
324
- * const internationalPhone = RandomGenerator.mobile("+821");
325
- *
326
- * // Generate contact list for testing
327
- * const contacts = ["010", "011", "016", "017", "018", "019"].map(prefix => ({
328
- * carrier: prefix,
329
- * number: RandomGenerator.mobile(prefix)
330
- * }));
331
- * ```;
332
- *
333
- * @param prefix - The prefix string for the phone number (default: "010")
334
- * @returns A formatted mobile phone number string
335
- */
336
- RandomGenerator.mobile = function (prefix) {
337
- if (prefix === void 0) { prefix = "010"; }
338
- return [
339
- prefix,
340
- (function () {
341
- var value = randint(0, 9999);
342
- return value.toString().padStart(value < 1000 ? 3 : 4, "0");
343
- })(),
344
- randint(0, 9999).toString().padStart(4, "0"),
345
- ].join("");
346
- };
347
- /**
348
- * Generates a random date within a specified range from a starting point.
349
- *
350
- * Returns a random date between the start date and start date + range. The
351
- * range represents the maximum number of milliseconds to add to the starting
352
- * date. Useful for generating timestamps, creation dates, or scheduling test
353
- * data.
354
- *
355
- * @example
356
- * ```typescript
357
- * const now = new Date();
358
- * const oneDay = 24 * 60 * 60 * 1000;
359
- * const oneMonth = 30 * oneDay;
360
- *
361
- * // Random date within the next 30 days
362
- * const futureDate = RandomGenerator.date(now, oneMonth);
363
- *
364
- * // Random date within the past week
365
- * const pastWeek = new Date(now.getTime() - 7 * oneDay);
366
- * const recentDate = RandomGenerator.date(pastWeek, 7 * oneDay);
367
- *
368
- * // Generate random creation dates for test data
369
- * const startOfYear = new Date(2024, 0, 1);
370
- * const endOfYear = new Date(2024, 11, 31).getTime() - startOfYear.getTime();
371
- * const randomCreationDate = RandomGenerator.date(startOfYear, endOfYear);
372
- *
373
- * // Create test events with random timestamps
374
- * const events = Array.from({ length: 50 }, () => ({
375
- * id: RandomGenerator.alphaNumeric(8),
376
- * title: RandomGenerator.name(2),
377
- * createdAt: RandomGenerator.date(new Date(), oneMonth),
378
- * scheduledFor: RandomGenerator.date(new Date(), oneMonth * 3)
379
- * }));
380
- * ```;
381
- *
382
- * @param from - The starting date for the random range
383
- * @param range - The range in milliseconds from the starting date
384
- * @returns A random date within the specified range
385
- */
386
- RandomGenerator.date = function (from, range) {
387
- return new Date(from.getTime() + randint(0, range));
388
- };
389
- /**
390
- * Randomly samples a specified number of unique elements from an array.
391
- *
392
- * Selects random elements from the input array without replacement, ensuring
393
- * all returned elements are unique. The sample size is automatically capped
394
- * at the array length to prevent errors. Uses a Set-based approach to
395
- * guarantee uniqueness of selected indices. Ideal for creating test datasets
396
- * or selecting random subsets for validation.
397
- *
398
- * @example
399
- * ```typescript
400
- * const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
401
- *
402
- * RandomGenerator.sample(numbers, 3); // e.g. [2, 7, 9]
403
- * RandomGenerator.sample(numbers, 5); // e.g. [1, 4, 6, 8, 10]
404
- * RandomGenerator.sample(numbers, 15); // returns all 10 elements (capped at array length)
405
- *
406
- * // Sample users for testing
407
- * const allUsers = await getUsersFromDatabase();
408
- * const testUsers = RandomGenerator.sample(allUsers, 10);
409
- *
410
- * // Create random product selections
411
- * const featuredProducts = RandomGenerator.sample(allProducts, 5);
412
- *
413
- * // Generate test data subsets
414
- * const validationSet = RandomGenerator.sample(trainingData, 100);
415
- *
416
- * // Random A/B testing groups
417
- * const groupA = RandomGenerator.sample(allParticipants, 50);
418
- * const remaining = allParticipants.filter(p => !groupA.includes(p));
419
- * const groupB = RandomGenerator.sample(remaining, 50);
420
- * ```;
421
- *
422
- * @param array - The source array to sample from
423
- * @param count - The number of elements to sample
424
- * @returns An array containing the randomly selected elements
425
- */
426
- RandomGenerator.sample = function (array, count) {
427
- count = Math.min(count, array.length);
428
- var indexes = new Set();
429
- while (indexes.size < count)
430
- indexes.add(randint(0, array.length - 1));
431
- return Array.from(indexes).map(function (index) { return array[index]; });
432
- };
433
- /**
434
- * Randomly selects a single element from an array.
435
- *
436
- * Chooses one element at random from the provided array using uniform
437
- * distribution. Each element has an equal probability of being selected. This
438
- * is a convenience function equivalent to sampling with a count of 1, but
439
- * returns the element directly rather than an array containing one element.
440
- *
441
- * @example
442
- * ```typescript
443
- * const colors = ['red', 'blue', 'green', 'yellow', 'purple'];
444
- * const fruits = ['apple', 'banana', 'orange', 'grape', 'kiwi'];
445
- *
446
- * RandomGenerator.pick(colors); // e.g. "blue"
447
- * RandomGenerator.pick(fruits); // e.g. "apple"
448
- *
449
- * // Select random configuration options
450
- * const randomTheme = RandomGenerator.pick(['light', 'dark', 'auto']);
451
- * const randomLocale = RandomGenerator.pick(['en', 'ko', 'ja', 'zh']);
452
- *
453
- * // Choose random test scenarios
454
- * const testScenario = RandomGenerator.pick([
455
- * 'happy_path',
456
- * 'edge_case',
457
- * 'error_condition',
458
- * 'boundary_test'
459
- * ]);
460
- *
461
- * // Random user role assignment
462
- * const userRole = RandomGenerator.pick(['admin', 'user', 'moderator']);
463
- *
464
- * // Select random API endpoints for testing
465
- * const endpoints = ['/users', '/posts', '/comments', '/categories'];
466
- * const randomEndpoint = RandomGenerator.pick(endpoints);
467
- * ```;
468
- *
469
- * @param array - The source array to pick an element from
470
- * @returns A randomly selected element from the array
471
- */
472
- RandomGenerator.pick = function (array) {
473
- return array[randint(0, array.length - 1)];
474
- };
475
- })(RandomGenerator || (exports.RandomGenerator = RandomGenerator = {}));
476
- /** @internal */
477
- var randint = function (min, max) {
478
- return Math.floor(Math.random() * (max - min + 1)) + min;
479
- };
480
- //# sourceMappingURL=RandomGenerator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RandomGenerator.js","sourceRoot":"","sources":["../src/RandomGenerator.ts"],"names":[],"mappings":"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"}