@dxos/util 0.6.13-main.ed424a1 → 0.6.13

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 (53) hide show
  1. package/dist/lib/browser/index.mjs +140 -105
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node/index.cjs +132 -96
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/types/src/complex.d.ts +8 -8
  8. package/dist/types/src/complex.d.ts.map +1 -1
  9. package/dist/types/src/index.d.ts +3 -5
  10. package/dist/types/src/index.d.ts.map +1 -1
  11. package/dist/types/src/params.d.ts +22 -0
  12. package/dist/types/src/params.d.ts.map +1 -0
  13. package/dist/types/src/params.test.d.ts +2 -0
  14. package/dist/types/src/params.test.d.ts.map +1 -0
  15. package/dist/types/src/platform.test.d.ts +2 -0
  16. package/dist/types/src/platform.test.d.ts.map +1 -0
  17. package/dist/types/src/weak.d.ts +4 -4
  18. package/dist/types/src/weak.d.ts.map +1 -1
  19. package/package.json +9 -8
  20. package/src/array.test.ts +2 -1
  21. package/src/bitfield.test.ts +2 -1
  22. package/src/callback.test.ts +2 -1
  23. package/src/complex.test.ts +2 -1
  24. package/src/complex.ts +8 -8
  25. package/src/defer.test.ts +2 -1
  26. package/src/human-hash.test.ts +2 -1
  27. package/src/index.ts +3 -5
  28. package/src/join-tables.test.ts +2 -1
  29. package/src/order.test.ts +2 -1
  30. package/src/params.test.ts +38 -0
  31. package/src/params.ts +68 -0
  32. package/src/platform.test.ts +17 -0
  33. package/src/reducers.test.ts +2 -1
  34. package/src/safe-instanceof.test.ts +2 -1
  35. package/src/sort.test.ts +2 -1
  36. package/src/tracer.test.ts +2 -1
  37. package/src/types.test.ts +2 -1
  38. package/src/typings.d.ts +5 -0
  39. package/src/uint8array.test.ts +2 -1
  40. package/src/weak.test.ts +8 -4
  41. package/src/weak.ts +4 -4
  42. package/dist/lib/node-esm/index.mjs +0 -1943
  43. package/dist/lib/node-esm/index.mjs.map +0 -7
  44. package/dist/lib/node-esm/meta.json +0 -1
  45. package/dist/types/src/array-to-hex.d.ts +0 -2
  46. package/dist/types/src/array-to-hex.d.ts.map +0 -1
  47. package/dist/types/src/platform.browser.test.d.ts +0 -2
  48. package/dist/types/src/platform.browser.test.d.ts.map +0 -1
  49. package/dist/types/src/platform.node.test.d.ts +0 -2
  50. package/dist/types/src/platform.node.test.d.ts.map +0 -1
  51. package/src/array-to-hex.ts +0 -23
  52. package/src/platform.browser.test.ts +0 -11
  53. package/src/platform.node.test.ts +0 -11
@@ -199,39 +199,6 @@ var createSetDispatch = ({ handlers }) => {
199
199
  });
200
200
  };
201
201
 
202
- // packages/common/util/src/callback-collection.ts
203
- var CallbackCollection = class {
204
- #callbacks = [];
205
- append(callback) {
206
- this.#callbacks.push(callback);
207
- }
208
- prepend(callback) {
209
- this.#callbacks.unshift(callback);
210
- }
211
- remove(callback) {
212
- this.#callbacks = this.#callbacks.filter((c) => c !== callback);
213
- }
214
- callParallel(...args) {
215
- return Promise.all(this.#callbacks.map((callback) => callback(...args)));
216
- }
217
- async callSerial(...args) {
218
- const results = [];
219
- for (const callback of this.#callbacks) {
220
- results.push(await callback(...args));
221
- }
222
- return results;
223
- }
224
- };
225
-
226
- // packages/common/util/src/chunk-array.ts
227
- var chunkArray = (array, size) => {
228
- const result = [];
229
- for (let i = 0; i < array.length; i += size) {
230
- result.push(array.slice(i, i + size));
231
- }
232
- return result;
233
- };
234
-
235
202
  // packages/common/util/src/circular-buffer.ts
236
203
  import { invariant as invariant4 } from "@dxos/invariant";
237
204
  var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/common/util/src/circular-buffer.ts";
@@ -1168,6 +1135,55 @@ var inferRecordOrder = (objectMap, order = []) => {
1168
1135
  }, {}), objectMap);
1169
1136
  };
1170
1137
 
