@nestia/e2e 0.1.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.
@@ -0,0 +1,358 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __generator = (this && this.__generator) || function (thisArg, body) {
35
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
36
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
37
+ function verb(n) { return function (v) { return step([n, v]); }; }
38
+ function step(op) {
39
+ if (f) throw new TypeError("Generator is already executing.");
40
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
41
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
42
+ if (y = 0, t) op = [op[0] & 2, t.value];
43
+ switch (op[0]) {
44
+ case 0: case 1: t = op; break;
45
+ case 4: _.label++; return { value: op[1], done: false };
46
+ case 5: _.label++; y = op[1]; op = [0]; continue;
47
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
48
+ default:
49
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
50
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
51
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
52
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
53
+ if (t[2]) _.ops.pop();
54
+ _.trys.pop(); continue;
55
+ }
56
+ op = body.call(thisArg, _);
57
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
58
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
59
+ }
60
+ };
61
+ var __values = (this && this.__values) || function(o) {
62
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
63
+ if (m) return m.call(o);
64
+ if (o && typeof o.length === "number") return {
65
+ next: function () {
66
+ if (o && i >= o.length) o = void 0;
67
+ return { value: o && o[i++], done: !o };
68
+ }
69
+ };
70
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
71
+ };
72
+ var __read = (this && this.__read) || function (o, n) {
73
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
74
+ if (!m) return o;
75
+ var i = m.call(o), r, ar = [], e;
76
+ try {
77
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
78
+ }
79
+ catch (error) { e = { error: error }; }
80
+ finally {
81
+ try {
82
+ if (r && !r.done && (m = i["return"])) m.call(i);
83
+ }
84
+ finally { if (e) throw e.error; }
85
+ }
86
+ return ar;
87
+ };
88
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
89
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
90
+ if (ar || !(i in from)) {
91
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
92
+ ar[i] = from[i];
93
+ }
94
+ }
95
+ return to.concat(ar || Array.prototype.slice.call(from));
96
+ };
97
+ var __importDefault = (this && this.__importDefault) || function (mod) {
98
+ return (mod && mod.__esModule) ? mod : { "default": mod };
99
+ };
100
+ Object.defineProperty(exports, "__esModule", { value: true });
101
+ exports.DynamicExecutor = void 0;
102
+ var chalk_1 = __importDefault(require("chalk"));
103
+ var cli_1 = __importDefault(require("cli"));
104
+ var fs_1 = __importDefault(require("fs"));
105
+ var path_1 = __importDefault(require("path"));
106
+ var StopWatch_1 = require("./StopWatch");
107
+ /**
108
+ * Dynamic Executor running prefixed functions.
109
+ *
110
+ * `DynamicExecutor` runs every prefixed functions in a specific directory.
111
+ * However, if you want to run only specific functions, you can use
112
+ * `--include` or `--exclude` option in the CLI (Command Line Interface) level.
113
+ *
114
+ * When you want to see example utilization cases, see the below example links.
115
+ *
116
+ * @example https://github.com/samchon/backend/blob/master/src/test/index.ts
117
+ * @example https://github.com/samchon/nestia-template/blob/master/src/test/index.ts
118
+ * @author Jeongho Nam - https://github.com/samchon
119
+ */
120
+ var DynamicExecutor;
121
+ (function (DynamicExecutor) {
122
+ var _this = this;
123
+ /**
124
+ * Prepare dynamic executor in strict mode.
125
+ *
126
+ * In strict mode, if any error occurs, the program will be terminated directly.
127
+ * Otherwise, {@link validate} mode does not terminate when error occurs, but
128
+ * just archive the error log.
129
+ *
130
+ * @param options Options of dynamic executor
131
+ * @returns Runner of dynamic functions with specific location
132
+ */
133
+ DynamicExecutor.assert = function (options) {
134
+ /**
135
+ * Run dynamic executor.
136
+ *
137
+ * @param path Location of prefixed functions
138
+ */
139
+ return function (path) {
140
+ return main(options)(true)(path);
141
+ };
142
+ };
143
+ /**
144
+ * Prepare dynamic executor in loose mode.
145
+ *
146
+ * In loose mode, the program would not be terminated even when error occurs.
147
+ * Instead, the error would be archived and returns as a list. Otherwise,
148
+ * {@link assert} mode terminates the program directly when error occurs.
149
+ *
150
+ * @param options Options of dynamic executor
151
+ * @returns Runner of dynamic functions with specific location
152
+ */
153
+ DynamicExecutor.validate = function (options) {
154
+ /**
155
+ * Run dynamic executor.
156
+ *
157
+ * @param path Location of prefix functions
158
+ * @returns List of errors
159
+ */
160
+ return function (path) {
161
+ return main(options)(false)(path);
162
+ };
163
+ };
164
+ var main = function (options) {
165
+ return function (assert) {
166
+ return function (path) { return __awaiter(_this, void 0, void 0, function () {
167
+ var command, report, executor, iterator;
168
+ return __generator(this, function (_a) {
169
+ switch (_a.label) {
170
+ case 0:
171
+ command = cli_1.default.parse();
172
+ report = {
173
+ location: path,
174
+ time: Date.now(),
175
+ executions: [],
176
+ };
177
+ executor = execute(options)(command)(report)(assert);
178
+ iterator = iterate(executor);
179
+ return [4 /*yield*/, iterator(path)];
180
+ case 1:
181
+ _a.sent();
182
+ report.time = Date.now() - report.time;
183
+ return [2 /*return*/, report];
184
+ }
185
+ });
186
+ }); };
187
+ };
188
+ };
189
+ var iterate = function (executor) {
190
+ var visitor = function (path) { return __awaiter(_this, void 0, void 0, function () {
191
+ var directory, directory_1, directory_1_1, file, location_1, stats, modulo, e_1_1;
192
+ var e_1, _a;
193
+ return __generator(this, function (_b) {
194
+ var _c;
195
+ switch (_b.label) {
196
+ case 0: return [4 /*yield*/, fs_1.default.promises.readdir(path)];
197
+ case 1:
198
+ directory = _b.sent();
199
+ _b.label = 2;
200
+ case 2:
201
+ _b.trys.push([2, 12, 13, 14]);
202
+ directory_1 = __values(directory), directory_1_1 = directory_1.next();
203
+ _b.label = 3;
204
+ case 3:
205
+ if (!!directory_1_1.done) return [3 /*break*/, 11];
206
+ file = directory_1_1.value;
207
+ location_1 = path_1.default.resolve("".concat(path, "/").concat(file));
208
+ return [4 /*yield*/, fs_1.default.promises.lstat(location_1)];
209
+ case 4:
210
+ stats = _b.sent();
211
+ if (!(stats.isDirectory() === true)) return [3 /*break*/, 6];
212
+ return [4 /*yield*/, visitor(location_1)];
213
+ case 5:
214
+ _b.sent();
215
+ return [3 /*break*/, 10];
216
+ case 6:
217
+ if (file.substr(-3) !== ".".concat(EXTENSION))
218
+ return [3 /*break*/, 10];
219
+ _b.label = 7;
220
+ case 7: return [4 /*yield*/, (_c = location_1, Promise.resolve().then(function () { return __importStar(require(_c)); }))];
221
+ case 8:
222
+ modulo = _b.sent();
223
+ return [4 /*yield*/, executor(location_1, modulo)];
224
+ case 9:
225
+ _b.sent();
226
+ _b.label = 10;
227
+ case 10:
228
+ directory_1_1 = directory_1.next();
229
+ return [3 /*break*/, 3];
230
+ case 11: return [3 /*break*/, 14];
231
+ case 12:
232
+ e_1_1 = _b.sent();
233
+ e_1 = { error: e_1_1 };
234
+ return [3 /*break*/, 14];
235
+ case 13:
236
+ try {
237
+ if (directory_1_1 && !directory_1_1.done && (_a = directory_1.return)) _a.call(directory_1);
238
+ }
239
+ finally { if (e_1) throw e_1.error; }
240
+ return [7 /*endfinally*/];
241
+ case 14: return [2 /*return*/];
242
+ }
243
+ });
244
+ }); };
245
+ return visitor;
246
+ };
247
+ var execute = function (options) {
248
+ return function (command) {
249
+ return function (report) {
250
+ return function (assert) {
251
+ return function (location, modulo) { return __awaiter(_this, void 0, void 0, function () {
252
+ var _loop_1, _a, _b, _c, _i, key, state_1;
253
+ var _this = this;
254
+ return __generator(this, function (_d) {
255
+ switch (_d.label) {
256
+ case 0:
257
+ _loop_1 = function (key) {
258
+ var closure, func, label, result, _e, exp_1;
259
+ return __generator(this, function (_f) {
260
+ switch (_f.label) {
261
+ case 0:
262
+ if (command.exclude && key.indexOf(command.exclude) !== -1)
263
+ return [2 /*return*/, "continue"];
264
+ else if (command.include && key.indexOf(command.include) === -1)
265
+ return [2 /*return*/, "continue"];
266
+ else if (key.substring(0, options.prefix.length) !== options.prefix)
267
+ return [2 /*return*/, "continue"];
268
+ else if (!(modulo[key] instanceof Function))
269
+ return [2 /*return*/, "continue"];
270
+ closure = modulo[key];
271
+ func = function () { return __awaiter(_this, void 0, void 0, function () {
272
+ return __generator(this, function (_a) {
273
+ switch (_a.label) {
274
+ case 0:
275
+ if (!(options.wrapper !== undefined)) return [3 /*break*/, 2];
276
+ return [4 /*yield*/, options.wrapper(key, closure)];
277
+ case 1:
278
+ _a.sent();
279
+ return [3 /*break*/, 4];
280
+ case 2: return [4 /*yield*/, closure.apply(void 0, __spreadArray([], __read(options.parameters(key)), false))];
281
+ case 3:
282
+ _a.sent();
283
+ _a.label = 4;
284
+ case 4: return [2 /*return*/];
285
+ }
286
+ });
287
+ }); };
288
+ label = chalk_1.default.greenBright(key);
289
+ result = {
290
+ name: key,
291
+ location: location,
292
+ error: null,
293
+ time: Date.now(),
294
+ };
295
+ report.executions.push(result);
296
+ _f.label = 1;
297
+ case 1:
298
+ _f.trys.push([1, 6, , 7]);
299
+ if (!(options.showElapsedTime === false)) return [3 /*break*/, 3];
300
+ return [4 /*yield*/, func()];
301
+ case 2:
302
+ _f.sent();
303
+ result.time = Date.now() - result.time;
304
+ console.log(" - ".concat(label));
305
+ return [3 /*break*/, 5];
306
+ case 3:
307
+ _e = result;
308
+ return [4 /*yield*/, StopWatch_1.StopWatch.measure(func)];
309
+ case 4:
310
+ _e.time = _f.sent();
311
+ console.log(" - ".concat(label, ": ").concat(chalk_1.default.yellowBright(result.time.toLocaleString()), " ms"));
312
+ _f.label = 5;
313
+ case 5: return [3 /*break*/, 7];
314
+ case 6:
315
+ exp_1 = _f.sent();
316
+ if (!(exp_1 instanceof Error))
317
+ return [2 /*return*/, { value: void 0 }];
318
+ result.time = Date.now() - result.time;
319
+ result.error = exp_1;
320
+ console.log(" - ".concat(label, " -> ").concat(chalk_1.default.redBright(exp_1.name)));
321
+ if (assert === true)
322
+ throw exp_1;
323
+ return [3 /*break*/, 7];
324
+ case 7: return [2 /*return*/];
325
+ }
326
+ });
327
+ };
328
+ _a = modulo;
329
+ _b = [];
330
+ for (_c in _a)
331
+ _b.push(_c);
332
+ _i = 0;
333
+ _d.label = 1;
334
+ case 1:
335
+ if (!(_i < _b.length)) return [3 /*break*/, 4];
336
+ _c = _b[_i];
337
+ if (!(_c in _a)) return [3 /*break*/, 3];
338
+ key = _c;
339
+ return [5 /*yield**/, _loop_1(key)];
340
+ case 2:
341
+ state_1 = _d.sent();
342
+ if (typeof state_1 === "object")
343
+ return [2 /*return*/, state_1.value];
344
+ _d.label = 3;
345
+ case 3:
346
+ _i++;
347
+ return [3 /*break*/, 1];
348
+ case 4: return [2 /*return*/];
349
+ }
350
+ });
351
+ }); };
352
+ };
353
+ };
354
+ };
355
+ };
356
+ var EXTENSION = __filename.substring(__filename.length - 2);
357
+ })(DynamicExecutor = exports.DynamicExecutor || (exports.DynamicExecutor = {}));
358
+ //# sourceMappingURL=DynamicExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DynamicExecutor.js","sourceRoot":"","sources":["../src/DynamicExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Gaff comparator.
3
+ *
4
+ * `GaffComparator` is a set of comparator functions for `Array.sort()` function,
5
+ * which can be used with {@link TestValidator.sort} function. If you want to see
6
+ * how to use them, see the below example link.
7
+ *
8
+ * @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_sort.ts
9
+ * @author Jeongho Nam - https://github.com/samchon
10
+ */
11
+ export declare namespace GaffComparator {
12
+ /**
13
+ * String(s) comparator.
14
+ *
15
+ * @param getter Getter of string(s) from input
16
+ * @returns Comparator function
17
+ */
18
+ const strings: <T>(getter: (input: T) => string | string[]) => (x: T, y: T) => number;
19
+ /**
20
+ * Date(s) comparator.
21
+ *
22
+ * @param getter Getter of date(s) from input
23
+ * @returns Comparator function
24
+ */
25
+ const dates: <T>(getter: (input: T) => string | string[]) => (x: T, y: T) => number;
26
+ /**
27
+ * Number(s) comparator.
28
+ *
29
+ * @param closure Getter of number(s) from input
30
+ * @returns Comparator function
31
+ */
32
+ const numbers: <T>(closure: (input: T) => number | number[]) => (x: T, y: T) => number;
33
+ }
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GaffComparator = void 0;
4
+ /**
5
+ * Gaff comparator.
6
+ *
7
+ * `GaffComparator` is a set of comparator functions for `Array.sort()` function,
8
+ * which can be used with {@link TestValidator.sort} function. If you want to see
9
+ * how to use them, see the below example link.
10
+ *
11
+ * @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_sort.ts
12
+ * @author Jeongho Nam - https://github.com/samchon
13
+ */
14
+ var GaffComparator;
15
+ (function (GaffComparator) {
16
+ /**
17
+ * String(s) comparator.
18
+ *
19
+ * @param getter Getter of string(s) from input
20
+ * @returns Comparator function
21
+ */
22
+ GaffComparator.strings = function (getter) {
23
+ return function (x, y) {
24
+ var a = wrap(getter(x));
25
+ var b = wrap(getter(y));
26
+ var idx = a.findIndex(function (v, i) { return v !== b[i]; });
27
+ return idx !== -1 ? compare(a[idx], b[idx]) : 0;
28
+ };
29
+ };
30
+ /**
31
+ * Date(s) comparator.
32
+ *
33
+ * @param getter Getter of date(s) from input
34
+ * @returns Comparator function
35
+ */
36
+ GaffComparator.dates = function (getter) {
37
+ return function (x, y) {
38
+ var take = function (v) {
39
+ return wrap(getter(v)).map(function (str) { return new Date(str).getTime(); });
40
+ };
41
+ var a = take(x);
42
+ var b = take(y);
43
+ var idx = a.findIndex(function (v, i) { return v !== b[i]; });
44
+ return idx !== -1 ? a[idx] - b[idx] : 0;
45
+ };
46
+ };
47
+ /**
48
+ * Number(s) comparator.
49
+ *
50
+ * @param closure Getter of number(s) from input
51
+ * @returns Comparator function
52
+ */
53
+ GaffComparator.numbers = function (closure) {
54
+ return function (x, y) {
55
+ var a = wrap(closure(x));
56
+ var b = wrap(closure(y));
57
+ var idx = a.findIndex(function (v, i) { return v !== b[i]; });
58
+ return idx !== -1 ? a[idx] - b[idx] : 0;
59
+ };
60
+ };
61
+ function compare(x, y) {
62
+ return x[0].localeCompare(y[0]);
63
+ }
64
+ function wrap(elem) {
65
+ return Array.isArray(elem) ? elem : [elem];
66
+ }
67
+ })(GaffComparator = exports.GaffComparator || (exports.GaffComparator = {}));
68
+ //# sourceMappingURL=GaffComparator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;GASG;AACH,IAAiB,cAAc,CA0D9B;AA1DD,WAAiB,cAAc;IAC3B;;;;;OAKG;IACU,sBAAO,GAChB,UAAI,MAAuC;QAC3C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACpC,IAAM,CAAC,GAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC;IAND,CAMC,CAAC;IAEN;;;;;OAKG;IACU,oBAAK,GACd,UAAI,MAAuC;QAC3C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,IAAI,GAAG,UAAC,CAAI;gBACd,OAAA,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAC,GAAG,IAAK,OAAA,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAvB,CAAuB,CAAC;YAArD,CAAqD,CAAC;YAC1D,IAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAM,CAAC,GAAa,IAAI,CAAC,CAAC,CAAC,CAAC;YAE5B,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IARD,CAQC,CAAC;IAEN;;;;;OAKG;IACU,sBAAO,GAChB,UAAI,OAAwC;QAC5C,OAAA,UAAC,CAAI,EAAE,CAAI;YACP,IAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,IAAM,CAAC,GAAa,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAErC,IAAM,GAAG,GAAW,CAAC,CAAC,SAAS,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAV,CAAU,CAAC,CAAC;YACtD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC;IAND,CAMC,CAAC;IAEN,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;QACjC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IAED,SAAS,IAAI,CAAI,IAAa;QAC1B,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;AACL,CAAC,EA1DgB,cAAc,GAAd,sBAAc,KAAd,sBAAc,QA0D9B"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Random data generator.
3
+ *
4
+ * @author Jeongho Nam - https://github.com/samchon
5
+ */
6
+ export declare namespace RandomGenerator {
7
+ /**
8
+ * Generate random alphabets
9
+ *
10
+ * @param length Length of alphabets
11
+ * @returns Generated alphabets
12
+ */
13
+ function alphabets(length: number): string;
14
+ /**
15
+ * Generate random alpha-numeric characters.
16
+ *
17
+ * Generate random string constructed with only alphabets and numbers.
18
+ *
19
+ * @param length Length of characters
20
+ * @returns Generated string
21
+ */
22
+ function alphaNumeric(length: number): string;
23
+ /**
24
+ * Generate random name.
25
+ *
26
+ * @param length Length of paragraph, default is 2 or 3
27
+ * @returns Generated name
28
+ */
29
+ function name(length?: number): string;
30
+ /**
31
+ * Generate random paragraph.
32
+ *
33
+ * @param sentences Number of sentences
34
+ * @returns Paragraph generator
35
+ */
36
+ const paragraph: (sentences: number) => (wordMin?: number, wordMax?: number) => string;
37
+ /**
38
+ * Generate random content.
39
+ *
40
+ * @param paragraphes Number of paragraphes
41
+ * @returns Currying function
42
+ */
43
+ const content: (paragraphes: number) => (sentenceMin?: number, sentenceMax?: number) => (wordMin?: number, wordMax?: number) => string;
44
+ /**
45
+ * Generate random substring.
46
+ *
47
+ * @param content Target content
48
+ * @returns Random substring
49
+ */
50
+ function substring(content: string): string;
51
+ /**
52
+ * Generate random mobile number.
53
+ *
54
+ * @param prefix Prefix string, default is "010"
55
+ * @returns Random mobile number
56
+ */
57
+ function mobile(prefix?: string): string;
58
+ /**
59
+ * Generate random digit.
60
+ *
61
+ * Generate random digit that filling front with zero characters
62
+ * when value is less than maximum cipher.
63
+ *
64
+ * @param minC Minimum cipher
65
+ * @param maxC Maximum cipher
66
+ * @returns
67
+ */
68
+ function digit(minC: number, maxC: number): string;
69
+ /**
70
+ * Generate random date.
71
+ *
72
+ * @param from Start date
73
+ * @param range Range of random milliseconds
74
+ * @returns Random date
75
+ */
76
+ function date(from: Date, range: number): Date;
77
+ /**
78
+ * Pick random elements from an array.
79
+ *
80
+ * @param array Target array
81
+ * @param count Number of count to pick
82
+ * @returns Sampled array
83
+ */
84
+ function sample<T>(array: T[], count: number): T[];
85
+ /**
86
+ * Pick random element from an array.
87
+ *
88
+ * @param array Target array
89
+ * @returns picked element
90
+ */
91
+ function pick<T>(array: T[]): T;
92
+ }