@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.
Files changed (75) hide show
  1. package/dist/lib/browser/index.mjs +119 -115
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +119 -115
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/array-to-hex.d.ts.map +1 -1
  8. package/dist/types/src/array.d.ts.map +1 -1
  9. package/dist/types/src/binder.d.ts.map +1 -1
  10. package/dist/types/src/bitfield.d.ts.map +1 -1
  11. package/dist/types/src/browser-storage.d.ts +9 -0
  12. package/dist/types/src/browser-storage.d.ts.map +1 -0
  13. package/dist/types/src/callback-collection.d.ts.map +1 -1
  14. package/dist/types/src/callback.d.ts.map +1 -1
  15. package/dist/types/src/case.d.ts.map +1 -1
  16. package/dist/types/src/chunk-array.d.ts.map +1 -1
  17. package/dist/types/src/circular-buffer.d.ts.map +1 -1
  18. package/dist/types/src/clear-undefined.d.ts.map +1 -1
  19. package/dist/types/src/complex.d.ts.map +1 -1
  20. package/dist/types/src/composite-key.d.ts.map +1 -1
  21. package/dist/types/src/deep.d.ts.map +1 -1
  22. package/dist/types/src/defer-function.d.ts.map +1 -1
  23. package/dist/types/src/defer.d.ts.map +1 -1
  24. package/dist/types/src/di-container.d.ts.map +1 -1
  25. package/dist/types/src/di-key.d.ts.map +1 -1
  26. package/dist/types/src/entry.d.ts.map +1 -1
  27. package/dist/types/src/error-format.d.ts.map +1 -1
  28. package/dist/types/src/filename.d.ts.map +1 -1
  29. package/dist/types/src/for-each-async.d.ts.map +1 -1
  30. package/dist/types/src/human-hash.d.ts.map +1 -1
  31. package/dist/types/src/index.d.ts +3 -2
  32. package/dist/types/src/index.d.ts.map +1 -1
  33. package/dist/types/src/instance-id.d.ts.map +1 -1
  34. package/dist/types/src/interval.d.ts.map +1 -1
  35. package/dist/types/src/join-tables.d.ts.map +1 -1
  36. package/dist/types/src/json.d.ts.map +1 -1
  37. package/dist/types/src/map-values.d.ts.map +1 -1
  38. package/dist/types/src/map.d.ts.map +1 -1
  39. package/dist/types/src/object.d.ts.map +1 -1
  40. package/dist/types/src/order-keys.d.ts.map +1 -1
  41. package/dist/types/src/order.d.ts.map +1 -1
  42. package/dist/types/src/pick.d.ts.map +1 -1
  43. package/dist/types/src/platform.d.ts +1 -1
  44. package/dist/types/src/position.d.ts +1 -1
  45. package/dist/types/src/position.d.ts.map +1 -1
  46. package/dist/types/src/random.d.ts.map +1 -1
  47. package/dist/types/src/range.d.ts.map +1 -1
  48. package/dist/types/src/reducers.d.ts.map +1 -1
  49. package/dist/types/src/remove-undefined-keys.d.ts.map +1 -1
  50. package/dist/types/src/retry.d.ts.map +1 -1
  51. package/dist/types/src/safe-await.d.ts.map +1 -1
  52. package/dist/types/src/safe-instanceof.d.ts.map +1 -1
  53. package/dist/types/src/safe-parse.d.ts.map +1 -1
  54. package/dist/types/src/safe-stringify.d.ts.map +1 -1
  55. package/dist/types/src/sliding-window-summary.d.ts.map +1 -1
  56. package/dist/types/src/sort.d.ts.map +1 -1
  57. package/dist/types/src/string.d.ts.map +1 -1
  58. package/dist/types/src/sum.d.ts.map +1 -1
  59. package/dist/types/src/throw-unhandled-error.d.ts.map +1 -1
  60. package/dist/types/src/to-fallback.d.ts +4 -4
  61. package/dist/types/src/to-fallback.d.ts.map +1 -1
  62. package/dist/types/src/tracer.d.ts.map +1 -1
  63. package/dist/types/src/tree.d.ts.map +1 -1
  64. package/dist/types/src/types.d.ts.map +1 -1
  65. package/dist/types/src/uint8array.d.ts.map +1 -1
  66. package/dist/types/src/unit.d.ts.map +1 -1
  67. package/dist/types/src/url.d.ts.map +1 -1
  68. package/dist/types/src/weak.d.ts.map +1 -1
  69. package/dist/types/tsconfig.tsbuildinfo +1 -1
  70. package/package.json +6 -9
  71. package/src/browser-storage.ts +60 -0
  72. package/src/error-format.ts +3 -1
  73. package/src/index.ts +3 -2
  74. package/src/string.ts +6 -2
  75. 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, void 0, {
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, void 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, void 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()) lines.shift();
1870
- while (lines.length && !lines[lines.length - 1].trim()) lines.pop();
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: value.toFixed(precision),
2209
- toString: () => `${value.toFixed(precision)}${unit.symbol}`
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,