@nestia/e2e 12.0.0 → 12.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.
- package/lib/DynamicExecutor.js +26 -5
- package/lib/DynamicExecutor.js.map +1 -1
- package/lib/GaffComparator.js +5 -3
- package/lib/GaffComparator.js.map +1 -1
- package/lib/MapUtil.d.ts +2 -1
- package/lib/MapUtil.js +2 -1
- package/lib/MapUtil.js.map +1 -1
- package/lib/TestValidator.js +2 -4
- package/lib/TestValidator.js.map +1 -1
- package/lib/internal/json_equal_to.js +9 -0
- package/lib/internal/json_equal_to.js.map +1 -1
- package/package.json +1 -1
- package/src/DynamicExecutor.ts +30 -7
- package/src/GaffComparator.ts +5 -3
- package/src/MapUtil.ts +9 -8
- package/src/TestValidator.ts +2 -4
- package/src/internal/json_equal_to.ts +8 -1
package/lib/DynamicExecutor.js
CHANGED
|
@@ -48,6 +48,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
48
48
|
exports.DynamicExecutor = void 0;
|
|
49
49
|
const fs_1 = __importDefault(require("fs"));
|
|
50
50
|
const path_1 = __importDefault(require("path"));
|
|
51
|
+
const url_1 = require("url");
|
|
51
52
|
/**
|
|
52
53
|
* Dynamic Executor running prefixed functions.
|
|
53
54
|
*
|
|
@@ -95,6 +96,9 @@ var DynamicExecutor;
|
|
|
95
96
|
DynamicExecutor.validate = (props) => main(false)(props);
|
|
96
97
|
const main = (assert) => (props) => __awaiter(this, void 0, void 0, function* () {
|
|
97
98
|
var _a, _b;
|
|
99
|
+
const simultaneous = (_a = props.simultaneous) !== null && _a !== void 0 ? _a : 1;
|
|
100
|
+
if (!Number.isSafeInteger(simultaneous) || simultaneous <= 0)
|
|
101
|
+
throw new Error("DynamicExecutor: simultaneous must be a positive integer.");
|
|
98
102
|
const report = {
|
|
99
103
|
location: props.location,
|
|
100
104
|
time: Date.now(),
|
|
@@ -102,13 +106,13 @@ var DynamicExecutor;
|
|
|
102
106
|
};
|
|
103
107
|
const executor = execute(props)(report)(assert);
|
|
104
108
|
const processes = yield iterate({
|
|
105
|
-
extension: (
|
|
109
|
+
extension: (_b = props.extension) !== null && _b !== void 0 ? _b : "js",
|
|
106
110
|
location: props.location,
|
|
107
111
|
prefix: props.prefix,
|
|
108
112
|
filter: props.filter,
|
|
109
113
|
executor,
|
|
110
114
|
});
|
|
111
|
-
yield Promise.all(new Array(
|
|
115
|
+
yield Promise.all(new Array(simultaneous).fill(0).map(() => __awaiter(this, void 0, void 0, function* () {
|
|
112
116
|
while (processes.length !== 0) {
|
|
113
117
|
const task = processes.shift();
|
|
114
118
|
yield task === null || task === void 0 ? void 0 : task();
|
|
@@ -118,11 +122,25 @@ var DynamicExecutor;
|
|
|
118
122
|
return report;
|
|
119
123
|
});
|
|
120
124
|
const specifier = (location) => {
|
|
121
|
-
const
|
|
125
|
+
const absolute = path_1.default.resolve(location);
|
|
126
|
+
const relative = path_1.default.relative(__dirname, absolute)
|
|
122
127
|
.split(path_1.default.sep)
|
|
123
128
|
.join("/");
|
|
124
|
-
|
|
129
|
+
if (relative.length !== 0 && path_1.default.isAbsolute(relative) === false)
|
|
130
|
+
return `./${relative}`;
|
|
131
|
+
// No relative expression exists. On Windows `path.relative` cannot express a
|
|
132
|
+
// path between two drive roots and hands back the absolute target, so the
|
|
133
|
+
// "./" prefix used to produce "./C:/..." — neither relative nor absolute —
|
|
134
|
+
// which resolved against this directory and failed with MODULE_NOT_FOUND.
|
|
135
|
+
// Fall back to the spelling the active module system accepts: `require()`,
|
|
136
|
+
// which a CommonJS build downlevels `import()` into, takes a filesystem path
|
|
137
|
+
// and rejects a URL, while a native ESM `import()` takes a URL and rejects a
|
|
138
|
+
// Windows filesystem path.
|
|
139
|
+
return isCommonJS() ? absolute : (0, url_1.pathToFileURL)(absolute).href;
|
|
125
140
|
};
|
|
141
|
+
const isCommonJS = () => typeof module === "object" &&
|
|
142
|
+
module !== null &&
|
|
143
|
+
typeof require === "function";
|
|
126
144
|
const iterate = (props) => __awaiter(this, void 0, void 0, function* () {
|
|
127
145
|
const container = [];
|
|
128
146
|
const visitor = (path) => __awaiter(this, void 0, void 0, function* () {
|
|
@@ -134,7 +152,10 @@ var DynamicExecutor;
|
|
|
134
152
|
yield visitor(location);
|
|
135
153
|
continue;
|
|
136
154
|
}
|
|
137
|
-
|
|
155
|
+
// Compare the whole suffix. A fixed-width slice silently assumed a
|
|
156
|
+
// two-character extension, so every longer one ("mjs", "cjs", "tsx")
|
|
157
|
+
// matched nothing and the run reported success with no test executed.
|
|
158
|
+
else if (file.endsWith(`.${props.extension}`) === false)
|
|
138
159
|
continue;
|
|
139
160
|
// GATE BY FILE NAME (PREFIX & FILTER), SO THAT EXCLUDED FILES ARE
|
|
140
161
|
// NEVER IMPORTED.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicExecutor.js","sourceRoot":"","sources":["../src/DynamicExecutor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAAoB;AACpB,gDAA4B;
|
|
1
|
+
{"version":3,"file":"DynamicExecutor.js","sourceRoot":"","sources":["../src/DynamicExecutor.ts"],"names":[],"mappings":"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"}
|
package/lib/GaffComparator.js
CHANGED
|
@@ -111,7 +111,9 @@ var GaffComparator;
|
|
|
111
111
|
const a = wrap(getter(x));
|
|
112
112
|
const b = wrap(getter(y));
|
|
113
113
|
const idx = a.findIndex((v, i) => v !== b[i]);
|
|
114
|
-
return idx !== -1
|
|
114
|
+
return idx !== -1
|
|
115
|
+
? compare(a[idx], b[idx])
|
|
116
|
+
: a.length - b.length;
|
|
115
117
|
};
|
|
116
118
|
/**
|
|
117
119
|
* Creates a comparator function for date-based sorting with automatic string
|
|
@@ -193,7 +195,7 @@ var GaffComparator;
|
|
|
193
195
|
const a = take(x);
|
|
194
196
|
const b = take(y);
|
|
195
197
|
const idx = a.findIndex((v, i) => v !== b[i]);
|
|
196
|
-
return idx !== -1 ? a[idx] - b[idx] :
|
|
198
|
+
return idx !== -1 ? a[idx] - b[idx] : a.length - b.length;
|
|
197
199
|
};
|
|
198
200
|
/**
|
|
199
201
|
* Creates a comparator function for numerical sorting with multi-value
|
|
@@ -270,7 +272,7 @@ var GaffComparator;
|
|
|
270
272
|
const a = wrap(closure(x));
|
|
271
273
|
const b = wrap(closure(y));
|
|
272
274
|
const idx = a.findIndex((v, i) => v !== b[i]);
|
|
273
|
-
return idx !== -1 ? a[idx] - b[idx] :
|
|
275
|
+
return idx !== -1 ? a[idx] - b[idx] : a.length - b.length;
|
|
274
276
|
};
|
|
275
277
|
const compare = (x, y) => x.localeCompare(y);
|
|
276
278
|
const wrap = (elem) => (Array.isArray(elem) ? elem : [elem]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,IAAiB,cAAc,
|
|
1
|
+
{"version":3,"file":"GaffComparator.js","sourceRoot":"","sources":["../src/GaffComparator.ts"],"names":[],"mappings":"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"}
|
package/lib/MapUtil.d.ts
CHANGED
|
@@ -72,7 +72,8 @@ export declare namespace MapUtil {
|
|
|
72
72
|
* @template V - The type of values in the Map
|
|
73
73
|
* @param map - The Map to retrieve from or update
|
|
74
74
|
* @param key - The key to look up in the Map
|
|
75
|
-
* @param value - A factory function that creates the value if key doesn't
|
|
75
|
+
* @param value - A factory function that creates the value if key doesn't
|
|
76
|
+
* exist
|
|
76
77
|
* @returns The existing value if found, or the newly created value
|
|
77
78
|
*/
|
|
78
79
|
function take<K, V>(map: Map<K, V>, key: K, value: () => V): V;
|
package/lib/MapUtil.js
CHANGED
|
@@ -76,7 +76,8 @@ var MapUtil;
|
|
|
76
76
|
* @template V - The type of values in the Map
|
|
77
77
|
* @param map - The Map to retrieve from or update
|
|
78
78
|
* @param key - The key to look up in the Map
|
|
79
|
-
* @param value - A factory function that creates the value if key doesn't
|
|
79
|
+
* @param value - A factory function that creates the value if key doesn't
|
|
80
|
+
* exist
|
|
80
81
|
* @returns The existing value if found, or the newly created value
|
|
81
82
|
*/
|
|
82
83
|
function take(map, key, value) {
|
package/lib/MapUtil.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MapUtil.js","sourceRoot":"","sources":["../src/MapUtil.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,IAAiB,OAAO,
|
|
1
|
+
{"version":3,"file":"MapUtil.js","sourceRoot":"","sources":["../src/MapUtil.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,IAAiB,OAAO,CA+DvB;AA/DD,WAAiB,OAAO;IACtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqDG;IACH,SAAgB,IAAI,CAAO,GAAc,EAAE,GAAM,EAAE,KAAc;QAC/D,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACjB,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,CAAM,CAAC;QAC3B,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;QACzB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAPe,QAAA,IAAI,OAOnB,CAAA;AACH,CAAC,EA/DgB,OAAO,aAAP,OAAO,GAAP,OAAO,QA+DvB"}
|
package/lib/TestValidator.js
CHANGED
|
@@ -336,9 +336,7 @@ var TestValidator;
|
|
|
336
336
|
expected = expected.slice(0, length);
|
|
337
337
|
gotten = gotten.slice(0, length);
|
|
338
338
|
const xIds = get_ids(expected).slice(0, length);
|
|
339
|
-
const yIds = get_ids(gotten)
|
|
340
|
-
.filter((id) => id >= xIds[0])
|
|
341
|
-
.slice(0, length);
|
|
339
|
+
const yIds = get_ids(gotten).slice(0, length);
|
|
342
340
|
const equals = xIds.every((x, i) => x === yIds[i]);
|
|
343
341
|
if (equals === true)
|
|
344
342
|
return;
|
|
@@ -478,7 +476,7 @@ var TestValidator;
|
|
|
478
476
|
})(TestValidator || (exports.TestValidator = TestValidator = {}));
|
|
479
477
|
/** @internal */
|
|
480
478
|
function get_ids(entities) {
|
|
481
|
-
return entities.map((entity) => entity.id
|
|
479
|
+
return entities.map((entity) => entity.id.toString());
|
|
482
480
|
}
|
|
483
481
|
/** @internal */
|
|
484
482
|
function is_promise(input) {
|
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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"}
|
|
@@ -8,6 +8,15 @@ const json_equal_to = (exception) => (x) => (y) => {
|
|
|
8
8
|
return;
|
|
9
9
|
else if (typeof x !== typeof y)
|
|
10
10
|
container.push(accessor);
|
|
11
|
+
// `typeof null` is "object", so the check above does not separate an
|
|
12
|
+
// object from null. Settle every null pair here, before the Array and
|
|
13
|
+
// Object branches walk into one: `null` is a JSON value, and comparing
|
|
14
|
+
// it against an object is a difference at this accessor, exactly as it
|
|
15
|
+
// already was when the two operands were swapped.
|
|
16
|
+
else if (x === null || y === null) {
|
|
17
|
+
if (x !== y)
|
|
18
|
+
container.push(accessor);
|
|
19
|
+
}
|
|
11
20
|
else if (x instanceof Array)
|
|
12
21
|
if (!(y instanceof Array))
|
|
13
22
|
container.push(accessor);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json_equal_to.js","sourceRoot":"","sources":["../../src/internal/json_equal_to.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GACxB,CAAC,SAAmC,EAAE,EAAE,CACxC,CAAI,CAAI,EAAE,EAAE,CACZ,CAAC,CAAuB,EAAY,EAAE;IACpC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GACX,CAAC,QAAgB,EAAE,EAAE,CACrB,CAAC,CAAM,EAAE,EAAE,CACX,CAAC,CAAM,EAAQ,EAAE;QACf,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,UAAU;YAAE,OAAO;aAC1D,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"json_equal_to.js","sourceRoot":"","sources":["../../src/internal/json_equal_to.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GACxB,CAAC,SAAmC,EAAE,EAAE,CACxC,CAAI,CAAI,EAAE,EAAE,CACZ,CAAC,CAAuB,EAAY,EAAE;IACpC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GACX,CAAC,QAAgB,EAAE,EAAE,CACrB,CAAC,CAAM,EAAE,EAAE,CACX,CAAC,CAAM,EAAQ,EAAE;QACf,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,OAAO,CAAC,KAAK,UAAU;YAAE,OAAO;aAC1D,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,qEAAqE;QACrE,sEAAsE;QACtE,uEAAuE;QACvE,uEAAuE;QACvE,kDAAkD;aAC7C,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,CAAC,YAAY,KAAK;YAC3B,IAAI,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC;gBAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;;gBAC/C,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACxB,IAAI,CAAC,YAAY,MAAM;YAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAChD,IAAI,CAAC,KAAK,CAAC;YAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC;IACJ,MAAM,KAAK,GACT,CAAC,QAAgB,EAAE,EAAE,CACrB,CAAC,CAAQ,EAAE,EAAE,CACb,CAAC,CAAQ,EAAQ,EAAE;QACjB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,SAAS,CAAC,IAAI,CAAC,GAAG,QAAQ,SAAS,CAAC,CAAC;QAChE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC,CAAC;IACJ,MAAM,MAAM,GACV,CAAC,QAAgB,EAAE,EAAE,CACrB,CAAC,CAAM,EAAE,EAAE,CACX,CAAC,CAAM,EAAQ,EAAE,CACf,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;SACX,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SACxD,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEvE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClB,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAzCS,QAAA,aAAa,GAAb,aAAa,CAyCtB"}
|
package/package.json
CHANGED
package/src/DynamicExecutor.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import NodePath from "path";
|
|
3
|
+
import { pathToFileURL } from "url";
|
|
3
4
|
|
|
4
5
|
/**
|
|
5
6
|
* Dynamic Executor running prefixed functions.
|
|
@@ -184,6 +185,11 @@ export namespace DynamicExecutor {
|
|
|
184
185
|
async <Arguments extends any[]>(
|
|
185
186
|
props: IProps<Arguments>,
|
|
186
187
|
): Promise<IReport> => {
|
|
188
|
+
const simultaneous: number = props.simultaneous ?? 1;
|
|
189
|
+
if (!Number.isSafeInteger(simultaneous) || simultaneous <= 0)
|
|
190
|
+
throw new Error(
|
|
191
|
+
"DynamicExecutor: simultaneous must be a positive integer.",
|
|
192
|
+
);
|
|
187
193
|
const report: IReport = {
|
|
188
194
|
location: props.location,
|
|
189
195
|
time: Date.now(),
|
|
@@ -199,7 +205,7 @@ export namespace DynamicExecutor {
|
|
|
199
205
|
executor,
|
|
200
206
|
});
|
|
201
207
|
await Promise.all(
|
|
202
|
-
new Array(
|
|
208
|
+
new Array(simultaneous).fill(0).map(async () => {
|
|
203
209
|
while (processes.length !== 0) {
|
|
204
210
|
const task = processes.shift();
|
|
205
211
|
await task?.();
|
|
@@ -211,15 +217,28 @@ export namespace DynamicExecutor {
|
|
|
211
217
|
};
|
|
212
218
|
|
|
213
219
|
const specifier = (location: string): string => {
|
|
214
|
-
const
|
|
215
|
-
|
|
216
|
-
NodePath.resolve(location),
|
|
217
|
-
)
|
|
220
|
+
const absolute: string = NodePath.resolve(location);
|
|
221
|
+
const relative: string = NodePath.relative(__dirname, absolute)
|
|
218
222
|
.split(NodePath.sep)
|
|
219
223
|
.join("/");
|
|
220
|
-
|
|
224
|
+
if (relative.length !== 0 && NodePath.isAbsolute(relative) === false)
|
|
225
|
+
return `./${relative}`;
|
|
226
|
+
// No relative expression exists. On Windows `path.relative` cannot express a
|
|
227
|
+
// path between two drive roots and hands back the absolute target, so the
|
|
228
|
+
// "./" prefix used to produce "./C:/..." — neither relative nor absolute —
|
|
229
|
+
// which resolved against this directory and failed with MODULE_NOT_FOUND.
|
|
230
|
+
// Fall back to the spelling the active module system accepts: `require()`,
|
|
231
|
+
// which a CommonJS build downlevels `import()` into, takes a filesystem path
|
|
232
|
+
// and rejects a URL, while a native ESM `import()` takes a URL and rejects a
|
|
233
|
+
// Windows filesystem path.
|
|
234
|
+
return isCommonJS() ? absolute : pathToFileURL(absolute).href;
|
|
221
235
|
};
|
|
222
236
|
|
|
237
|
+
const isCommonJS = (): boolean =>
|
|
238
|
+
typeof module === "object" &&
|
|
239
|
+
module !== null &&
|
|
240
|
+
typeof require === "function";
|
|
241
|
+
|
|
223
242
|
const iterate = async <Arguments extends any[]>(props: {
|
|
224
243
|
location: string;
|
|
225
244
|
extension: string;
|
|
@@ -237,7 +256,11 @@ export namespace DynamicExecutor {
|
|
|
237
256
|
if (stats.isDirectory() === true) {
|
|
238
257
|
await visitor(location);
|
|
239
258
|
continue;
|
|
240
|
-
}
|
|
259
|
+
}
|
|
260
|
+
// Compare the whole suffix. A fixed-width slice silently assumed a
|
|
261
|
+
// two-character extension, so every longer one ("mjs", "cjs", "tsx")
|
|
262
|
+
// matched nothing and the run reported success with no test executed.
|
|
263
|
+
else if (file.endsWith(`.${props.extension}`) === false) continue;
|
|
241
264
|
// GATE BY FILE NAME (PREFIX & FILTER), SO THAT EXCLUDED FILES ARE
|
|
242
265
|
// NEVER IMPORTED.
|
|
243
266
|
else if (file.startsWith(props.prefix) === false) continue;
|
package/src/GaffComparator.ts
CHANGED
|
@@ -110,7 +110,9 @@ export namespace GaffComparator {
|
|
|
110
110
|
const b: string[] = wrap(getter(y));
|
|
111
111
|
|
|
112
112
|
const idx: number = a.findIndex((v, i) => v !== b[i]);
|
|
113
|
-
return idx !== -1
|
|
113
|
+
return idx !== -1
|
|
114
|
+
? compare(a[idx]!, b[idx]!)
|
|
115
|
+
: a.length - b.length;
|
|
114
116
|
};
|
|
115
117
|
|
|
116
118
|
/**
|
|
@@ -197,7 +199,7 @@ export namespace GaffComparator {
|
|
|
197
199
|
const b: number[] = take(y);
|
|
198
200
|
|
|
199
201
|
const idx: number = a.findIndex((v, i) => v !== b[i]);
|
|
200
|
-
return idx !== -1 ? a[idx]! - b[idx]! :
|
|
202
|
+
return idx !== -1 ? a[idx]! - b[idx]! : a.length - b.length;
|
|
201
203
|
};
|
|
202
204
|
|
|
203
205
|
/**
|
|
@@ -278,7 +280,7 @@ export namespace GaffComparator {
|
|
|
278
280
|
const b: number[] = wrap(closure(y));
|
|
279
281
|
|
|
280
282
|
const idx: number = a.findIndex((v, i) => v !== b[i]);
|
|
281
|
-
return idx !== -1 ? a[idx]! - b[idx]! :
|
|
283
|
+
return idx !== -1 ? a[idx]! - b[idx]! : a.length - b.length;
|
|
282
284
|
};
|
|
283
285
|
|
|
284
286
|
const compare = (x: string, y: string) => x.localeCompare(y);
|
package/src/MapUtil.ts
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
10
|
* ```typescript
|
|
11
11
|
* // Create a cache with lazy initialization
|
|
12
12
|
* const cache = new Map<string, ExpensiveObject>();
|
|
13
|
-
*
|
|
13
|
+
*
|
|
14
14
|
* const obj = MapUtil.take(cache, "key1", () => {
|
|
15
15
|
* console.log("Creating expensive object...");
|
|
16
16
|
* return new ExpensiveObject();
|
|
17
17
|
* });
|
|
18
|
-
*
|
|
18
|
+
*
|
|
19
19
|
* // Subsequent calls return cached value without re-creating
|
|
20
20
|
* const sameObj = MapUtil.take(cache, "key1", () => new ExpensiveObject());
|
|
21
21
|
* console.log(obj === sameObj); // true
|
|
@@ -36,7 +36,7 @@ export namespace MapUtil {
|
|
|
36
36
|
* ```typescript
|
|
37
37
|
* // Simple caching example
|
|
38
38
|
* const userCache = new Map<number, User>();
|
|
39
|
-
*
|
|
39
|
+
*
|
|
40
40
|
* const user = MapUtil.take(userCache, userId, () => {
|
|
41
41
|
* // This expensive operation only runs if userId is not cached
|
|
42
42
|
* return fetchUserFromDatabase(userId);
|
|
@@ -44,7 +44,7 @@ export namespace MapUtil {
|
|
|
44
44
|
*
|
|
45
45
|
* // Configuration object caching
|
|
46
46
|
* const configs = new Map<string, Config>();
|
|
47
|
-
*
|
|
47
|
+
*
|
|
48
48
|
* const dbConfig = MapUtil.take(configs, "database", () => ({
|
|
49
49
|
* host: "localhost",
|
|
50
50
|
* port: 5432,
|
|
@@ -53,7 +53,7 @@ export namespace MapUtil {
|
|
|
53
53
|
*
|
|
54
54
|
* // Lazy computation results
|
|
55
55
|
* const computationCache = new Map<string, number>();
|
|
56
|
-
*
|
|
56
|
+
*
|
|
57
57
|
* const result = MapUtil.take(computationCache, "fibonacci-40", () => {
|
|
58
58
|
* console.log("Computing fibonacci(40)...");
|
|
59
59
|
* return fibonacci(40); // Only computed once
|
|
@@ -62,8 +62,8 @@ export namespace MapUtil {
|
|
|
62
62
|
* // Using with complex keys
|
|
63
63
|
* const cache = new Map<[number, number], Matrix>();
|
|
64
64
|
* const key: [number, number] = [rows, cols];
|
|
65
|
-
*
|
|
66
|
-
* const matrix = MapUtil.take(cache, key, () =>
|
|
65
|
+
*
|
|
66
|
+
* const matrix = MapUtil.take(cache, key, () =>
|
|
67
67
|
* generateIdentityMatrix(rows, cols)
|
|
68
68
|
* );
|
|
69
69
|
* ```;
|
|
@@ -72,7 +72,8 @@ export namespace MapUtil {
|
|
|
72
72
|
* @template V - The type of values in the Map
|
|
73
73
|
* @param map - The Map to retrieve from or update
|
|
74
74
|
* @param key - The key to look up in the Map
|
|
75
|
-
* @param value - A factory function that creates the value if key doesn't
|
|
75
|
+
* @param value - A factory function that creates the value if key doesn't
|
|
76
|
+
* exist
|
|
76
77
|
* @returns The existing value if found, or the newly created value
|
|
77
78
|
*/
|
|
78
79
|
export function take<K, V>(map: Map<K, V>, key: K, value: () => V): V {
|
package/src/TestValidator.ts
CHANGED
|
@@ -362,9 +362,7 @@ export namespace TestValidator {
|
|
|
362
362
|
gotten = gotten.slice(0, length);
|
|
363
363
|
|
|
364
364
|
const xIds: string[] = get_ids(expected).slice(0, length);
|
|
365
|
-
const yIds: string[] = get_ids(gotten)
|
|
366
|
-
.filter((id) => id >= xIds[0]!)
|
|
367
|
-
.slice(0, length);
|
|
365
|
+
const yIds: string[] = get_ids(gotten).slice(0, length);
|
|
368
366
|
|
|
369
367
|
const equals: boolean = xIds.every((x, i) => x === yIds[i]);
|
|
370
368
|
if (equals === true) return;
|
|
@@ -616,7 +614,7 @@ interface IEntity<Type extends string | number | bigint> {
|
|
|
616
614
|
|
|
617
615
|
/** @internal */
|
|
618
616
|
function get_ids<Entity extends IEntity<any>>(entities: Entity[]): string[] {
|
|
619
|
-
return entities.map((entity) => entity.id
|
|
617
|
+
return entities.map((entity) => entity.id.toString());
|
|
620
618
|
}
|
|
621
619
|
|
|
622
620
|
/** @internal */
|
|
@@ -9,7 +9,14 @@ export const json_equal_to =
|
|
|
9
9
|
(y: any): void => {
|
|
10
10
|
if (typeof x === "function" || typeof y === "function") return;
|
|
11
11
|
else if (typeof x !== typeof y) container.push(accessor);
|
|
12
|
-
|
|
12
|
+
// `typeof null` is "object", so the check above does not separate an
|
|
13
|
+
// object from null. Settle every null pair here, before the Array and
|
|
14
|
+
// Object branches walk into one: `null` is a JSON value, and comparing
|
|
15
|
+
// it against an object is a difference at this accessor, exactly as it
|
|
16
|
+
// already was when the two operands were swapped.
|
|
17
|
+
else if (x === null || y === null) {
|
|
18
|
+
if (x !== y) container.push(accessor);
|
|
19
|
+
} else if (x instanceof Array)
|
|
13
20
|
if (!(y instanceof Array)) container.push(accessor);
|
|
14
21
|
else array(accessor)(x)(y);
|
|
15
22
|
else if (x instanceof Object) object(accessor)(x)(y);
|