1138
+ // packages/common/util/src/params.ts
1139
+ import { AST } from "@effect/schema";
1140
+ import { decamelize } from "xcase";
1141
+ var ParamKeyAnnotationId = Symbol.for("@dxos/schema/annotation/ParamKeyAnnotation");
1142
+ var ParamKeyAnnotation = (value) => (self) => self.annotations({
1143
+ [ParamKeyAnnotationId]: value
1144
+ });
1145
+ var Params = class {
1146
+ constructor(_schema) {
1147
+ this._schema = _schema;
1148
+ }
1149
+ /**
1150
+ * Parse URL params.
1151
+ * @param url
1152
+ */
1153
+ parse(url) {
1154
+ return Object.entries(this._schema.fields).reduce((acc, [key, type]) => {
1155
+ let v = url.searchParams.get(decamelize(key));
1156
+ if (v == null) {
1157
+ v = url.searchParams.get(key);
1158
+ }
1159
+ if (v != null) {
1160
+ if (AST.isNumberKeyword(type.ast)) {
1161
+ acc[key] = parseInt(v);
1162
+ } else if (AST.isBooleanKeyword(type.ast)) {
1163
+ acc[key] = v === "true" || v === "1";
1164
+ } else {
1165
+ acc[key] = v;
1166
+ }
1167
+ }
1168
+ return acc;
1169
+ }, {});
1170
+ }
1171
+ /**
1172
+ * Update URL with params.
1173
+ */
1174
+ params(url, values) {
1175
+ Object.entries(values).forEach(([key, value]) => {
1176
+ const type = this._schema.fields[key];
1177
+ if (type && value != null) {
1178
+ const { value: alt } = AST.getAnnotation(ParamKeyAnnotationId)(type.ast);
1179
+ const k = alt ?? decamelize(key);
1180
+ url.searchParams.set(k, String(value));
1181
+ }
1182
+ });
1183
+ return url;
1184
+ }
1185
+ };
1186
+
1171
1187
  // packages/common/util/src/pick.ts
