@nestia/e2e 0.1.1 → 0.1.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/lib/DynamicExecutor.d.ts +7 -0
- package/lib/DynamicExecutor.js +103 -109
- package/lib/DynamicExecutor.js.map +1 -1
- package/lib/TestValidator.d.ts +19 -3
- package/lib/TestValidator.js +100 -3
- package/lib/TestValidator.js.map +1 -1
- package/package.json +52 -52
- package/src/ArrayUtil.ts +87 -87
- package/src/DynamicExecutor.ts +267 -270
- package/src/GaffComparator.ts +69 -69
- package/src/RandomGenerator.ts +178 -178
- package/src/StopWatch.ts +36 -36
- package/src/TestValidator.ts +208 -145
- package/src/index.ts +4 -4
- package/src/module.ts +6 -6
package/lib/DynamicExecutor.d.ts
CHANGED
|
@@ -40,6 +40,13 @@ export declare namespace DynamicExecutor {
|
|
|
40
40
|
* @returns Parameters
|
|
41
41
|
*/
|
|
42
42
|
parameters: (name: string) => Parameters;
|
|
43
|
+
/**
|
|
44
|
+
* Filter function whether to run or not.
|
|
45
|
+
*
|
|
46
|
+
* @param name Function name
|
|
47
|
+
* @returns Whether to run or not
|
|
48
|
+
*/
|
|
49
|
+
filter?: (name: string) => boolean;
|
|
43
50
|
/**
|
|
44
51
|
* Wrapper of test function.
|
|
45
52
|
*
|
package/lib/DynamicExecutor.js
CHANGED
|
@@ -100,7 +100,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
100
100
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
101
101
|
exports.DynamicExecutor = void 0;
|
|
102
102
|
var chalk_1 = __importDefault(require("chalk"));
|
|
103
|
-
var cli_1 = __importDefault(require("cli"));
|
|
104
103
|
var fs_1 = __importDefault(require("fs"));
|
|
105
104
|
var path_1 = __importDefault(require("path"));
|
|
106
105
|
var StopWatch_1 = require("./StopWatch");
|
|
@@ -164,17 +163,16 @@ var DynamicExecutor;
|
|
|
164
163
|
var main = function (options) {
|
|
165
164
|
return function (assert) {
|
|
166
165
|
return function (path) { return __awaiter(_this, void 0, void 0, function () {
|
|
167
|
-
var
|
|
166
|
+
var report, executor, iterator;
|
|
168
167
|
return __generator(this, function (_a) {
|
|
169
168
|
switch (_a.label) {
|
|
170
169
|
case 0:
|
|
171
|
-
command = cli_1.default.parse();
|
|
172
170
|
report = {
|
|
173
171
|
location: path,
|
|
174
172
|
time: Date.now(),
|
|
175
173
|
executions: [],
|
|
176
174
|
};
|
|
177
|
-
executor = execute(options)(
|
|
175
|
+
executor = execute(options)(report)(assert);
|
|
178
176
|
iterator = iterate(executor);
|
|
179
177
|
return [4 /*yield*/, iterator(path)];
|
|
180
178
|
case 1:
|
|
@@ -245,111 +243,107 @@ var DynamicExecutor;
|
|
|
245
243
|
return visitor;
|
|
246
244
|
};
|
|
247
245
|
var execute = function (options) {
|
|
248
|
-
return function (
|
|
249
|
-
return function (
|
|
250
|
-
return function (
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
}
|
|
350
|
-
});
|
|
351
|
-
}); };
|
|
352
|
-
};
|
|
246
|
+
return function (report) {
|
|
247
|
+
return function (assert) {
|
|
248
|
+
return function (location, modulo) { return __awaiter(_this, void 0, void 0, function () {
|
|
249
|
+
var _loop_1, _a, _b, _c, _i, key, state_1;
|
|
250
|
+
var _this = this;
|
|
251
|
+
return __generator(this, function (_d) {
|
|
252
|
+
switch (_d.label) {
|
|
253
|
+
case 0:
|
|
254
|
+
_loop_1 = function (key) {
|
|
255
|
+
var closure, func, label, result, _e, exp_1;
|
|
256
|
+
return __generator(this, function (_f) {
|
|
257
|
+
switch (_f.label) {
|
|
258
|
+
case 0:
|
|
259
|
+
if (key.substring(0, options.prefix.length) !== options.prefix)
|
|
260
|
+
return [2 /*return*/, "continue"];
|
|
261
|
+
else if (!(modulo[key] instanceof Function))
|
|
262
|
+
return [2 /*return*/, "continue"];
|
|
263
|
+
else if (options.filter && options.filter(key) === false)
|
|
264
|
+
return [2 /*return*/, "continue"];
|
|
265
|
+
closure = modulo[key];
|
|
266
|
+
func = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
267
|
+
return __generator(this, function (_a) {
|
|
268
|
+
switch (_a.label) {
|
|
269
|
+
case 0:
|
|
270
|
+
if (!(options.wrapper !== undefined)) return [3 /*break*/, 2];
|
|
271
|
+
return [4 /*yield*/, options.wrapper(key, closure)];
|
|
272
|
+
case 1:
|
|
273
|
+
_a.sent();
|
|
274
|
+
return [3 /*break*/, 4];
|
|
275
|
+
case 2: return [4 /*yield*/, closure.apply(void 0, __spreadArray([], __read(options.parameters(key)), false))];
|
|
276
|
+
case 3:
|
|
277
|
+
_a.sent();
|
|
278
|
+
_a.label = 4;
|
|
279
|
+
case 4: return [2 /*return*/];
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}); };
|
|
283
|
+
label = chalk_1.default.greenBright(key);
|
|
284
|
+
result = {
|
|
285
|
+
name: key,
|
|
286
|
+
location: location,
|
|
287
|
+
error: null,
|
|
288
|
+
time: Date.now(),
|
|
289
|
+
};
|
|
290
|
+
report.executions.push(result);
|
|
291
|
+
_f.label = 1;
|
|
292
|
+
case 1:
|
|
293
|
+
_f.trys.push([1, 6, , 7]);
|
|
294
|
+
if (!(options.showElapsedTime === false)) return [3 /*break*/, 3];
|
|
295
|
+
return [4 /*yield*/, func()];
|
|
296
|
+
case 2:
|
|
297
|
+
_f.sent();
|
|
298
|
+
result.time = Date.now() - result.time;
|
|
299
|
+
console.log(" - ".concat(label));
|
|
300
|
+
return [3 /*break*/, 5];
|
|
301
|
+
case 3:
|
|
302
|
+
_e = result;
|
|
303
|
+
return [4 /*yield*/, StopWatch_1.StopWatch.measure(func)];
|
|
304
|
+
case 4:
|
|
305
|
+
_e.time = _f.sent();
|
|
306
|
+
console.log(" - ".concat(label, ": ").concat(chalk_1.default.yellowBright(result.time.toLocaleString()), " ms"));
|
|
307
|
+
_f.label = 5;
|
|
308
|
+
case 5: return [3 /*break*/, 7];
|
|
309
|
+
case 6:
|
|
310
|
+
exp_1 = _f.sent();
|
|
311
|
+
if (!(exp_1 instanceof Error))
|
|
312
|
+
return [2 /*return*/, { value: void 0 }];
|
|
313
|
+
result.time = Date.now() - result.time;
|
|
314
|
+
result.error = exp_1;
|
|
315
|
+
console.log(" - ".concat(label, " -> ").concat(chalk_1.default.redBright(exp_1.name)));
|
|
316
|
+
if (assert === true)
|
|
317
|
+
throw exp_1;
|
|
318
|
+
return [3 /*break*/, 7];
|
|
319
|
+
case 7: return [2 /*return*/];
|
|
320
|
+
}
|
|
321
|
+
});
|
|
322
|
+
};
|
|
323
|
+
_a = modulo;
|
|
324
|
+
_b = [];
|
|
325
|
+
for (_c in _a)
|
|
326
|
+
_b.push(_c);
|
|
327
|
+
_i = 0;
|
|
328
|
+
_d.label = 1;
|
|
329
|
+
case 1:
|
|
330
|
+
if (!(_i < _b.length)) return [3 /*break*/, 4];
|
|
331
|
+
_c = _b[_i];
|
|
332
|
+
if (!(_c in _a)) return [3 /*break*/, 3];
|
|
333
|
+
key = _c;
|
|
334
|
+
return [5 /*yield**/, _loop_1(key)];
|
|
335
|
+
case 2:
|
|
336
|
+
state_1 = _d.sent();
|
|
337
|
+
if (typeof state_1 === "object")
|
|
338
|
+
return [2 /*return*/, state_1.value];
|
|
339
|
+
_d.label = 3;
|
|
340
|
+
case 3:
|
|
341
|
+
_i++;
|
|
342
|
+
return [3 /*break*/, 1];
|
|
343
|
+
case 4: return [2 /*return*/];
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}); };
|
|
353
347
|
};
|
|
354
348
|
};
|
|
355
349
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicExecutor.js","sourceRoot":"","sources":["../src/DynamicExecutor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAA0B;AAC1B,
|
|
1
|
+
{"version":3,"file":"DynamicExecutor.js","sourceRoot":"","sources":["../src/DynamicExecutor.ts"],"names":[],"mappings":"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"}
|
package/lib/TestValidator.d.ts
CHANGED
|
@@ -29,6 +29,23 @@ export declare namespace TestValidator {
|
|
|
29
29
|
* @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_search.ts
|
|
30
30
|
*/
|
|
31
31
|
const index: (title: string) => <Solution extends IEntity<any>>(expected: Solution[]) => <Summary extends IEntity<any>>(gotten: Summary[], trace?: boolean) => void;
|
|
32
|
+
/**
|
|
33
|
+
* Valiate search options.
|
|
34
|
+
*
|
|
35
|
+
* Test a pagination API supporting search options.
|
|
36
|
+
*
|
|
37
|
+
* @param title Title of error message when searching is invalid
|
|
38
|
+
* @returns Currying function
|
|
39
|
+
*
|
|
40
|
+
* @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_search.ts
|
|
41
|
+
*/
|
|
42
|
+
const search: (title: string) => <Entity extends IEntity<any>, Input>(getter: (input: Input) => Promise<Entity[]>, validator?: ((data: Entity[]) => any) | undefined) => (total: Entity[], sampleCount?: number) => <Values extends any[]>(props: ISearchProps<Entity, Values, Input>) => Promise<void>;
|
|
43
|
+
interface ISearchProps<Entity extends IEntity<any>, Values extends any[], Input> {
|
|
44
|
+
fields: string[];
|
|
45
|
+
values(entity: Entity): Values;
|
|
46
|
+
filter(entity: Entity, values: Values): boolean;
|
|
47
|
+
search(values: Values): Input;
|
|
48
|
+
}
|
|
32
49
|
/**
|
|
33
50
|
* Validate sorting options.
|
|
34
51
|
*
|
|
@@ -38,11 +55,10 @@ export declare namespace TestValidator {
|
|
|
38
55
|
* with multiple fields. However, as it forms a complicate currying function,
|
|
39
56
|
* I recomend you to see below example code before using.
|
|
40
57
|
*
|
|
41
|
-
* @param title Title of error
|
|
42
|
-
*
|
|
58
|
+
* @param title Title of error message when sorting is invalid
|
|
43
59
|
* @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_sort.ts
|
|
44
60
|
*/
|
|
45
|
-
const sort: (title: string) => <T extends object, Fields extends string, Sortable_1 extends (`-${Fields}` | `+${Fields}`)[]>(getter: (sortable: Sortable_1) => Promise<T[]
|
|
61
|
+
const sort: (title: string) => <T extends object, Fields extends string, Sortable_1 extends (`-${Fields}` | `+${Fields}`)[]>(getter: (sortable: Sortable_1) => Promise<T[]>, validator?: ((data: T[]) => any) | undefined) => (...fields: Fields[]) => (comp: (x: T, y: T) => number, filter?: ((elem: T) => boolean) | undefined) => (direction: "+" | "-", trace?: boolean) => Promise<void>;
|
|
46
62
|
type Sortable<Literal extends string> = Array<`-${Literal}` | `+${Literal}`>;
|
|
47
63
|
}
|
|
48
64
|
interface IEntity<Type extends string | number | bigint> {
|
package/lib/TestValidator.js
CHANGED
|
@@ -35,9 +35,21 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
35
35
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
+
var __values = (this && this.__values) || function(o) {
|
|
39
|
+
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
40
|
+
if (m) return m.call(o);
|
|
41
|
+
if (o && typeof o.length === "number") return {
|
|
42
|
+
next: function () {
|
|
43
|
+
if (o && i >= o.length) o = void 0;
|
|
44
|
+
return { value: o && o[i++], done: !o };
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
48
|
+
};
|
|
38
49
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
50
|
exports.TestValidator = void 0;
|
|
40
51
|
var ranges_1 = require("tstl/ranges");
|
|
52
|
+
var RandomGenerator_1 = require("./RandomGenerator");
|
|
41
53
|
/**
|
|
42
54
|
* Test validator.
|
|
43
55
|
*
|
|
@@ -111,6 +123,90 @@ var TestValidator;
|
|
|
111
123
|
};
|
|
112
124
|
};
|
|
113
125
|
};
|
|
126
|
+
/**
|
|
127
|
+
* Valiate search options.
|
|
128
|
+
*
|
|
129
|
+
* Test a pagination API supporting search options.
|
|
130
|
+
*
|
|
131
|
+
* @param title Title of error message when searching is invalid
|
|
132
|
+
* @returns Currying function
|
|
133
|
+
*
|
|
134
|
+
* @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_search.ts
|
|
135
|
+
*/
|
|
136
|
+
TestValidator.search = function (title) {
|
|
137
|
+
/**
|
|
138
|
+
* @param getter A pagination API function to be called
|
|
139
|
+
* @param validator Validator function if required
|
|
140
|
+
*/
|
|
141
|
+
return function (getter, validator) {
|
|
142
|
+
/**
|
|
143
|
+
* @param total Total entity records for comparison
|
|
144
|
+
* @param sampleCount Sampling count. Default is 1
|
|
145
|
+
*/
|
|
146
|
+
return function (total, sampleCount) {
|
|
147
|
+
if (sampleCount === void 0) { sampleCount = 1; }
|
|
148
|
+
/**
|
|
149
|
+
* @param props Search properties
|
|
150
|
+
*/
|
|
151
|
+
return function (props) { return __awaiter(_this, void 0, void 0, function () {
|
|
152
|
+
var samples, _loop_1, samples_1, samples_1_1, s, e_1_1;
|
|
153
|
+
var e_1, _a;
|
|
154
|
+
return __generator(this, function (_b) {
|
|
155
|
+
switch (_b.label) {
|
|
156
|
+
case 0:
|
|
157
|
+
samples = RandomGenerator_1.RandomGenerator.sample(total, sampleCount);
|
|
158
|
+
_loop_1 = function (s) {
|
|
159
|
+
var values, filtered, gotten;
|
|
160
|
+
return __generator(this, function (_c) {
|
|
161
|
+
switch (_c.label) {
|
|
162
|
+
case 0:
|
|
163
|
+
values = props.values(s);
|
|
164
|
+
filtered = total.filter(function (entity) {
|
|
165
|
+
return props.filter(entity, values);
|
|
166
|
+
});
|
|
167
|
+
return [4 /*yield*/, getter(props.search(values))];
|
|
168
|
+
case 1:
|
|
169
|
+
gotten = _c.sent();
|
|
170
|
+
if (validator)
|
|
171
|
+
validator(gotten);
|
|
172
|
+
TestValidator.index("".concat(title, " (").concat(props.fields.join(", "), ")"))(filtered)(gotten);
|
|
173
|
+
return [2 /*return*/];
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
};
|
|
177
|
+
_b.label = 1;
|
|
178
|
+
case 1:
|
|
179
|
+
_b.trys.push([1, 6, 7, 8]);
|
|
180
|
+
samples_1 = __values(samples), samples_1_1 = samples_1.next();
|
|
181
|
+
_b.label = 2;
|
|
182
|
+
case 2:
|
|
183
|
+
if (!!samples_1_1.done) return [3 /*break*/, 5];
|
|
184
|
+
s = samples_1_1.value;
|
|
185
|
+
return [5 /*yield**/, _loop_1(s)];
|
|
186
|
+
case 3:
|
|
187
|
+
_b.sent();
|
|
188
|
+
_b.label = 4;
|
|
189
|
+
case 4:
|
|
190
|
+
samples_1_1 = samples_1.next();
|
|
191
|
+
return [3 /*break*/, 2];
|
|
192
|
+
case 5: return [3 /*break*/, 8];
|
|
193
|
+
case 6:
|
|
194
|
+
e_1_1 = _b.sent();
|
|
195
|
+
e_1 = { error: e_1_1 };
|
|
196
|
+
return [3 /*break*/, 8];
|
|
197
|
+
case 7:
|
|
198
|
+
try {
|
|
199
|
+
if (samples_1_1 && !samples_1_1.done && (_a = samples_1.return)) _a.call(samples_1);
|
|
200
|
+
}
|
|
201
|
+
finally { if (e_1) throw e_1.error; }
|
|
202
|
+
return [7 /*endfinally*/];
|
|
203
|
+
case 8: return [2 /*return*/];
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
}); };
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
};
|
|
114
210
|
/**
|
|
115
211
|
* Validate sorting options.
|
|
116
212
|
*
|
|
@@ -120,15 +216,14 @@ var TestValidator;
|
|
|
120
216
|
* with multiple fields. However, as it forms a complicate currying function,
|
|
121
217
|
* I recomend you to see below example code before using.
|
|
122
218
|
*
|
|
123
|
-
* @param title Title of error
|
|
124
|
-
*
|
|
219
|
+
* @param title Title of error message when sorting is invalid
|
|
125
220
|
* @example https://github.com/samchon/nestia-template/blob/master/src/test/features/api/bbs/test_api_bbs_article_index_sort.ts
|
|
126
221
|
*/
|
|
127
222
|
TestValidator.sort = function (title) {
|
|
128
223
|
/**
|
|
129
224
|
* @param getter A pagination API function to be called
|
|
130
225
|
*/
|
|
131
|
-
return function (getter) {
|
|
226
|
+
return function (getter, validator) {
|
|
132
227
|
/**
|
|
133
228
|
* @param fields List of fields to be sorted
|
|
134
229
|
*/
|
|
@@ -154,6 +249,8 @@ var TestValidator;
|
|
|
154
249
|
case 0: return [4 /*yield*/, getter(fields.map(function (field) { return "".concat(direction).concat(field); }))];
|
|
155
250
|
case 1:
|
|
156
251
|
data = _a.sent();
|
|
252
|
+
if (validator)
|
|
253
|
+
validator(data);
|
|
157
254
|
if (filter)
|
|
158
255
|
data = data.filter(filter);
|
|
159
256
|
reversed = direction === "+" ? comp : function (x, y) { return comp(y, x); };
|
package/lib/TestValidator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@nestia/e2e",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "E2E test utilify functions",
|
|
5
|
-
"main": "lib/index.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"build": "rimraf lib && tsc",
|
|
8
|
-
"dev": "npm run build -- --watch",
|
|
9
|
-
"prettier": "prettier --write ./src/**/*.ts",
|
|
10
|
-
"test": "node lib/test"
|
|
11
|
-
},
|
|
12
|
-
"repository": {
|
|
13
|
-
"type": "git",
|
|
14
|
-
"url": "https://github.com/samchon/nestia"
|
|
15
|
-
},
|
|
16
|
-
"keywords": [
|
|
17
|
-
"e2e",
|
|
18
|
-
"nestia",
|
|
19
|
-
"nestjs",
|
|
20
|
-
"test",
|
|
21
|
-
"tdd",
|
|
22
|
-
"utility"
|
|
23
|
-
],
|
|
24
|
-
"author": "Jeongho Nam",
|
|
25
|
-
"license": "MIT",
|
|
26
|
-
"bugs": {
|
|
27
|
-
"url": "https://github.com/samchon/nestia/issues"
|
|
28
|
-
},
|
|
29
|
-
"homepage": "https://github.com/samchon/nestia#readme",
|
|
30
|
-
"devDependencies": {
|
|
31
|
-
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
|
|
32
|
-
"@types/cli": "^0.11.21",
|
|
33
|
-
"@types/node": "^18.11.18",
|
|
34
|
-
"prettier": "^2.8.3",
|
|
35
|
-
"rimraf": "^4.1.2",
|
|
36
|
-
"typescript": "^4.9.5"
|
|
37
|
-
},
|
|
38
|
-
"dependencies": {
|
|
39
|
-
"chalk": "^4.1.2",
|
|
40
|
-
"cli": "^1.0.1",
|
|
41
|
-
"tstl": "^2.5.13"
|
|
42
|
-
},
|
|
43
|
-
"files": [
|
|
44
|
-
"lib",
|
|
45
|
-
"src",
|
|
46
|
-
"!lib/test",
|
|
47
|
-
"!src/test",
|
|
48
|
-
"README.md",
|
|
49
|
-
"LICENSE",
|
|
50
|
-
"package.json"
|
|
51
|
-
]
|
|
52
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@nestia/e2e",
|
|
3
|
+
"version": "0.1.3",
|
|
4
|
+
"description": "E2E test utilify functions",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"build": "rimraf lib && tsc",
|
|
8
|
+
"dev": "npm run build -- --watch",
|
|
9
|
+
"prettier": "prettier --write ./src/**/*.ts",
|
|
10
|
+
"test": "node lib/test"
|
|
11
|
+
},
|
|
12
|
+
"repository": {
|
|
13
|
+
"type": "git",
|
|
14
|
+
"url": "https://github.com/samchon/nestia"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"e2e",
|
|
18
|
+
"nestia",
|
|
19
|
+
"nestjs",
|
|
20
|
+
"test",
|
|
21
|
+
"tdd",
|
|
22
|
+
"utility"
|
|
23
|
+
],
|
|
24
|
+
"author": "Jeongho Nam",
|
|
25
|
+
"license": "MIT",
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/samchon/nestia/issues"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/samchon/nestia#readme",
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@trivago/prettier-plugin-sort-imports": "^4.0.0",
|
|
32
|
+
"@types/cli": "^0.11.21",
|
|
33
|
+
"@types/node": "^18.11.18",
|
|
34
|
+
"prettier": "^2.8.3",
|
|
35
|
+
"rimraf": "^4.1.2",
|
|
36
|
+
"typescript": "^4.9.5"
|
|
37
|
+
},
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"chalk": "^4.1.2",
|
|
40
|
+
"cli": "^1.0.1",
|
|
41
|
+
"tstl": "^2.5.13"
|
|
42
|
+
},
|
|
43
|
+
"files": [
|
|
44
|
+
"lib",
|
|
45
|
+
"src",
|
|
46
|
+
"!lib/test",
|
|
47
|
+
"!src/test",
|
|
48
|
+
"README.md",
|
|
49
|
+
"LICENSE",
|
|
50
|
+
"package.json"
|
|
51
|
+
]
|
|
52
|
+
}
|