@synnaxlabs/x 0.16.1 → 0.24.0
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.
- package/.turbo/turbo-build.log +99 -7
- package/.vscode/settings.json +5 -1
- package/dist/base-B48bPNx5.cjs +1 -0
- package/dist/base-DnZzEvvz.js +38 -0
- package/dist/binary.cjs +3 -0
- package/dist/binary.js +100 -0
- package/dist/bounds-Bh_QBZZK.cjs +1 -0
- package/dist/bounds-Dmn-hd_-.js +129 -0
- package/dist/bounds.cjs +1 -0
- package/dist/bounds.js +4 -0
- package/dist/box-C92jYSNY.js +205 -0
- package/dist/box-m3dlc1kR.cjs +1 -0
- package/dist/box.cjs +1 -0
- package/dist/box.js +4 -0
- package/dist/caseconv.cjs +1 -0
- package/dist/caseconv.js +4 -0
- package/dist/change-C-YELKx6.cjs +1 -0
- package/dist/change-DLl6DccR.js +12 -0
- package/dist/change.cjs +1 -0
- package/dist/change.js +4 -0
- package/dist/compare.cjs +1 -0
- package/dist/compare.js +4 -0
- package/dist/debounce.cjs +1 -0
- package/dist/debounce.js +17 -0
- package/dist/deep.cjs +1 -0
- package/dist/deep.js +121 -0
- package/dist/destructor.cjs +1 -0
- package/dist/destructor.js +1 -0
- package/dist/dimensions-BAuHfd-b.js +44 -0
- package/dist/dimensions-zMcb9pMk.cjs +1 -0
- package/dist/dimensions.cjs +1 -0
- package/dist/dimensions.js +4 -0
- package/dist/direction-CScbfCdT.js +16 -0
- package/dist/direction-DZbN47uL.cjs +1 -0
- package/dist/direction.cjs +1 -0
- package/dist/direction.js +4 -0
- package/dist/external-B-DoBvh7.cjs +1 -0
- package/dist/external-DI9122wF.js +27 -0
- package/dist/identity.cjs +1 -0
- package/dist/identity.js +4 -0
- package/dist/index-BpCPHf78.cjs +1 -0
- package/dist/index-Bt5ivtN9.js +95 -0
- package/dist/index-BwkQTA-j.js +360 -0
- package/dist/index-CuG8fceO.cjs +1 -0
- package/dist/index.cjs +3 -0
- package/dist/index.js +178 -0
- package/dist/kv.cjs +1 -0
- package/dist/kv.js +6 -0
- package/dist/location-CfP9TAnW.js +94 -0
- package/dist/location-c3g6WKs-.cjs +1 -0
- package/dist/location.cjs +1 -0
- package/dist/location.js +4 -0
- package/dist/observe.cjs +1 -0
- package/dist/observe.js +43 -0
- package/dist/path-BO4pyGZf.cjs +1 -0
- package/dist/path-nTHmt_4i.js +65 -0
- package/dist/position-BBnkwGX1.cjs +1 -0
- package/dist/position-B_aphAR0.js +87 -0
- package/dist/position.cjs +1 -0
- package/dist/position.js +4 -0
- package/dist/record.cjs +1 -0
- package/dist/record.js +9 -0
- package/dist/runtime.cjs +1 -0
- package/dist/runtime.js +4 -0
- package/dist/scale-C8axypQ2.cjs +1 -0
- package/dist/scale-CgtgqlYU.js +205 -0
- package/dist/scale.cjs +1 -0
- package/dist/scale.js +4 -0
- package/dist/search.cjs +1 -0
- package/dist/search.js +15 -0
- package/dist/series-8E6FnWBU.cjs +11 -0
- package/dist/series-DCJSrg1P.js +1629 -0
- package/dist/spatial-BOhaO8xN.cjs +1 -0
- package/dist/spatial-DozyssiN.js +11 -0
- package/dist/spatial.cjs +1 -0
- package/dist/spatial.js +20 -0
- package/dist/{binary → src/binary}/encoder.d.ts +26 -2
- package/dist/src/binary/encoder.d.ts.map +1 -0
- package/dist/src/binary/encoder.spec.d.ts.map +1 -0
- package/dist/src/binary/index.d.ts.map +1 -0
- package/dist/src/caseconv/caseconv.d.ts +6 -0
- package/dist/src/caseconv/caseconv.d.ts.map +1 -0
- package/dist/src/caseconv/index.d.ts +2 -0
- package/dist/src/caseconv/index.d.ts.map +1 -0
- package/dist/{change → src/change}/change.d.ts +10 -9
- package/dist/src/change/change.d.ts.map +1 -0
- package/dist/src/change/index.d.ts.map +1 -0
- package/dist/src/clamp/clamp.d.ts.map +1 -0
- package/dist/src/clamp/index.d.ts +2 -0
- package/dist/src/clamp/index.d.ts.map +1 -0
- package/dist/{compare → src/compare}/compare.d.ts +6 -4
- package/dist/src/compare/compare.d.ts.map +1 -0
- package/dist/src/compare/compare.spec.d.ts +2 -0
- package/dist/src/compare/compare.spec.d.ts.map +1 -0
- package/dist/src/compare/index.d.ts.map +1 -0
- package/dist/src/control/control.d.ts +107 -0
- package/dist/src/control/control.d.ts.map +1 -0
- package/dist/src/control/index.d.ts +2 -0
- package/dist/src/control/index.d.ts.map +1 -0
- package/dist/src/debounce/debounce.d.ts.map +1 -0
- package/dist/src/debounce/debounce.spec.d.ts +2 -0
- package/dist/src/debounce/debounce.spec.d.ts.map +1 -0
- package/dist/src/debounce/index.d.ts +2 -0
- package/dist/src/debounce/index.d.ts.map +1 -0
- package/dist/src/deep/copy.d.ts.map +1 -0
- package/dist/{deep → src/deep}/delete.d.ts +2 -1
- package/dist/src/deep/delete.d.ts.map +1 -0
- package/dist/{deep → src/deep}/delete.spec.d.ts.map +1 -1
- package/dist/src/deep/difference.d.ts.map +1 -0
- package/dist/src/deep/difference.spec.d.ts.map +1 -0
- package/dist/src/deep/equal.d.ts.map +1 -0
- package/dist/{deep → src/deep}/equal.spec.d.ts.map +1 -1
- package/dist/{deep → src/deep}/external.d.ts +3 -4
- package/dist/src/deep/external.d.ts.map +1 -0
- package/dist/src/deep/index.d.ts.map +1 -0
- package/dist/src/deep/merge.d.ts +12 -0
- package/dist/src/deep/merge.d.ts.map +1 -0
- package/dist/{deep → src/deep}/merge.spec.d.ts.map +1 -1
- package/dist/src/deep/partial.d.ts.map +1 -0
- package/dist/src/deep/path.d.ts +54 -0
- package/dist/src/deep/path.d.ts.map +1 -0
- package/dist/{deep → src/deep}/path.spec.d.ts.map +1 -1
- package/dist/src/destructor.d.ts.map +1 -0
- package/dist/{identity.d.ts → src/identity.d.ts} +2 -1
- package/dist/src/identity.d.ts.map +1 -0
- package/dist/{index.d.ts → src/index.d.ts} +22 -20
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/invert.d.ts.map +1 -0
- package/dist/src/join.d.ts.map +1 -0
- package/dist/src/kv/index.d.ts.map +1 -0
- package/dist/src/kv/types.d.ts.map +1 -0
- package/dist/src/math/index.d.ts +2 -0
- package/dist/src/math/index.d.ts.map +1 -0
- package/dist/src/math/math.d.ts +11 -0
- package/dist/src/math/math.d.ts.map +1 -0
- package/dist/src/migrate/index.d.ts.map +1 -0
- package/dist/src/migrate/migrate.d.ts +29 -0
- package/dist/src/migrate/migrate.d.ts.map +1 -0
- package/dist/src/migrate/migrate.spec.d.ts.map +1 -0
- package/dist/{mock → src/mock}/MockGLBufferController.d.ts +2 -1
- package/dist/src/mock/MockGLBufferController.d.ts.map +1 -0
- package/dist/src/mock/index.d.ts.map +1 -0
- package/dist/src/observe/index.d.ts.map +1 -0
- package/dist/src/observe/observe.d.ts +24 -0
- package/dist/src/observe/observe.d.ts.map +1 -0
- package/dist/src/observe/obsever.spec.d.ts +2 -0
- package/dist/src/observe/obsever.spec.d.ts.map +1 -0
- package/dist/src/optional.d.ts.map +1 -0
- package/dist/{primitive.d.ts → src/primitive.d.ts} +2 -1
- package/dist/src/primitive.d.ts.map +1 -0
- package/dist/{record.d.ts → src/record.d.ts} +7 -8
- package/dist/src/record.d.ts.map +1 -0
- package/dist/{renderable.d.ts → src/renderable.d.ts} +2 -1
- package/dist/src/renderable.d.ts.map +1 -0
- package/dist/src/runtime/detect.d.ts.map +1 -0
- package/dist/src/runtime/external.d.ts.map +1 -0
- package/dist/src/runtime/index.d.ts.map +1 -0
- package/dist/src/runtime/os.d.ts +20 -0
- package/dist/src/runtime/os.d.ts.map +1 -0
- package/dist/{search.d.ts → src/search.d.ts} +5 -2
- package/dist/src/search.d.ts.map +1 -0
- package/dist/src/shallowCopy.d.ts +2 -0
- package/dist/src/shallowCopy.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/base.d.ts +30 -5
- package/dist/src/spatial/base.d.ts.map +1 -0
- package/dist/src/spatial/bounds/bounds.d.ts +148 -0
- package/dist/src/spatial/bounds/bounds.d.ts.map +1 -0
- package/dist/src/spatial/bounds/bounds.spec.d.ts.map +1 -0
- package/dist/src/spatial/bounds/index.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/box/box.d.ts +73 -24
- package/dist/src/spatial/box/box.d.ts.map +1 -0
- package/dist/src/spatial/box/box.spec.d.ts.map +1 -0
- package/dist/src/spatial/box/index.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/dimensions/dimensions.d.ts +4 -3
- package/dist/src/spatial/dimensions/dimensions.d.ts.map +1 -0
- package/dist/src/spatial/dimensions/dimensions.spec.d.ts.map +1 -0
- package/dist/src/spatial/dimensions/index.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/direction/direction.d.ts +4 -3
- package/dist/src/spatial/direction/direction.d.ts.map +1 -0
- package/dist/src/spatial/direction/direction.spec.d.ts.map +1 -0
- package/dist/src/spatial/direction/index.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/external.d.ts +2 -2
- package/dist/src/spatial/external.d.ts.map +1 -0
- package/dist/src/spatial/index.d.ts.map +1 -0
- package/dist/src/spatial/location/index.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/location/location.d.ts +4 -3
- package/dist/src/spatial/location/location.d.ts.map +1 -0
- package/dist/src/spatial/location/location.spec.d.ts.map +1 -0
- package/dist/src/spatial/position/index.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/position/position.d.ts +4 -4
- package/dist/src/spatial/position/position.d.ts.map +1 -0
- package/dist/src/spatial/position/position.spec.d.ts.map +1 -0
- package/dist/src/spatial/scale/index.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/scale/scale.d.ts +15 -62
- package/dist/src/spatial/scale/scale.d.ts.map +1 -0
- package/dist/src/spatial/scale/scale.spec.d.ts.map +1 -0
- package/dist/src/spatial/spatial.d.ts +2 -0
- package/dist/src/spatial/spatial.d.ts.map +1 -0
- package/dist/src/spatial/xy/index.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/xy/xy.d.ts +16 -25
- package/dist/src/spatial/xy/xy.d.ts.map +1 -0
- package/dist/{spatial → src/spatial}/xy/xy.spec.d.ts.map +1 -1
- package/dist/src/telem/generate.d.ts +4 -0
- package/dist/src/telem/generate.d.ts.map +1 -0
- package/dist/src/telem/gl.d.ts.map +1 -0
- package/dist/{telem → src/telem}/index.d.ts +1 -1
- package/dist/src/telem/index.d.ts.map +1 -0
- package/dist/{telem → src/telem}/series.d.ts +10 -8
- package/dist/src/telem/series.d.ts.map +1 -0
- package/dist/{telem → src/telem}/series.spec.d.ts.map +1 -1
- package/dist/{telem → src/telem}/telem.d.ts +19 -21
- package/dist/src/telem/telem.d.ts.map +1 -0
- package/dist/{telem → src/telem}/telem.spec.d.ts.map +1 -1
- package/dist/src/toArray.d.ts.map +1 -0
- package/dist/src/transform.d.ts +6 -0
- package/dist/src/transform.d.ts.map +1 -0
- package/dist/src/unique.d.ts.map +1 -0
- package/dist/src/url/index.d.ts +2 -0
- package/dist/src/url/index.d.ts.map +1 -0
- package/dist/src/url/url.d.ts.map +1 -0
- package/dist/{url → src/url}/url.spec.d.ts.map +1 -1
- package/dist/src/worker/index.d.ts +2 -0
- package/dist/src/worker/index.d.ts.map +1 -0
- package/dist/{worker → src/worker}/worker.d.ts +4 -4
- package/dist/src/worker/worker.d.ts.map +1 -0
- package/dist/src/worker/worker.spec.d.ts.map +1 -0
- package/dist/src/zodutil/index.d.ts +2 -0
- package/dist/src/zodutil/index.d.ts.map +1 -0
- package/dist/src/zodutil/zodutil.d.ts +6 -0
- package/dist/src/zodutil/zodutil.d.ts.map +1 -0
- package/dist/src/zodutil/zodutil.spec.d.ts +2 -0
- package/dist/src/zodutil/zodutil.spec.d.ts.map +1 -0
- package/dist/telem.cjs +1 -0
- package/dist/telem.js +17 -0
- package/dist/toArray.cjs +1 -0
- package/dist/toArray.js +5 -0
- package/dist/unique.cjs +1 -0
- package/dist/unique.js +4 -0
- package/dist/url.cjs +1 -0
- package/dist/url.js +54 -0
- package/dist/worker.cjs +1 -0
- package/dist/worker.js +47 -0
- package/dist/xy-D1ZbIqpT.js +90 -0
- package/dist/xy-cP-FXJtR.cjs +1 -0
- package/dist/xy.cjs +1 -0
- package/dist/xy.js +4 -0
- package/dist/zodutil.cjs +1 -0
- package/dist/zodutil.js +21 -0
- package/eslint.config.js +12 -0
- package/package.json +157 -13
- package/src/binary/encoder.spec.ts +150 -7
- package/src/binary/encoder.ts +110 -9
- package/src/binary/index.ts +1 -1
- package/src/caseconv/caseconv.ts +31 -0
- package/src/caseconv/index.ts +10 -0
- package/src/change/change.ts +7 -6
- package/src/change/index.ts +1 -1
- package/src/{clamp.ts → clamp/clamp.ts} +1 -1
- package/src/clamp/index.ts +10 -0
- package/src/compare/compare.spec.ts +49 -0
- package/src/compare/compare.ts +37 -10
- package/src/compare/index.ts +1 -1
- package/src/control/control.ts +77 -0
- package/src/control/index.ts +1 -0
- package/src/debounce/debounce.spec.ts +52 -0
- package/src/{debounce.ts → debounce/debounce.ts} +4 -4
- package/src/debounce/index.ts +10 -0
- package/src/deep/copy.ts +2 -3
- package/src/deep/delete.spec.ts +2 -2
- package/src/deep/delete.ts +3 -2
- package/src/deep/difference.spec.ts +28 -27
- package/src/deep/difference.ts +13 -11
- package/src/deep/equal.spec.ts +4 -4
- package/src/deep/equal.ts +5 -5
- package/src/deep/external.ts +4 -5
- package/src/deep/index.ts +1 -1
- package/src/deep/merge.spec.ts +120 -4
- package/src/deep/merge.ts +50 -6
- package/src/deep/partial.ts +1 -1
- package/src/deep/path.spec.ts +91 -39
- package/src/deep/path.ts +111 -46
- package/src/destructor.ts +2 -2
- package/src/identity.ts +1 -1
- package/src/index.ts +23 -21
- package/src/invert.ts +9 -0
- package/src/join.ts +1 -1
- package/src/kv/index.ts +1 -1
- package/src/kv/types.ts +1 -1
- package/src/math/index.ts +10 -0
- package/src/math/math.ts +33 -0
- package/src/migrate/index.ts +9 -0
- package/src/migrate/migrate.spec.ts +65 -54
- package/src/migrate/migrate.ts +126 -17
- package/src/mock/MockGLBufferController.ts +6 -6
- package/src/mock/index.ts +1 -1
- package/src/observe/index.ts +1 -1
- package/src/observe/observe.ts +37 -6
- package/src/observe/obsever.spec.ts +56 -0
- package/src/optional.ts +3 -4
- package/src/primitive.ts +1 -1
- package/src/record.ts +10 -6
- package/src/renderable.ts +1 -1
- package/src/runtime/detect.ts +3 -3
- package/src/runtime/external.ts +1 -1
- package/src/runtime/index.ts +1 -1
- package/src/runtime/os.ts +17 -5
- package/src/search.ts +3 -1
- package/src/shallowCopy.ts +5 -6
- package/src/spatial/base.ts +13 -5
- package/src/spatial/bounds/bounds.spec.ts +259 -180
- package/src/spatial/bounds/bounds.ts +200 -85
- package/src/spatial/bounds/index.ts +2 -2
- package/src/spatial/box/box.spec.ts +211 -2
- package/src/spatial/box/box.ts +97 -49
- package/src/spatial/box/index.ts +2 -2
- package/src/spatial/dimensions/dimensions.spec.ts +1 -1
- package/src/spatial/dimensions/dimensions.ts +4 -4
- package/src/spatial/dimensions/index.ts +2 -2
- package/src/spatial/direction/direction.spec.ts +1 -1
- package/src/spatial/direction/direction.ts +7 -7
- package/src/spatial/direction/index.ts +2 -2
- package/src/spatial/external.ts +3 -3
- package/src/spatial/index.ts +1 -1
- package/src/spatial/location/index.ts +2 -2
- package/src/spatial/location/location.spec.ts +1 -1
- package/src/spatial/location/location.ts +21 -21
- package/src/spatial/position/index.ts +1 -1
- package/src/spatial/position/position.spec.ts +1 -1
- package/src/spatial/position/position.ts +3 -20
- package/src/spatial/scale/index.ts +2 -2
- package/src/spatial/scale/scale.spec.ts +3 -3
- package/src/spatial/scale/scale.ts +3 -3
- package/src/spatial/spatial.ts +5 -5
- package/src/spatial/xy/index.ts +2 -2
- package/src/spatial/xy/xy.spec.ts +93 -44
- package/src/spatial/xy/xy.ts +20 -27
- package/src/telem/generate.ts +1 -1
- package/src/telem/gl.ts +1 -1
- package/src/telem/index.ts +2 -2
- package/src/telem/series.spec.ts +64 -5
- package/src/telem/series.ts +47 -35
- package/src/telem/telem.spec.ts +130 -2
- package/src/telem/telem.ts +63 -23
- package/src/toArray.ts +2 -2
- package/src/transform.ts +9 -2
- package/src/unique.ts +1 -1
- package/src/url/index.ts +2 -2
- package/src/url/url.spec.ts +2 -2
- package/src/url/url.ts +4 -4
- package/src/worker/index.ts +10 -0
- package/src/worker/worker.spec.ts +2 -2
- package/src/worker/worker.ts +13 -13
- package/src/zodutil/index.ts +10 -0
- package/src/zodutil/zodutil.spec.ts +103 -0
- package/src/zodutil/zodutil.ts +44 -0
- package/tsconfig.json +1 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vite.config.ts +39 -3
- package/.eslintrc.cjs +0 -18
- package/dist/binary/encoder.d.ts.map +0 -1
- package/dist/binary/encoder.spec.d.ts.map +0 -1
- package/dist/binary/index.d.ts.map +0 -1
- package/dist/case.d.ts +0 -6
- package/dist/case.d.ts.map +0 -1
- package/dist/change/change.d.ts.map +0 -1
- package/dist/change/index.d.ts.map +0 -1
- package/dist/clamp.d.ts.map +0 -1
- package/dist/compare/compare.d.ts.map +0 -1
- package/dist/compare/index.d.ts.map +0 -1
- package/dist/debounce.d.ts.map +0 -1
- package/dist/deep/copy.d.ts.map +0 -1
- package/dist/deep/delete.d.ts.map +0 -1
- package/dist/deep/difference.d.ts.map +0 -1
- package/dist/deep/difference.spec.d.ts.map +0 -1
- package/dist/deep/equal.d.ts.map +0 -1
- package/dist/deep/external.d.ts.map +0 -1
- package/dist/deep/index.d.ts.map +0 -1
- package/dist/deep/memo.d.ts +0 -2
- package/dist/deep/memo.d.ts.map +0 -1
- package/dist/deep/merge.d.ts +0 -3
- package/dist/deep/merge.d.ts.map +0 -1
- package/dist/deep/partial.d.ts.map +0 -1
- package/dist/deep/path.d.ts +0 -37
- package/dist/deep/path.d.ts.map +0 -1
- package/dist/destructor.d.ts.map +0 -1
- package/dist/identity.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/invert.d.ts.map +0 -1
- package/dist/join.d.ts.map +0 -1
- package/dist/kv/index.d.ts.map +0 -1
- package/dist/kv/types.d.ts.map +0 -1
- package/dist/migrate/index.d.ts.map +0 -1
- package/dist/migrate/migrate.d.ts +0 -16
- package/dist/migrate/migrate.d.ts.map +0 -1
- package/dist/migrate/migrate.spec.d.ts.map +0 -1
- package/dist/mock/MockGLBufferController.d.ts.map +0 -1
- package/dist/mock/index.d.ts.map +0 -1
- package/dist/observe/index.d.ts.map +0 -1
- package/dist/observe/observe.d.ts +0 -12
- package/dist/observe/observe.d.ts.map +0 -1
- package/dist/optional.d.ts.map +0 -1
- package/dist/primitive.d.ts.map +0 -1
- package/dist/record.d.ts.map +0 -1
- package/dist/renderable.d.ts.map +0 -1
- package/dist/runtime/detect.d.ts.map +0 -1
- package/dist/runtime/external.d.ts.map +0 -1
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/os.d.ts +0 -10
- package/dist/runtime/os.d.ts.map +0 -1
- package/dist/search.d.ts.map +0 -1
- package/dist/shallowCopy.d.ts +0 -2
- package/dist/shallowCopy.d.ts.map +0 -1
- package/dist/spatial/base.d.ts.map +0 -1
- package/dist/spatial/bounds/bounds.d.ts +0 -71
- package/dist/spatial/bounds/bounds.d.ts.map +0 -1
- package/dist/spatial/bounds/bounds.spec.d.ts.map +0 -1
- package/dist/spatial/bounds/index.d.ts.map +0 -1
- package/dist/spatial/box/box.d.ts.map +0 -1
- package/dist/spatial/box/box.spec.d.ts.map +0 -1
- package/dist/spatial/box/index.d.ts.map +0 -1
- package/dist/spatial/dimensions/dimensions.d.ts.map +0 -1
- package/dist/spatial/dimensions/dimensions.spec.d.ts.map +0 -1
- package/dist/spatial/dimensions/index.d.ts.map +0 -1
- package/dist/spatial/direction/direction.d.ts.map +0 -1
- package/dist/spatial/direction/direction.spec.d.ts.map +0 -1
- package/dist/spatial/direction/index.d.ts.map +0 -1
- package/dist/spatial/external.d.ts.map +0 -1
- package/dist/spatial/index.d.ts.map +0 -1
- package/dist/spatial/location/index.d.ts.map +0 -1
- package/dist/spatial/location/location.d.ts.map +0 -1
- package/dist/spatial/location/location.spec.d.ts.map +0 -1
- package/dist/spatial/position/index.d.ts.map +0 -1
- package/dist/spatial/position/position.d.ts.map +0 -1
- package/dist/spatial/position/position.spec.d.ts.map +0 -1
- package/dist/spatial/scale/index.d.ts.map +0 -1
- package/dist/spatial/scale/scale.d.ts.map +0 -1
- package/dist/spatial/scale/scale.spec.d.ts.map +0 -1
- package/dist/spatial/spatial.d.ts +0 -2
- package/dist/spatial/spatial.d.ts.map +0 -1
- package/dist/spatial/xy/index.d.ts.map +0 -1
- package/dist/spatial/xy/xy.d.ts.map +0 -1
- package/dist/telem/generate.d.ts +0 -3
- package/dist/telem/generate.d.ts.map +0 -1
- package/dist/telem/gl.d.ts.map +0 -1
- package/dist/telem/index.d.ts.map +0 -1
- package/dist/telem/series.d.ts.map +0 -1
- package/dist/telem/telem.d.ts.map +0 -1
- package/dist/toArray.d.ts.map +0 -1
- package/dist/transform.d.ts +0 -2
- package/dist/transform.d.ts.map +0 -1
- package/dist/unique.d.ts.map +0 -1
- package/dist/url/index.d.ts +0 -2
- package/dist/url/index.d.ts.map +0 -1
- package/dist/url/url.d.ts.map +0 -1
- package/dist/worker/worker.d.ts.map +0 -1
- package/dist/worker/worker.spec.d.ts.map +0 -1
- package/dist/x.cjs +0 -12
- package/dist/x.cjs.map +0 -1
- package/dist/x.js +0 -5935
- package/dist/x.js.map +0 -1
- package/src/case.ts +0 -27
- package/src/deep/memo.ts +0 -24
- /package/dist/{binary → src/binary}/encoder.spec.d.ts +0 -0
- /package/dist/{binary → src/binary}/index.d.ts +0 -0
- /package/dist/{change → src/change}/index.d.ts +0 -0
- /package/dist/{clamp.d.ts → src/clamp/clamp.d.ts} +0 -0
- /package/dist/{compare → src/compare}/index.d.ts +0 -0
- /package/dist/{debounce.d.ts → src/debounce/debounce.d.ts} +0 -0
- /package/dist/{deep → src/deep}/copy.d.ts +0 -0
- /package/dist/{deep → src/deep}/delete.spec.d.ts +0 -0
- /package/dist/{deep → src/deep}/difference.d.ts +0 -0
- /package/dist/{deep → src/deep}/difference.spec.d.ts +0 -0
- /package/dist/{deep → src/deep}/equal.d.ts +0 -0
- /package/dist/{deep → src/deep}/equal.spec.d.ts +0 -0
- /package/dist/{deep → src/deep}/index.d.ts +0 -0
- /package/dist/{deep → src/deep}/merge.spec.d.ts +0 -0
- /package/dist/{deep → src/deep}/partial.d.ts +0 -0
- /package/dist/{deep → src/deep}/path.spec.d.ts +0 -0
- /package/dist/{destructor.d.ts → src/destructor.d.ts} +0 -0
- /package/dist/{invert.d.ts → src/invert.d.ts} +0 -0
- /package/dist/{join.d.ts → src/join.d.ts} +0 -0
- /package/dist/{kv → src/kv}/index.d.ts +0 -0
- /package/dist/{kv → src/kv}/types.d.ts +0 -0
- /package/dist/{migrate → src/migrate}/index.d.ts +0 -0
- /package/dist/{migrate → src/migrate}/migrate.spec.d.ts +0 -0
- /package/dist/{mock → src/mock}/index.d.ts +0 -0
- /package/dist/{observe → src/observe}/index.d.ts +0 -0
- /package/dist/{optional.d.ts → src/optional.d.ts} +0 -0
- /package/dist/{runtime → src/runtime}/detect.d.ts +0 -0
- /package/dist/{runtime → src/runtime}/external.d.ts +0 -0
- /package/dist/{runtime → src/runtime}/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/bounds/bounds.spec.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/bounds/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/box/box.spec.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/box/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/dimensions/dimensions.spec.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/dimensions/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/direction/direction.spec.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/direction/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/location/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/location/location.spec.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/position/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/position/position.spec.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/scale/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/scale/scale.spec.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/xy/index.d.ts +0 -0
- /package/dist/{spatial → src/spatial}/xy/xy.spec.d.ts +0 -0
- /package/dist/{telem → src/telem}/gl.d.ts +0 -0
- /package/dist/{telem → src/telem}/series.spec.d.ts +0 -0
- /package/dist/{telem → src/telem}/telem.spec.d.ts +0 -0
- /package/dist/{toArray.d.ts → src/toArray.d.ts} +0 -0
- /package/dist/{unique.d.ts → src/unique.d.ts} +0 -0
- /package/dist/{url → src/url}/url.d.ts +0 -0
- /package/dist/{url → src/url}/url.spec.d.ts +0 -0
- /package/dist/{worker → src/worker}/worker.spec.d.ts +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Use of this software is governed by the Business Source License included in the file
|
|
4
|
+
// licenses/BSL.txt.
|
|
5
|
+
//
|
|
6
|
+
// As of the Change Date specified in that file, in accordance with the Business Source
|
|
7
|
+
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
|
+
// included in the file licenses/APL.txt.
|
|
9
|
+
|
|
10
|
+
import { describe, expect, it } from "vitest";
|
|
11
|
+
|
|
12
|
+
import { compare } from "@/compare";
|
|
13
|
+
|
|
14
|
+
describe("compare", () => {
|
|
15
|
+
describe("numericStrings", () => {
|
|
16
|
+
interface Spec {
|
|
17
|
+
name: string;
|
|
18
|
+
input: string[];
|
|
19
|
+
expected: string[];
|
|
20
|
+
}
|
|
21
|
+
const SPECS: Spec[] = [
|
|
22
|
+
{
|
|
23
|
+
name: "pure numbers",
|
|
24
|
+
input: ["5", "4", "3", "2", "1"],
|
|
25
|
+
expected: ["1", "2", "3", "4", "5"],
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "suffixed numbers with equal prefixes",
|
|
29
|
+
input: ["a5", "a4", "a3", "a2", "a1"],
|
|
30
|
+
expected: ["a1", "a2", "a3", "a4", "a5"],
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "suffixed numbers with different prefixes",
|
|
34
|
+
input: ["a1", "b1", "a2", "b2", "a3", "b3"],
|
|
35
|
+
expected: ["a1", "a2", "a3", "b1", "b2", "b3"],
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "mixed separators",
|
|
39
|
+
input: ["a2", "a.1", "a-3", "a_4"],
|
|
40
|
+
expected: ["a.1", "a2", "a-3", "a_4"],
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
SPECS.forEach((spec) => {
|
|
44
|
+
it(spec.name, () => {
|
|
45
|
+
expect(spec.input.sort(compare.stringsWithNumbers)).toEqual(spec.expected);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
});
|
package/src/compare/compare.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
8
|
// included in the file licenses/APL.txt.
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { isStringer, type Primitive } from "@/primitive";
|
|
11
11
|
import { type spatial } from "@/spatial";
|
|
12
12
|
|
|
13
13
|
export type CompareF<T> = (a: T, b: T) => number;
|
|
@@ -20,10 +20,7 @@ export type CompareF<T> = (a: T, b: T) => number;
|
|
|
20
20
|
* This is used to determine the type of comparison to perform.
|
|
21
21
|
* @param reverse Whether to reverse the sort order.
|
|
22
22
|
*/
|
|
23
|
-
export const newF = <T
|
|
24
|
-
v: T,
|
|
25
|
-
reverse: boolean = false,
|
|
26
|
-
): CompareF<T> => {
|
|
23
|
+
export const newF = <T>(v: T, reverse: boolean = false): CompareF<T> => {
|
|
27
24
|
const t = isStringer(v) ? "stringer" : typeof v;
|
|
28
25
|
let f: CompareF<T>;
|
|
29
26
|
switch (t) {
|
|
@@ -35,16 +32,19 @@ export const newF = <T extends Primitive>(
|
|
|
35
32
|
(a as string).toString().localeCompare((b as string).toString());
|
|
36
33
|
break;
|
|
37
34
|
case "number":
|
|
38
|
-
f = (a: T, b: T) => (a
|
|
35
|
+
f = (a: T, b: T) => Number(a) - Number(b);
|
|
39
36
|
break;
|
|
40
37
|
case "bigint":
|
|
41
|
-
f = (a: T, b: T) => ((a as
|
|
38
|
+
f = (a: T, b: T) => (BigInt(a as number) - BigInt(b as number) > 0n ? 1 : -1);
|
|
42
39
|
break;
|
|
43
40
|
case "boolean":
|
|
44
41
|
f = (a: T, b: T) => Number(a) - Number(b);
|
|
45
42
|
break;
|
|
43
|
+
case "undefined":
|
|
44
|
+
f = () => 0;
|
|
45
|
+
break;
|
|
46
46
|
default:
|
|
47
|
-
console.warn(
|
|
47
|
+
console.warn(`sortFunc: unknown type ${t}`);
|
|
48
48
|
return () => -1;
|
|
49
49
|
}
|
|
50
50
|
return reverse ? reverseF(f) : f;
|
|
@@ -58,7 +58,7 @@ export const newF = <T extends Primitive>(
|
|
|
58
58
|
* comparison to perform.
|
|
59
59
|
* @param reverse Whether to reverse the sort order.
|
|
60
60
|
*/
|
|
61
|
-
export const newFieldF = <T
|
|
61
|
+
export const newFieldF = <T>(
|
|
62
62
|
key: keyof T,
|
|
63
63
|
value: T,
|
|
64
64
|
reverse?: boolean,
|
|
@@ -120,3 +120,30 @@ export const isLessThan = (n: number): boolean => n < EQUAL;
|
|
|
120
120
|
export const isGreaterThan = (n: number): boolean => n > EQUAL;
|
|
121
121
|
|
|
122
122
|
export const isGreaterThanEqual = (n: number): boolean => n >= EQUAL;
|
|
123
|
+
|
|
124
|
+
export const stringsWithNumbers = (a: string, b: string): number => {
|
|
125
|
+
const alphaNumericRegex = /([a-zA-Z]+)|(\d+)/g;
|
|
126
|
+
|
|
127
|
+
// Remove separators and split into parts
|
|
128
|
+
const aParts = a.replace(/[\s_.\-]+/g, "").match(alphaNumericRegex);
|
|
129
|
+
const bParts = b.replace(/[\s_.\-]+/g, "").match(alphaNumericRegex);
|
|
130
|
+
|
|
131
|
+
if (!aParts || !bParts) return 0;
|
|
132
|
+
|
|
133
|
+
for (let i = 0; i < Math.min(aParts.length, bParts.length); i++) {
|
|
134
|
+
const aPart = aParts[i];
|
|
135
|
+
const bPart = bParts[i];
|
|
136
|
+
|
|
137
|
+
if (isNaN(Number(aPart)) && isNaN(Number(bPart))) {
|
|
138
|
+
const localeComparison = aPart.localeCompare(bPart);
|
|
139
|
+
if (localeComparison !== 0) return localeComparison;
|
|
140
|
+
} else if (!isNaN(Number(aPart)) && !isNaN(Number(bPart))) {
|
|
141
|
+
const numComparison = Number(aPart) - Number(bPart);
|
|
142
|
+
if (numComparison !== 0) return numComparison;
|
|
143
|
+
} else {
|
|
144
|
+
return isNaN(Number(aPart)) ? -1 : 1;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
return aParts.length - bParts.length;
|
|
149
|
+
};
|
package/src/compare/index.ts
CHANGED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Use of this software is governed by the Business Source License included in the file
|
|
4
|
+
// licenses/BSL.txt.
|
|
5
|
+
//
|
|
6
|
+
// As of the Change Date specified in that file, in accordance with the Business Source
|
|
7
|
+
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
|
+
// included in the file licenses/APL.txt.
|
|
9
|
+
|
|
10
|
+
import { z } from "zod";
|
|
11
|
+
|
|
12
|
+
export class Authority extends Number {
|
|
13
|
+
static readonly Absolute = 255;
|
|
14
|
+
static readonly Default = 1;
|
|
15
|
+
|
|
16
|
+
static readonly z = z.union([
|
|
17
|
+
z.instanceof(Authority),
|
|
18
|
+
z
|
|
19
|
+
.number()
|
|
20
|
+
.int()
|
|
21
|
+
.min(0)
|
|
22
|
+
.max(255)
|
|
23
|
+
.transform((n) => new Authority(n)),
|
|
24
|
+
z.instanceof(Number).transform((n) => new Authority(n)),
|
|
25
|
+
]);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const subjectZ = z.object({
|
|
29
|
+
name: z.string(),
|
|
30
|
+
key: z.string(),
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
export interface Subject {
|
|
34
|
+
name: string;
|
|
35
|
+
key: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const stateZ = <T extends z.ZodTypeAny>(r: T) =>
|
|
39
|
+
z.object({
|
|
40
|
+
subject: subjectZ,
|
|
41
|
+
resource: r,
|
|
42
|
+
authority: Authority.z,
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
export interface State<R> {
|
|
46
|
+
subject: Subject;
|
|
47
|
+
resource: R;
|
|
48
|
+
authority: Authority;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const filterTransfersByChannelKey =
|
|
52
|
+
<R>(...resources: R[]) =>
|
|
53
|
+
(transfers: Transfer<R>[]): Transfer<R>[] =>
|
|
54
|
+
transfers.filter((t) => {
|
|
55
|
+
let ok = false;
|
|
56
|
+
if (t.to != null) ok = resources.includes(t.to.resource);
|
|
57
|
+
if (t.from != null && !ok) ok = resources.includes(t.from.resource);
|
|
58
|
+
return ok;
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
interface Release<R> {
|
|
62
|
+
from: State<R>;
|
|
63
|
+
to?: null;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
interface Acquire<R> {
|
|
67
|
+
from?: null;
|
|
68
|
+
to: State<R>;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export type Transfer<R> =
|
|
72
|
+
| {
|
|
73
|
+
from: State<R>;
|
|
74
|
+
to: State<R>;
|
|
75
|
+
}
|
|
76
|
+
| Release<R>
|
|
77
|
+
| Acquire<R>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * as control from "@/control/control";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Use of this software is governed by the Business Source License included in the file
|
|
4
|
+
// licenses/BSL.txt.
|
|
5
|
+
//
|
|
6
|
+
// As of the Change Date specified in that file, in accordance with the Business Source
|
|
7
|
+
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
|
+
// included in the file licenses/APL.txt.
|
|
9
|
+
|
|
10
|
+
import { describe, expect, it, vi } from "vitest";
|
|
11
|
+
|
|
12
|
+
import { debounce, throttle } from "@/debounce/debounce";
|
|
13
|
+
|
|
14
|
+
describe("debounce", () => {
|
|
15
|
+
describe("debounce", () => {
|
|
16
|
+
it("should debounce the execution of the given function", () => {
|
|
17
|
+
vi.useFakeTimers();
|
|
18
|
+
const fn = vi.fn();
|
|
19
|
+
const debounced = debounce(fn, 100);
|
|
20
|
+
debounced(10);
|
|
21
|
+
debounced(20);
|
|
22
|
+
debounced(30);
|
|
23
|
+
debounced(40);
|
|
24
|
+
expect(fn).toHaveBeenCalledTimes(0);
|
|
25
|
+
vi.advanceTimersByTime(100);
|
|
26
|
+
expect(fn).toHaveBeenCalledTimes(1);
|
|
27
|
+
expect(fn).toHaveBeenCalledWith(40);
|
|
28
|
+
});
|
|
29
|
+
it("should not debounce the execution of the given function if the time is 0", () => {
|
|
30
|
+
const fn = vi.fn();
|
|
31
|
+
const debounced = debounce(fn, 0);
|
|
32
|
+
// assert that debounced is the same
|
|
33
|
+
expect(debounced).toBe(fn);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe("throttle", () => {
|
|
37
|
+
it("should throttle the execution of the given function", () => {
|
|
38
|
+
vi.useFakeTimers();
|
|
39
|
+
const fn = vi.fn();
|
|
40
|
+
const debounced = throttle(fn, 100);
|
|
41
|
+
debounced(10);
|
|
42
|
+
debounced(20);
|
|
43
|
+
debounced(30);
|
|
44
|
+
debounced(40);
|
|
45
|
+
vi.advanceTimersByTime(100);
|
|
46
|
+
expect(fn).toHaveBeenCalledTimes(1);
|
|
47
|
+
expect(fn).toHaveBeenCalledWith(10);
|
|
48
|
+
vi.advanceTimersByTime(100);
|
|
49
|
+
expect(fn).toHaveBeenCalledTimes(1);
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
export const debounce = <F extends (...args: any[]) => void>(
|
|
11
11
|
func: F,
|
|
12
|
-
waitFor: number
|
|
12
|
+
waitFor: number,
|
|
13
13
|
): F => {
|
|
14
14
|
let timeout: ReturnType<typeof setTimeout> | null = null;
|
|
15
15
|
if (waitFor === 0) return func;
|
|
@@ -27,7 +27,7 @@ export const debounce = <F extends (...args: any[]) => void>(
|
|
|
27
27
|
|
|
28
28
|
export const throttle = <F extends (...args: any[]) => void>(
|
|
29
29
|
func: F,
|
|
30
|
-
waitFor: number
|
|
30
|
+
waitFor: number,
|
|
31
31
|
): F => {
|
|
32
32
|
let timeout: ReturnType<typeof setTimeout> | null = null;
|
|
33
33
|
if (waitFor === 0) return func;
|
|
@@ -42,4 +42,4 @@ export const throttle = <F extends (...args: any[]) => void>(
|
|
|
42
42
|
};
|
|
43
43
|
|
|
44
44
|
return throttled as F;
|
|
45
|
-
}
|
|
45
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
|
+
//
|
|
3
|
+
// Use of this software is governed by the Business Source License included in the file
|
|
4
|
+
// licenses/BSL.txt.
|
|
5
|
+
//
|
|
6
|
+
// As of the Change Date specified in that file, in accordance with the Business Source
|
|
7
|
+
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
|
+
// included in the file licenses/APL.txt.
|
|
9
|
+
|
|
10
|
+
export * from "@/debounce/debounce";
|
package/src/deep/copy.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -7,5 +7,4 @@
|
|
|
7
7
|
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
8
|
// included in the file licenses/APL.txt.
|
|
9
9
|
|
|
10
|
-
export const copy = <T>(obj: T): T =>
|
|
11
|
-
JSON.parse(JSON.stringify(obj));
|
|
10
|
+
export const copy = <T>(obj: T): T => JSON.parse(JSON.stringify(obj));
|
package/src/deep/delete.spec.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
8
|
// included in the file licenses/APL.txt.
|
|
9
9
|
|
|
10
|
-
import { describe, it
|
|
10
|
+
import { describe, expect,it } from "vitest";
|
|
11
11
|
|
|
12
12
|
import { deep } from "@/deep";
|
|
13
13
|
|
package/src/deep/delete.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
import { type Key } from "@/deep/path";
|
|
11
11
|
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-constraint
|
|
12
13
|
export const deleteD = <T extends any, D extends number = 5>(
|
|
13
14
|
target: T,
|
|
14
15
|
...keys: Array<Key<T, D>>
|
|
@@ -17,7 +18,7 @@ export const deleteD = <T extends any, D extends number = 5>(
|
|
|
17
18
|
let curr: any = target;
|
|
18
19
|
const arr = key.split(".");
|
|
19
20
|
arr.forEach((k, i) => {
|
|
20
|
-
|
|
21
|
+
|
|
21
22
|
if (i === arr.length - 1) delete curr[k];
|
|
22
23
|
else curr = curr[k];
|
|
23
24
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -8,31 +8,32 @@
|
|
|
8
8
|
// included in the file licenses/APL.txt.
|
|
9
9
|
|
|
10
10
|
import { describe, expect, it } from "vitest";
|
|
11
|
+
|
|
11
12
|
import { deep } from "@/deep";
|
|
12
13
|
|
|
13
|
-
describe(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
14
|
+
describe("deep/difference", () => {
|
|
15
|
+
it("should return a map of differences between two objects", () => {
|
|
16
|
+
const obj1 = {
|
|
17
|
+
a: 1,
|
|
18
|
+
b: 2,
|
|
19
|
+
c: {
|
|
20
|
+
d: 4,
|
|
21
|
+
e: 5,
|
|
22
|
+
f: [6, 7, 8],
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
const obj2 = {
|
|
26
|
+
a: 1,
|
|
27
|
+
b: 3,
|
|
28
|
+
c: {
|
|
29
|
+
d: 4,
|
|
30
|
+
e: 6,
|
|
31
|
+
f: [6, 7, 8],
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
const diff = deep.difference(obj1, obj2);
|
|
35
|
+
expect(Object.keys(diff).length).toEqual(2);
|
|
36
|
+
expect(diff.b).toEqual([2, 3]);
|
|
37
|
+
expect(diff["c.e"]).toEqual([5, 6]);
|
|
38
|
+
});
|
|
39
|
+
});
|
package/src/deep/difference.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -7,31 +7,34 @@
|
|
|
7
7
|
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
8
|
// included in the file licenses/APL.txt.
|
|
9
9
|
|
|
10
|
-
|
|
11
10
|
type PathValueTuple = [any, any];
|
|
12
11
|
|
|
13
|
-
export const difference = (
|
|
12
|
+
export const difference = (
|
|
13
|
+
obj1: Record<string, any>,
|
|
14
|
+
obj2: Record<string, any>,
|
|
15
|
+
path: string = "",
|
|
16
|
+
): Record<string, PathValueTuple> => {
|
|
14
17
|
const diffMap: Record<string, PathValueTuple> = {};
|
|
15
18
|
|
|
16
|
-
const compare = (a: any, b: any, currentPath: string) => {
|
|
19
|
+
const compare = (a: any, b: any, currentPath: string): void => {
|
|
17
20
|
if (typeof a !== typeof b || a === null || b === null) {
|
|
18
21
|
diffMap[currentPath] = [a, b];
|
|
19
22
|
return;
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
if (typeof a ===
|
|
25
|
+
if (typeof a === "object" && typeof b === "object") {
|
|
23
26
|
if (Array.isArray(a) && Array.isArray(b)) {
|
|
24
27
|
if (a.length !== b.length) {
|
|
25
|
-
diffMap[currentPath] =
|
|
28
|
+
diffMap[currentPath] = [a, b];
|
|
26
29
|
return;
|
|
27
30
|
}
|
|
28
31
|
for (let i = 0; i < a.length; i++) {
|
|
29
32
|
compare(a[i], b[i], `${currentPath}[${i}]`);
|
|
30
33
|
}
|
|
31
34
|
} else {
|
|
32
|
-
const keys = new Set([...Object.keys(a), ...Object.keys(b)]);
|
|
33
|
-
keys.forEach(key => {
|
|
34
|
-
compare(a[key], b[key], currentPath ? `${currentPath}.${key}` : key);
|
|
35
|
+
const keys = new Set([...Object.keys(a as {}), ...Object.keys(b as {})]);
|
|
36
|
+
keys.forEach((key) => {
|
|
37
|
+
compare(a[key], b[key], currentPath !== "" ? `${currentPath}.${key}` : key);
|
|
35
38
|
});
|
|
36
39
|
}
|
|
37
40
|
} else {
|
|
@@ -43,5 +46,4 @@ export const difference = (obj1: Record<string, any>, obj2: Record<string, any>,
|
|
|
43
46
|
|
|
44
47
|
compare(obj1, obj2, path);
|
|
45
48
|
return diffMap;
|
|
46
|
-
}
|
|
47
|
-
|
|
49
|
+
};
|
package/src/deep/equal.spec.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
// License, use of this software will be governed by the Apache License, Version 2.0,
|
|
8
8
|
// included in the file licenses/APL.txt.
|
|
9
9
|
|
|
10
|
-
import { describe, it
|
|
10
|
+
import { describe, expect,it } from "vitest";
|
|
11
11
|
|
|
12
12
|
import { deep } from "@/deep";
|
|
13
13
|
|
|
@@ -52,7 +52,7 @@ describe("deepEqual", () => {
|
|
|
52
52
|
const a = [1, 2, 3];
|
|
53
53
|
const b = [1, 2, 3];
|
|
54
54
|
expect(deep.equal(a, b)).toBe(true);
|
|
55
|
-
})
|
|
55
|
+
});
|
|
56
56
|
it("should true for object arrays that are equal", () => {
|
|
57
57
|
const a = [{ a: 1 }, { b: 2 }];
|
|
58
58
|
const b = [{ a: 1 }, { b: 2 }];
|
|
@@ -75,7 +75,7 @@ describe("deepEqual", () => {
|
|
|
75
75
|
});
|
|
76
76
|
it("should return false for object arrays that are not equal", () => {
|
|
77
77
|
const a = [{ a: 1 }, { b: 2 }];
|
|
78
|
-
const b = [{ a: 1 }, { b: 2, c: 4}];
|
|
78
|
+
const b = [{ a: 1 }, { b: 2, c: 4 }];
|
|
79
79
|
expect(deep.equal(a, b)).toBe(false);
|
|
80
80
|
});
|
|
81
81
|
});
|
package/src/deep/equal.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -36,9 +36,9 @@ export const equal = <
|
|
|
36
36
|
const bKeys = Object.keys(b);
|
|
37
37
|
if (aKeys.length !== bKeys.length) return false;
|
|
38
38
|
for (const key of aKeys) {
|
|
39
|
-
// @ts-expect-error
|
|
39
|
+
// @ts-expect-error - indexing nested value.
|
|
40
40
|
const aVal = a[key];
|
|
41
|
-
// @ts-expect-error
|
|
41
|
+
// @ts-expect-error - indexing nested value.
|
|
42
42
|
const bVal = b[key];
|
|
43
43
|
if (typeof aVal === "object" && typeof bVal === "object") {
|
|
44
44
|
if (!equal(aVal, bVal)) return false;
|
|
@@ -56,9 +56,9 @@ export const partialEqual = <T extends unknown | DeepEqualBaseRecord | Primitive
|
|
|
56
56
|
const partialKeys = Object.keys(partial);
|
|
57
57
|
if (partialKeys.length > baseKeys.length) return false;
|
|
58
58
|
for (const key of partialKeys) {
|
|
59
|
-
// @ts-expect-error
|
|
59
|
+
// @ts-expect-error - indexing nested value.
|
|
60
60
|
const baseVal = base[key];
|
|
61
|
-
// @ts-expect-error
|
|
61
|
+
// @ts-expect-error - indexing nested value.
|
|
62
62
|
const partialVal = partial[key];
|
|
63
63
|
if (typeof baseVal === "object" && typeof partialVal === "object") {
|
|
64
64
|
if (!partialEqual(baseVal, partialVal)) return false;
|
package/src/deep/external.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Copyright
|
|
1
|
+
// Copyright 2024 Synnax Labs, Inc.
|
|
2
2
|
//
|
|
3
3
|
// Use of this software is governed by the Business Source License included in the file
|
|
4
4
|
// licenses/BSL.txt.
|
|
@@ -9,9 +9,8 @@
|
|
|
9
9
|
|
|
10
10
|
export * from "@/deep/copy";
|
|
11
11
|
export * from "@/deep/delete";
|
|
12
|
-
export * from "@/deep/
|
|
12
|
+
export * from "@/deep/difference";
|
|
13
|
+
export * from "@/deep/equal";
|
|
13
14
|
export * from "@/deep/merge";
|
|
14
15
|
export * from "@/deep/partial";
|
|
15
|
-
export * from "@/deep/
|
|
16
|
-
export * from "@/deep/memo";
|
|
17
|
-
export * from "@/deep/difference";
|
|
16
|
+
export * from "@/deep/path";
|
package/src/deep/index.ts
CHANGED