1172
1188
  var pick = (object, keys) => keys.reduce((obj, key) => {
1173
1189
  if (object && key in object) {
@@ -1369,62 +1385,6 @@ var safeParseJson = (data, defaultValue) => {
1369
1385
  return defaultValue;
1370
1386
  };
1371
1387
 
1372
- // packages/common/util/src/sliding-window-summary.ts
1373
- import { invariant as invariant5 } from "@dxos/invariant";
1374
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/common/util/src/sliding-window-summary.ts";
1375
- var SlidingWindowSummary = class {
1376
- constructor(options) {
1377
- this._sum = 0;
1378
- this._buffer = new CircularBuffer(options.dataPoints);
1379
- if (options.precision != null) {
1380
- invariant5(options.precision >= 0, void 0, {
1381
- F: __dxlog_file5,
1382
- L: 26,
1383
- S: this,
1384
- A: [
1385
- "options.precision >= 0",
1386
- ""
1387
- ]
1388
- });
1389
- this._precision = Math.pow(10, options.precision);
1390
- }
1391
- }
1392
- record(value) {
1393
- const evicted = this._buffer.push(value);
1394
- this._sum += value - (evicted ?? 0);
1395
- }
1396
- average() {
1397
- return this._buffer.elementCount === 0 ? 0 : this._withPrecision(this._sum / this._buffer.elementCount);
1398
- }
1399
- computeWindowSummary() {
1400
- const mean = this.average();
1401
- const sortedElements = [
1402
- ...this._buffer
1403
- ].sort();
1404
- const median2 = this._withPrecision(sortedElements.length % 2 === 0 ? (sortedElements[sortedElements.length / 2] + sortedElements[sortedElements.length / 2 - 1]) / 2 : sortedElements[sortedElements.length / 2]);
1405
- const p90 = this._withPrecision(sortedElements[Math.round(sortedElements.length * 0.9)]);
1406
- const variance = sortedElements.reduce((acc, v) => acc + Math.pow(v - mean, 2)) / sortedElements.length;
1407
- const stdDev = this._withPrecision(Math.sqrt(variance));
1408
- const histogram = sortedElements.reduce((acc, v) => {
1409
- acc[v] += 1;
1410
- return acc;
1411
- }, {});
1412
- return {
1413
- mean,
1414
- median: median2,
1415
- p90,
1416
- stdDev,
1417
- histogram
1418
- };
1419
- }
1420
- _withPrecision(value) {
1421
- if (this._precision == null) {
1422
- return value;
1423
- }
1424
- return Math.round(value * this._precision) / this._precision;
1425
- }
1426
- };
1427
-
1428
1388
  // packages/common/util/src/sort.ts
1429
1389
  var compareScalar = (inc = true) => (a, b) => (inc ? 1 : -1) * (a < b ? -1 : a > b ? 1 : 0);
1430
1390
  var compareString = (inc = true, caseInsensitive = true) => (a, b) => {
@@ -1447,9 +1407,6 @@ var compareMulti = (sorters) => (a, b) => {
1447
1407
  return sort();
1448
1408
  };
1449
1409
 
1450
- // packages/common/util/src/sum.ts
1451
- var sum = (values) => values.reduce((a, b) => a + b, 0);
1452
-
1453
1410
  // packages/common/util/src/throw-unhandled-error.ts
1454
1411
  var throwUnhandledError = (error) => {
1455
1412
  queueMicrotask(() => {
@@ -1739,6 +1696,9 @@ var safeParseInt = (value, defaultValue) => {
1739
1696
  }
1740
1697
  };
1741
1698
 
1699
+ // packages/common/util/src/sum.ts
1700
+ var sum = (values) => values.reduce((a, b) => a + b, 0);
1701
+
1742
1702
  // packages/common/util/src/weak.ts
1743
1703
  var WeakDictionary = class {
1744
1704
  constructor(entries) {
@@ -1834,19 +1794,93 @@ var WeakDictionary = class {
1834
1794
  }
1835
1795
  };
1836
1796
 
1837
- // packages/common/util/src/array-to-hex.ts
1838
- var byteToHex = [];
1839
- for (let n = 0; n <= 255; ++n) {
1840
- const hexOctet = n.toString(16).padStart(2, "0");
1841
- byteToHex.push(hexOctet);
1842
- }
1843
- var arrayToHex = (buf) => {
1844
- const buff = new Uint8Array(buf);
1845
- const hexOctets = [];
1846
- for (let i = 0; i < buff.length; ++i) {
1847
- hexOctets.push(byteToHex[buff[i]]);
1797
+ // packages/common/util/src/sliding-window-summary.ts
1798
+ import { invariant as invariant5 } from "@dxos/invariant";
1799
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/common/util/src/sliding-window-summary.ts";
1800
+ var SlidingWindowSummary = class {
1801
+ constructor(options) {
1802
+ this._sum = 0;
1803
+ this._buffer = new CircularBuffer(options.dataPoints);
1804
+ if (options.precision != null) {
1805
+ invariant5(options.precision >= 0, void 0, {
1806
+ F: __dxlog_file5,
1807
+ L: 26,
1808
+ S: this,
1809
+ A: [
1810
+ "options.precision >= 0",
1811
+ ""
1812
+ ]
1813
+ });
1814
+ this._precision = Math.pow(10, options.precision);
1815
+ }
1848
1816
  }
1849
- return hexOctets.join("");
1817
+ record(value) {
1818
+ const evicted = this._buffer.push(value);
1819
+ this._sum += value - (evicted ?? 0);
1820
+ }
1821
+ average() {
1822
+ return this._buffer.elementCount === 0 ? 0 : this._withPrecision(this._sum / this._buffer.elementCount);
1823
+ }
1824
+ computeWindowSummary() {
1825
+ const mean = this.average();
1826
+ const sortedElements = [
1827
+ ...this._buffer
1828
+ ].sort();
1829
+ const median2 = this._withPrecision(sortedElements.length % 2 === 0 ? (sortedElements[sortedElements.length / 2] + sortedElements[sortedElements.length / 2 - 1]) / 2 : sortedElements[sortedElements.length / 2]);
1830
+ const p90 = this._withPrecision(sortedElements[Math.round(sortedElements.length * 0.9)]);
1831
+ const variance = sortedElements.reduce((acc, v) => acc + Math.pow(v - mean, 2)) / sortedElements.length;
1832
+ const stdDev = this._withPrecision(Math.sqrt(variance));
1833
+ const histogram = sortedElements.reduce((acc, v) => {
1834
+ acc[v] += 1;
1835
+ return acc;
1836
+ }, {});
1837
+ return {
1838
+ mean,
1839
+ median: median2,
1840
+ p90,
1841
+ stdDev,
1842
+ histogram
1843
+ };
1844
+ }
1845
+ _withPrecision(value) {
1846
+ if (this._precision == null) {
1847
+ return value;
1848
+ }
1849
+ return Math.round(value * this._precision) / this._precision;
1850
+ }
1851
+ };
1852
+
1853
+ // packages/common/util/src/callback-collection.ts
1854
+ var CallbackCollection = class {
1855
+ #callbacks = [];
1856
+ append(callback) {
1857
+ this.#callbacks.push(callback);
1858
+ }
1859
+ prepend(callback) {
1860
+ this.#callbacks.unshift(callback);
1861
+ }
1862
+ remove(callback) {
1863
+ this.#callbacks = this.#callbacks.filter((c) => c !== callback);
1864
+ }
1865
+ callParallel(...args) {
1866
+ return Promise.all(this.#callbacks.map((callback) => callback(...args)));
1867
+ }
1868
+ async callSerial(...args) {
1869
+ const results = [];
1870
+ for (const callback of this.#callbacks) {
1871
+ results.push(await callback(...args));
1872
+ }
1873
+ return results;
1874
+ }
1875
+ };
1876
+
1877
+ // packages/common/util/src/chunk-array.ts
1878
+ var chunkArray = (array, size) => {
1879
+ const result = [];
1880
+ for (let i = 0; i < array.length; i += size) {
1881
+ result.push(array.slice(i, i + size));
1882
+ }
1883
+ return result;
1850
1884
  };
1851
1885
  export {
1852
1886
  BitField,
@@ -1857,13 +1891,14 @@ export {
1857
1891
  ComplexSet,
1858
1892
  HumanHasher,
1859
1893
  MapEntry,
1894
+ ParamKeyAnnotation,
1895
+ Params,
1860
1896
  SlidingWindowSummary,
1861
1897
  Tracer,
1862
1898
  WeakDictionary,
1863
1899
  accessBy,
1864
1900
  arrayMove,
1865
1901
  arrayToBuffer,
1866
- arrayToHex,
1867
1902
  arrayToString,
1868
1903
  arraysEqual,
1869
1904
  boolGuard,