@nestia/e2e 12.0.0-dev.20260619.1 → 12.0.0-rc.2
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
CHANGED
|
@@ -37,7 +37,9 @@ export declare namespace DynamicExecutor {
|
|
|
37
37
|
* Every prefixed function will be executed.
|
|
38
38
|
*
|
|
39
39
|
* In other words, if a function name doesn't start with the prefix, then it
|
|
40
|
-
* would never be executed.
|
|
40
|
+
* would never be executed. Also, when a file name (basename) does not start
|
|
41
|
+
* with the prefix, the file would never be imported either, so that every
|
|
42
|
+
* function defined in the file would never be executed.
|
|
41
43
|
*/
|
|
42
44
|
prefix: string;
|
|
43
45
|
/** Location of the test functions. */
|
|
@@ -60,10 +62,15 @@ export declare namespace DynamicExecutor {
|
|
|
60
62
|
/**
|
|
61
63
|
* Filter function whether to run or not.
|
|
62
64
|
*
|
|
63
|
-
*
|
|
65
|
+
* The filter function is called with the file name (basename) of each
|
|
66
|
+
* dynamic function module, not with the function name. When it returns
|
|
67
|
+
* `false`, the file would never be imported, so that every function defined
|
|
68
|
+
* in the file would never be executed either.
|
|
69
|
+
*
|
|
70
|
+
* @param file File name (basename) of the dynamic functions
|
|
64
71
|
* @returns Whether to run or not
|
|
65
72
|
*/
|
|
66
|
-
filter?: (
|
|
73
|
+
filter?: (file: string) => boolean;
|
|
67
74
|
/**
|
|
68
75
|
* Wrapper of test function.
|
|
69
76
|
*
|
package/lib/DynamicExecutor.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
36
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
37
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -15,7 +48,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
48
|
exports.DynamicExecutor = void 0;
|
|
16
49
|
const fs_1 = __importDefault(require("fs"));
|
|
17
50
|
const path_1 = __importDefault(require("path"));
|
|
18
|
-
const url_1 = require("url");
|
|
19
51
|
/**
|
|
20
52
|
* Dynamic Executor running prefixed functions.
|
|
21
53
|
*
|
|
@@ -72,6 +104,8 @@ var DynamicExecutor;
|
|
|
72
104
|
const processes = yield iterate({
|
|
73
105
|
extension: (_a = props.extension) !== null && _a !== void 0 ? _a : "js",
|
|
74
106
|
location: props.location,
|
|
107
|
+
prefix: props.prefix,
|
|
108
|
+
filter: props.filter,
|
|
75
109
|
executor,
|
|
76
110
|
});
|
|
77
111
|
yield Promise.all(new Array((_b = props.simultaneous) !== null && _b !== void 0 ? _b : 1).fill(0).map(() => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -83,6 +117,12 @@ var DynamicExecutor;
|
|
|
83
117
|
report.time = Date.now() - report.time;
|
|
84
118
|
return report;
|
|
85
119
|
});
|
|
120
|
+
const specifier = (location) => {
|
|
121
|
+
const relative = path_1.default.relative(__dirname, path_1.default.resolve(location))
|
|
122
|
+
.split(path_1.default.sep)
|
|
123
|
+
.join("/");
|
|
124
|
+
return `./${relative}`;
|
|
125
|
+
};
|
|
86
126
|
const iterate = (props) => __awaiter(this, void 0, void 0, function* () {
|
|
87
127
|
const container = [];
|
|
88
128
|
const visitor = (path) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -96,7 +136,19 @@ var DynamicExecutor;
|
|
|
96
136
|
}
|
|
97
137
|
else if (file.substr(-3) !== `.${props.extension}`)
|
|
98
138
|
continue;
|
|
99
|
-
|
|
139
|
+
// GATE BY FILE NAME (PREFIX & FILTER), SO THAT EXCLUDED FILES ARE
|
|
140
|
+
// NEVER IMPORTED.
|
|
141
|
+
else if (file.startsWith(props.prefix) === false)
|
|
142
|
+
continue;
|
|
143
|
+
else if (props.filter && props.filter(file) === false)
|
|
144
|
+
continue;
|
|
145
|
+
// Convert the absolute path to a POSIX relative specifier. It works
|
|
146
|
+
// both as a native ESM dynamic import (module: nodenext, which keeps
|
|
147
|
+
// `import()` as is) and as a `require()` call (module: commonjs, which
|
|
148
|
+
// downlevels `import()` to `require()`). A raw absolute path would
|
|
149
|
+
// break the native import on Windows (file URL scheme), and a `file://`
|
|
150
|
+
// URL would break the downleveled `require()`.
|
|
151
|
+
const modulo = yield Promise.resolve(`${specifier(location)}`).then(s => __importStar(require(s)));
|
|
100
152
|
container.push(() => props.executor(location, modulo));
|
|
101
153
|
}
|
|
102
154
|
});
|
|
@@ -106,8 +158,7 @@ var DynamicExecutor;
|
|
|
106
158
|
const execute = (props) => (report) => (assert) => (location, modulo) => __awaiter(this, void 0, void 0, function* () {
|
|
107
159
|
for (const [key, closure] of Object.entries(modulo)) {
|
|
108
160
|
if (key.substring(0, props.prefix.length) !== props.prefix ||
|
|
109
|
-
typeof closure !== "function"
|
|
110
|
-
(props.filter && props.filter(key) === false))
|
|
161
|
+
typeof closure !== "function")
|
|
111
162
|
continue;
|
|
112
163
|
const func = () => {
|
|
113
164
|
if (props.wrapper !== undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicExecutor.js","sourceRoot":"","sources":["../src/DynamicExecutor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"DynamicExecutor.js","sourceRoot":"","sources":["../src/DynamicExecutor.ts"],"names":[],"mappings":"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"}
|
package/lib/TestValidator.js
CHANGED
|
@@ -221,7 +221,9 @@ var TestValidator;
|
|
|
221
221
|
try {
|
|
222
222
|
const output = task();
|
|
223
223
|
if (is_promise(output))
|
|
224
|
-
return new Promise((resolve, reject) => output
|
|
224
|
+
return new Promise((resolve, reject) => output
|
|
225
|
+
.catch(() => resolve())
|
|
226
|
+
.then(() => reject(new Error(message()))));
|
|
225
227
|
else
|
|
226
228
|
throw new Error(message());
|
|
227
229
|
}
|
package/lib/TestValidator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,uDAAoD;AACpD,4DAAyD;AAEzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,IAAiB,aAAa,
|
|
1
|
+
{"version":3,"file":"TestValidator.js","sourceRoot":"","sources":["../src/TestValidator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/DynamicExecutor.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import NodePath from "path";
|
|
3
|
-
import { pathToFileURL } from "url";
|
|
4
3
|
|
|
5
4
|
/**
|
|
6
5
|
* Dynamic Executor running prefixed functions.
|
|
@@ -42,7 +41,9 @@ export namespace DynamicExecutor {
|
|
|
42
41
|
* Every prefixed function will be executed.
|
|
43
42
|
*
|
|
44
43
|
* In other words, if a function name doesn't start with the prefix, then it
|
|
45
|
-
* would never be executed.
|
|
44
|
+
* would never be executed. Also, when a file name (basename) does not start
|
|
45
|
+
* with the prefix, the file would never be imported either, so that every
|
|
46
|
+
* function defined in the file would never be executed.
|
|
46
47
|
*/
|
|
47
48
|
prefix: string;
|
|
48
49
|
|
|
@@ -69,10 +70,15 @@ export namespace DynamicExecutor {
|
|
|
69
70
|
/**
|
|
70
71
|
* Filter function whether to run or not.
|
|
71
72
|
*
|
|
72
|
-
*
|
|
73
|
+
* The filter function is called with the file name (basename) of each
|
|
74
|
+
* dynamic function module, not with the function name. When it returns
|
|
75
|
+
* `false`, the file would never be imported, so that every function defined
|
|
76
|
+
* in the file would never be executed either.
|
|
77
|
+
*
|
|
78
|
+
* @param file File name (basename) of the dynamic functions
|
|
73
79
|
* @returns Whether to run or not
|
|
74
80
|
*/
|
|
75
|
-
filter?: (
|
|
81
|
+
filter?: (file: string) => boolean;
|
|
76
82
|
|
|
77
83
|
/**
|
|
78
84
|
* Wrapper of test function.
|
|
@@ -188,6 +194,8 @@ export namespace DynamicExecutor {
|
|
|
188
194
|
const processes: Array<() => Promise<void>> = await iterate({
|
|
189
195
|
extension: props.extension ?? "js",
|
|
190
196
|
location: props.location,
|
|
197
|
+
prefix: props.prefix,
|
|
198
|
+
filter: props.filter,
|
|
191
199
|
executor,
|
|
192
200
|
});
|
|
193
201
|
await Promise.all(
|
|
@@ -202,9 +210,21 @@ export namespace DynamicExecutor {
|
|
|
202
210
|
return report;
|
|
203
211
|
};
|
|
204
212
|
|
|
213
|
+
const specifier = (location: string): string => {
|
|
214
|
+
const relative: string = NodePath.relative(
|
|
215
|
+
__dirname,
|
|
216
|
+
NodePath.resolve(location),
|
|
217
|
+
)
|
|
218
|
+
.split(NodePath.sep)
|
|
219
|
+
.join("/");
|
|
220
|
+
return `./${relative}`;
|
|
221
|
+
};
|
|
222
|
+
|
|
205
223
|
const iterate = async <Arguments extends any[]>(props: {
|
|
206
224
|
location: string;
|
|
207
225
|
extension: string;
|
|
226
|
+
prefix: string;
|
|
227
|
+
filter?: (file: string) => boolean;
|
|
208
228
|
executor: (path: string, modulo: Module<Arguments>) => Promise<void>;
|
|
209
229
|
}): Promise<Array<() => Promise<void>>> => {
|
|
210
230
|
const container: Array<() => Promise<void>> = [];
|
|
@@ -218,10 +238,18 @@ export namespace DynamicExecutor {
|
|
|
218
238
|
await visitor(location);
|
|
219
239
|
continue;
|
|
220
240
|
} else if (file.substr(-3) !== `.${props.extension}`) continue;
|
|
241
|
+
// GATE BY FILE NAME (PREFIX & FILTER), SO THAT EXCLUDED FILES ARE
|
|
242
|
+
// NEVER IMPORTED.
|
|
243
|
+
else if (file.startsWith(props.prefix) === false) continue;
|
|
244
|
+
else if (props.filter && props.filter(file) === false) continue;
|
|
221
245
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
)
|
|
246
|
+
// Convert the absolute path to a POSIX relative specifier. It works
|
|
247
|
+
// both as a native ESM dynamic import (module: nodenext, which keeps
|
|
248
|
+
// `import()` as is) and as a `require()` call (module: commonjs, which
|
|
249
|
+
// downlevels `import()` to `require()`). A raw absolute path would
|
|
250
|
+
// break the native import on Windows (file URL scheme), and a `file://`
|
|
251
|
+
// URL would break the downleveled `require()`.
|
|
252
|
+
const modulo: Module<Arguments> = await import(specifier(location));
|
|
225
253
|
container.push(() => props.executor(location, modulo));
|
|
226
254
|
}
|
|
227
255
|
};
|
|
@@ -237,8 +265,7 @@ export namespace DynamicExecutor {
|
|
|
237
265
|
for (const [key, closure] of Object.entries(modulo)) {
|
|
238
266
|
if (
|
|
239
267
|
key.substring(0, props.prefix.length) !== props.prefix ||
|
|
240
|
-
typeof closure !== "function"
|
|
241
|
-
(props.filter && props.filter(key) === false)
|
|
268
|
+
typeof closure !== "function"
|
|
242
269
|
)
|
|
243
270
|
continue;
|
|
244
271
|
|
package/src/TestValidator.ts
CHANGED
|
@@ -232,7 +232,9 @@ export namespace TestValidator {
|
|
|
232
232
|
const output: T = task();
|
|
233
233
|
if (is_promise(output))
|
|
234
234
|
return new Promise<void>((resolve, reject) =>
|
|
235
|
-
output
|
|
235
|
+
output
|
|
236
|
+
.catch(() => resolve())
|
|
237
|
+
.then(() => reject(new Error(message()))),
|
|
236
238
|
) as any;
|
|
237
239
|
else throw new Error(message());
|
|
238
240
|
} catch {
|