@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
package/src/deep/merge.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,8 @@
|
|
|
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
|
+
import { z } from "zod";
|
|
11
12
|
|
|
12
13
|
import { deep } from "@/deep";
|
|
13
14
|
|
|
@@ -40,7 +41,7 @@ describe("deepMerge", () => {
|
|
|
40
41
|
d: 4,
|
|
41
42
|
},
|
|
42
43
|
};
|
|
43
|
-
expect(deep.
|
|
44
|
+
expect(deep.override(a, b)).toEqual(c);
|
|
44
45
|
});
|
|
45
46
|
it("Should set a value even when its parent is undefined", () => {
|
|
46
47
|
const a: TestRecord = {
|
|
@@ -58,6 +59,121 @@ describe("deepMerge", () => {
|
|
|
58
59
|
d: 4,
|
|
59
60
|
},
|
|
60
61
|
};
|
|
61
|
-
expect(deep.
|
|
62
|
+
expect(deep.override(a, b)).toEqual(c);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
describe("overrideValidItems", () => {
|
|
66
|
+
it("should override valid items", () => {
|
|
67
|
+
const base = {
|
|
68
|
+
a: 1,
|
|
69
|
+
b: 2,
|
|
70
|
+
};
|
|
71
|
+
const override = {
|
|
72
|
+
a: 3,
|
|
73
|
+
};
|
|
74
|
+
const schema = z.object({
|
|
75
|
+
a: z.number(),
|
|
76
|
+
b: z.number(),
|
|
77
|
+
});
|
|
78
|
+
expect(deep.overrideValidItems(base, override, schema)).toEqual({
|
|
79
|
+
a: 3,
|
|
80
|
+
b: 2,
|
|
81
|
+
});
|
|
82
|
+
});
|
|
83
|
+
it("should ignore invalid items", () => {
|
|
84
|
+
const base = {
|
|
85
|
+
a: 1,
|
|
86
|
+
b: 2,
|
|
87
|
+
};
|
|
88
|
+
const override = {
|
|
89
|
+
a: "3",
|
|
90
|
+
};
|
|
91
|
+
const schema = z.object({
|
|
92
|
+
a: z.number(),
|
|
93
|
+
b: z.number(),
|
|
94
|
+
});
|
|
95
|
+
expect(deep.overrideValidItems(base, override, schema)).toEqual({
|
|
96
|
+
a: 1,
|
|
97
|
+
b: 2,
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
it("should merge deeply nested objects", () => {
|
|
101
|
+
const base = {
|
|
102
|
+
a: 1,
|
|
103
|
+
b: {
|
|
104
|
+
c: 2,
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
const override = {
|
|
108
|
+
a: 3,
|
|
109
|
+
b: {
|
|
110
|
+
c: 4,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
const schema = z.object({
|
|
114
|
+
a: z.number(),
|
|
115
|
+
b: z.object({
|
|
116
|
+
c: z.number(),
|
|
117
|
+
}),
|
|
118
|
+
});
|
|
119
|
+
expect(deep.overrideValidItems(base, override, schema)).toEqual({
|
|
120
|
+
a: 3,
|
|
121
|
+
b: {
|
|
122
|
+
c: 4,
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
it("should ignore invalid nested objects", () => {
|
|
127
|
+
const base = {
|
|
128
|
+
a: 1,
|
|
129
|
+
b: {
|
|
130
|
+
c: 2,
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
const override = {
|
|
134
|
+
a: 3,
|
|
135
|
+
b: {
|
|
136
|
+
c: "4",
|
|
137
|
+
},
|
|
138
|
+
};
|
|
139
|
+
const schema = z.object({
|
|
140
|
+
a: z.number(),
|
|
141
|
+
b: z.object({
|
|
142
|
+
c: z.number(),
|
|
143
|
+
}),
|
|
144
|
+
});
|
|
145
|
+
expect(deep.overrideValidItems(base, override, schema)).toEqual({
|
|
146
|
+
a: 3,
|
|
147
|
+
b: {
|
|
148
|
+
c: 2,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
it("should ignore nested objects that don't exist in the schema", () => {
|
|
153
|
+
const base = {
|
|
154
|
+
a: 1,
|
|
155
|
+
b: {
|
|
156
|
+
c: 2,
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
const override = {
|
|
160
|
+
a: 3,
|
|
161
|
+
f: {
|
|
162
|
+
d: 4,
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
const schema = z.object({
|
|
166
|
+
a: z.number(),
|
|
167
|
+
b: z.object({
|
|
168
|
+
c: z.number(),
|
|
169
|
+
}),
|
|
170
|
+
});
|
|
171
|
+
expect(deep.overrideValidItems(base, override, schema)).toEqual({
|
|
172
|
+
a: 3,
|
|
173
|
+
b: {
|
|
174
|
+
c: 2,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
});
|
|
62
178
|
});
|
|
63
179
|
});
|
package/src/deep/merge.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,19 +7,27 @@
|
|
|
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 { z } from "zod";
|
|
11
|
+
|
|
10
12
|
import { type Partial } from "@/deep/partial";
|
|
11
13
|
import { isObject } from "@/identity";
|
|
12
14
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Overrides the properties of the base object with the existing properties of the provided
|
|
17
|
+
* object(s)
|
|
18
|
+
* @param base The base object to override
|
|
19
|
+
* @param overrides The object(s) to override the base object with
|
|
20
|
+
*/
|
|
21
|
+
export const override = <T>(base: T, ...overrides: Array<Partial<T>>): T => {
|
|
22
|
+
if (overrides.length === 0) return base;
|
|
23
|
+
const source = overrides.shift();
|
|
16
24
|
|
|
17
25
|
if (isObject(base) && isObject(source)) {
|
|
18
26
|
for (const key in source) {
|
|
19
27
|
try {
|
|
20
28
|
if (isObject(source[key])) {
|
|
21
29
|
if (!(key in base)) Object.assign(base, { [key]: {} });
|
|
22
|
-
|
|
30
|
+
override(base[key], source[key]);
|
|
23
31
|
} else {
|
|
24
32
|
Object.assign(base, { [key]: source[key] });
|
|
25
33
|
}
|
|
@@ -32,5 +40,41 @@ export const merge = <T>(base: T, ...objects: Array<Partial<T>>): T => {
|
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
42
|
|
|
35
|
-
return
|
|
43
|
+
return override(base, ...overrides);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const overrideValidItems = <A, B>(
|
|
47
|
+
base: A,
|
|
48
|
+
override: B,
|
|
49
|
+
schema: z.ZodType<A, any, any>,
|
|
50
|
+
): A => {
|
|
51
|
+
const mergeValidFields = (
|
|
52
|
+
baseObj: any,
|
|
53
|
+
overrideObj: any,
|
|
54
|
+
currentSchema: any,
|
|
55
|
+
): any => {
|
|
56
|
+
// Iterate over each property in the override object
|
|
57
|
+
for (const key in overrideObj) {
|
|
58
|
+
const overrideValue = overrideObj[key];
|
|
59
|
+
// Check if the current key exists in the schema and if schema for this key is defined
|
|
60
|
+
if (currentSchema?.shape[key]) {
|
|
61
|
+
const result = currentSchema.shape[key].safeParse(overrideValue);
|
|
62
|
+
// Check if parsing succeeded
|
|
63
|
+
if (result.success) baseObj[key] = result.data;
|
|
64
|
+
} else if (
|
|
65
|
+
typeof overrideValue === "object" &&
|
|
66
|
+
!Array.isArray(overrideValue) &&
|
|
67
|
+
overrideValue !== null
|
|
68
|
+
) {
|
|
69
|
+
// If it's a nested object, recurse into it only if a valid schema exists
|
|
70
|
+
if (currentSchema && currentSchema.shape && currentSchema.shape[key]) {
|
|
71
|
+
if (!baseObj[key]) baseObj[key] = {};
|
|
72
|
+
mergeValidFields(baseObj[key], overrideValue, currentSchema.shape[key]);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return baseObj;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
return mergeValidFields({ ...base }, override, schema);
|
|
36
80
|
};
|
package/src/deep/partial.ts
CHANGED
package/src/deep/path.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,9 +7,10 @@
|
|
|
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,
|
|
10
|
+
import { describe, expect, it } from "vitest";
|
|
11
11
|
|
|
12
12
|
import { deep } from "@/deep";
|
|
13
|
+
import { UnknownRecord } from "@/record";
|
|
13
14
|
|
|
14
15
|
interface TestRecord {
|
|
15
16
|
a: number;
|
|
@@ -20,7 +21,6 @@ interface TestRecord {
|
|
|
20
21
|
c: number[];
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
|
|
24
24
|
describe("path", () => {
|
|
25
25
|
describe("get", () => {
|
|
26
26
|
it("should get a key", () => {
|
|
@@ -29,30 +29,51 @@ describe("path", () => {
|
|
|
29
29
|
b: {
|
|
30
30
|
c: 2,
|
|
31
31
|
},
|
|
32
|
-
c: [1]
|
|
32
|
+
c: [1],
|
|
33
33
|
};
|
|
34
34
|
expect(deep.get(a, "b.c")).toEqual(2);
|
|
35
35
|
});
|
|
36
36
|
it("should get an array index", () => {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
37
|
+
const a: TestRecord = {
|
|
38
|
+
a: 1,
|
|
39
|
+
b: {
|
|
40
|
+
c: 2,
|
|
41
|
+
},
|
|
42
|
+
c: [1, 2, 3],
|
|
43
|
+
};
|
|
44
|
+
expect(deep.get(a, "c.1")).toEqual(2);
|
|
45
45
|
});
|
|
46
46
|
it("should return the object itself if the key is empty", () => {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
const a: TestRecord = {
|
|
48
|
+
a: 1,
|
|
49
|
+
b: {
|
|
50
|
+
c: 2,
|
|
51
|
+
},
|
|
52
|
+
c: [1, 2, 3],
|
|
53
|
+
};
|
|
54
|
+
expect(deep.get(a, "")).toStrictEqual(a);
|
|
55
|
+
});
|
|
56
|
+
describe("custom getter function", () => {
|
|
57
|
+
const v = {
|
|
58
|
+
a: {
|
|
59
|
+
value: () => ({
|
|
60
|
+
c: 0,
|
|
61
|
+
}),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
it("should use the custom getter function", () => {
|
|
65
|
+
expect(
|
|
66
|
+
deep.get(v, "a.value().c", {
|
|
67
|
+
optional: false,
|
|
68
|
+
getter: (obj, key) => {
|
|
69
|
+
if (key === "value()")
|
|
70
|
+
return (obj as { value: () => { c: number } }).value();
|
|
71
|
+
return (obj as UnknownRecord)[key];
|
|
51
72
|
},
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
})
|
|
73
|
+
}),
|
|
74
|
+
).toEqual(0);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
56
77
|
});
|
|
57
78
|
describe("set", () => {
|
|
58
79
|
it("should set a key", () => {
|
|
@@ -61,35 +82,66 @@ describe("path", () => {
|
|
|
61
82
|
b: {
|
|
62
83
|
c: 2,
|
|
63
84
|
},
|
|
64
|
-
c: [1]
|
|
85
|
+
c: [1],
|
|
65
86
|
};
|
|
66
87
|
const b: TestRecord = {
|
|
67
88
|
a: 1,
|
|
68
89
|
b: {
|
|
69
90
|
c: 3,
|
|
70
91
|
},
|
|
71
|
-
c: [1]
|
|
92
|
+
c: [1],
|
|
72
93
|
};
|
|
73
94
|
deep.set(a, "b.c", 3);
|
|
74
95
|
expect(a).toEqual(b);
|
|
75
96
|
});
|
|
76
97
|
it("should set an array index", () => {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
const a: TestRecord = {
|
|
99
|
+
a: 1,
|
|
100
|
+
b: {
|
|
101
|
+
c: 2,
|
|
102
|
+
},
|
|
103
|
+
c: [1, 2, 3],
|
|
104
|
+
};
|
|
105
|
+
const b: TestRecord = {
|
|
106
|
+
a: 1,
|
|
107
|
+
b: {
|
|
108
|
+
c: 2,
|
|
109
|
+
},
|
|
110
|
+
c: [1, 4, 3],
|
|
111
|
+
};
|
|
112
|
+
deep.set(a, "c.1", 4);
|
|
113
|
+
expect(a).toEqual(b);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
describe("transformPath", () => {
|
|
118
|
+
it("should transform a path", () => {
|
|
119
|
+
expect(deep.transformPath("a.b.c", (part) => part.toUpperCase())).toEqual(
|
|
120
|
+
"A.B.C",
|
|
121
|
+
);
|
|
122
|
+
});
|
|
123
|
+
it("should inject additional parts into the path", () => {
|
|
124
|
+
expect(deep.transformPath("a.b.c", (p) => [p, "d"])).toEqual("a.d.b.d.c.d");
|
|
125
|
+
});
|
|
126
|
+
it("should remove parts from the path", () => {
|
|
127
|
+
expect(deep.transformPath("a.b.c", (p, i) => (i === 1 ? undefined : p))).toEqual(
|
|
128
|
+
"a.c",
|
|
129
|
+
);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe("matches", () => {
|
|
134
|
+
it("should return true if two paths are equal", () => {
|
|
135
|
+
expect(deep.pathsMatch("a.b.c", "a.b.c")).toEqual(true);
|
|
136
|
+
});
|
|
137
|
+
it("should return true if the pattern is a prefix of the path", () => {
|
|
138
|
+
expect(deep.pathsMatch("a.b.c", "a.b")).toEqual(true);
|
|
139
|
+
});
|
|
140
|
+
it("should return true if the pattern has a wildcard", () => {
|
|
141
|
+
expect(deep.pathsMatch("a.b.c", "a.*.c")).toEqual(true);
|
|
142
|
+
});
|
|
143
|
+
it("should return true for an empty pattern", () => {
|
|
144
|
+
expect(deep.pathsMatch("a.b.c", "")).toEqual(true);
|
|
145
|
+
});
|
|
94
146
|
});
|
|
95
147
|
});
|
package/src/deep/path.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,8 +7,9 @@
|
|
|
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 { caseconv } from "@/caseconv";
|
|
10
11
|
import { type Join } from "@/join";
|
|
11
|
-
import { UnknownRecord } from "@/record";
|
|
12
|
+
import { type UnknownRecord } from "@/record";
|
|
12
13
|
|
|
13
14
|
type Prev = [
|
|
14
15
|
never,
|
|
@@ -39,58 +40,122 @@ type Prev = [
|
|
|
39
40
|
export type Key<T, D extends number = 5> = [D] extends [never]
|
|
40
41
|
? never
|
|
41
42
|
: T extends object
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
? {
|
|
44
|
+
[K in keyof T]-?: K extends string | number
|
|
45
|
+
? `${K}` | Join<K, Key<T[K], Prev[D]>>
|
|
46
|
+
: never;
|
|
47
|
+
}[keyof T]
|
|
48
|
+
: "";
|
|
48
49
|
|
|
49
|
-
export
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
export interface GetOptions<O extends boolean | undefined = boolean | undefined> {
|
|
51
|
+
optional: O;
|
|
52
|
+
getter?: (obj: UnknownRecord, key: string) => unknown;
|
|
53
|
+
}
|
|
52
54
|
|
|
53
|
-
export
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
55
|
+
export interface Get {
|
|
56
|
+
<V = unknown, T = UnknownRecord>(
|
|
57
|
+
obj: T,
|
|
58
|
+
path: string,
|
|
59
|
+
options?: GetOptions<false>,
|
|
60
|
+
): V;
|
|
61
|
+
<V = unknown, T = UnknownRecord>(
|
|
62
|
+
obj: T,
|
|
63
|
+
path: string,
|
|
64
|
+
options?: GetOptions<boolean | undefined>,
|
|
65
|
+
): V | null;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface TypedGet<V = unknown, T = UnknownRecord> {
|
|
69
|
+
(obj: T, path: string, options?: GetOptions<false>): V;
|
|
70
|
+
(obj: T, path: string, options?: GetOptions<boolean | undefined>): V | null;
|
|
66
71
|
}
|
|
67
72
|
|
|
73
|
+
export const transformPath = (
|
|
74
|
+
path: string,
|
|
75
|
+
replacer: (
|
|
76
|
+
part: string,
|
|
77
|
+
index: number,
|
|
78
|
+
parts: string[],
|
|
79
|
+
) => string | string[] | undefined,
|
|
80
|
+
): string => {
|
|
81
|
+
const parts = path.split(".");
|
|
82
|
+
const result = parts
|
|
83
|
+
.map((part, index) => {
|
|
84
|
+
const r = replacer(part, index, parts);
|
|
85
|
+
if (r == null) return null;
|
|
86
|
+
if (typeof r === "string") return r;
|
|
87
|
+
return r.join(".");
|
|
88
|
+
})
|
|
89
|
+
.filter((part) => part != null) as string[];
|
|
90
|
+
return result.join(".");
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
export const pathToSnake = (path: string): string =>
|
|
94
|
+
transformPath(path, caseconv.stringToSnake);
|
|
95
|
+
|
|
96
|
+
export const pathToCamel = (path: string): string =>
|
|
97
|
+
transformPath(path, caseconv.stringToCamel);
|
|
98
|
+
|
|
99
|
+
export const get = (<V = unknown, T = UnknownRecord>(
|
|
100
|
+
obj: T,
|
|
101
|
+
path: string,
|
|
102
|
+
opts: GetOptions = { optional: false },
|
|
103
|
+
): V | null => {
|
|
104
|
+
const { optional, getter = (obj, key) => (obj as UnknownRecord)[key] } = opts;
|
|
105
|
+
const parts = path.split(".");
|
|
106
|
+
if (parts.length === 1 && parts[0] === "") return obj as unknown as V;
|
|
107
|
+
let result: UnknownRecord = obj as UnknownRecord;
|
|
108
|
+
for (const part of parts) {
|
|
109
|
+
const v = getter(result, part);
|
|
110
|
+
if (v == null) {
|
|
111
|
+
if (optional) return null;
|
|
112
|
+
throw new Error(`Path ${path} does not exist. ${part} is null`);
|
|
113
|
+
}
|
|
114
|
+
result = v as UnknownRecord;
|
|
115
|
+
}
|
|
116
|
+
return result as V;
|
|
117
|
+
}) as unknown as Get;
|
|
118
|
+
|
|
68
119
|
export const set = <V>(obj: V, path: string, value: unknown): void => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
result = result[part] as UnknownRecord;
|
|
120
|
+
const parts = path.split(".");
|
|
121
|
+
let result: UnknownRecord = obj as UnknownRecord;
|
|
122
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
123
|
+
const part = parts[i];
|
|
124
|
+
if (result[part] == null) {
|
|
125
|
+
throw new Error(`Path ${path} does not exist`);
|
|
77
126
|
}
|
|
78
|
-
result
|
|
79
|
-
}
|
|
127
|
+
result = result[part] as UnknownRecord;
|
|
128
|
+
}
|
|
129
|
+
result[parts[parts.length - 1]] = value;
|
|
130
|
+
};
|
|
80
131
|
|
|
81
132
|
export const element = (path: string, index: number): string => {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
133
|
+
const parts = path.split(".");
|
|
134
|
+
if (index < 0) return parts[parts.length + index];
|
|
135
|
+
return parts[index];
|
|
136
|
+
};
|
|
86
137
|
|
|
87
138
|
export const join = (path: string[]): string => path.join(".");
|
|
88
139
|
|
|
89
|
-
export const has = <V>(obj:
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
140
|
+
export const has = <V = unknown, T = UnknownRecord>(obj: T, path: string): boolean => {
|
|
141
|
+
try {
|
|
142
|
+
get<V, T>(obj, path);
|
|
143
|
+
return true;
|
|
144
|
+
} catch {
|
|
145
|
+
return false;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export const pathsMatch = (path: string, pattern: string): boolean => {
|
|
150
|
+
if (pattern.length === 0) return true;
|
|
151
|
+
const parts = path.split(".");
|
|
152
|
+
const patterns = pattern.split(".");
|
|
153
|
+
if (patterns.length > parts.length) return false;
|
|
154
|
+
for (let i = 0; i < patterns.length; i++) {
|
|
155
|
+
const part = parts[i];
|
|
156
|
+
const pattern = patterns[i];
|
|
157
|
+
if (pattern === "*") continue;
|
|
158
|
+
if (part !== pattern) return false;
|
|
159
|
+
}
|
|
160
|
+
return true;
|
|
161
|
+
};
|
package/src/destructor.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,4 +9,4 @@
|
|
|
9
9
|
|
|
10
10
|
export type Destructor = () => void;
|
|
11
11
|
|
|
12
|
-
export type AsyncDestructor = () => Promise<void>;
|
|
12
|
+
export type AsyncDestructor = () => Promise<void>;
|
package/src/identity.ts
CHANGED
package/src/index.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,33 @@
|
|
|
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 * from "@/
|
|
10
|
+
export * from "@/binary";
|
|
11
|
+
export * from "@/caseconv";
|
|
12
|
+
export * from "@/change";
|
|
13
|
+
export * from "@/clamp/clamp";
|
|
14
|
+
export * from "@/compare";
|
|
15
|
+
export * from "@/control";
|
|
16
|
+
export * from "@/debounce/debounce";
|
|
17
|
+
export * from "@/deep";
|
|
18
|
+
export * from "@/destructor";
|
|
19
|
+
export * from "@/identity";
|
|
20
|
+
export * from "@/invert";
|
|
21
|
+
export * from "@/kv";
|
|
22
|
+
export * from "@/math";
|
|
23
|
+
export * from "@/migrate";
|
|
24
|
+
export * from "@/observe";
|
|
25
|
+
export * from "@/optional";
|
|
11
26
|
export * from "@/primitive";
|
|
12
27
|
export * from "@/record";
|
|
13
28
|
export * from "@/renderable";
|
|
14
|
-
export * from "@/optional";
|
|
15
|
-
export * from "@/identity";
|
|
16
29
|
export * from "@/runtime";
|
|
17
|
-
export * from "@/deep";
|
|
18
|
-
export * from "@/debounce";
|
|
19
|
-
export * from "@/clamp";
|
|
20
|
-
export * from "@/compare";
|
|
21
30
|
export * from "@/runtime";
|
|
22
|
-
export * from "@/
|
|
23
|
-
export * from "@/
|
|
31
|
+
export * from "@/search";
|
|
32
|
+
export * from "@/shallowCopy";
|
|
24
33
|
export * from "@/spatial";
|
|
25
|
-
export * from "@/
|
|
34
|
+
export * from "@/telem";
|
|
26
35
|
export * from "@/toArray";
|
|
27
|
-
export * from "@/case";
|
|
28
|
-
export * from "@/search";
|
|
29
|
-
export * from "@/destructor";
|
|
30
|
-
export * from "@/worker/worker";
|
|
31
36
|
export * from "@/transform";
|
|
32
|
-
export * from "@/
|
|
33
|
-
export * from "@/
|
|
34
|
-
export * from "@/
|
|
35
|
-
export * from "@/shallowCopy";
|
|
36
|
-
export * from "@/invert";
|
|
37
|
-
export * from "@/migrate";
|
|
37
|
+
export * from "@/unique";
|
|
38
|
+
export * from "@/url";
|
|
39
|
+
export * from "@/worker";
|
package/src/invert.ts
CHANGED
|
@@ -1 +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
|
+
|
|
1
10
|
export const invert = (condition: boolean): -1 | 1 => (condition ? -1 : 1);
|