@dxos/util 0.8.4-main.fcfe5033a5 → 0.8.4-main.fdfb99ef29
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/dist/lib/browser/index.mjs +119 -115
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +119 -115
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/array-to-hex.d.ts.map +1 -1
- package/dist/types/src/array.d.ts.map +1 -1
- package/dist/types/src/binder.d.ts.map +1 -1
- package/dist/types/src/bitfield.d.ts.map +1 -1
- package/dist/types/src/browser-storage.d.ts +9 -0
- package/dist/types/src/browser-storage.d.ts.map +1 -0
- package/dist/types/src/callback-collection.d.ts.map +1 -1
- package/dist/types/src/callback.d.ts.map +1 -1
- package/dist/types/src/case.d.ts.map +1 -1
- package/dist/types/src/chunk-array.d.ts.map +1 -1
- package/dist/types/src/circular-buffer.d.ts.map +1 -1
- package/dist/types/src/clear-undefined.d.ts.map +1 -1
- package/dist/types/src/complex.d.ts.map +1 -1
- package/dist/types/src/composite-key.d.ts.map +1 -1
- package/dist/types/src/deep.d.ts.map +1 -1
- package/dist/types/src/defer-function.d.ts.map +1 -1
- package/dist/types/src/defer.d.ts.map +1 -1
- package/dist/types/src/di-container.d.ts.map +1 -1
- package/dist/types/src/di-key.d.ts.map +1 -1
- package/dist/types/src/entry.d.ts.map +1 -1
- package/dist/types/src/error-format.d.ts.map +1 -1
- package/dist/types/src/filename.d.ts.map +1 -1
- package/dist/types/src/for-each-async.d.ts.map +1 -1
- package/dist/types/src/human-hash.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +3 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/instance-id.d.ts.map +1 -1
- package/dist/types/src/interval.d.ts.map +1 -1
- package/dist/types/src/join-tables.d.ts.map +1 -1
- package/dist/types/src/json.d.ts.map +1 -1
- package/dist/types/src/map-values.d.ts.map +1 -1
- package/dist/types/src/map.d.ts.map +1 -1
- package/dist/types/src/object.d.ts.map +1 -1
- package/dist/types/src/order-keys.d.ts.map +1 -1
- package/dist/types/src/order.d.ts.map +1 -1
- package/dist/types/src/pick.d.ts.map +1 -1
- package/dist/types/src/platform.d.ts +1 -1
- package/dist/types/src/position.d.ts +1 -1
- package/dist/types/src/position.d.ts.map +1 -1
- package/dist/types/src/random.d.ts.map +1 -1
- package/dist/types/src/range.d.ts.map +1 -1
- package/dist/types/src/reducers.d.ts.map +1 -1
- package/dist/types/src/remove-undefined-keys.d.ts.map +1 -1
- package/dist/types/src/retry.d.ts.map +1 -1
- package/dist/types/src/safe-await.d.ts.map +1 -1
- package/dist/types/src/safe-instanceof.d.ts.map +1 -1
- package/dist/types/src/safe-parse.d.ts.map +1 -1
- package/dist/types/src/safe-stringify.d.ts.map +1 -1
- package/dist/types/src/sliding-window-summary.d.ts.map +1 -1
- package/dist/types/src/sort.d.ts.map +1 -1
- package/dist/types/src/string.d.ts.map +1 -1
- package/dist/types/src/sum.d.ts.map +1 -1
- package/dist/types/src/throw-unhandled-error.d.ts.map +1 -1
- package/dist/types/src/to-fallback.d.ts +4 -4
- package/dist/types/src/to-fallback.d.ts.map +1 -1
- package/dist/types/src/tracer.d.ts.map +1 -1
- package/dist/types/src/tree.d.ts.map +1 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/uint8array.d.ts.map +1 -1
- package/dist/types/src/unit.d.ts.map +1 -1
- package/dist/types/src/url.d.ts.map +1 -1
- package/dist/types/src/weak.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -9
- package/src/browser-storage.ts +60 -0
- package/src/error-format.ts +3 -1
- package/src/index.ts +3 -2
- package/src/string.ts +6 -2
- package/src/unit.ts +6 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/util",
|
|
3
|
-
"version": "0.8.4-main.
|
|
3
|
+
"version": "0.8.4-main.fdfb99ef29",
|
|
4
4
|
"description": "Temporary bucket for misc functions, which should graduate into separate packages.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -23,22 +23,19 @@
|
|
|
23
23
|
}
|
|
24
24
|
},
|
|
25
25
|
"types": "dist/types/src/index.d.ts",
|
|
26
|
-
"typesVersions": {
|
|
27
|
-
"*": {}
|
|
28
|
-
},
|
|
29
26
|
"files": [
|
|
30
27
|
"dist",
|
|
31
28
|
"src"
|
|
32
29
|
],
|
|
33
30
|
"dependencies": {
|
|
34
31
|
"@hazae41/symbol-dispose-polyfill": "^1.0.2",
|
|
35
|
-
"@dxos/
|
|
36
|
-
"@dxos/
|
|
37
|
-
"@dxos/keys": "0.8.4-main.
|
|
38
|
-
"@dxos/node-std": "0.8.4-main.
|
|
32
|
+
"@dxos/invariant": "0.8.4-main.fdfb99ef29",
|
|
33
|
+
"@dxos/debug": "0.8.4-main.fdfb99ef29",
|
|
34
|
+
"@dxos/keys": "0.8.4-main.fdfb99ef29",
|
|
35
|
+
"@dxos/node-std": "0.8.4-main.fdfb99ef29"
|
|
39
36
|
},
|
|
40
37
|
"devDependencies": {
|
|
41
|
-
"@dxos/crypto": "0.8.4-main.
|
|
38
|
+
"@dxos/crypto": "0.8.4-main.fdfb99ef29"
|
|
42
39
|
},
|
|
43
40
|
"publishConfig": {
|
|
44
41
|
"access": "public"
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
/** Delete all IndexedDB databases for this origin. */
|
|
6
|
+
export const clearIndexedDB = async (): Promise<void> => {
|
|
7
|
+
const dbs = await indexedDB.databases();
|
|
8
|
+
const results = await Promise.allSettled(
|
|
9
|
+
dbs
|
|
10
|
+
.filter((db) => db.name != null)
|
|
11
|
+
.map(
|
|
12
|
+
(db) =>
|
|
13
|
+
new Promise<void>((resolve, reject) => {
|
|
14
|
+
const request = indexedDB.deleteDatabase(db.name!);
|
|
15
|
+
request.onsuccess = () => resolve();
|
|
16
|
+
request.onerror = () => reject(request.error);
|
|
17
|
+
request.onblocked = () => reject(new Error(`IndexedDB deletion blocked: ${db.name}`));
|
|
18
|
+
}),
|
|
19
|
+
),
|
|
20
|
+
);
|
|
21
|
+
const failures = results.filter((r): r is PromiseRejectedResult => r.status === 'rejected');
|
|
22
|
+
if (failures.length > 0) {
|
|
23
|
+
throw new AggregateError(
|
|
24
|
+
failures.map((r) => r.reason),
|
|
25
|
+
'Failed to delete some IndexedDB databases',
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/** Remove all entries from the Origin Private File System. */
|
|
31
|
+
export const clearOPFS = async (): Promise<void> => {
|
|
32
|
+
const root = await navigator.storage.getDirectory();
|
|
33
|
+
const errors: unknown[] = [];
|
|
34
|
+
for await (const [name] of root.entries()) {
|
|
35
|
+
try {
|
|
36
|
+
await root.removeEntry(name, { recursive: true });
|
|
37
|
+
} catch (err) {
|
|
38
|
+
errors.push(err);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (errors.length > 0) {
|
|
42
|
+
throw new AggregateError(errors, 'Failed to remove some OPFS entries');
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/** Unregister all service workers for this origin. */
|
|
47
|
+
export const clearServiceWorkers = async (): Promise<void> => {
|
|
48
|
+
const regs = await navigator.serviceWorker.getRegistrations();
|
|
49
|
+
for (const reg of regs) {
|
|
50
|
+
await reg.unregister();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/** Delete all HTTP caches for this origin. */
|
|
55
|
+
export const clearCaches = async (): Promise<void> => {
|
|
56
|
+
const keys = await caches.keys();
|
|
57
|
+
for (const key of keys) {
|
|
58
|
+
await caches.delete(key);
|
|
59
|
+
}
|
|
60
|
+
};
|
package/src/error-format.ts
CHANGED
|
@@ -13,7 +13,9 @@ export const formatErrorWithCauses = (error: Error): string => {
|
|
|
13
13
|
while (current) {
|
|
14
14
|
const prefix = level === 0 ? '' : `Caused by: `;
|
|
15
15
|
lines.push(prefix + (current.stack ?? String(current)));
|
|
16
|
-
if (!(current.cause instanceof Error))
|
|
16
|
+
if (!(current.cause instanceof Error)) {
|
|
17
|
+
break;
|
|
18
|
+
}
|
|
17
19
|
current = current.cause;
|
|
18
20
|
level += 1;
|
|
19
21
|
}
|
package/src/index.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from './array';
|
|
|
7
7
|
export * from './assume';
|
|
8
8
|
export * from './binder';
|
|
9
9
|
export * from './bitfield';
|
|
10
|
+
export * from './browser-storage';
|
|
10
11
|
export * from './callback-collection';
|
|
11
12
|
export * from './callback';
|
|
12
13
|
export * from './case';
|
|
@@ -19,6 +20,7 @@ export * from './deep';
|
|
|
19
20
|
export * from './defer-function';
|
|
20
21
|
export * from './defer';
|
|
21
22
|
export * from './entry';
|
|
23
|
+
export * from './error-format';
|
|
22
24
|
export * from './filename';
|
|
23
25
|
export * from './for-each-async';
|
|
24
26
|
export * from './human-hash';
|
|
@@ -39,6 +41,7 @@ export * from './random';
|
|
|
39
41
|
export * from './range';
|
|
40
42
|
export * from './reducers';
|
|
41
43
|
export * from './remove-undefined-keys';
|
|
44
|
+
export * from './retry';
|
|
42
45
|
export * from './safe-await';
|
|
43
46
|
export * from './safe-instanceof';
|
|
44
47
|
export * from './safe-parse';
|
|
@@ -56,5 +59,3 @@ export * from './uint8array';
|
|
|
56
59
|
export * from './unit';
|
|
57
60
|
export * from './url';
|
|
58
61
|
export * from './weak';
|
|
59
|
-
export * from './error-format';
|
|
60
|
-
export * from './retry';
|
package/src/string.ts
CHANGED
|
@@ -32,8 +32,12 @@ export function trim(strings: TemplateStringsArray, ...values: any[]) {
|
|
|
32
32
|
// Split into lines and trim leading/trailing blank lines.
|
|
33
33
|
const lines = raw.split('\n');
|
|
34
34
|
|
|
35
|
-
while (lines.length && !lines[0].trim())
|
|
36
|
-
|
|
35
|
+
while (lines.length && !lines[0].trim()) {
|
|
36
|
+
lines.shift();
|
|
37
|
+
}
|
|
38
|
+
while (lines.length && !lines[lines.length - 1].trim()) {
|
|
39
|
+
lines.pop();
|
|
40
|
+
}
|
|
37
41
|
|
|
38
42
|
// Find smallest indent across all non-blank lines.
|
|
39
43
|
const minIndent = Math.min(...lines.filter((l) => l.trim()).map((l) => l.match(/^[ \t]*/)?.[0].length ?? 0));
|
package/src/unit.ts
CHANGED
|
@@ -20,11 +20,15 @@ export type UnitFormat<T = any> = (n: number, precision?: number) => UnitValue<T
|
|
|
20
20
|
const createFormat = (unit: Unit): UnitFormat<string> => {
|
|
21
21
|
return (n: number, precision = unit.precision ?? 0) => {
|
|
22
22
|
const value = n / unit.quotient;
|
|
23
|
+
const formattedValue = value.toLocaleString('en-US', {
|
|
24
|
+
minimumFractionDigits: precision,
|
|
25
|
+
maximumFractionDigits: precision,
|
|
26
|
+
});
|
|
23
27
|
return {
|
|
24
28
|
unit,
|
|
25
29
|
value,
|
|
26
|
-
formattedValue
|
|
27
|
-
toString: () => `${
|
|
30
|
+
formattedValue,
|
|
31
|
+
toString: () => `${formattedValue}${unit.symbol}`,
|
|
28
32
|
};
|
|
29
33
|
};
|
|
30
34
|
};
|