@dxos/util 0.7.4 → 0.7.5-feature-compute.4d9d99a

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 (43) hide show
  1. package/dist/lib/browser/index.mjs +70 -17
  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 +72 -18
  5. package/dist/lib/node/index.cjs.map +4 -4
  6. package/dist/lib/node/meta.json +1 -1
  7. package/dist/lib/node-esm/index.mjs +70 -17
  8. package/dist/lib/node-esm/index.mjs.map +4 -4
  9. package/dist/lib/node-esm/meta.json +1 -1
  10. package/dist/types/src/array-to-hex.d.ts +1 -1
  11. package/dist/types/src/array-to-hex.d.ts.map +1 -1
  12. package/dist/types/src/array.d.ts +12 -0
  13. package/dist/types/src/array.d.ts.map +1 -1
  14. package/dist/types/src/bitfield.d.ts +1 -1
  15. package/dist/types/src/deep.d.ts.map +1 -1
  16. package/dist/types/src/disposition.d.ts +15 -0
  17. package/dist/types/src/disposition.d.ts.map +1 -0
  18. package/dist/types/src/disposition.test.d.ts +2 -0
  19. package/dist/types/src/disposition.test.d.ts.map +1 -0
  20. package/dist/types/src/index.d.ts +3 -1
  21. package/dist/types/src/index.d.ts.map +1 -1
  22. package/dist/types/src/no-infer.d.ts +2 -0
  23. package/dist/types/src/no-infer.d.ts.map +1 -0
  24. package/dist/types/src/safe-parse.d.ts +7 -0
  25. package/dist/types/src/safe-parse.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/tsconfig.tsbuildinfo +1 -0
  29. package/package.json +6 -6
  30. package/src/array-to-hex.ts +1 -1
  31. package/src/array.test.ts +83 -1
  32. package/src/array.ts +29 -0
  33. package/src/deep.ts +5 -3
  34. package/src/disposition.test.ts +98 -0
  35. package/src/disposition.ts +30 -0
  36. package/src/index.ts +3 -1
  37. package/src/instance-id.ts +1 -1
  38. package/src/no-infer.ts +5 -0
  39. package/src/safe-parse.ts +32 -0
  40. package/src/types.ts +31 -13
  41. package/dist/types/src/safe-parse-json.d.ts +0 -5
  42. package/dist/types/src/safe-parse-json.d.ts.map +0 -1
  43. package/src/safe-parse-json.ts +0 -15
@@ -1 +1 @@
1
- {"inputs":{"packages/common/util/src/array.ts":{"bytes":5726,"imports":[],"format":"esm"},"packages/common/util/src/binder.ts":{"bytes":1363,"imports":[{"path":"node:util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/bitfield.ts":{"bytes":8574,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/callback.ts":{"bytes":5305,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/callback-collection.ts":{"bytes":3247,"imports":[],"format":"esm"},"packages/common/util/src/case.ts":{"bytes":4663,"imports":[],"format":"esm"},"packages/common/util/src/chunk-array.ts":{"bytes":1248,"imports":[],"format":"esm"},"packages/common/util/src/circular-buffer.ts":{"bytes":6398,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/complex.ts":{"bytes":22029,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytes":1482,"imports":[]},"packages/common/util/src/defer.ts":{"bytes":3771,"imports":[{"path":"packages/common/util/src/explicit-resource-management-polyfill.ts","kind":"import-statement","original":"./explicit-resource-management-polyfill"}],"format":"esm"},"packages/common/util/src/defer-function.ts":{"bytes":1619,"imports":[],"format":"esm"},"packages/common/util/src/deep.ts":{"bytes":3455,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/entry.ts":{"bytes":3103,"imports":[],"format":"esm"},"packages/common/util/src/for-each-async.ts":{"bytes":826,"imports":[],"format":"esm"},"packages/common/util/src/human-hash.ts":{"bytes":20242,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/interval.ts":{"bytes":1876,"imports":[],"format":"esm"},"packages/common/util/src/map.ts":{"bytes":1546,"imports":[],"format":"esm"},"packages/common/util/src/instance-id.ts":{"bytes":4306,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/join-tables.ts":{"bytes":3140,"imports":[],"format":"esm"},"packages/common/util/src/uint8array.ts":{"bytes":3822,"imports":[],"format":"esm"},"packages/common/util/src/json.ts":{"bytes":13862,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"}],"format":"esm"},"packages/common/util/src/map-values.ts":{"bytes":11880,"imports":[],"format":"esm"},"packages/common/util/src/order.ts":{"bytes":5060,"imports":[],"format":"esm"},"packages/common/util/src/pick.ts":{"bytes":3737,"imports":[],"format":"esm"},"packages/common/util/src/platform.ts":{"bytes":11348,"imports":[],"format":"esm"},"packages/common/util/src/random.ts":{"bytes":1356,"imports":[],"format":"esm"},"packages/common/util/src/range.ts":{"bytes":2016,"imports":[],"format":"esm"},"packages/common/util/src/reducers.ts":{"bytes":12989,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/safe-await.ts":{"bytes":2916,"imports":[],"format":"esm"},"packages/common/util/src/safe-instanceof.ts":{"bytes":2749,"imports":[],"format":"esm"},"packages/common/util/src/safe-parse-json.ts":{"bytes":1381,"imports":[],"format":"esm"},"packages/common/util/src/sliding-window-summary.ts":{"bytes":7614,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/common/util/src/circular-buffer.ts","kind":"import-statement","original":"./circular-buffer"}],"format":"esm"},"packages/common/util/src/sort.ts":{"bytes":4004,"imports":[],"format":"esm"},"packages/common/util/src/sum.ts":{"bytes":720,"imports":[],"format":"esm"},"packages/common/util/src/throw-unhandled-error.ts":{"bytes":1216,"imports":[],"format":"esm"},"packages/common/util/src/to-fallback.ts":{"bytes":12288,"imports":[],"format":"esm"},"packages/common/util/src/tracer.ts":{"bytes":7302,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/tree.ts":{"bytes":6355,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/types.ts":{"bytes":9522,"imports":[],"format":"esm"},"packages/common/util/src/weak.ts":{"bytes":9764,"imports":[],"format":"esm"},"packages/common/util/src/array-to-hex.ts":{"bytes":2518,"imports":[],"format":"esm"},"packages/common/util/src/remove-undefined-keys.ts":{"bytes":1594,"imports":[],"format":"esm"},"packages/common/util/src/order-keys.ts":{"bytes":1659,"imports":[],"format":"esm"},"packages/common/util/src/index.ts":{"bytes":4616,"imports":[{"path":"packages/common/util/src/array.ts","kind":"import-statement","original":"./array"},{"path":"packages/common/util/src/binder.ts","kind":"import-statement","original":"./binder"},{"path":"packages/common/util/src/bitfield.ts","kind":"import-statement","original":"./bitfield"},{"path":"packages/common/util/src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"packages/common/util/src/callback-collection.ts","kind":"import-statement","original":"./callback-collection"},{"path":"packages/common/util/src/case.ts","kind":"import-statement","original":"./case"},{"path":"packages/common/util/src/chunk-array.ts","kind":"import-statement","original":"./chunk-array"},{"path":"packages/common/util/src/circular-buffer.ts","kind":"import-statement","original":"./circular-buffer"},{"path":"packages/common/util/src/complex.ts","kind":"import-statement","original":"./complex"},{"path":"packages/common/util/src/defer.ts","kind":"import-statement","original":"./defer"},{"path":"packages/common/util/src/defer-function.ts","kind":"import-statement","original":"./defer-function"},{"path":"packages/common/util/src/deep.ts","kind":"import-statement","original":"./deep"},{"path":"packages/common/util/src/entry.ts","kind":"import-statement","original":"./entry"},{"path":"packages/common/util/src/for-each-async.ts","kind":"import-statement","original":"./for-each-async"},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/interval.ts","kind":"import-statement","original":"./interval"},{"path":"packages/common/util/src/instance-id.ts","kind":"import-statement","original":"./instance-id"},{"path":"packages/common/util/src/join-tables.ts","kind":"import-statement","original":"./join-tables"},{"path":"packages/common/util/src/json.ts","kind":"import-statement","original":"./json"},{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"packages/common/util/src/map-values.ts","kind":"import-statement","original":"./map-values"},{"path":"packages/common/util/src/order.ts","kind":"import-statement","original":"./order"},{"path":"packages/common/util/src/pick.ts","kind":"import-statement","original":"./pick"},{"path":"packages/common/util/src/platform.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/util/src/random.ts","kind":"import-statement","original":"./random"},{"path":"packages/common/util/src/range.ts","kind":"import-statement","original":"./range"},{"path":"packages/common/util/src/reducers.ts","kind":"import-statement","original":"./reducers"},{"path":"packages/common/util/src/safe-await.ts","kind":"import-statement","original":"./safe-await"},{"path":"packages/common/util/src/safe-instanceof.ts","kind":"import-statement","original":"./safe-instanceof"},{"path":"packages/common/util/src/safe-parse-json.ts","kind":"import-statement","original":"./safe-parse-json"},{"path":"packages/common/util/src/sliding-window-summary.ts","kind":"import-statement","original":"./sliding-window-summary"},{"path":"packages/common/util/src/sort.ts","kind":"import-statement","original":"./sort"},{"path":"packages/common/util/src/sum.ts","kind":"import-statement","original":"./sum"},{"path":"packages/common/util/src/throw-unhandled-error.ts","kind":"import-statement","original":"./throw-unhandled-error"},{"path":"packages/common/util/src/to-fallback.ts","kind":"import-statement","original":"./to-fallback"},{"path":"packages/common/util/src/tracer.ts","kind":"import-statement","original":"./tracer"},{"path":"packages/common/util/src/tree.ts","kind":"import-statement","original":"./tree"},{"path":"packages/common/util/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"},{"path":"packages/common/util/src/weak.ts","kind":"import-statement","original":"./weak"},{"path":"packages/common/util/src/sliding-window-summary.ts","kind":"import-statement","original":"./sliding-window-summary"},{"path":"packages/common/util/src/chunk-array.ts","kind":"import-statement","original":"./chunk-array"},{"path":"packages/common/util/src/array-to-hex.ts","kind":"import-statement","original":"./array-to-hex"},{"path":"packages/common/util/src/remove-undefined-keys.ts","kind":"import-statement","original":"./remove-undefined-keys"},{"path":"packages/common/util/src/order-keys.ts","kind":"import-statement","original":"./order-keys"}],"format":"esm"}},"outputs":{"packages/common/util/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":116608},"packages/common/util/dist/lib/node-esm/index.mjs":{"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["BitField","Callback","CallbackCollection","CircularBuffer","ComplexMap","ComplexSet","HumanHasher","MapEntry","SlidingWindowSummary","Tracer","WeakDictionary","accessBy","arrayMove","arrayToBuffer","arrayToHex","arrayToString","arraysEqual","boolGuard","bufferToArray","chunkArray","compareMulti","compareObject","compareScalar","compareString","createBinder","createBucketReducer","createGroupReducer","createSetDispatch","decamelize","deepMapValues","deepMapValuesAsync","defaultMap","defer","deferAsync","deferFunction","diff","distinctBy","doAsync","entry","exponentialBackoffInterval","forEachAsync","getAsyncProviderValue","getDate","getDebugName","getDeep","getHostPlatform","getPrototypeSpecificInstanceId","getProviderValue","hexToEmoji","hexToFallback","hexToHue","humanize","hyphenize","idEmoji","idHue","inferObjectOrder","inferRecordOrder","intersection","iosCheck","isNode","isNotFalsy","isNotNullOrUndefined","joinTables","jsonKeyReplacer","jsonReplacer","jsonify","jsonlogify","keyToEmoji","keyToFallback","keyToHue","makeMap","makeSet","mapValues","median","mobileAndTabletCheck","nonNullable","numericalValues","omit","orderKeys","pick","pickBy","randomInt","range","rangeFromTo","reduceGroupBy","reduceSeries","reduceSet","removeUndefinedProperties","safariCheck","safeAwaitAll","safeInstanceof","safeParseInt","safeParseJson","setDeep","sortKeys","stringToArray","stringifyTree","stripUndefinedValues","sum","throwUnhandledError","toEmoji","toFallback","toHue","tracer"],"entryPoint":"packages/common/util/src/index.ts","inputs":{"packages/common/util/src/array.ts":{"bytesInOutput":804},"packages/common/util/src/index.ts":{"bytesInOutput":0},"packages/common/util/src/binder.ts":{"bytesInOutput":139},"packages/common/util/src/bitfield.ts":{"bytesInOutput":1894},"packages/common/util/src/callback.ts":{"bytesInOutput":1113},"packages/common/util/src/callback-collection.ts":{"bytesInOutput":558},"packages/common/util/src/case.ts":{"bytesInOutput":940},"packages/common/util/src/chunk-array.ts":{"bytesInOutput":173},"packages/common/util/src/circular-buffer.ts":{"bytesInOutput":1539},"packages/common/util/src/complex.ts":{"bytesInOutput":4413},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytesInOutput":100},"packages/common/util/src/defer.ts":{"bytesInOutput":546},"packages/common/util/src/defer-function.ts":{"bytesInOutput":72},"packages/common/util/src/deep.ts":{"bytesInOutput":634},"packages/common/util/src/entry.ts":{"bytesInOutput":471},"packages/common/util/src/for-each-async.ts":{"bytesInOutput":62},"packages/common/util/src/human-hash.ts":{"bytesInOutput":5662},"packages/common/util/src/interval.ts":{"bytesInOutput":290},"packages/common/util/src/map.ts":{"bytesInOutput":193},"packages/common/util/src/instance-id.ts":{"bytesInOutput":771},"packages/common/util/src/join-tables.ts":{"bytesInOutput":493},"packages/common/util/src/json.ts":{"bytesInOutput":2946},"packages/common/util/src/uint8array.ts":{"bytesInOutput":562},"packages/common/util/src/map-values.ts":{"bytesInOutput":2298},"packages/common/util/src/order.ts":{"bytesInOutput":676},"packages/common/util/src/pick.ts":{"bytesInOutput":478},"packages/common/util/src/platform.ts":{"bytesInOutput":3211},"packages/common/util/src/random.ts":{"bytesInOutput":148},"packages/common/util/src/range.ts":{"bytesInOutput":283},"packages/common/util/src/reducers.ts":{"bytesInOutput":2326},"packages/common/util/src/safe-await.ts":{"bytesInOutput":345},"packages/common/util/src/safe-instanceof.ts":{"bytesInOutput":371},"packages/common/util/src/safe-parse-json.ts":{"bytesInOutput":157},"packages/common/util/src/sliding-window-summary.ts":{"bytesInOutput":1802},"packages/common/util/src/sort.ts":{"bytesInOutput":643},"packages/common/util/src/sum.ts":{"bytesInOutput":57},"packages/common/util/src/throw-unhandled-error.ts":{"bytesInOutput":90},"packages/common/util/src/to-fallback.ts":{"bytesInOutput":4082},"packages/common/util/src/tracer.ts":{"bytesInOutput":1426},"packages/common/util/src/tree.ts":{"bytesInOutput":1193},"packages/common/util/src/types.ts":{"bytesInOutput":1217},"packages/common/util/src/weak.ts":{"bytesInOutput":2069},"packages/common/util/src/array-to-hex.ts":{"bytesInOutput":341},"packages/common/util/src/remove-undefined-keys.ts":{"bytesInOutput":255},"packages/common/util/src/order-keys.ts":{"bytesInOutput":266}},"bytes":51759}}}
1
+ {"inputs":{"packages/common/util/src/array.ts":{"bytes":8585,"imports":[],"format":"esm"},"packages/common/util/src/binder.ts":{"bytes":1363,"imports":[{"path":"node:util","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/bitfield.ts":{"bytes":8574,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/callback.ts":{"bytes":5305,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/callback-collection.ts":{"bytes":3247,"imports":[],"format":"esm"},"packages/common/util/src/case.ts":{"bytes":4663,"imports":[],"format":"esm"},"packages/common/util/src/chunk-array.ts":{"bytes":1248,"imports":[],"format":"esm"},"packages/common/util/src/circular-buffer.ts":{"bytes":6398,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/complex.ts":{"bytes":22029,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytes":1482,"imports":[]},"packages/common/util/src/defer.ts":{"bytes":3771,"imports":[{"path":"packages/common/util/src/explicit-resource-management-polyfill.ts","kind":"import-statement","original":"./explicit-resource-management-polyfill"}],"format":"esm"},"packages/common/util/src/defer-function.ts":{"bytes":1619,"imports":[],"format":"esm"},"packages/common/util/src/deep.ts":{"bytes":3589,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/disposition.ts":{"bytes":2546,"imports":[],"format":"esm"},"packages/common/util/src/entry.ts":{"bytes":3103,"imports":[],"format":"esm"},"packages/common/util/src/for-each-async.ts":{"bytes":826,"imports":[],"format":"esm"},"packages/common/util/src/human-hash.ts":{"bytes":20242,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/interval.ts":{"bytes":1876,"imports":[],"format":"esm"},"packages/common/util/src/map.ts":{"bytes":1546,"imports":[],"format":"esm"},"packages/common/util/src/instance-id.ts":{"bytes":4335,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/join-tables.ts":{"bytes":3140,"imports":[],"format":"esm"},"packages/common/util/src/uint8array.ts":{"bytes":3822,"imports":[],"format":"esm"},"packages/common/util/src/json.ts":{"bytes":13862,"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"}],"format":"esm"},"packages/common/util/src/map-values.ts":{"bytes":11880,"imports":[],"format":"esm"},"packages/common/util/src/order.ts":{"bytes":5060,"imports":[],"format":"esm"},"packages/common/util/src/pick.ts":{"bytes":3737,"imports":[],"format":"esm"},"packages/common/util/src/platform.ts":{"bytes":11348,"imports":[],"format":"esm"},"packages/common/util/src/random.ts":{"bytes":1356,"imports":[],"format":"esm"},"packages/common/util/src/range.ts":{"bytes":2016,"imports":[],"format":"esm"},"packages/common/util/src/reducers.ts":{"bytes":12989,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/safe-await.ts":{"bytes":2916,"imports":[],"format":"esm"},"packages/common/util/src/safe-instanceof.ts":{"bytes":2749,"imports":[],"format":"esm"},"packages/common/util/src/safe-parse.ts":{"bytes":2763,"imports":[],"format":"esm"},"packages/common/util/src/sliding-window-summary.ts":{"bytes":7614,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/common/util/src/circular-buffer.ts","kind":"import-statement","original":"./circular-buffer"}],"format":"esm"},"packages/common/util/src/sort.ts":{"bytes":4004,"imports":[],"format":"esm"},"packages/common/util/src/sum.ts":{"bytes":720,"imports":[],"format":"esm"},"packages/common/util/src/throw-unhandled-error.ts":{"bytes":1216,"imports":[],"format":"esm"},"packages/common/util/src/to-fallback.ts":{"bytes":12288,"imports":[],"format":"esm"},"packages/common/util/src/tracer.ts":{"bytes":7302,"imports":[{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"}],"format":"esm"},"packages/common/util/src/tree.ts":{"bytes":6355,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/common/util/src/types.ts":{"bytes":9762,"imports":[],"format":"esm"},"packages/common/util/src/weak.ts":{"bytes":9764,"imports":[],"format":"esm"},"packages/common/util/src/array-to-hex.ts":{"bytes":2522,"imports":[],"format":"esm"},"packages/common/util/src/remove-undefined-keys.ts":{"bytes":1594,"imports":[],"format":"esm"},"packages/common/util/src/order-keys.ts":{"bytes":1659,"imports":[],"format":"esm"},"packages/common/util/src/no-infer.ts":{"bytes":515,"imports":[],"format":"esm"},"packages/common/util/src/index.ts":{"bytes":4790,"imports":[{"path":"packages/common/util/src/array.ts","kind":"import-statement","original":"./array"},{"path":"packages/common/util/src/binder.ts","kind":"import-statement","original":"./binder"},{"path":"packages/common/util/src/bitfield.ts","kind":"import-statement","original":"./bitfield"},{"path":"packages/common/util/src/callback.ts","kind":"import-statement","original":"./callback"},{"path":"packages/common/util/src/callback-collection.ts","kind":"import-statement","original":"./callback-collection"},{"path":"packages/common/util/src/case.ts","kind":"import-statement","original":"./case"},{"path":"packages/common/util/src/chunk-array.ts","kind":"import-statement","original":"./chunk-array"},{"path":"packages/common/util/src/circular-buffer.ts","kind":"import-statement","original":"./circular-buffer"},{"path":"packages/common/util/src/complex.ts","kind":"import-statement","original":"./complex"},{"path":"packages/common/util/src/defer.ts","kind":"import-statement","original":"./defer"},{"path":"packages/common/util/src/defer-function.ts","kind":"import-statement","original":"./defer-function"},{"path":"packages/common/util/src/deep.ts","kind":"import-statement","original":"./deep"},{"path":"packages/common/util/src/disposition.ts","kind":"import-statement","original":"./disposition"},{"path":"packages/common/util/src/entry.ts","kind":"import-statement","original":"./entry"},{"path":"packages/common/util/src/for-each-async.ts","kind":"import-statement","original":"./for-each-async"},{"path":"packages/common/util/src/human-hash.ts","kind":"import-statement","original":"./human-hash"},{"path":"packages/common/util/src/interval.ts","kind":"import-statement","original":"./interval"},{"path":"packages/common/util/src/instance-id.ts","kind":"import-statement","original":"./instance-id"},{"path":"packages/common/util/src/join-tables.ts","kind":"import-statement","original":"./join-tables"},{"path":"packages/common/util/src/json.ts","kind":"import-statement","original":"./json"},{"path":"packages/common/util/src/map.ts","kind":"import-statement","original":"./map"},{"path":"packages/common/util/src/map-values.ts","kind":"import-statement","original":"./map-values"},{"path":"packages/common/util/src/order.ts","kind":"import-statement","original":"./order"},{"path":"packages/common/util/src/pick.ts","kind":"import-statement","original":"./pick"},{"path":"packages/common/util/src/platform.ts","kind":"import-statement","original":"./platform"},{"path":"packages/common/util/src/random.ts","kind":"import-statement","original":"./random"},{"path":"packages/common/util/src/range.ts","kind":"import-statement","original":"./range"},{"path":"packages/common/util/src/reducers.ts","kind":"import-statement","original":"./reducers"},{"path":"packages/common/util/src/safe-await.ts","kind":"import-statement","original":"./safe-await"},{"path":"packages/common/util/src/safe-instanceof.ts","kind":"import-statement","original":"./safe-instanceof"},{"path":"packages/common/util/src/safe-parse.ts","kind":"import-statement","original":"./safe-parse"},{"path":"packages/common/util/src/sliding-window-summary.ts","kind":"import-statement","original":"./sliding-window-summary"},{"path":"packages/common/util/src/sort.ts","kind":"import-statement","original":"./sort"},{"path":"packages/common/util/src/sum.ts","kind":"import-statement","original":"./sum"},{"path":"packages/common/util/src/throw-unhandled-error.ts","kind":"import-statement","original":"./throw-unhandled-error"},{"path":"packages/common/util/src/to-fallback.ts","kind":"import-statement","original":"./to-fallback"},{"path":"packages/common/util/src/tracer.ts","kind":"import-statement","original":"./tracer"},{"path":"packages/common/util/src/tree.ts","kind":"import-statement","original":"./tree"},{"path":"packages/common/util/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/common/util/src/uint8array.ts","kind":"import-statement","original":"./uint8array"},{"path":"packages/common/util/src/weak.ts","kind":"import-statement","original":"./weak"},{"path":"packages/common/util/src/sliding-window-summary.ts","kind":"import-statement","original":"./sliding-window-summary"},{"path":"packages/common/util/src/chunk-array.ts","kind":"import-statement","original":"./chunk-array"},{"path":"packages/common/util/src/array-to-hex.ts","kind":"import-statement","original":"./array-to-hex"},{"path":"packages/common/util/src/remove-undefined-keys.ts","kind":"import-statement","original":"./remove-undefined-keys"},{"path":"packages/common/util/src/order-keys.ts","kind":"import-statement","original":"./order-keys"},{"path":"packages/common/util/src/no-infer.ts","kind":"import-statement","original":"./no-infer"}],"format":"esm"}},"outputs":{"packages/common/util/dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":120366},"packages/common/util/dist/lib/node-esm/index.mjs":{"imports":[{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["BitField","Callback","CallbackCollection","CircularBuffer","ComplexMap","ComplexSet","HumanHasher","MapEntry","SlidingWindowSummary","Tracer","WeakDictionary","accessBy","arrayMove","arrayToBuffer","arrayToHex","arrayToString","arraysEqual","bufferToArray","byDisposition","chunkArray","compareMulti","compareObject","compareScalar","compareString","createBinder","createBucketReducer","createGroupReducer","createSetDispatch","decamelize","deepMapValues","deepMapValuesAsync","defaultMap","defer","deferAsync","deferFunction","diff","distinctBy","doAsync","entry","exponentialBackoffInterval","forEachAsync","getAsyncProviderValue","getDate","getDebugName","getDeep","getHostPlatform","getPrototypeSpecificInstanceId","getProviderValue","hexToEmoji","hexToFallback","hexToHue","humanize","hyphenize","idEmoji","idHue","inferObjectOrder","inferRecordOrder","intersection","iosCheck","isNode","isNotFalsy","isNotNullOrUndefined","joinTables","jsonKeyReplacer","jsonReplacer","jsonify","jsonlogify","keyToEmoji","keyToFallback","keyToHue","makeMap","makeSet","mapValues","median","mobileAndTabletCheck","nonNullable","numericalValues","omit","orderKeys","partition","pick","pickBy","randomInt","range","rangeFromTo","reduceGroupBy","reduceSeries","reduceSet","removeBy","removeUndefinedProperties","safariCheck","safeAwaitAll","safeInstanceof","safeParseFloat","safeParseInt","safeParseJson","setDeep","sortKeys","stringToArray","stringifyTree","stripUndefined","sum","throwUnhandledError","toEmoji","toFallback","toHue","tracer"],"entryPoint":"packages/common/util/src/index.ts","inputs":{"packages/common/util/src/array.ts":{"bytesInOutput":1298},"packages/common/util/src/index.ts":{"bytesInOutput":0},"packages/common/util/src/binder.ts":{"bytesInOutput":139},"packages/common/util/src/bitfield.ts":{"bytesInOutput":1894},"packages/common/util/src/callback.ts":{"bytesInOutput":1113},"packages/common/util/src/callback-collection.ts":{"bytesInOutput":558},"packages/common/util/src/case.ts":{"bytesInOutput":940},"packages/common/util/src/chunk-array.ts":{"bytesInOutput":173},"packages/common/util/src/circular-buffer.ts":{"bytesInOutput":1539},"packages/common/util/src/complex.ts":{"bytesInOutput":4413},"packages/common/util/src/explicit-resource-management-polyfill.ts":{"bytesInOutput":100},"packages/common/util/src/defer.ts":{"bytesInOutput":546},"packages/common/util/src/defer-function.ts":{"bytesInOutput":72},"packages/common/util/src/deep.ts":{"bytesInOutput":726},"packages/common/util/src/disposition.ts":{"bytesInOutput":377},"packages/common/util/src/entry.ts":{"bytesInOutput":471},"packages/common/util/src/for-each-async.ts":{"bytesInOutput":62},"packages/common/util/src/human-hash.ts":{"bytesInOutput":5662},"packages/common/util/src/interval.ts":{"bytesInOutput":290},"packages/common/util/src/map.ts":{"bytesInOutput":193},"packages/common/util/src/instance-id.ts":{"bytesInOutput":784},"packages/common/util/src/join-tables.ts":{"bytesInOutput":493},"packages/common/util/src/json.ts":{"bytesInOutput":2946},"packages/common/util/src/uint8array.ts":{"bytesInOutput":562},"packages/common/util/src/map-values.ts":{"bytesInOutput":2298},"packages/common/util/src/order.ts":{"bytesInOutput":676},"packages/common/util/src/pick.ts":{"bytesInOutput":478},"packages/common/util/src/platform.ts":{"bytesInOutput":3211},"packages/common/util/src/random.ts":{"bytesInOutput":148},"packages/common/util/src/range.ts":{"bytesInOutput":283},"packages/common/util/src/reducers.ts":{"bytesInOutput":2326},"packages/common/util/src/safe-await.ts":{"bytesInOutput":345},"packages/common/util/src/safe-instanceof.ts":{"bytesInOutput":371},"packages/common/util/src/safe-parse.ts":{"bytesInOutput":469},"packages/common/util/src/sliding-window-summary.ts":{"bytesInOutput":1802},"packages/common/util/src/sort.ts":{"bytesInOutput":643},"packages/common/util/src/sum.ts":{"bytesInOutput":57},"packages/common/util/src/throw-unhandled-error.ts":{"bytesInOutput":90},"packages/common/util/src/to-fallback.ts":{"bytesInOutput":4082},"packages/common/util/src/tracer.ts":{"bytesInOutput":1426},"packages/common/util/src/tree.ts":{"bytesInOutput":1193},"packages/common/util/src/types.ts":{"bytesInOutput":981},"packages/common/util/src/weak.ts":{"bytesInOutput":2069},"packages/common/util/src/array-to-hex.ts":{"bytesInOutput":341},"packages/common/util/src/remove-undefined-keys.ts":{"bytesInOutput":255},"packages/common/util/src/order-keys.ts":{"bytesInOutput":266}},"bytes":52891}}}
@@ -1,2 +1,2 @@
1
- export declare const arrayToHex: (buf: ArrayBuffer) => string;
1
+ export declare const arrayToHex: (buf: ArrayBufferLike) => string;
2
2
  //# sourceMappingURL=array-to-hex.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"array-to-hex.d.ts","sourceRoot":"","sources":["../../../src/array-to-hex.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,UAAU,QAAS,WAAW,WAS1C,CAAC"}
1
+ {"version":3,"file":"array-to-hex.d.ts","sourceRoot":"","sources":["../../../src/array-to-hex.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,UAAU,QAAS,eAAe,WAS9C,CAAC"}
@@ -22,4 +22,16 @@ export declare const intersection: <A, B = A>(a: A[], b: B[], comparator: Compar
22
22
  * @returns A new array with only distinct items based on the specified property.
23
23
  */
24
24
  export declare const distinctBy: <T, K>(array: T[], selector: (item: T) => K) => T[];
25
+ /**
26
+ * Remove elements from array.
27
+ * @param array
28
+ * @param test
29
+ * @returns removed elements.
30
+ */
31
+ export declare const removeBy: <T>(array: T[], test: (element: T, index: number) => boolean) => T[];
32
+ /**
33
+ * Splits an array based on a type guard predicate function.
34
+ * Infers the output tuple types from the guard function.
35
+ */
36
+ export declare const partition: <T>(array: T[], guard: (item: T, index: number, array: T[]) => boolean) => [T[], T[]];
25
37
  //# sourceMappingURL=array.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/array.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAE3D,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI;IACjC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,CAAC,EAAE,CAAC;CACd,CAAC;AAEF;;;;;GAKG;AAEH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,gBACb,SAAS,CAAC,EAAE,QAChB,SAAS,CAAC,EAAE,cACN,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAC3B,UAAU,CAAC,CAAC,EAAE,CAAC,CAoBjB,CAAC;AAGF,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,cAAc,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,EACvB,CAAC;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAG,CAAC,EAYxE,CAAC"}
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../../src/array.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC;AAE3D,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI;IACjC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,OAAO,EAAE,CAAC,EAAE,CAAC;CACd,CAAC;AAEF;;;;;GAKG;AAEH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,gBACb,SAAS,CAAC,EAAE,QAChB,SAAS,CAAC,EAAE,cACN,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAC3B,UAAU,CAAC,CAAC,EAAE,CAAC,CAoBjB,CAAC;AAGF,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,EAAE,cAAc,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,EACvB,CAAC;AAEjE;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAG,CAAC,EAYxE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,KAAG,CAAC,EASvF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,KAAG,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAM1G,CAAC"}
@@ -16,7 +16,7 @@ export declare class BitField {
16
16
  */
17
17
  static count(data: Uint8Array, begin: number, end: number): number;
18
18
  static invert(data: Uint8Array): Uint8Array;
19
- static and(first: Uint8Array, second: Uint8Array): Uint8Array;
19
+ static and(first: Uint8Array, second: Uint8Array): Uint8Array<ArrayBuffer>;
20
20
  static findIndexes(data: Uint8Array, opts?: {
21
21
  start?: number;
22
22
  end?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"deep.d.ts","sourceRoot":"","sources":["../../../src/deep.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,OAAO,GAAG,QAAQ,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,SAAS,CAAC,KAAG,CAWnF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,OAAO,GAAG,QAAQ,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAG,CAAC,GAAG,SAO7E,CAAC"}
1
+ {"version":3,"file":"deep.d.ts","sourceRoot":"","sources":["../../../src/deep.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,OAAO,GAAG,QAAQ,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,SAAS,CAAC,KAAG,CAanF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,OAAO,GAAG,QAAQ,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAG,CAAC,GAAG,SAO7E,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Determines priority order.
3
+ *
4
+ * - `static` - Remain in natural order.
5
+ * - `hoist` - Placed before `static`.
6
+ * - `fallback` - Placed after `static`.
7
+ */
8
+ export type Disposition = 'static' | 'hoist' | 'fallback';
9
+ /**
10
+ * Sorting function for sorting by disposition.
11
+ */
12
+ export declare const byDisposition: <T extends {
13
+ disposition?: Disposition;
14
+ }>(a: T, b: T) => 0 | 1 | -1;
15
+ //# sourceMappingURL=disposition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition.d.ts","sourceRoot":"","sources":["../../../src/disposition.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS;IAAE,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,KAAK,CAAC,KAAK,CAAC,eAahF,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=disposition.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disposition.test.d.ts","sourceRoot":"","sources":["../../../src/disposition.test.ts"],"names":[],"mappings":""}
@@ -10,6 +10,7 @@ export * from './complex';
10
10
  export * from './defer';
11
11
  export * from './defer-function';
12
12
  export * from './deep';
13
+ export * from './disposition';
13
14
  export * from './entry';
14
15
  export * from './for-each-async';
15
16
  export * from './human-hash';
@@ -27,7 +28,7 @@ export * from './range';
27
28
  export * from './reducers';
28
29
  export * from './safe-await';
29
30
  export * from './safe-instanceof';
30
- export * from './safe-parse-json';
31
+ export * from './safe-parse';
31
32
  export * from './sliding-window-summary';
32
33
  export * from './sort';
33
34
  export * from './sum';
@@ -43,4 +44,5 @@ export * from './chunk-array';
43
44
  export * from './array-to-hex';
44
45
  export * from './remove-undefined-keys';
45
46
  export * from './order-keys';
47
+ export * from './no-infer';
46
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,0BAA0B,CAAC;AACzC,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,uBAAuB,CAAC;AACtC,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,QAAQ,CAAC;AACvB,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type NoInfer<A> = [A][A extends any ? 0 : never];
2
+ //# sourceMappingURL=no-infer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-infer.d.ts","sourceRoot":"","sources":["../../../src/no-infer.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const safeParseInt: (value: string | undefined, defaultValue?: number) => number | undefined;
2
+ export declare const safeParseFloat: (str: string, defaultValue?: number) => number | undefined;
3
+ export declare const safeParseJson: {
4
+ <T extends object>(data: string | undefined | null, defaultValue: T): T;
5
+ <T extends object>(data: string | undefined | null): T | undefined;
6
+ };
7
+ //# sourceMappingURL=safe-parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-parse.d.ts","sourceRoot":"","sources":["../../../src/safe-parse.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,YAAY,UAAW,MAAM,GAAG,SAAS,iBAAiB,MAAM,uBAO5E,CAAC;AAEF,eAAO,MAAM,cAAc,QAAS,MAAM,iBAAiB,MAAM,KAAG,MAAM,GAAG,SAM5E,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE;IAC1B,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;IACxE,CAAC,CAAC,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC;CAQpE,CAAC"}
@@ -2,7 +2,27 @@ export type AsyncCallback<T> = (param: T) => Promise<void>;
2
2
  export type Provider<T, V = void> = (arg: V) => T;
3
3
  export type MaybeProvider<T, V = void> = T | ((arg: V) => T);
4
4
  export type MaybePromise<T> = T | Promise<T>;
5
- export type MakeOptional<Type, Key extends keyof Type> = Omit<Type, Key> & Partial<Pick<Type, Key>>;
5
+ export type GuardedType<T> = T extends (value: any) => value is infer R ? R : never;
6
+ export type DeepReadonly<T> = {
7
+ readonly [P in keyof T]: T[P] extends Record<string, any> ? DeepReadonly<T[P]> : T[P] extends Array<infer U> ? ReadonlyArray<DeepReadonly<U>> : T[P];
8
+ };
9
+ export type DeepWriteable<T> = {
10
+ -readonly [K in keyof T]: T[K] extends object ? DeepWriteable<T[K]> : T[K];
11
+ };
12
+ /**
13
+ * Simplifies type (copied from effect).
14
+ */
15
+ export type Simplify<A> = {
16
+ [K in keyof A]: A[K];
17
+ } extends infer B ? B : never;
18
+ /**
19
+ * Replace types of specified keys.
20
+ */
21
+ export type Specialize<T, U> = Simplify<Omit<T, keyof U> & U>;
22
+ /**
23
+ * Make specified keys optional.
24
+ */
25
+ export type MakeOptional<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
6
26
  /**
7
27
  * All types that evaluate to false when cast to a boolean.
8
28
  */
@@ -15,7 +35,6 @@ export type Falsy = false | 0 | '' | null | undefined;
15
35
  export declare const isNotFalsy: <T>(value: T) => value is Exclude<T, Falsy>;
16
36
  export declare const nonNullable: <T>(value: T) => value is NonNullable<T>;
17
37
  export declare const isNotNullOrUndefined: <T>(value: T) => value is Exclude<T, null | undefined>;
18
- export declare const boolGuard: <T>(value: T | null | undefined) => value is T;
19
38
  export declare const doAsync: (fn: () => Promise<void>) => Promise<void>;
20
39
  /**
21
40
  * Get value from a provider.
@@ -28,7 +47,7 @@ export declare const getAsyncProviderValue: <T, V = void>(provider: MaybeProvide
28
47
  /**
29
48
  * Remove keys with undefined values.
30
49
  */
31
- export declare const stripUndefinedValues: <T extends {
50
+ export declare const stripUndefined: <T extends {
32
51
  [index: string]: any;
33
52
  }>(obj: T) => T;
34
53
  /**
@@ -39,5 +58,4 @@ export declare const sortKeys: <T extends object>(obj: T) => T;
39
58
  * Swap position of element within array.
40
59
  */
41
60
  export declare const arrayMove: <T>(array: T[], from: number, to: number) => Array<T>;
42
- export declare const safeParseInt: (value: string | undefined, defaultValue?: number) => number | undefined;
43
61
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3D,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAElD,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAE7D,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C,MAAM,MAAM,YAAY,CAAC,IAAI,EAAE,GAAG,SAAS,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAEpG;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAEtD;;;;GAIG;AAEH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,CAAC,KAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,CAAY,CAAC;AAC/E,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,CAAC,KAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAA0C,CAAC;AAC3G,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,CAAC,KAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAkB,CAAC;AAE1G,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,KAAG,KAAK,IAAI,CAAmB,CAAC;AAMxF,eAAO,MAAM,OAAO,OAAc,MAAM,OAAO,CAAC,IAAI,CAAC,kBAAS,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,mBAAmB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAG,CAEtF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,CAAC,mBAC9B,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QACrC,CAAC,KACN,YAAY,CAAC,CAAC,CAEhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,OAAO,CAAC,KAAG,CAajF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,OAAO,CAAC,KAAG,CAMrC,CAAC;AAEhB;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,MAAM,MAAM,MAAM,KAAG,KAAK,CAAC,CAAC,CAG1E,CAAC;AAEF,eAAO,MAAM,YAAY,UAAW,MAAM,GAAG,SAAS,iBAAiB,MAAM,uBAO5E,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAE3D,MAAM,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAElD,MAAM,MAAM,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAE7D,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAE7C,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEpF,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC5B,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACrD,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAClB,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,GACzB,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAC9B,CAAC,CAAC,CAAC,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI;IAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAAC;AAE9G;;GAEG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,SAAS,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAE9D;;GAEG;AAGH,MAAM,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAElF;;GAEG;AACH,MAAM,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AAEtD;;;;GAIG;AAEH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,CAAC,KAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,CAAY,CAAC;AAC/E,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,CAAC,KAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAA0C,CAAC;AAC3G,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,CAAC,KAAG,KAAK,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,SAAS,CAAkB,CAAC;AAQ1G,eAAO,MAAM,OAAO,OAAc,MAAM,OAAO,CAAC,IAAI,CAAC,kBAAS,CAAC;AAE/D;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,mBAAmB,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAG,CAEtF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,EAAE,CAAC,mBAC9B,aAAa,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QACrC,CAAC,KACN,YAAY,CAAC,CAAC,CAEhB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,OAAO,CAAC,KAAG,CAa3E,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,MAAM,OAAO,CAAC,KAAG,CAMrC,CAAC;AAEhB;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,MAAM,MAAM,MAAM,KAAG,KAAK,CAAC,CAAC,CAG1E,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":"5.7.2"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/util",
3
- "version": "0.7.4",
3
+ "version": "0.7.5-feature-compute.4d9d99a",
4
4
  "description": "Temporary bucket for misc functions, which should graduate into separate packages.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -26,13 +26,13 @@
26
26
  "src"
27
27
  ],
28
28
  "dependencies": {
29
- "@dxos/debug": "0.7.4",
30
- "@dxos/invariant": "0.7.4",
31
- "@dxos/keys": "0.7.4",
32
- "@dxos/node-std": "0.7.4"
29
+ "@dxos/invariant": "0.7.5-feature-compute.4d9d99a",
30
+ "@dxos/debug": "0.7.5-feature-compute.4d9d99a",
31
+ "@dxos/keys": "0.7.5-feature-compute.4d9d99a",
32
+ "@dxos/node-std": "0.7.5-feature-compute.4d9d99a"
33
33
  },
34
34
  "devDependencies": {
35
- "@dxos/crypto": "0.7.4"
35
+ "@dxos/crypto": "0.7.5-feature-compute.4d9d99a"
36
36
  },
37
37
  "publishConfig": {
38
38
  "access": "public"
@@ -11,7 +11,7 @@ for (let n = 0; n <= 0xff; ++n) {
11
11
  byteToHex.push(hexOctet);
12
12
  }
13
13
 
14
- export const arrayToHex = (buf: ArrayBuffer) => {
14
+ export const arrayToHex = (buf: ArrayBufferLike) => {
15
15
  const buff = new Uint8Array(buf);
16
16
  const hexOctets = []; // new Array(buff.length) is even faster (preallocates necessary array size), then use hexOctets[i] instead of .push()
17
17
 
package/src/array.test.ts CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { describe, expect, test } from 'vitest';
6
6
 
7
- import { diff, intersection, distinctBy } from './array';
7
+ import { diff, intersection, distinctBy, partition } from './array';
8
8
 
9
9
  describe('diff', () => {
10
10
  test('returns the difference between two sets', () => {
@@ -96,3 +96,85 @@ describe('distinctBy', () => {
96
96
  }
97
97
  });
98
98
  });
99
+
100
+ describe('partition', () => {
101
+ test('should handle empty arrays', () => {
102
+ const input: number[] = [];
103
+ const isPositive = (n: number): n is number => n > 0;
104
+
105
+ const [positive, negative] = partition(input, isPositive);
106
+
107
+ expect(positive).toEqual([]);
108
+ expect(negative).toEqual([]);
109
+ });
110
+
111
+ test('should partition numbers by sign', () => {
112
+ const input = [-2, -1, 0, 1, 2];
113
+ const isPositive = (n: number): n is number => n > 0;
114
+
115
+ const [positive, negative] = partition(input, isPositive);
116
+
117
+ expect(positive).toEqual([1, 2]);
118
+ expect(negative).toEqual([-2, -1, 0]);
119
+ });
120
+
121
+ test('should maintain the original order within partitions', () => {
122
+ const input = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3];
123
+ const isEven = (n: number): n is number => n % 2 === 0;
124
+
125
+ const [evens, odds] = partition(input, isEven);
126
+
127
+ expect(evens).toEqual([4, 2, 6]);
128
+ expect(odds).toEqual([3, 1, 1, 5, 9, 5, 3]);
129
+ });
130
+
131
+ test('should handle nullable types', () => {
132
+ const input = ['hello', null, 'world', undefined, ''];
133
+ const isNonNullable = <T>(value: T | null | undefined): value is T => value != null;
134
+
135
+ const [nonNull, nullable] = partition(input, isNonNullable);
136
+
137
+ expect(nonNull).toEqual(['hello', 'world', '']);
138
+ expect(nullable).toEqual([null, undefined]);
139
+ });
140
+
141
+ test('should work with complex type guards', () => {
142
+ interface Success<T> {
143
+ status: 'success';
144
+ data: T;
145
+ }
146
+ interface Error {
147
+ status: 'error';
148
+ message: string;
149
+ }
150
+ type Result<T> = Success<T> | Error;
151
+
152
+ const results: Result<number>[] = [
153
+ { status: 'success', data: 42 },
154
+ { status: 'error', message: 'Invalid' },
155
+ { status: 'success', data: 123 },
156
+ ];
157
+
158
+ const isSuccess = <T>(result: Result<T>): result is Success<T> => result.status === 'success';
159
+
160
+ const [successes, errors] = partition(results, isSuccess);
161
+
162
+ expect(successes).toHaveLength(2);
163
+ expect(errors).toHaveLength(1);
164
+ expect(successes.every((s) => s.status === 'success')).toBe(true);
165
+ expect(errors.every((e) => e.status === 'error')).toBe(true);
166
+ });
167
+
168
+ test('should handle instance checks', () => {
169
+ const input = [new Date(), 'string', new Date(), 42];
170
+ const isDate = (value: unknown): value is Date => value instanceof Date;
171
+
172
+ const [dates, nonDates] = partition(input, isDate);
173
+
174
+ expect(dates).toHaveLength(2);
175
+ expect(nonDates).toHaveLength(2);
176
+ expect(dates.every((d) => d instanceof Date)).toBe(true);
177
+ expect(nonDates).toContain('string');
178
+ expect(nonDates).toContain(42);
179
+ });
180
+ });
package/src/array.ts CHANGED
@@ -69,3 +69,32 @@ export const distinctBy = <T, K>(array: T[], selector: (item: T) => K): T[] => {
69
69
  return true;
70
70
  });
71
71
  };
72
+
73
+ /**
74
+ * Remove elements from array.
75
+ * @param array
76
+ * @param test
77
+ * @returns removed elements.
78
+ */
79
+ export const removeBy = <T>(array: T[], test: (element: T, index: number) => boolean): T[] => {
80
+ const removed: T[] = [];
81
+ for (let i = array.length - 1; i >= 0; i--) {
82
+ if (test(array[i], i)) {
83
+ removed.push(...array.splice(i, 1));
84
+ }
85
+ }
86
+
87
+ return removed;
88
+ };
89
+
90
+ /**
91
+ * Splits an array based on a type guard predicate function.
92
+ * Infers the output tuple types from the guard function.
93
+ */
94
+ export const partition = <T>(array: T[], guard: (item: T, index: number, array: T[]) => boolean): [T[], T[]] => {
95
+ return array.reduce<[T[], T[]]>(
96
+ ([accepted, rejected], item, index, array) =>
97
+ guard(item, index, array) ? [[...accepted, item], rejected] : [accepted, [...rejected, item]],
98
+ [[], []],
99
+ );
100
+ };
package/src/deep.ts CHANGED
@@ -12,13 +12,15 @@ export const setDeep = <T>(obj: any, path: readonly (string | number)[], value:
12
12
  invariant(path.length > 0);
13
13
  let parent = obj;
14
14
  for (const key of path.slice(0, -1)) {
15
- parent[key] ??= {};
15
+ if (parent[key] === undefined) {
16
+ const isArrayIndex = !isNaN(Number(key));
17
+ parent[key] = isArrayIndex ? [] : {};
18
+ }
16
19
  parent = parent[key];
17
20
  }
18
21
 
19
22
  parent[path.at(-1)!] = value;
20
- // NOTE: We can't just return value here since doc's getter might return a different object.
21
- return parent[path.at(-1)!];
23
+ return obj;
22
24
  };
23
25
 
24
26
  /**
@@ -0,0 +1,98 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, it, expect } from 'vitest';
6
+
7
+ import { byDisposition, type Disposition } from './disposition';
8
+
9
+ type TestItem = {
10
+ id: number;
11
+ disposition?: Disposition;
12
+ };
13
+
14
+ describe('byDisposition', () => {
15
+ it('should keep items with same disposition in their original order', () => {
16
+ const items: TestItem[] = [
17
+ { id: 1, disposition: 'static' },
18
+ { id: 2, disposition: 'static' },
19
+ { id: 3, disposition: 'hoist' },
20
+ { id: 4, disposition: 'hoist' },
21
+ { id: 5, disposition: 'fallback' },
22
+ { id: 6, disposition: 'fallback' },
23
+ ];
24
+
25
+ const sorted = [...items].sort(byDisposition);
26
+
27
+ // Check that items with the same disposition maintain relative order
28
+ expect(sorted.findIndex((item) => item.id === 3)).toBeLessThan(sorted.findIndex((item) => item.id === 4));
29
+ expect(sorted.findIndex((item) => item.id === 1)).toBeLessThan(sorted.findIndex((item) => item.id === 2));
30
+ expect(sorted.findIndex((item) => item.id === 5)).toBeLessThan(sorted.findIndex((item) => item.id === 6));
31
+ });
32
+
33
+ it('should place "hoist" items before "static" items', () => {
34
+ const items: TestItem[] = [
35
+ { id: 1, disposition: 'static' },
36
+ { id: 2, disposition: 'hoist' },
37
+ ];
38
+
39
+ const sorted = [...items].sort(byDisposition);
40
+ expect(sorted[0].disposition).toBe('hoist');
41
+ expect(sorted[1].disposition).toBe('static');
42
+ });
43
+
44
+ it('should place "fallback" items after "static" items', () => {
45
+ const items: TestItem[] = [
46
+ { id: 1, disposition: 'fallback' },
47
+ { id: 2, disposition: 'static' },
48
+ ];
49
+
50
+ const sorted = [...items].sort(byDisposition);
51
+ expect(sorted[0].disposition).toBe('static');
52
+ expect(sorted[1].disposition).toBe('fallback');
53
+ });
54
+
55
+ it('should treat items without disposition as "static"', () => {
56
+ const items: TestItem[] = [{ id: 1 }, { id: 2, disposition: 'hoist' }, { id: 3, disposition: 'fallback' }];
57
+
58
+ const sorted = [...items].sort(byDisposition);
59
+ expect(sorted[0].disposition).toBe('hoist');
60
+ expect(sorted[1].disposition).toBeUndefined();
61
+ expect(sorted[2].disposition).toBe('fallback');
62
+ });
63
+
64
+ it('should correctly sort mixed dispositions', () => {
65
+ const items: TestItem[] = [
66
+ { id: 1, disposition: 'fallback' },
67
+ { id: 2, disposition: 'static' },
68
+ { id: 3, disposition: 'hoist' },
69
+ { id: 4 }, // implicit static
70
+ { id: 5, disposition: 'hoist' },
71
+ { id: 6, disposition: 'fallback' },
72
+ ];
73
+
74
+ const sorted = [...items].sort(byDisposition);
75
+
76
+ // All hoisted items should come first
77
+ expect(sorted[0].disposition).toBe('hoist');
78
+ expect(sorted[1].disposition).toBe('hoist');
79
+
80
+ // Static items (including undefined) should be in the middle
81
+ expect(sorted[2].disposition).toBe('static');
82
+ expect(sorted[3].disposition).toBeUndefined();
83
+
84
+ // Fallback items should be last
85
+ expect(sorted[4].disposition).toBe('fallback');
86
+ expect(sorted[5].disposition).toBe('fallback');
87
+ });
88
+
89
+ it('should handle empty arrays', () => {
90
+ const items: TestItem[] = [];
91
+ expect(() => [...items].sort(byDisposition)).not.toThrow();
92
+ });
93
+
94
+ it('should handle single item arrays', () => {
95
+ const items: TestItem[] = [{ id: 1, disposition: 'static' }];
96
+ expect(() => [...items].sort(byDisposition)).not.toThrow();
97
+ });
98
+ });