@dxos/util 0.8.4-main.ae835ea → 0.8.4-main.bc674ce

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 (49) hide show
  1. package/dist/lib/browser/index.mjs +273 -60
  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 +273 -60
  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 +3 -2
  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 +4 -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 +22 -0
  25. package/dist/types/src/safe-stringify.d.ts.map +1 -0
  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 +12 -13
  29. package/dist/types/src/unit.d.ts.map +1 -1
  30. package/dist/types/tsconfig.tsbuildinfo +1 -1
  31. package/package.json +12 -7
  32. package/src/array.ts +9 -2
  33. package/src/binder.ts +2 -2
  34. package/src/deep.ts +2 -0
  35. package/src/defer.ts +1 -1
  36. package/src/error-format.ts +22 -0
  37. package/src/filename.ts +16 -0
  38. package/src/index.ts +4 -0
  39. package/src/platform.ts +11 -1
  40. package/src/retry.ts +74 -0
  41. package/src/safe-parse.ts +19 -16
  42. package/src/safe-stringify.ts +146 -0
  43. package/src/types.test.ts +11 -1
  44. package/src/types.ts +37 -9
  45. package/src/unit.test.ts +1 -1
  46. package/src/unit.ts +59 -28
  47. package/dist/types/src/explicit-resource-management-polyfill.d.ts +0 -1
  48. package/dist/types/src/explicit-resource-management-polyfill.d.ts.map +0 -1
  49. package/src/explicit-resource-management-polyfill.ts +0 -13
package/src/unit.ts CHANGED
@@ -2,51 +2,82 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- type Unit = {
5
+ export type Unit = {
6
6
  symbol: string;
7
7
  quotient: number;
8
+ precision?: number;
8
9
  };
9
10
 
10
- type Format = (n: number, precision?: number) => string;
11
+ export type UnitValue<T> = {
12
+ unit: Unit;
13
+ value: number;
14
+ formattedValue: T;
15
+ toString: () => string;
16
+ };
17
+
18
+ export type UnitFormat<T = any> = (n: number, precision?: number) => UnitValue<T>;
11
19
 
12
- const Formatter = (unit: Unit): Format => {
13
- return (n: number, precision = 2) => {
20
+ const createFormat = (unit: Unit): UnitFormat<string> => {
21
+ return (n: number, precision = unit.precision ?? 0) => {
14
22
  const value = n / unit.quotient;
15
- return `${value.toFixed(precision)}${unit.symbol}`;
23
+ return {
24
+ unit,
25
+ value,
26
+ formattedValue: value.toFixed(precision),
27
+ toString: () => `${value.toFixed(precision)}${unit.symbol}`,
28
+ };
16
29
  };
17
30
  };
18
31
 
19
- export const Unit = {
20
- // ms.
21
- Hour: Formatter({ symbol: 'h', quotient: 60 * 60 * 1_000 }),
22
- Minute: Formatter({ symbol: 'm', quotient: 60 * 1_000 }),
23
- Second: Formatter({ symbol: 's', quotient: 1_000 }),
24
- Millisecond: Formatter({ symbol: 'ms', quotient: 1 }),
32
+ const MS_SECONDS = 1_000;
33
+ const MS_MINUTES = 60 * MS_SECONDS;
34
+ const MS_HOURS = 60 * MS_MINUTES;
35
+
36
+ export const Unit: Record<string, UnitFormat> = {
37
+ // General.
38
+ Percent: createFormat({ symbol: '%', quotient: 1 / 100, precision: 2 }),
39
+ Thousand: createFormat({ symbol: 'k', quotient: 1_000, precision: 2 }),
40
+
41
+ // Bytes (note KB vs KiB).
42
+ Gigabyte: createFormat({ symbol: 'GB', quotient: 1_000 * 1_000 * 1_000, precision: 2 }),
43
+ Megabyte: createFormat({ symbol: 'MB', quotient: 1_000 * 1_000, precision: 2 }),
44
+ Kilobyte: createFormat({ symbol: 'KB', quotient: 1_000, precision: 2 }),
45
+ Byte: createFormat({ symbol: 'B', quotient: 1 }),
46
+
47
+ // Time.
48
+ Hour: createFormat({ symbol: 'h', quotient: MS_HOURS }),
49
+ Minute: createFormat({ symbol: 'm', quotient: MS_MINUTES }),
50
+ Second: createFormat({ symbol: 's', quotient: MS_SECONDS, precision: 1 }),
51
+ Millisecond: createFormat({ symbol: 'ms', quotient: 1 }),
25
52
  Duration: (n: number) => {
26
- const hours = Math.floor(n / (60 * 60 * 1_000));
27
- const minutes = Math.floor((n % (60 * 60 * 1_000)) / (60 * 1_000));
53
+ const hours = Math.floor(n / MS_HOURS);
54
+ const minutes = Math.floor((n % MS_HOURS) / MS_MINUTES);
28
55
  if (hours) {
29
- return minutes ? `${hours}h ${minutes}m` : `${hours}h`;
56
+ const formattedValue = minutes ? `${hours}h ${minutes}m` : `${hours}h`;
57
+ return {
58
+ unit: { symbol: 'h', quotient: MS_HOURS },
59
+ value: hours,
60
+ formattedValue,
61
+ toString: () => formattedValue,
62
+ };
30
63
  }
31
64
 
32
- const seconds = Math.floor((n % (60 * 1_000)) / 1_000);
33
65
  if (minutes) {
34
- return seconds ? `${minutes}m ${seconds}s` : `${minutes}m`;
66
+ const seconds = (n - MS_MINUTES * minutes) / MS_SECONDS;
67
+ const formattedValue = seconds ? `${minutes}m ${seconds}s` : `${minutes}m`;
68
+ return {
69
+ unit: { symbol: 'm', quotient: MS_MINUTES },
70
+ value: minutes,
71
+ formattedValue,
72
+ toString: () => formattedValue,
73
+ };
35
74
  }
36
75
 
76
+ const seconds = n >= MS_SECONDS;
37
77
  if (seconds) {
38
- return `${(n / 1_000).toFixed(1)}s`;
78
+ return Unit.Second(n);
39
79
  }
40
80
 
41
- return `${n}ms`;
81
+ return Unit.Millisecond(n);
42
82
  },
43
-
44
- // bytes (note KB via KiB).
45
- Gigabyte: Formatter({ symbol: 'GB', quotient: 1_000 * 1_000 * 1_000 }),
46
- Megabyte: Formatter({ symbol: 'MB', quotient: 1_000 * 1_000 }),
47
- Kilobyte: Formatter({ symbol: 'KB', quotient: 1_000 }),
48
-
49
- // general.
50
- Thousand: Formatter({ symbol: 'k', quotient: 1_000 }),
51
- Percent: Formatter({ symbol: '%', quotient: 1 / 100 }),
52
- };
83
+ } as const;
@@ -1 +0,0 @@
1
- //# sourceMappingURL=explicit-resource-management-polyfill.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"explicit-resource-management-polyfill.d.ts","sourceRoot":"","sources":["../../../src/explicit-resource-management-polyfill.ts"],"names":[],"mappings":""}
@@ -1,13 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-5-2.html
6
-
7
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
8
- // @ts-ignore
9
- Symbol.dispose ??= Symbol('Symbol.dispose');
10
-
11
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
12
- // @ts-ignore
13
- Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose');