@dxos/util 0.8.4-main.548089c → 0.8.4-main.59c2e9b

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 (46) hide show
  1. package/dist/lib/browser/index.mjs +146 -37
  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 +146 -37
  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.d.ts +2 -1
  8. package/dist/types/src/array.d.ts.map +1 -1
  9. package/dist/types/src/deep.d.ts.map +1 -1
  10. package/dist/types/src/defer.d.ts +1 -1
  11. package/dist/types/src/defer.d.ts.map +1 -1
  12. package/dist/types/src/error-format.d.ts +5 -0
  13. package/dist/types/src/error-format.d.ts.map +1 -0
  14. package/dist/types/src/filename.d.ts +9 -0
  15. package/dist/types/src/filename.d.ts.map +1 -0
  16. package/dist/types/src/index.d.ts +3 -0
  17. package/dist/types/src/index.d.ts.map +1 -1
  18. package/dist/types/src/platform.d.ts +4 -1
  19. package/dist/types/src/platform.d.ts.map +1 -1
  20. package/dist/types/src/retry.d.ts +32 -0
  21. package/dist/types/src/retry.d.ts.map +1 -0
  22. package/dist/types/src/safe-parse.d.ts +6 -4
  23. package/dist/types/src/safe-parse.d.ts.map +1 -1
  24. package/dist/types/src/safe-stringify.d.ts +9 -0
  25. package/dist/types/src/safe-stringify.d.ts.map +1 -1
  26. package/dist/types/src/types.d.ts +22 -4
  27. package/dist/types/src/types.d.ts.map +1 -1
  28. package/dist/types/src/unit.d.ts.map +1 -1
  29. package/dist/types/tsconfig.tsbuildinfo +1 -1
  30. package/package.json +12 -7
  31. package/src/array.ts +8 -1
  32. package/src/deep.ts +2 -0
  33. package/src/defer.ts +1 -1
  34. package/src/error-format.ts +22 -0
  35. package/src/filename.ts +16 -0
  36. package/src/index.ts +3 -0
  37. package/src/platform.ts +11 -1
  38. package/src/retry.ts +74 -0
  39. package/src/safe-parse.ts +19 -16
  40. package/src/safe-stringify.ts +65 -23
  41. package/src/types.test.ts +11 -1
  42. package/src/types.ts +37 -9
  43. package/src/unit.ts +1 -0
  44. package/dist/types/src/explicit-resource-management-polyfill.d.ts +0 -1
  45. package/dist/types/src/explicit-resource-management-polyfill.d.ts.map +0 -1
  46. package/src/explicit-resource-management-polyfill.ts +0 -13
@@ -97,6 +97,14 @@ var intersectBy = (arrays, selector) => {
97
97
  return lookups.every((lookup) => lookup.has(key));
98
98
  });
99
99
  };
100
+ var coerceArray = (arr) => {
101
+ if (arr === void 0) {
102
+ return [];
103
+ }
104
+ return Array.isArray(arr) ? arr : [
105
+ arr
106
+ ];
107
+ };
100
108
 
101
109
  // src/assume.ts
