@oliversalzburg/js-utils 0.5.1-nightly.20251107 → 0.6.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/async/async.test.d.ts +1 -0
- package/lib/async/async.test.js +26 -0
- package/lib/async/async.test.js.map +1 -0
- package/lib/errors/error-serializer.test.d.ts +1 -0
- package/lib/errors/error-serializer.test.js +109 -0
- package/lib/errors/error-serializer.test.js.map +1 -0
- package/lib/format/bytes.test.d.ts +1 -0
- package/lib/format/bytes.test.js +138 -0
- package/lib/format/bytes.test.js.map +1 -0
- package/lib/format/count.test.d.ts +1 -0
- package/lib/format/count.test.js +42 -0
- package/lib/format/count.test.js.map +1 -0
- package/lib/format/milliseconds.test.d.ts +1 -0
- package/lib/format/milliseconds.test.js +343 -0
- package/lib/format/milliseconds.test.js.map +1 -0
- package/lib/format/string.test.d.ts +1 -0
- package/lib/format/string.test.js +17 -0
- package/lib/format/string.test.js.map +1 -0
- package/lib/graphics/palette.test.d.ts +1 -0
- package/lib/graphics/palette.test.js +43 -0
- package/lib/graphics/palette.test.js.map +1 -0
- package/package.json +9 -16
- /package/{async → lib/async}/async.d.ts +0 -0
- /package/{async → lib/async}/async.js +0 -0
- /package/{async → lib/async}/async.js.map +0 -0
- /package/{core.d.ts → lib/core.d.ts} +0 -0
- /package/{core.js → lib/core.js} +0 -0
- /package/{core.js.map → lib/core.js.map} +0 -0
- /package/{data → lib/data}/array.d.ts +0 -0
- /package/{data → lib/data}/array.js +0 -0
- /package/{data → lib/data}/array.js.map +0 -0
- /package/{data → lib/data}/nil.d.ts +0 -0
- /package/{data → lib/data}/nil.js +0 -0
- /package/{data → lib/data}/nil.js.map +0 -0
- /package/{data → lib/data}/random.d.ts +0 -0
- /package/{data → lib/data}/random.js +0 -0
- /package/{data → lib/data}/random.js.map +0 -0
- /package/{data → lib/data}/string.d.ts +0 -0
- /package/{data → lib/data}/string.js +0 -0
- /package/{data → lib/data}/string.js.map +0 -0
- /package/{data → lib/data}/tree.d.ts +0 -0
- /package/{data → lib/data}/tree.js +0 -0
- /package/{data → lib/data}/tree.js.map +0 -0
- /package/{device → lib/device}/shake.d.ts +0 -0
- /package/{device → lib/device}/shake.js +0 -0
- /package/{device → lib/device}/shake.js.map +0 -0
- /package/{dom → lib/dom}/core.d.ts +0 -0
- /package/{dom → lib/dom}/core.js +0 -0
- /package/{dom → lib/dom}/core.js.map +0 -0
- /package/{errors → lib/errors}/AbstractError.d.ts +0 -0
- /package/{errors → lib/errors}/AbstractError.js +0 -0
- /package/{errors → lib/errors}/AbstractError.js.map +0 -0
- /package/{errors → lib/errors}/InternalError.d.ts +0 -0
- /package/{errors → lib/errors}/InternalError.js +0 -0
- /package/{errors → lib/errors}/InternalError.js.map +0 -0
- /package/{errors → lib/errors}/InvalidArgumentError.d.ts +0 -0
- /package/{errors → lib/errors}/InvalidArgumentError.js +0 -0
- /package/{errors → lib/errors}/InvalidArgumentError.js.map +0 -0
- /package/{errors → lib/errors}/InvalidOperationError.d.ts +0 -0
- /package/{errors → lib/errors}/InvalidOperationError.js +0 -0
- /package/{errors → lib/errors}/InvalidOperationError.js.map +0 -0
- /package/{errors → lib/errors}/NotImplementedError.d.ts +0 -0
- /package/{errors → lib/errors}/NotImplementedError.js +0 -0
- /package/{errors → lib/errors}/NotImplementedError.js.map +0 -0
- /package/{errors → lib/errors}/PermissionViolationError.d.ts +0 -0
- /package/{errors → lib/errors}/PermissionViolationError.js +0 -0
- /package/{errors → lib/errors}/PermissionViolationError.js.map +0 -0
- /package/{errors → lib/errors}/ResourceConflictError.d.ts +0 -0
- /package/{errors → lib/errors}/ResourceConflictError.js +0 -0
- /package/{errors → lib/errors}/ResourceConflictError.js.map +0 -0
- /package/{errors → lib/errors}/UnknownError.d.ts +0 -0
- /package/{errors → lib/errors}/UnknownError.js +0 -0
- /package/{errors → lib/errors}/UnknownError.js.map +0 -0
- /package/{errors → lib/errors}/console.d.ts +0 -0
- /package/{errors → lib/errors}/console.js +0 -0
- /package/{errors → lib/errors}/console.js.map +0 -0
- /package/{errors → lib/errors}/error-serializer.d.ts +0 -0
- /package/{errors → lib/errors}/error-serializer.js +0 -0
- /package/{errors → lib/errors}/error-serializer.js.map +0 -0
- /package/{errors → lib/errors}/stream.d.ts +0 -0
- /package/{errors → lib/errors}/stream.js +0 -0
- /package/{errors → lib/errors}/stream.js.map +0 -0
- /package/{errors → lib/errors}/tools.d.ts +0 -0
- /package/{errors → lib/errors}/tools.js +0 -0
- /package/{errors → lib/errors}/tools.js.map +0 -0
- /package/{events → lib/events}/event.d.ts +0 -0
- /package/{events → lib/events}/event.js +0 -0
- /package/{events → lib/events}/event.js.map +0 -0
- /package/{format → lib/format}/bytes.d.ts +0 -0
- /package/{format → lib/format}/bytes.js +0 -0
- /package/{format → lib/format}/bytes.js.map +0 -0
- /package/{format → lib/format}/count.d.ts +0 -0
- /package/{format → lib/format}/count.js +0 -0
- /package/{format → lib/format}/count.js.map +0 -0
- /package/{format → lib/format}/milliseconds.d.ts +0 -0
- /package/{format → lib/format}/milliseconds.js +0 -0
- /package/{format → lib/format}/milliseconds.js.map +0 -0
- /package/{format → lib/format}/string.d.ts +0 -0
- /package/{format → lib/format}/string.js +0 -0
- /package/{format → lib/format}/string.js.map +0 -0
- /package/{graphics → lib/graphics}/canvas-sandbox-mp.d.ts +0 -0
- /package/{graphics → lib/graphics}/canvas-sandbox-mp.js +0 -0
- /package/{graphics → lib/graphics}/canvas-sandbox-mp.js.map +0 -0
- /package/{graphics → lib/graphics}/canvas-sandbox.d.ts +0 -0
- /package/{graphics → lib/graphics}/canvas-sandbox.js +0 -0
- /package/{graphics → lib/graphics}/canvas-sandbox.js.map +0 -0
- /package/{graphics → lib/graphics}/canvas.d.ts +0 -0
- /package/{graphics → lib/graphics}/canvas.js +0 -0
- /package/{graphics → lib/graphics}/canvas.js.map +0 -0
- /package/{graphics → lib/graphics}/canvas2d-headless.d.ts +0 -0
- /package/{graphics → lib/graphics}/canvas2d-headless.js +0 -0
- /package/{graphics → lib/graphics}/canvas2d-headless.js.map +0 -0
- /package/{graphics → lib/graphics}/canvas2d.d.ts +0 -0
- /package/{graphics → lib/graphics}/canvas2d.js +0 -0
- /package/{graphics → lib/graphics}/canvas2d.js.map +0 -0
- /package/{graphics → lib/graphics}/canvas3d.d.ts +0 -0
- /package/{graphics → lib/graphics}/canvas3d.js +0 -0
- /package/{graphics → lib/graphics}/canvas3d.js.map +0 -0
- /package/{graphics → lib/graphics}/color.d.ts +0 -0
- /package/{graphics → lib/graphics}/color.js +0 -0
- /package/{graphics → lib/graphics}/color.js.map +0 -0
- /package/{graphics → lib/graphics}/core.d.ts +0 -0
- /package/{graphics → lib/graphics}/core.js +0 -0
- /package/{graphics → lib/graphics}/core.js.map +0 -0
- /package/{graphics → lib/graphics}/palette-sampler.d.ts +0 -0
- /package/{graphics → lib/graphics}/palette-sampler.js +0 -0
- /package/{graphics → lib/graphics}/palette-sampler.js.map +0 -0
- /package/{graphics → lib/graphics}/palette.d.ts +0 -0
- /package/{graphics → lib/graphics}/palette.js +0 -0
- /package/{graphics → lib/graphics}/palette.js.map +0 -0
- /package/{graphics → lib/graphics}/render-loop.d.ts +0 -0
- /package/{graphics → lib/graphics}/render-loop.js +0 -0
- /package/{graphics → lib/graphics}/render-loop.js.map +0 -0
- /package/{graphics → lib/graphics}/shader.d.ts +0 -0
- /package/{graphics → lib/graphics}/shader.js +0 -0
- /package/{graphics → lib/graphics}/shader.js.map +0 -0
- /package/{log → lib/log}/log.d.ts +0 -0
- /package/{log → lib/log}/log.js +0 -0
- /package/{log → lib/log}/log.js.map +0 -0
- /package/{log → lib/log}/report.d.ts +0 -0
- /package/{log → lib/log}/report.js +0 -0
- /package/{log → lib/log}/report.js.map +0 -0
- /package/{math → lib/math}/core.d.ts +0 -0
- /package/{math → lib/math}/core.js +0 -0
- /package/{math → lib/math}/core.js.map +0 -0
- /package/{math → lib/math}/easing.d.ts +0 -0
- /package/{math → lib/math}/easing.js +0 -0
- /package/{math → lib/math}/easing.js.map +0 -0
- /package/{math → lib/math}/euler.d.ts +0 -0
- /package/{math → lib/math}/euler.js +0 -0
- /package/{math → lib/math}/euler.js.map +0 -0
- /package/{math → lib/math}/matrix3.d.ts +0 -0
- /package/{math → lib/math}/matrix3.js +0 -0
- /package/{math → lib/math}/matrix3.js.map +0 -0
- /package/{math → lib/math}/quaternion.d.ts +0 -0
- /package/{math → lib/math}/quaternion.js +0 -0
- /package/{math → lib/math}/quaternion.js.map +0 -0
- /package/{math → lib/math}/transformation.d.ts +0 -0
- /package/{math → lib/math}/transformation.js +0 -0
- /package/{math → lib/math}/transformation.js.map +0 -0
- /package/{math → lib/math}/vector2.d.ts +0 -0
- /package/{math → lib/math}/vector2.js +0 -0
- /package/{math → lib/math}/vector2.js.map +0 -0
- /package/{math → lib/math}/vector3.d.ts +0 -0
- /package/{math → lib/math}/vector3.js +0 -0
- /package/{math → lib/math}/vector3.js.map +0 -0
- /package/{math → lib/math}/vector4.d.ts +0 -0
- /package/{math → lib/math}/vector4.js +0 -0
- /package/{math → lib/math}/vector4.js.map +0 -0
- /package/{measurement → lib/measurement}/performance.d.ts +0 -0
- /package/{measurement → lib/measurement}/performance.js +0 -0
- /package/{measurement → lib/measurement}/performance.js.map +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { it } from "node:test";
|
|
3
|
+
import { prepareAsyncContext, sleep } from "./async.js";
|
|
4
|
+
it("executes trivial callback", async () => {
|
|
5
|
+
let executed = false;
|
|
6
|
+
const callback = prepareAsyncContext(async () => {
|
|
7
|
+
await sleep(1);
|
|
8
|
+
executed = true;
|
|
9
|
+
});
|
|
10
|
+
callback();
|
|
11
|
+
await sleep(100);
|
|
12
|
+
assert.strictEqual(executed, true);
|
|
13
|
+
});
|
|
14
|
+
it("passes parameters to callback", async () => {
|
|
15
|
+
let executed = false;
|
|
16
|
+
const callback = prepareAsyncContext(async (event, eventId) => {
|
|
17
|
+
assert.strictEqual(event.name, "call");
|
|
18
|
+
assert.strictEqual(eventId, 42);
|
|
19
|
+
await sleep(1);
|
|
20
|
+
executed = true;
|
|
21
|
+
});
|
|
22
|
+
callback({ name: "call" }, 42);
|
|
23
|
+
await sleep(100);
|
|
24
|
+
assert.strictEqual(executed, true);
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=async.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.test.js","sourceRoot":"","sources":["../../source/async/async.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExD,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;IACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,IAAI,EAAE;QAC9C,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QACf,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,QAAQ,EAAE,CAAC;IAEX,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;IAC7C,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,EAAE,KAA6B,EAAE,OAAe,EAAE,EAAE;QAC5F,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAEhC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC;QACf,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAE/B,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAEjB,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { it } from "node:test";
|
|
3
|
+
import { errorToJSON, errorToRecord, errorToSimpleSerializable, isError, unknownToError, } from "./error-serializer.js";
|
|
4
|
+
import { InternalError } from "./InternalError.js";
|
|
5
|
+
import { InvalidArgumentError } from "./InvalidArgumentError.js";
|
|
6
|
+
function generateDefaultError() {
|
|
7
|
+
try {
|
|
8
|
+
throw new Error("oops");
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
return error;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
it("unknown to Error: AbstractError", () => {
|
|
15
|
+
const subjectError = new InvalidArgumentError("oops");
|
|
16
|
+
const serialized = unknownToError(subjectError);
|
|
17
|
+
assert.strictEqual(serialized.code, "ERR_OS_INVALID_ARGUMENT");
|
|
18
|
+
assert.strictEqual(serialized.message, "oops");
|
|
19
|
+
assert.strictEqual(serialized.name, "InvalidArgumentError");
|
|
20
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
21
|
+
});
|
|
22
|
+
it("unknown to Error: Error", () => {
|
|
23
|
+
const subjectError = new Error("oops");
|
|
24
|
+
const serialized = unknownToError(subjectError);
|
|
25
|
+
assert.strictEqual(serialized.code, "ERR_OS_INTERNAL");
|
|
26
|
+
assert.strictEqual(serialized.message, "oops");
|
|
27
|
+
assert.strictEqual(serialized.name, "InternalError");
|
|
28
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
29
|
+
});
|
|
30
|
+
it("unknown to Error: string", () => {
|
|
31
|
+
const subjectError = "oops";
|
|
32
|
+
const serialized = unknownToError(subjectError);
|
|
33
|
+
assert.strictEqual(serialized.code, "ERR_OS_UNKNOWN");
|
|
34
|
+
assert.strictEqual(serialized.message, "oops");
|
|
35
|
+
assert.strictEqual(serialized.name, "UnknownError");
|
|
36
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
37
|
+
});
|
|
38
|
+
it("unknown to Error: null", () => {
|
|
39
|
+
const subjectError = null;
|
|
40
|
+
const serialized = unknownToError(subjectError);
|
|
41
|
+
assert.strictEqual(serialized.code, "ERR_OS_UNKNOWN");
|
|
42
|
+
assert.strictEqual(serialized.message, "null");
|
|
43
|
+
assert.strictEqual(serialized.name, "UnknownError");
|
|
44
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
45
|
+
});
|
|
46
|
+
it("serializes an error to JSON", () => {
|
|
47
|
+
const subjectError = new Error("oops");
|
|
48
|
+
const plain = JSON.stringify(subjectError);
|
|
49
|
+
const serialized = errorToJSON(subjectError);
|
|
50
|
+
// We assert.strictEqual more properties to have been serialized into the string.
|
|
51
|
+
assert.notStrictEqual(serialized, plain);
|
|
52
|
+
assert.strictEqual(plain.length < serialized.length, true);
|
|
53
|
+
});
|
|
54
|
+
it("serializes an error to a record: Error", () => {
|
|
55
|
+
const subjectError = new Error("oops");
|
|
56
|
+
const serialized = errorToRecord(subjectError);
|
|
57
|
+
assert.strictEqual(isError(subjectError), true);
|
|
58
|
+
assert.strictEqual(isError(serialized), false);
|
|
59
|
+
assert.strictEqual(serialized.message, "oops");
|
|
60
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
61
|
+
});
|
|
62
|
+
it("serializes an error to a record: Default Error", () => {
|
|
63
|
+
const subjectError = generateDefaultError();
|
|
64
|
+
const serialized = errorToRecord(subjectError);
|
|
65
|
+
assert.strictEqual(isError(subjectError), true);
|
|
66
|
+
assert.strictEqual(isError(serialized), false);
|
|
67
|
+
assert.strictEqual(serialized.code, undefined);
|
|
68
|
+
assert.strictEqual(serialized.message, "oops");
|
|
69
|
+
assert.strictEqual(serialized.name, undefined);
|
|
70
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
71
|
+
});
|
|
72
|
+
it("serializes an error to a record: Node Error", async function () {
|
|
73
|
+
let error;
|
|
74
|
+
try {
|
|
75
|
+
assert(false, "oops");
|
|
76
|
+
}
|
|
77
|
+
catch (thrownError) {
|
|
78
|
+
error = thrownError;
|
|
79
|
+
}
|
|
80
|
+
const subjectError = error;
|
|
81
|
+
const serialized = errorToRecord(subjectError);
|
|
82
|
+
assert.strictEqual(isError(subjectError), true);
|
|
83
|
+
assert.strictEqual(isError(serialized), false);
|
|
84
|
+
assert.strictEqual(serialized.code, "ERR_ASSERTION");
|
|
85
|
+
assert.strictEqual(serialized.message, "oops");
|
|
86
|
+
assert.strictEqual(serialized.name, "AssertionError");
|
|
87
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
88
|
+
});
|
|
89
|
+
it("serializes an error to a simple object for persistence: Error", () => {
|
|
90
|
+
const subjectError = InternalError.fromError(new Error("oops"));
|
|
91
|
+
const serialized = errorToSimpleSerializable(subjectError);
|
|
92
|
+
assert.strictEqual(isError(subjectError), true);
|
|
93
|
+
assert.strictEqual(isError(serialized), false);
|
|
94
|
+
assert.strictEqual(serialized.code, "ERR_OS_INTERNAL");
|
|
95
|
+
assert.strictEqual(serialized.message, "oops");
|
|
96
|
+
assert.strictEqual(serialized.name, "InternalError");
|
|
97
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
98
|
+
});
|
|
99
|
+
it("serializes an error to a simple object for persistence: Node Error", () => {
|
|
100
|
+
const subjectError = InternalError.fromError(generateDefaultError());
|
|
101
|
+
const serialized = errorToSimpleSerializable(subjectError);
|
|
102
|
+
assert.strictEqual(isError(subjectError), true);
|
|
103
|
+
assert.strictEqual(isError(serialized), false);
|
|
104
|
+
assert.strictEqual(serialized.code, "ERR_OS_INTERNAL");
|
|
105
|
+
assert.strictEqual(serialized.message, "oops");
|
|
106
|
+
assert.strictEqual(serialized.name, "InternalError");
|
|
107
|
+
assert.strictEqual(typeof serialized.stack, "string");
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=error-serializer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-serializer.test.js","sourceRoot":"","sources":["../../source/errors/error-serializer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { it } from "node:test";
|
|
3
|
+
import { formatBytes } from "./bytes.js";
|
|
4
|
+
it("throws on invalid input", () => {
|
|
5
|
+
assert.throws(() => {
|
|
6
|
+
formatBytes("");
|
|
7
|
+
});
|
|
8
|
+
assert.throws(() => {
|
|
9
|
+
formatBytes("1");
|
|
10
|
+
});
|
|
11
|
+
assert.throws(() => {
|
|
12
|
+
formatBytes(Number.NaN);
|
|
13
|
+
});
|
|
14
|
+
assert.throws(() => {
|
|
15
|
+
formatBytes(true);
|
|
16
|
+
});
|
|
17
|
+
assert.throws(() => {
|
|
18
|
+
formatBytes(Number.POSITIVE_INFINITY);
|
|
19
|
+
});
|
|
20
|
+
assert.throws(() => {
|
|
21
|
+
formatBytes(Number.NEGATIVE_INFINITY);
|
|
22
|
+
});
|
|
23
|
+
assert.throws(() => {
|
|
24
|
+
formatBytes(null);
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
it("converts bytes to human readable strings", () => {
|
|
28
|
+
assert.strictEqual(formatBytes(0), "0 B");
|
|
29
|
+
assert.strictEqual(formatBytes(0.4), "0.4 B");
|
|
30
|
+
assert.strictEqual(formatBytes(0.7), "0.7 B");
|
|
31
|
+
assert.strictEqual(formatBytes(10), "10 B");
|
|
32
|
+
assert.strictEqual(formatBytes(10.1), "10.1 B");
|
|
33
|
+
assert.strictEqual(formatBytes(999), "999 B");
|
|
34
|
+
assert.strictEqual(formatBytes(1001), "1 kB");
|
|
35
|
+
assert.strictEqual(formatBytes(1e16), "10 PB");
|
|
36
|
+
assert.strictEqual(formatBytes(1e30), "1000000 YB");
|
|
37
|
+
});
|
|
38
|
+
it("supports negative number", () => {
|
|
39
|
+
assert.strictEqual(formatBytes(-0.4), "-0.4 B");
|
|
40
|
+
assert.strictEqual(formatBytes(-0.7), "-0.7 B");
|
|
41
|
+
assert.strictEqual(formatBytes(-10.1), "-10.1 B");
|
|
42
|
+
assert.strictEqual(formatBytes(-999), "-999 B");
|
|
43
|
+
assert.strictEqual(formatBytes(-1001), "-1 kB");
|
|
44
|
+
});
|
|
45
|
+
it("locale option", function () {
|
|
46
|
+
assert.strictEqual(formatBytes(-0.4, { locale: "de" }), "-0,4 B");
|
|
47
|
+
assert.strictEqual(formatBytes(0.4, { locale: "de" }), "0,4 B");
|
|
48
|
+
assert.strictEqual(formatBytes(1001, { locale: "de" }), "1 kB");
|
|
49
|
+
assert.strictEqual(formatBytes(10.1, { locale: "de" }), "10,1 B");
|
|
50
|
+
assert.strictEqual(formatBytes(1e30, { locale: "de" }), "1.000.000 YB");
|
|
51
|
+
assert.strictEqual(formatBytes(-0.4, { locale: "en" }), "-0.4 B");
|
|
52
|
+
assert.strictEqual(formatBytes(0.4, { locale: "en" }), "0.4 B");
|
|
53
|
+
assert.strictEqual(formatBytes(1001, { locale: "en" }), "1 kB");
|
|
54
|
+
assert.strictEqual(formatBytes(10.1, { locale: "en" }), "10.1 B");
|
|
55
|
+
assert.strictEqual(formatBytes(1e30, { locale: "en" }), "1,000,000 YB");
|
|
56
|
+
assert.strictEqual(formatBytes(-0.4, { locale: ["unknown", "de", "en"] }), "-0,4 B");
|
|
57
|
+
assert.strictEqual(formatBytes(0.4, { locale: ["unknown", "de", "en"] }), "0,4 B");
|
|
58
|
+
assert.strictEqual(formatBytes(1001, { locale: ["unknown", "de", "en"] }), "1 kB");
|
|
59
|
+
assert.strictEqual(formatBytes(10.1, { locale: ["unknown", "de", "en"] }), "10,1 B");
|
|
60
|
+
assert.strictEqual(formatBytes(1e30, { locale: ["unknown", "de", "en"] }), "1.000.000 YB");
|
|
61
|
+
assert.strictEqual(formatBytes(-0.4, { locale: true }), "-0.4 B");
|
|
62
|
+
assert.strictEqual(formatBytes(0.4, { locale: true }), "0.4 B");
|
|
63
|
+
assert.strictEqual(formatBytes(1001, { locale: true }), "1 kB");
|
|
64
|
+
assert.strictEqual(formatBytes(10.1, { locale: true }), "10.1 B");
|
|
65
|
+
assert.strictEqual(formatBytes(1e30, { locale: true }), "1,000,000 YB");
|
|
66
|
+
assert.strictEqual(formatBytes(-0.4, { locale: false }), "-0.4 B");
|
|
67
|
+
assert.strictEqual(formatBytes(0.4, { locale: false }), "0.4 B");
|
|
68
|
+
assert.strictEqual(formatBytes(1001, { locale: false }), "1 kB");
|
|
69
|
+
assert.strictEqual(formatBytes(10.1, { locale: false }), "10.1 B");
|
|
70
|
+
assert.strictEqual(formatBytes(1e30, { locale: false }), "1000000 YB");
|
|
71
|
+
assert.strictEqual(formatBytes(-0.4, { locale: undefined }), "-0.4 B");
|
|
72
|
+
assert.strictEqual(formatBytes(0.4, { locale: undefined }), "0.4 B");
|
|
73
|
+
assert.strictEqual(formatBytes(1001, { locale: undefined }), "1 kB");
|
|
74
|
+
assert.strictEqual(formatBytes(10.1, { locale: undefined }), "10.1 B");
|
|
75
|
+
assert.strictEqual(formatBytes(1e30, { locale: undefined }), "1000000 YB");
|
|
76
|
+
});
|
|
77
|
+
it("signed option", () => {
|
|
78
|
+
assert.strictEqual(formatBytes(42, { signed: true }), "+42 B");
|
|
79
|
+
assert.strictEqual(formatBytes(-13, { signed: true }), "-13 B");
|
|
80
|
+
assert.strictEqual(formatBytes(0, { signed: true }), " 0 B");
|
|
81
|
+
});
|
|
82
|
+
it("bits option", () => {
|
|
83
|
+
assert.strictEqual(formatBytes(0, { bits: true }), "0 b");
|
|
84
|
+
assert.strictEqual(formatBytes(0.4, { bits: true }), "0.4 b");
|
|
85
|
+
assert.strictEqual(formatBytes(0.7, { bits: true }), "0.7 b");
|
|
86
|
+
assert.strictEqual(formatBytes(10, { bits: true }), "10 b");
|
|
87
|
+
assert.strictEqual(formatBytes(10.1, { bits: true }), "10.1 b");
|
|
88
|
+
assert.strictEqual(formatBytes(999, { bits: true }), "999 b");
|
|
89
|
+
assert.strictEqual(formatBytes(1001, { bits: true }), "1 kbit");
|
|
90
|
+
assert.strictEqual(formatBytes(1001, { bits: true }), "1 kbit");
|
|
91
|
+
assert.strictEqual(formatBytes(1e16, { bits: true }), "10 Pbit");
|
|
92
|
+
assert.strictEqual(formatBytes(1e30, { bits: true }), "1000000 Ybit");
|
|
93
|
+
});
|
|
94
|
+
it("binary option", () => {
|
|
95
|
+
assert.strictEqual(formatBytes(0, { binary: true }), "0 B");
|
|
96
|
+
assert.strictEqual(formatBytes(4, { binary: true }), "4 B");
|
|
97
|
+
assert.strictEqual(formatBytes(10, { binary: true }), "10 B");
|
|
98
|
+
assert.strictEqual(formatBytes(10.1, { binary: true }), "10.1 B");
|
|
99
|
+
assert.strictEqual(formatBytes(999, { binary: true }), "999 B");
|
|
100
|
+
assert.strictEqual(formatBytes(1025, { binary: true }), "1 KiB");
|
|
101
|
+
assert.strictEqual(formatBytes(1001, { binary: true }), "1000 B");
|
|
102
|
+
assert.strictEqual(formatBytes(1e16, { binary: true }), "8.88 PiB");
|
|
103
|
+
assert.strictEqual(formatBytes(1e30, { binary: true }), "827000 YiB");
|
|
104
|
+
});
|
|
105
|
+
it("bits and binary option", () => {
|
|
106
|
+
assert.strictEqual(formatBytes(0, { binary: true, bits: true }), "0 b");
|
|
107
|
+
assert.strictEqual(formatBytes(4, { binary: true, bits: true }), "4 b");
|
|
108
|
+
assert.strictEqual(formatBytes(10, { binary: true, bits: true }), "10 b");
|
|
109
|
+
assert.strictEqual(formatBytes(999, { binary: true, bits: true }), "999 b");
|
|
110
|
+
assert.strictEqual(formatBytes(1025, { binary: true, bits: true }), "1 kibit");
|
|
111
|
+
assert.strictEqual(formatBytes(1e6, { binary: true, bits: true }), "977 kibit");
|
|
112
|
+
});
|
|
113
|
+
it("fractional digits options", () => {
|
|
114
|
+
assert.strictEqual(formatBytes(1900, { maximumFractionDigits: 1 }), "1.9 kB");
|
|
115
|
+
assert.strictEqual(formatBytes(1900, { minimumFractionDigits: 3 }), "1.900 kB");
|
|
116
|
+
assert.strictEqual(formatBytes(1911, { maximumFractionDigits: 1 }), "1.9 kB");
|
|
117
|
+
assert.strictEqual(formatBytes(1111, { maximumFractionDigits: 2 }), "1.11 kB");
|
|
118
|
+
assert.strictEqual(formatBytes(1019, { maximumFractionDigits: 3 }), "1.019 kB");
|
|
119
|
+
assert.strictEqual(formatBytes(1001, { maximumFractionDigits: 3 }), "1.001 kB");
|
|
120
|
+
assert.strictEqual(formatBytes(1000, { maximumFractionDigits: 3, minimumFractionDigits: 1 }), "1.0 kB");
|
|
121
|
+
assert.strictEqual(formatBytes(3942, { maximumFractionDigits: 2, minimumFractionDigits: 1 }), "3.94 kB");
|
|
122
|
+
assert.strictEqual(formatBytes(4001, { binary: true, maximumFractionDigits: 3 }), "3.907 KiB");
|
|
123
|
+
assert.strictEqual(formatBytes(18_717, { binary: true, maximumFractionDigits: 2 }), "18.28 KiB");
|
|
124
|
+
assert.strictEqual(formatBytes(18_717, { binary: true, maximumFractionDigits: 4 }), "18.2783 KiB");
|
|
125
|
+
assert.strictEqual(formatBytes(32_768, { binary: true, maximumFractionDigits: 3, minimumFractionDigits: 2 }), "32.00 KiB");
|
|
126
|
+
assert.strictEqual(formatBytes(65_536, { binary: true, maximumFractionDigits: 3, minimumFractionDigits: 1 }), "64.0 KiB");
|
|
127
|
+
});
|
|
128
|
+
it("space option", () => {
|
|
129
|
+
assert.strictEqual(formatBytes(0), "0 B");
|
|
130
|
+
assert.strictEqual(formatBytes(0, { space: false }), "0B");
|
|
131
|
+
assert.strictEqual(formatBytes(999), "999 B");
|
|
132
|
+
assert.strictEqual(formatBytes(999, { space: false }), "999B");
|
|
133
|
+
assert.strictEqual(formatBytes(-13, { signed: true }), "-13 B");
|
|
134
|
+
assert.strictEqual(formatBytes(-13, { signed: true, space: false }), "-13B");
|
|
135
|
+
assert.strictEqual(formatBytes(42, { signed: true }), "+42 B");
|
|
136
|
+
assert.strictEqual(formatBytes(42, { signed: true, space: false }), "+42B");
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=bytes.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes.test.js","sourceRoot":"","sources":["../../source/format/bytes.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { it } from "node:test";
|
|
3
|
+
import { formatCount, parseCount } from "./count.js";
|
|
4
|
+
it("formats counts as expected", function () {
|
|
5
|
+
assert.strictEqual(formatCount(-1), "-1");
|
|
6
|
+
assert.strictEqual(formatCount(0), "0");
|
|
7
|
+
assert.strictEqual(formatCount(1), "1");
|
|
8
|
+
assert.strictEqual(formatCount(10), "10");
|
|
9
|
+
assert.strictEqual(formatCount(100), "100");
|
|
10
|
+
assert.strictEqual(formatCount(1000), "1K");
|
|
11
|
+
assert.strictEqual(formatCount(1234), "1.234K");
|
|
12
|
+
});
|
|
13
|
+
it("parses counts as expected", function () {
|
|
14
|
+
const testCount = function (count, inputLocale, input) {
|
|
15
|
+
const locales = inputLocale
|
|
16
|
+
? [inputLocale]
|
|
17
|
+
: "af,af-ZA,ar,ar-AE,ar-BH,ar-DZ,ar-EG,ar-IQ,ar-JO,ar-KW,ar-LB,ar-LY,ar-MA,ar-OM,ar-QA,ar-SA,ar-SY,ar-TN,ar-YE,az,az-AZ,az-AZ,be,be-BY,bg,bg-BG,bs-BA,ca,ca-ES,cs,cs-CZ,cy,cy-GB,da,da-DK,de,de-AT,de-CH,de-DE,de-LI,de-LU,dv,dv-MV,el,el-GR,en,en-AU,en-BZ,en-CA,en-CB,en-GB,en-IE,en-JM,en-NZ,en-PH,en-TT,en-US,en-ZA,en-ZW,eo,es,es-AR,es-BO,es-CL,es-CO,es-CR,es-DO,es-EC,es-ES,es-ES,es-GT,es-HN,es-MX,es-NI,es-PA,es-PE,es-PR,es-PY,es-SV,es-UY,es-VE,et,et-EE,eu,eu-ES,fa,fa-IR,fi,fi-FI,fo,fo-FO,fr,fr-BE,fr-CA,fr-CH,fr-FR,fr-LU,fr-MC,gl,gl-ES,gu,gu-IN,he,he-IL,hi,hi-IN,hr,hr-BA,hr-HR,hu,hu-HU,hy,hy-AM,id,id-ID,is,is-IS,it,it-CH,it-IT,ja,ja-JP,ka,ka-GE,kk,kk-KZ,kn,kn-IN,ko,ko-KR,kok,kok-IN,ky,ky-KG,lt,lt-LT,lv,lv-LV,mi,mi-NZ,mk,mk-MK,mn,mn-MN,mr,mr-IN,ms,ms-BN,ms-MY,mt,mt-MT,nb,nb-NO,nl,nl-BE,nl-NL,nn-NO,ns,ns-ZA,pa,pa-IN,pl,pl-PL,ps,ps-AR,pt,pt-BR,pt-PT,qu,qu-BO,qu-EC,qu-PE,ro,ro-RO,ru,ru-RU,sa,sa-IN,se,se-FI,se-FI,se-FI,se-NO,se-NO,se-NO,se-SE,se-SE,se-SE,sk,sk-SK,sl,sl-SI,sq,sq-AL,sr-BA,sr-BA,sr-SP,sr-SP,sv,sv-FI,sv-SE,sw,sw-KE,syr,syr-SY,ta,ta-IN,te,te-IN,th,th-TH,tl,tl-PH,tn,tn-ZA,tr,tr-TR,tt,tt-RU,ts,uk,uk-UA,ur,ur-PK,uz,uz-UZ,uz-UZ,vi,vi-VN,xh,xh-ZA,zh,zh-CN,zh-HK,zh-MO,zh-SG,zh-TW,zu,zu-ZA".split(",");
|
|
18
|
+
locales.forEach(locale => {
|
|
19
|
+
const formatted = input ?? formatCount(count, locale);
|
|
20
|
+
const parsed = parseCount(formatted, locale);
|
|
21
|
+
if (parsed !== count) {
|
|
22
|
+
const parts = new Intl.NumberFormat(locale).formatToParts(count);
|
|
23
|
+
const literal = parts
|
|
24
|
+
.filter(p => p.type !== "literal")
|
|
25
|
+
.map(part => `${part.type}:${part.value
|
|
26
|
+
.split("")
|
|
27
|
+
.map(char => `U+${char.charCodeAt(0).toString(16).padStart(4, "0")}`)
|
|
28
|
+
.join(", ")}`);
|
|
29
|
+
assert.strictEqual(parsed, count, `Failed for locale '${locale}': '${literal.join(", ")}'`);
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
testCount(-1, "en-US", "-1");
|
|
34
|
+
testCount(0, "en-US", "0");
|
|
35
|
+
testCount(1, "en-US", "1");
|
|
36
|
+
testCount(10, "en-US", "10");
|
|
37
|
+
testCount(100, "en-US", "100");
|
|
38
|
+
testCount(1000, "en-US", "1K");
|
|
39
|
+
testCount(1234, "en-US", "1.234K");
|
|
40
|
+
testCount(-1234, "en-US", "-1.234K");
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=count.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"count.test.js","sourceRoot":"","sources":["../../source/format/count.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|