@gjsify/assert 0.3.13 → 0.3.15
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/esm/assertion-error.js +56 -66
- package/lib/esm/deep-equal.js +434 -450
- package/lib/esm/index.js +384 -417
- package/lib/esm/inspect-fallback.js +69 -67
- package/lib/esm/strict/index.js +4 -43
- package/package.json +3 -3
|
@@ -1,75 +1,77 @@
|
|
|
1
|
+
//#region src/inspect-fallback.ts
|
|
2
|
+
/**
|
|
3
|
+
* Minimal value-to-string converter for assertion error messages.
|
|
4
|
+
* This avoids depending on util.inspect (which itself depends on @gjsify/deno_std).
|
|
5
|
+
* Can be replaced with util.inspect once @gjsify/util is migrated.
|
|
6
|
+
*/
|
|
1
7
|
const MAX_DEPTH = 3;
|
|
2
8
|
const MAX_ARRAY_LENGTH = 10;
|
|
3
9
|
const MAX_STRING_LENGTH = 128;
|
|
4
10
|
function safeInspect(value, depth = MAX_DEPTH) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
case "object":
|
|
22
|
-
return inspectObject(value, depth);
|
|
23
|
-
}
|
|
24
|
-
return String(value);
|
|
11
|
+
if (value === null) return "null";
|
|
12
|
+
if (value === undefined) return "undefined";
|
|
13
|
+
switch (typeof value) {
|
|
14
|
+
case "string":
|
|
15
|
+
if (value.length > MAX_STRING_LENGTH) {
|
|
16
|
+
return `'${value.slice(0, MAX_STRING_LENGTH)}...'`;
|
|
17
|
+
}
|
|
18
|
+
return `'${value}'`;
|
|
19
|
+
case "number":
|
|
20
|
+
case "boolean":
|
|
21
|
+
case "bigint": return String(value);
|
|
22
|
+
case "symbol": return value.toString();
|
|
23
|
+
case "function": return `[Function: ${value.name || "anonymous"}]`;
|
|
24
|
+
case "object": return inspectObject(value, depth);
|
|
25
|
+
}
|
|
26
|
+
return String(value);
|
|
25
27
|
}
|
|
26
|
-
function inspectObject(obj, depth, seen =
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
28
|
+
function inspectObject(obj, depth, seen = new WeakSet()) {
|
|
29
|
+
if (seen.has(obj)) return "[Circular]";
|
|
30
|
+
seen.add(obj);
|
|
31
|
+
if (obj instanceof Date) return obj.toISOString();
|
|
32
|
+
if (obj instanceof RegExp) return obj.toString();
|
|
33
|
+
if (obj instanceof Error) return `[${obj.constructor.name}: ${obj.message}]`;
|
|
34
|
+
if (obj instanceof Map) {
|
|
35
|
+
if (depth <= 0) return `Map(${obj.size}) { ... }`;
|
|
36
|
+
const entries = [...obj.entries()].slice(0, MAX_ARRAY_LENGTH).map(([k, v]) => `${inspectInner(k, depth - 1, seen)} => ${inspectInner(v, depth - 1, seen)}`);
|
|
37
|
+
const suffix = obj.size > MAX_ARRAY_LENGTH ? ", ..." : "";
|
|
38
|
+
return `Map(${obj.size}) { ${entries.join(", ")}${suffix} }`;
|
|
39
|
+
}
|
|
40
|
+
if (obj instanceof Set) {
|
|
41
|
+
if (depth <= 0) return `Set(${obj.size}) { ... }`;
|
|
42
|
+
const entries = [...obj.values()].slice(0, MAX_ARRAY_LENGTH).map((v) => inspectInner(v, depth - 1, seen));
|
|
43
|
+
const suffix = obj.size > MAX_ARRAY_LENGTH ? ", ..." : "";
|
|
44
|
+
return `Set(${obj.size}) { ${entries.join(", ")}${suffix} }`;
|
|
45
|
+
}
|
|
46
|
+
if (ArrayBuffer.isView(obj)) {
|
|
47
|
+
const typedName = obj.constructor.name;
|
|
48
|
+
const arr = obj instanceof DataView ? new Uint8Array(obj.buffer, obj.byteOffset, obj.byteLength) : obj;
|
|
49
|
+
const len = "length" in arr ? arr.length : 0;
|
|
50
|
+
const shown = Math.min(len, MAX_ARRAY_LENGTH);
|
|
51
|
+
const items = [];
|
|
52
|
+
for (let i = 0; i < shown; i++) items.push(String(arr[i]));
|
|
53
|
+
const suffix = len > MAX_ARRAY_LENGTH ? ", ..." : "";
|
|
54
|
+
return `${typedName}(${len}) [ ${items.join(", ")}${suffix} ]`;
|
|
55
|
+
}
|
|
56
|
+
if (Array.isArray(obj)) {
|
|
57
|
+
if (depth <= 0) return `[ ... ]`;
|
|
58
|
+
const shown = obj.slice(0, MAX_ARRAY_LENGTH).map((v) => inspectInner(v, depth - 1, seen));
|
|
59
|
+
const suffix = obj.length > MAX_ARRAY_LENGTH ? ", ..." : "";
|
|
60
|
+
return `[ ${shown.join(", ")}${suffix} ]`;
|
|
61
|
+
}
|
|
62
|
+
if (depth <= 0) return "{ ... }";
|
|
63
|
+
const keys = Object.keys(obj);
|
|
64
|
+
const entries = keys.slice(0, MAX_ARRAY_LENGTH).map((k) => `${k}: ${inspectInner(obj[k], depth - 1, seen)}`);
|
|
65
|
+
const suffix = keys.length > MAX_ARRAY_LENGTH ? ", ..." : "";
|
|
66
|
+
const prefix = obj.constructor && obj.constructor.name !== "Object" ? `${obj.constructor.name} ` : "";
|
|
67
|
+
return `${prefix}{ ${entries.join(", ")}${suffix} }`;
|
|
66
68
|
}
|
|
67
69
|
function inspectInner(value, depth, seen) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
70
|
+
if (value === null) return "null";
|
|
71
|
+
if (value === undefined) return "undefined";
|
|
72
|
+
if (typeof value === "object") return inspectObject(value, depth, seen);
|
|
73
|
+
return safeInspect(value, depth);
|
|
72
74
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
};
|
|
75
|
+
|
|
76
|
+
//#endregion
|
|
77
|
+
export { safeInspect };
|
package/lib/esm/strict/index.js
CHANGED
|
@@ -1,43 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
fail,
|
|
6
|
-
ifError,
|
|
7
|
-
match,
|
|
8
|
-
doesNotMatch,
|
|
9
|
-
throws,
|
|
10
|
-
doesNotThrow,
|
|
11
|
-
rejects,
|
|
12
|
-
doesNotReject,
|
|
13
|
-
strictEqual,
|
|
14
|
-
notStrictEqual,
|
|
15
|
-
deepStrictEqual,
|
|
16
|
-
notDeepStrictEqual,
|
|
17
|
-
strictEqual as strictEqual2,
|
|
18
|
-
notStrictEqual as notStrictEqual2,
|
|
19
|
-
deepStrictEqual as deepStrictEqual2,
|
|
20
|
-
notDeepStrictEqual as notDeepStrictEqual2
|
|
21
|
-
} from "../index.js";
|
|
22
|
-
export {
|
|
23
|
-
AssertionError,
|
|
24
|
-
deepStrictEqual2 as deepEqual,
|
|
25
|
-
deepStrictEqual,
|
|
26
|
-
strict as default,
|
|
27
|
-
doesNotMatch,
|
|
28
|
-
doesNotReject,
|
|
29
|
-
doesNotThrow,
|
|
30
|
-
strictEqual2 as equal,
|
|
31
|
-
fail,
|
|
32
|
-
ifError,
|
|
33
|
-
match,
|
|
34
|
-
notDeepStrictEqual2 as notDeepEqual,
|
|
35
|
-
notDeepStrictEqual,
|
|
36
|
-
notStrictEqual2 as notEqual,
|
|
37
|
-
notStrictEqual,
|
|
38
|
-
ok,
|
|
39
|
-
rejects,
|
|
40
|
-
strict2 as strict,
|
|
41
|
-
strictEqual,
|
|
42
|
-
throws
|
|
43
|
-
};
|
|
1
|
+
import { AssertionError } from "../assertion-error.js";
|
|
2
|
+
import { deepStrictEqual, doesNotMatch, doesNotReject, doesNotThrow, fail, ifError, match, notDeepStrictEqual, notStrictEqual, ok, rejects, strict, strictEqual, throws } from "../index.js";
|
|
3
|
+
|
|
4
|
+
export { AssertionError, deepStrictEqual as deepEqual, deepStrictEqual, strict as default, doesNotMatch, doesNotReject, doesNotThrow, strictEqual as equal, fail, ifError, match, notDeepStrictEqual as notDeepEqual, notDeepStrictEqual, notStrictEqual as notEqual, notStrictEqual, ok, rejects, strict, strictEqual, throws };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gjsify/assert",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.15",
|
|
4
4
|
"description": "Node.js assert module for Gjs",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"module": "lib/esm/index.js",
|
|
@@ -35,8 +35,8 @@
|
|
|
35
35
|
"assert"
|
|
36
36
|
],
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"@gjsify/cli": "^0.3.
|
|
39
|
-
"@gjsify/unit": "^0.3.
|
|
38
|
+
"@gjsify/cli": "^0.3.15",
|
|
39
|
+
"@gjsify/unit": "^0.3.15",
|
|
40
40
|
"@types/node": "^25.6.0",
|
|
41
41
|
"typescript": "^6.0.3"
|
|
42
42
|
}
|