@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
|
@@ -119,7 +119,6 @@ var createBinder = (obj) => ({
|
|
|
119
119
|
|
|
120
120
|
// src/bitfield.ts
|
|
121
121
|
import { invariant } from "@dxos/invariant";
|
|
122
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/common/util/src/bitfield.ts";
|
|
123
122
|
var BitField = class _BitField {
|
|
124
123
|
static get(data, idx) {
|
|
125
124
|
const bit = data[idx >> 3] >> 7 - idx % 8 & 1;
|
|
@@ -151,15 +150,7 @@ var BitField = class _BitField {
|
|
|
151
150
|
return result;
|
|
152
151
|
}
|
|
153
152
|
static and(first, second) {
|
|
154
|
-
invariant(first.length === second.length, "Bitfields must be of the same length"
|
|
155
|
-
F: __dxlog_file,
|
|
156
|
-
L: 52,
|
|
157
|
-
S: this,
|
|
158
|
-
A: [
|
|
159
|
-
"first.length === second.length",
|
|
160
|
-
"'Bitfields must be of the same length'"
|
|
161
|
-
]
|
|
162
|
-
});
|
|
153
|
+
invariant(first.length === second.length, "Bitfields must be of the same length");
|
|
163
154
|
const result = new Uint8Array(first.length);
|
|
164
155
|
for (let i = 0; i < first.length; i++) {
|
|
165
156
|
result[i] = first[i] & second[i];
|
|
@@ -187,6 +178,49 @@ var BitField = class _BitField {
|
|
|
187
178
|
}
|
|
188
179
|
};
|
|
189
180
|
|
|
181
|
+
// src/browser-storage.ts
|
|
182
|
+
var clearIndexedDB = async () => {
|
|
183
|
+
const dbs = await indexedDB.databases();
|
|
184
|
+
const results = await Promise.allSettled(dbs.filter((db) => db.name != null).map((db) => new Promise((resolve, reject) => {
|
|
185
|
+
const request = indexedDB.deleteDatabase(db.name);
|
|
186
|
+
request.onsuccess = () => resolve();
|
|
187
|
+
request.onerror = () => reject(request.error);
|
|
188
|
+
request.onblocked = () => reject(new Error(`IndexedDB deletion blocked: ${db.name}`));
|
|
189
|
+
})));
|
|
190
|
+
const failures = results.filter((r) => r.status === "rejected");
|
|
191
|
+
if (failures.length > 0) {
|
|
192
|
+
throw new AggregateError(failures.map((r) => r.reason), "Failed to delete some IndexedDB databases");
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
var clearOPFS = async () => {
|
|
196
|
+
const root = await navigator.storage.getDirectory();
|
|
197
|
+
const errors = [];
|
|
198
|
+
for await (const [name] of root.entries()) {
|
|
199
|
+
try {
|
|
200
|
+
await root.removeEntry(name, {
|
|
201
|
+
recursive: true
|
|
202
|
+
});
|
|
203
|
+
} catch (err) {
|
|
204
|
+
errors.push(err);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
if (errors.length > 0) {
|
|
208
|
+
throw new AggregateError(errors, "Failed to remove some OPFS entries");
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
var clearServiceWorkers = async () => {
|
|
212
|
+
const regs = await navigator.serviceWorker.getRegistrations();
|
|
213
|
+
for (const reg of regs) {
|
|
214
|
+
await reg.unregister();
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
var clearCaches = async () => {
|
|
218
|
+
const keys2 = await caches.keys();
|
|
219
|
+
for (const key of keys2) {
|
|
220
|
+
await caches.delete(key);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
|
|
190
224
|
// src/callback-collection.ts
|
|
191
225
|
var CallbackCollection = class {
|
|
192
226
|
#callbacks = [];
|
|
@@ -213,34 +247,17 @@ var CallbackCollection = class {
|
|
|
213
247
|
|
|
214
248
|
// src/callback.ts
|
|
215
249
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
216
|
-
var __dxlog_file2 = "/__w/dxos/dxos/packages/common/util/src/callback.ts";
|
|
217
250
|
var Callback = class {
|
|
218
251
|
_callback;
|
|
219
252
|
call(...args) {
|
|
220
|
-
invariant2(this._callback, "Callback not set"
|
|
221
|
-
F: __dxlog_file2,
|
|
222
|
-
L: 20,
|
|
223
|
-
S: this,
|
|
224
|
-
A: [
|
|
225
|
-
"this._callback",
|
|
226
|
-
"'Callback not set'"
|
|
227
|
-
]
|
|
228
|
-
});
|
|
253
|
+
invariant2(this._callback, "Callback not set");
|
|
229
254
|
return this._callback(...args);
|
|
230
255
|
}
|
|
231
256
|
callIfSet(...args) {
|
|
232
257
|
return this._callback?.(...args);
|
|
233
258
|
}
|
|
234
259
|
set(callback) {
|
|
235
|
-
invariant2(!this._callback, "Callback already set"
|
|
236
|
-
F: __dxlog_file2,
|
|
237
|
-
L: 29,
|
|
238
|
-
S: this,
|
|
239
|
-
A: [
|
|
240
|
-
"!this._callback",
|
|
241
|
-
"'Callback already set'"
|
|
242
|
-
]
|
|
243
|
-
});
|
|
260
|
+
invariant2(!this._callback, "Callback already set");
|
|
244
261
|
this._callback = callback;
|
|
245
262
|
}
|
|
246
263
|
isSet() {
|
|
@@ -308,21 +325,12 @@ var chunkArray = (array, size) => {
|
|
|
308
325
|
|
|
309
326
|
// src/circular-buffer.ts
|
|
310
327
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
311
|
-
var __dxlog_file3 = "/__w/dxos/dxos/packages/common/util/src/circular-buffer.ts";
|
|
312
328
|
var CircularBuffer = class {
|
|
313
329
|
_buffer;
|
|
314
330
|
_nextIndex = 0;
|
|
315
331
|
_elementCount = 0;
|
|
316
332
|
constructor(size) {
|
|
317
|
-
invariant3(size >= 1
|
|
318
|
-
F: __dxlog_file3,
|
|
319
|
-
L: 13,
|
|
320
|
-
S: this,
|
|
321
|
-
A: [
|
|
322
|
-
"size >= 1",
|
|
323
|
-
""
|
|
324
|
-
]
|
|
325
|
-
});
|
|
333
|
+
invariant3(size >= 1);
|
|
326
334
|
this._buffer = new Array(size);
|
|
327
335
|
}
|
|
328
336
|
push(element) {
|
|
@@ -608,17 +616,8 @@ var splitCompositeKey = (key) => key.split(SEPARATOR);
|
|
|
608
616
|
|
|
609
617
|
// src/deep.ts
|
|
610
618
|
import { invariant as invariant4 } from "@dxos/invariant";
|
|
611
|
-
var __dxlog_file4 = "/__w/dxos/dxos/packages/common/util/src/deep.ts";
|
|
612
619
|
var setDeep = (obj, path, value) => {
|
|
613
|
-
invariant4(path.length > 0
|
|
614
|
-
F: __dxlog_file4,
|
|
615
|
-
L: 12,
|
|
616
|
-
S: void 0,
|
|
617
|
-
A: [
|
|
618
|
-
"path.length > 0",
|
|
619
|
-
""
|
|
620
|
-
]
|
|
621
|
-
});
|
|
620
|
+
invariant4(path.length > 0);
|
|
622
621
|
let parent = obj;
|
|
623
622
|
for (const key of path.slice(0, -1)) {
|
|
624
623
|
if (parent[key] === void 0) {
|
|
@@ -703,6 +702,23 @@ var MapEntry = class {
|
|
|
703
702
|
}
|
|
704
703
|
};
|
|
705
704
|
|
|
705
|
+
// src/error-format.ts
|
|
706
|
+
var formatErrorWithCauses = (error) => {
|
|
707
|
+
const lines = [];
|
|
708
|
+
let current = error;
|
|
709
|
+
let level = 0;
|
|
710
|
+
while (current) {
|
|
711
|
+
const prefix = level === 0 ? "" : `Caused by: `;
|
|
712
|
+
lines.push(prefix + (current.stack ?? String(current)));
|
|
713
|
+
if (!(current.cause instanceof Error)) {
|
|
714
|
+
break;
|
|
715
|
+
}
|
|
716
|
+
current = current.cause;
|
|
717
|
+
level += 1;
|
|
718
|
+
}
|
|
719
|
+
return lines.join("\n\n");
|
|
720
|
+
};
|
|
721
|
+
|
|
706
722
|
// src/filename.ts
|
|
707
723
|
var createFilename = ({ parts = [], ext, date = /* @__PURE__ */ new Date() }) => [
|
|
708
724
|
date.toISOString().replace(/[:.]/g, "-"),
|
|
@@ -1613,6 +1629,43 @@ var removeProperties = (root, condition) => {
|
|
|
1613
1629
|
return result;
|
|
1614
1630
|
};
|
|
1615
1631
|
|
|
1632
|
+
// src/retry.ts
|
|
1633
|
+
var DEFAULT_RETRY_OPTIONS = {
|
|
1634
|
+
count: 3,
|
|
1635
|
+
delayMs: 100,
|
|
1636
|
+
exponent: 2,
|
|
1637
|
+
retryOnError: async () => true,
|
|
1638
|
+
retryOnValue: async () => false
|
|
1639
|
+
};
|
|
1640
|
+
var retry = async (options, cb) => {
|
|
1641
|
+
const fullOptions = {
|
|
1642
|
+
...DEFAULT_RETRY_OPTIONS,
|
|
1643
|
+
...options
|
|
1644
|
+
};
|
|
1645
|
+
let numRetries = 0, currentDelay = fullOptions.delayMs;
|
|
1646
|
+
while (true) {
|
|
1647
|
+
let result;
|
|
1648
|
+
try {
|
|
1649
|
+
result = await cb();
|
|
1650
|
+
} catch (err) {
|
|
1651
|
+
if (numRetries > fullOptions.count || !await fullOptions.retryOnError(err)) {
|
|
1652
|
+
throw err;
|
|
1653
|
+
}
|
|
1654
|
+
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
1655
|
+
currentDelay *= fullOptions.exponent;
|
|
1656
|
+
numRetries++;
|
|
1657
|
+
continue;
|
|
1658
|
+
}
|
|
1659
|
+
if (!await fullOptions.retryOnValue(result)) {
|
|
1660
|
+
return result;
|
|
1661
|
+
}
|
|
1662
|
+
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
1663
|
+
currentDelay *= fullOptions.exponent;
|
|
1664
|
+
numRetries++;
|
|
1665
|
+
continue;
|
|
1666
|
+
}
|
|
1667
|
+
};
|
|
1668
|
+
|
|
1616
1669
|
// src/safe-await.ts
|
|
1617
1670
|
var safeAwaitAll = async (source, taskFactory, onError) => {
|
|
1618
1671
|
const failedItems = [];
|
|
@@ -1769,7 +1822,6 @@ var defaultFilter = createReplacer();
|
|
|
1769
1822
|
|
|
1770
1823
|
// src/sliding-window-summary.ts
|
|
1771
1824
|
import { invariant as invariant5 } from "@dxos/invariant";
|
|
1772
|
-
var __dxlog_file5 = "/__w/dxos/dxos/packages/common/util/src/sliding-window-summary.ts";
|
|
1773
1825
|
var SlidingWindowSummary = class {
|
|
1774
1826
|
_buffer;
|
|
1775
1827
|
_sum = 0;
|
|
@@ -1777,15 +1829,7 @@ var SlidingWindowSummary = class {
|
|
|
1777
1829
|
constructor(options) {
|
|
1778
1830
|
this._buffer = new CircularBuffer(options.dataPoints);
|
|
1779
1831
|
if (options.precision != null) {
|
|
1780
|
-
invariant5(options.precision >= 0
|
|
1781
|
-
F: __dxlog_file5,
|
|
1782
|
-
L: 26,
|
|
1783
|
-
S: this,
|
|
1784
|
-
A: [
|
|
1785
|
-
"options.precision >= 0",
|
|
1786
|
-
""
|
|
1787
|
-
]
|
|
1788
|
-
});
|
|
1832
|
+
invariant5(options.precision >= 0);
|
|
1789
1833
|
this._precision = Math.pow(10, options.precision);
|
|
1790
1834
|
}
|
|
1791
1835
|
}
|
|
@@ -1866,8 +1910,12 @@ function trim(strings, ...values) {
|
|
|
1866
1910
|
return out;
|
|
1867
1911
|
}, "");
|
|
1868
1912
|
const lines = raw.split("\n");
|
|
1869
|
-
while (lines.length && !lines[0].trim())
|
|
1870
|
-
|
|
1913
|
+
while (lines.length && !lines[0].trim()) {
|
|
1914
|
+
lines.shift();
|
|
1915
|
+
}
|
|
1916
|
+
while (lines.length && !lines[lines.length - 1].trim()) {
|
|
1917
|
+
lines.pop();
|
|
1918
|
+
}
|
|
1871
1919
|
const minIndent = Math.min(...lines.filter((l) => l.trim()).map((l) => l.match(/^[ \t]*/)?.[0].length ?? 0));
|
|
1872
1920
|
return lines.map((l) => l.slice(minIndent)).join("\n");
|
|
1873
1921
|
}
|
|
@@ -2202,11 +2250,15 @@ function arraySwap(array, from, to) {
|
|
|
2202
2250
|
var createFormat = (unit) => {
|
|
2203
2251
|
return (n, precision = unit.precision ?? 0) => {
|
|
2204
2252
|
const value = n / unit.quotient;
|
|
2253
|
+
const formattedValue = value.toLocaleString("en-US", {
|
|
2254
|
+
minimumFractionDigits: precision,
|
|
2255
|
+
maximumFractionDigits: precision
|
|
2256
|
+
});
|
|
2205
2257
|
return {
|
|
2206
2258
|
unit,
|
|
2207
2259
|
value,
|
|
2208
|
-
formattedValue
|
|
2209
|
-
toString: () => `${
|
|
2260
|
+
formattedValue,
|
|
2261
|
+
toString: () => `${formattedValue}${unit.symbol}`
|
|
2210
2262
|
};
|
|
2211
2263
|
};
|
|
2212
2264
|
};
|
|
@@ -2442,58 +2494,6 @@ var WeakDictionary = class {
|
|
|
2442
2494
|
this._finalization.unregister(value);
|
|
2443
2495
|
}
|
|
2444
2496
|
};
|
|
2445
|
-
|
|
2446
|
-
// src/error-format.ts
|
|
2447
|
-
var formatErrorWithCauses = (error) => {
|
|
2448
|
-
const lines = [];
|
|
2449
|
-
let current = error;
|
|
2450
|
-
let level = 0;
|
|
2451
|
-
while (current) {
|
|
2452
|
-
const prefix = level === 0 ? "" : `Caused by: `;
|
|
2453
|
-
lines.push(prefix + (current.stack ?? String(current)));
|
|
2454
|
-
if (!(current.cause instanceof Error)) break;
|
|
2455
|
-
current = current.cause;
|
|
2456
|
-
level += 1;
|
|
2457
|
-
}
|
|
2458
|
-
return lines.join("\n\n");
|
|
2459
|
-
};
|
|
2460
|
-
|
|
2461
|
-
// src/retry.ts
|
|
2462
|
-
var DEFAULT_RETRY_OPTIONS = {
|
|
2463
|
-
count: 3,
|
|
2464
|
-
delayMs: 100,
|
|
2465
|
-
exponent: 2,
|
|
2466
|
-
retryOnError: async () => true,
|
|
2467
|
-
retryOnValue: async () => false
|
|
2468
|
-
};
|
|
2469
|
-
var retry = async (options, cb) => {
|
|
2470
|
-
const fullOptions = {
|
|
2471
|
-
...DEFAULT_RETRY_OPTIONS,
|
|
2472
|
-
...options
|
|
2473
|
-
};
|
|
2474
|
-
let numRetries = 0, currentDelay = fullOptions.delayMs;
|
|
2475
|
-
while (true) {
|
|
2476
|
-
let result;
|
|
2477
|
-
try {
|
|
2478
|
-
result = await cb();
|
|
2479
|
-
} catch (err) {
|
|
2480
|
-
if (numRetries > fullOptions.count || !await fullOptions.retryOnError(err)) {
|
|
2481
|
-
throw err;
|
|
2482
|
-
}
|
|
2483
|
-
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
2484
|
-
currentDelay *= fullOptions.exponent;
|
|
2485
|
-
numRetries++;
|
|
2486
|
-
continue;
|
|
2487
|
-
}
|
|
2488
|
-
if (!await fullOptions.retryOnValue(result)) {
|
|
2489
|
-
return result;
|
|
2490
|
-
}
|
|
2491
|
-
await new Promise((resolve) => setTimeout(resolve, currentDelay));
|
|
2492
|
-
currentDelay *= fullOptions.exponent;
|
|
2493
|
-
numRetries++;
|
|
2494
|
-
continue;
|
|
2495
|
-
}
|
|
2496
|
-
};
|
|
2497
2497
|
export {
|
|
2498
2498
|
BitField,
|
|
2499
2499
|
Callback,
|
|
@@ -2521,6 +2521,10 @@ export {
|
|
|
2521
2521
|
capitalize,
|
|
2522
2522
|
chunkArray,
|
|
2523
2523
|
clamp,
|
|
2524
|
+
clearCaches,
|
|
2525
|
+
clearIndexedDB,
|
|
2526
|
+
clearOPFS,
|
|
2527
|
+
clearServiceWorkers,
|
|
2524
2528
|
clearUndefined,
|
|
2525
2529
|
coerceArray,
|
|
2526
2530
|
compareMulti,
|