102
110
  function assumeType(value) {
@@ -596,11 +604,8 @@ var getDeep = (obj, path) => {
596
604
  // src/defer-function.ts
597
605
  var deferFunction = (fnProvider) => (...args) => fnProvider()(...args);
598
606
 
599
- // src/explicit-resource-management-polyfill.ts
600
- Symbol.dispose ??= Symbol("Symbol.dispose");
601
- Symbol.asyncDispose ??= Symbol("Symbol.asyncDispose");
602
-
603
607
  // src/defer.ts
608
+ import "@hazae41/symbol-dispose-polyfill";
604
609
  var defer = (fn) => new DeferGuard(fn);
605
610
  var DeferGuard = class {
606
611
  _fn;
@@ -661,6 +666,12 @@ var MapEntry = class {
661
666
  }
662
667
  };
663
668
 
669
+ // src/filename.ts
670
+ var createFilename = ({ parts = [], ext, date = /* @__PURE__ */ new Date() }) => [
671
+ date.toISOString().replace(/[:.]/g, "-"),
672
+ ...parts
673
+ ].join("_") + (ext ? `.${ext}` : "");
674
+
664
675
  // src/for-each-async.ts
665
676
  var forEachAsync = (items, fn) => Promise.all(items.map(fn));
666
677
 
@@ -1356,7 +1367,18 @@ var omit = (obj, keys2) => {
1356
1367
 
1357
1368
  // src/platform.ts
1358
1369
  var isNode = () => typeof process !== "undefined" && process.versions != null && process.versions.node != null;
1359
- var mobileAndTabletCheck = () => {
1370
+ var isBun = () => globalThis.Bun !== void 0;
1371
+ var isTauri = () => !!globalThis.__TAURI__;
1372
+ var isMobile = () => {
1373
+ let check = false;
1374
+ (function(a) {
1375
+ if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
1376
+ check = true;
1377
+ }
1378
+ })(navigator.userAgent || navigator.vendor || window.opera);
1379
+ return check;
1380
+ };
1381
+ var isMobileOrTablet = () => {
1360
1382
  let check = false;
1361
1383
  ((a) => {
1362
1384
  if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4))) {
@@ -1585,25 +1607,26 @@ var safeInstanceof = (tag) => (target) => {
1585
1607
  };
1586
1608
 
1587
1609
  // src/safe-parse.ts
1588
- var safeParseInt = (value, defaultValue) => {
1610
+ function safeParseInt(str, defaultValue) {
1589
1611
  try {
1590
- const n = parseInt(value ?? "");
1591
- return isNaN(n) ? defaultValue : n;
1612
+ const value = parseInt(str ?? "");
1613
+ return isNaN(value) ? defaultValue : value;
1592
1614
  } catch {
1593
1615
  return defaultValue;
1594
1616
  }
1595
- };
1596
- var safeParseFloat = (str, defaultValue) => {
1617
+ }
1618
+ function safeParseFloat(str, defaultValue) {
1597
1619
  try {
1598
- return parseFloat(str);
1620
+ const value = parseFloat(str ?? "");
1621
+ return isNaN(value) ? defaultValue : value;
1599
1622
  } catch {
1600
- return defaultValue ?? 0;
1623
+ return defaultValue;
1601
1624
  }
1602
- };
1603
- var safeParseJson = (data, defaultValue) => {
1604
- if (data && data.length > 0) {
1625
+ }
1626
+ var safeParseJson = (str, defaultValue) => {
1627
+ if (str && str.length > 0) {
1605
1628
  try {
1606
- return JSON.parse(data);
1629
+ return JSON.parse(str);
1607
1630
  } catch {
1608
1631
  }
1609
1632
  }
@@ -1613,29 +1636,45 @@ var safeParseJson = (data, defaultValue) => {
1613
1636
  // src/safe-stringify.ts
1614
1637
  var SKIP = Object.freeze({});
1615
1638
  function safeStringify(obj, filter = defaultFilter, indent = 2) {
1616
- const seen = /* @__PURE__ */ new WeakSet();
1639
+ const seen = /* @__PURE__ */ new WeakMap();
1617
1640
  function replacer(key, value) {
1618
- if (typeof value === "object" && value !== null) {
1619
- if (seen.has(value)) {
1620
- return "[Circular]";
1641
+ try {
1642
+ let path = key;
1643
+ if (!key) {
1644
+ path = "$";
1645
+ return value;
1646
+ } else if (this) {
1647
+ const parentPath = seen.get(this);
1648
+ path = parentPath ? `${parentPath}.${key}` : key;
1621
1649
  }
1622
- seen.add(value);
1623
- }
1624
- if (filter) {
1625
- const v2 = filter?.(key, value);
1626
- if (v2 !== void 0) {
1627
- return v2 === SKIP ? void 0 : v2;
1650
+ if (value == null) {
1651
+ return value;
1652
+ }
1653
+ if (typeof value === "function") {
1654
+ return void 0;
1655
+ }
1656
+ if (typeof value === "object" && Object.getPrototypeOf(value) !== Object.prototype) {
1657
+ return void 0;
1658
+ }
1659
+ if (typeof value === "object" && value !== null) {
1660
+ const exists = seen.get(value);
1661
+ if (exists) {
1662
+ return `[${path} => ${exists}]`;
1663
+ }
1664
+ seen.set(value, path);
1665
+ }
1666
+ if (filter) {
1667
+ const filteredValue = filter?.(key, value);
1668
+ if (filteredValue !== void 0) {
1669
+ return filteredValue === SKIP ? void 0 : filteredValue;
1670
+ }
1628
1671
  }
1672
+ return value;
1673
+ } catch (error) {
1674
+ return `ERROR: ${error.message}`;
1629
1675
  }
1630
- return value;
1631
- }
1632
- let result = "";
1633
- try {
1634
- result = JSON.stringify(obj, replacer, indent);
1635
- } catch (error) {
1636
- result = `Error: ${error.message}`;
1637
1676
  }
1638
- return result;
1677
+ return JSON.stringify(obj, replacer, indent);
1639
1678
  }
1640
1679
  var createReplacer = ({ omit: omit2, parse, maxDepth, maxArrayLen, maxStringLen } = {}) => {
1641
1680
  let currentDepth = 0;
@@ -1648,7 +1687,7 @@ var createReplacer = ({ omit: omit2, parse, maxDepth, maxArrayLen, maxStringLen
1648
1687
  currentDepth = parentDepth + 1;
1649
1688
  }
1650
1689
  if (typeof value === "function") {
1651
- return void 0;
1690
+ return SKIP;
1652
1691
  }
1653
1692
  if (value && typeof value === "object") {
1654
1693
  depthMap.set(value, currentDepth);
@@ -1657,7 +1696,7 @@ var createReplacer = ({ omit: omit2, parse, maxDepth, maxArrayLen, maxStringLen
1657
1696
  }
1658
1697
  }
1659
1698
  if (omit2?.includes(key)) {
1660
- return void 0;
1699
+ return SKIP;
1661
1700
  }
1662
1701
  if (parse?.includes(key) && typeof value === "string") {
1663
1702
  try {
@@ -2112,6 +2151,12 @@ var arrayMove = (array, from, to) => {
2112
2151
  array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);
2113
2152
  return array;
2114
2153
  };
2154
+ function arraySwap(array, from, to) {
2155
+ const current = array[from];
2156
+ array[from] = array[to];
2157
+ array[to] = current;
2158
+ return array;
2159
+ }
2115
2160
 
2116
2161
  // src/unit.ts
2117
2162
  var createFormat = (unit) => {
@@ -2156,6 +2201,10 @@ var Unit = {
2156
2201
  quotient: 1e3,
2157
2202
  precision: 2
2158
2203
  }),
2204
+ Byte: createFormat({
2205
+ symbol: "B",
2206
+ quotient: 1
2207
+ }),
2159
2208
  // Time.
2160
2209
  Hour: createFormat({
2161
2210
  symbol: "h",
@@ -2313,6 +2362,58 @@ var WeakDictionary = class {
2313
2362
  this._finalization.unregister(value);
2314
2363
  }
2315
2364
  };
2365
+
2366
+ // src/error-format.ts
2367
+ var formatErrorWithCauses = (error) => {
2368
+ const lines = [];
2369
+ let current = error;
2370
+ let level = 0;
2371
+ while (current) {
2372
+ const prefix = level === 0 ? "" : `Caused by: `;
2373
+ lines.push(prefix + (current.stack ?? String(current)));
2374
+ if (!(current.cause instanceof Error)) break;
2375
+ current = current.cause;
2376
+ level += 1;
2377
+ }
2378
+ return lines.join("\n\n");
2379
+ };
2380
+
2381
+ // src/retry.ts
2382
+ var DEFAULT_RETRY_OPTIONS = {
2383
+ count: 3,
2384
+ delayMs: 100,
2385
+ exponent: 2,
2386
+ retryOnError: async () => true,
2387
+ retryOnValue: async () => false
2388
+ };
2389
+ var retry = async (options, cb) => {
2390
+ const fullOptions = {
2391
+ ...DEFAULT_RETRY_OPTIONS,
2392
+ ...options
2393
+ };
2394
+ let numRetries = 0, currentDelay = fullOptions.delayMs;
2395
+ while (true) {
2396
+ let result;
2397
+ try {
2398
+ result = await cb();
2399
+ } catch (err) {
2400
+ if (numRetries > fullOptions.count || !await fullOptions.retryOnError(err)) {
2401
+ throw err;
2402
+ }
2403
+ await new Promise((resolve) => setTimeout(resolve, currentDelay));
2404
+ currentDelay *= fullOptions.exponent;
2405
+ numRetries++;
2406
+ continue;
2407
+ }
2408
+ if (!await fullOptions.retryOnValue(result)) {
2409
+ return result;
2410
+ }
2411
+ await new Promise((resolve) => setTimeout(resolve, currentDelay));
2412
+ currentDelay *= fullOptions.exponent;
2413
+ numRetries++;
2414
+ continue;
2415
+ }
2416
+ };
2316
2417
  export {
2317
2418
  BitField,
2318
2419
  Callback,
@@ -2329,6 +2430,7 @@ export {
2329
2430
  WeakDictionary,
2330
2431
  accessBy,
2331
2432
  arrayMove,
2433
+ arraySwap,
2332
2434
  arrayToBuffer,
2333
2435
  arrayToHex,
2334
2436
  arrayToString,
@@ -2340,12 +2442,14 @@ export {
2340
2442
  chunkArray,
2341
2443
  clamp,
2342
2444
  clearUndefined,
2445
+ coerceArray,
2343
2446
  compareMulti,
2344
2447
  compareObject,
2345
2448
  compareScalar,
2346
2449
  compareString,
2347
2450
  createBinder,
2348
2451
  createBucketReducer,
2452
+ createFilename,
2349
2453
  createGroupReducer,
2350
2454
  createReplacer,
2351
2455
  createSetDispatch,
@@ -2365,6 +2469,7 @@ export {
2365
2469
  entry,
2366
2470
  exponentialBackoffInterval,
2367
2471
  forEachAsync,
2472
+ formatErrorWithCauses,
2368
2473
  get,
2369
2474
  getAsyncProviderValue,
2370
2475
  getDate,
@@ -2385,8 +2490,12 @@ export {
2385
2490
  intersectBy,
2386
2491
  intersection,
2387
2492
  iosCheck,
2493
+ isBun,
2494
+ isMobile,
2495
+ isMobileOrTablet,
2388
2496
  isNode,
2389
2497
  isNonNullable,
2498
+ isTauri,
2390
2499
  isTruthy,
2391
2500
  joinTables,
2392
2501
  jsonKeyReplacer,
@@ -2402,7 +2511,6 @@ export {
2402
2511
  makeSet,
2403
2512
  mapValues,
2404
2513
  median,
2405
- mobileAndTabletCheck,
2406
2514
  numericalValues,
2407
2515
  omit,
2408
2516
  orderKeys,
@@ -2418,6 +2526,7 @@ export {
2418
2526
  removeBy,
2419
2527
  removeProperties,
2420
2528
  removeUndefinedProperties,
2529
+ retry,
2421
2530
  safariCheck,
2422
2531
  safeAwaitAll,
2423
2532
  safeInstanceof,