signalium 1.2.1 → 2.0.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/CHANGELOG.md +34 -0
- package/{build/transform.js → config.js} +1 -5
- package/{build/react.js → debug.js} +1 -5
- package/dist/cjs/config.d.ts +1 -21
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +3 -36
- package/dist/cjs/config.js.map +1 -1
- package/dist/cjs/debug.d.ts +1 -1
- package/dist/cjs/debug.d.ts.map +1 -1
- package/dist/cjs/debug.js +1 -1
- package/dist/cjs/debug.js.map +1 -1
- package/dist/cjs/index.d.ts +5 -6
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +17 -22
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/internals/async.d.ts +24 -19
- package/dist/cjs/internals/async.d.ts.map +1 -1
- package/dist/cjs/internals/async.js +264 -137
- package/dist/cjs/internals/async.js.map +1 -1
- package/dist/cjs/internals/callback.d.ts +13 -0
- package/dist/cjs/internals/callback.d.ts.map +1 -0
- package/dist/cjs/internals/callback.js +73 -0
- package/dist/cjs/internals/callback.js.map +1 -0
- package/dist/cjs/internals/config.d.ts +7 -0
- package/dist/cjs/internals/config.d.ts.map +1 -0
- package/dist/cjs/internals/config.js +17 -0
- package/dist/cjs/internals/config.js.map +1 -0
- package/dist/cjs/internals/consumer.d.ts +3 -3
- package/dist/cjs/internals/consumer.d.ts.map +1 -1
- package/dist/cjs/internals/consumer.js.map +1 -1
- package/dist/cjs/internals/contexts.d.ts +16 -15
- package/dist/cjs/internals/contexts.d.ts.map +1 -1
- package/dist/cjs/internals/contexts.js +58 -56
- package/dist/cjs/internals/contexts.js.map +1 -1
- package/dist/cjs/internals/core-api.d.ts +15 -0
- package/dist/cjs/internals/core-api.d.ts.map +1 -0
- package/dist/cjs/internals/core-api.js +83 -0
- package/dist/cjs/internals/core-api.js.map +1 -0
- package/dist/cjs/internals/dirty.d.ts +3 -3
- package/dist/cjs/internals/dirty.d.ts.map +1 -1
- package/dist/cjs/internals/dirty.js +13 -13
- package/dist/cjs/internals/dirty.js.map +1 -1
- package/dist/cjs/internals/edge.d.ts +5 -5
- package/dist/cjs/internals/edge.d.ts.map +1 -1
- package/dist/cjs/internals/edge.js.map +1 -1
- package/dist/cjs/internals/generators.d.ts +5 -0
- package/dist/cjs/internals/generators.d.ts.map +1 -0
- package/dist/cjs/internals/generators.js +83 -0
- package/dist/cjs/internals/generators.js.map +1 -0
- package/dist/cjs/internals/get.d.ts +5 -8
- package/dist/cjs/internals/get.d.ts.map +1 -1
- package/dist/cjs/internals/get.js +48 -107
- package/dist/cjs/internals/get.js.map +1 -1
- package/dist/cjs/internals/reactive.d.ts +77 -0
- package/dist/cjs/internals/reactive.d.ts.map +1 -0
- package/dist/cjs/internals/{derived.js → reactive.js} +45 -33
- package/dist/cjs/internals/reactive.js.map +1 -0
- package/dist/cjs/internals/scheduling.d.ts +7 -7
- package/dist/cjs/internals/scheduling.d.ts.map +1 -1
- package/dist/cjs/internals/scheduling.js +9 -9
- package/dist/cjs/internals/scheduling.js.map +1 -1
- package/dist/cjs/internals/signal.d.ts +20 -0
- package/dist/cjs/internals/signal.d.ts.map +1 -0
- package/dist/cjs/internals/{state.js → signal.js} +31 -27
- package/dist/cjs/internals/signal.js.map +1 -0
- package/dist/{esm → cjs/internals}/trace.d.ts +1 -1
- package/dist/cjs/internals/trace.d.ts.map +1 -0
- package/dist/cjs/{trace.js → internals/trace.js} +1 -1
- package/dist/cjs/internals/trace.js.map +1 -0
- package/dist/cjs/internals/utils/equals.d.ts +4 -4
- package/dist/cjs/internals/utils/equals.d.ts.map +1 -1
- package/dist/cjs/internals/utils/equals.js.map +1 -1
- package/dist/cjs/internals/utils/type-utils.d.ts +0 -2
- package/dist/cjs/internals/utils/type-utils.d.ts.map +1 -1
- package/dist/cjs/internals/utils/type-utils.js +0 -5
- package/dist/cjs/internals/utils/type-utils.js.map +1 -1
- package/dist/cjs/internals/watch.d.ts +4 -0
- package/dist/cjs/internals/watch.d.ts.map +1 -0
- package/dist/cjs/internals/{connect.js → watch.js} +7 -7
- package/dist/cjs/internals/watch.js.map +1 -0
- package/dist/cjs/internals/weakref.d.ts.map +1 -0
- package/dist/cjs/internals/weakref.js.map +1 -0
- package/dist/cjs/react/component.d.ts +2 -0
- package/dist/cjs/react/component.d.ts.map +1 -0
- package/dist/cjs/react/component.js +40 -0
- package/dist/cjs/react/component.js.map +1 -0
- package/dist/cjs/react/context.d.ts +2 -1
- package/dist/cjs/react/context.d.ts.map +1 -1
- package/dist/cjs/react/context.js +10 -5
- package/dist/cjs/react/context.js.map +1 -1
- package/dist/cjs/react/index.d.ts +4 -4
- package/dist/cjs/react/index.d.ts.map +1 -1
- package/dist/cjs/react/index.js +11 -8
- package/dist/cjs/react/index.js.map +1 -1
- package/dist/cjs/react/provider.d.ts.map +1 -1
- package/dist/cjs/react/provider.js +1 -1
- package/dist/cjs/react/provider.js.map +1 -1
- package/dist/cjs/react/rendering.d.ts +0 -6
- package/dist/cjs/react/rendering.d.ts.map +1 -1
- package/dist/cjs/react/rendering.js +1 -19
- package/dist/cjs/react/rendering.js.map +1 -1
- package/dist/cjs/react/use-reactive.d.ts +7 -0
- package/dist/cjs/react/use-reactive.d.ts.map +1 -0
- package/dist/cjs/react/use-reactive.js +67 -0
- package/dist/cjs/react/use-reactive.js.map +1 -0
- package/dist/cjs/react/use-signal.d.ts +3 -0
- package/dist/cjs/react/use-signal.d.ts.map +1 -0
- package/dist/cjs/react/{state.js → use-signal.js} +5 -5
- package/dist/cjs/react/use-signal.js.map +1 -0
- package/dist/cjs/{transform.d.ts → transform/async.d.ts} +1 -1
- package/dist/cjs/transform/async.d.ts.map +1 -0
- package/dist/cjs/{transform.js → transform/async.js} +22 -9
- package/dist/cjs/transform/async.js.map +1 -0
- package/dist/cjs/transform/callback.d.ts +6 -0
- package/dist/cjs/transform/callback.d.ts.map +1 -0
- package/dist/cjs/transform/callback.js +259 -0
- package/dist/cjs/transform/callback.js.map +1 -0
- package/dist/cjs/transform/index.d.ts +5 -0
- package/dist/cjs/transform/index.d.ts.map +1 -0
- package/dist/cjs/transform/index.js +12 -0
- package/dist/cjs/transform/index.js.map +1 -0
- package/dist/cjs/transform/preset.d.ts +7 -0
- package/dist/cjs/transform/preset.d.ts.map +1 -0
- package/dist/cjs/transform/preset.js +20 -0
- package/dist/cjs/transform/preset.js.map +1 -0
- package/dist/cjs/transform/promise.d.ts +6 -0
- package/dist/cjs/transform/promise.d.ts.map +1 -0
- package/dist/cjs/transform/promise.js +129 -0
- package/dist/cjs/transform/promise.js.map +1 -0
- package/dist/cjs/types.d.ts +44 -63
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/utils.d.ts +2 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +7 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/config.d.ts +1 -21
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +1 -29
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/debug.d.ts +1 -1
- package/dist/esm/debug.d.ts.map +1 -1
- package/dist/esm/debug.js +1 -1
- package/dist/esm/debug.js.map +1 -1
- package/dist/esm/index.d.ts +5 -6
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -6
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internals/async.d.ts +24 -19
- package/dist/esm/internals/async.d.ts.map +1 -1
- package/dist/esm/internals/async.js +253 -128
- package/dist/esm/internals/async.js.map +1 -1
- package/dist/esm/internals/callback.d.ts +13 -0
- package/dist/esm/internals/callback.d.ts.map +1 -0
- package/dist/esm/internals/callback.js +67 -0
- package/dist/esm/internals/callback.js.map +1 -0
- package/dist/esm/internals/config.d.ts +7 -0
- package/dist/esm/internals/config.d.ts.map +1 -0
- package/dist/esm/internals/config.js +11 -0
- package/dist/esm/internals/config.js.map +1 -0
- package/dist/esm/internals/consumer.d.ts +3 -3
- package/dist/esm/internals/consumer.d.ts.map +1 -1
- package/dist/esm/internals/consumer.js.map +1 -1
- package/dist/esm/internals/contexts.d.ts +16 -15
- package/dist/esm/internals/contexts.d.ts.map +1 -1
- package/dist/esm/internals/contexts.js +52 -50
- package/dist/esm/internals/contexts.js.map +1 -1
- package/dist/esm/internals/core-api.d.ts +15 -0
- package/dist/esm/internals/core-api.d.ts.map +1 -0
- package/dist/esm/internals/core-api.js +74 -0
- package/dist/esm/internals/core-api.js.map +1 -0
- package/dist/esm/internals/dirty.d.ts +3 -3
- package/dist/esm/internals/dirty.d.ts.map +1 -1
- package/dist/esm/internals/dirty.js +12 -12
- package/dist/esm/internals/dirty.js.map +1 -1
- package/dist/esm/internals/edge.d.ts +5 -5
- package/dist/esm/internals/edge.d.ts.map +1 -1
- package/dist/esm/internals/edge.js.map +1 -1
- package/dist/esm/internals/generators.d.ts +5 -0
- package/dist/esm/internals/generators.d.ts.map +1 -0
- package/dist/esm/internals/generators.js +79 -0
- package/dist/esm/internals/generators.js.map +1 -0
- package/dist/esm/internals/get.d.ts +5 -8
- package/dist/esm/internals/get.d.ts.map +1 -1
- package/dist/esm/internals/get.js +43 -100
- package/dist/esm/internals/get.js.map +1 -1
- package/dist/esm/internals/reactive.d.ts +77 -0
- package/dist/esm/internals/reactive.d.ts.map +1 -0
- package/dist/esm/internals/{derived.js → reactive.js} +41 -29
- package/dist/esm/internals/reactive.js.map +1 -0
- package/dist/esm/internals/scheduling.d.ts +7 -7
- package/dist/esm/internals/scheduling.d.ts.map +1 -1
- package/dist/esm/internals/scheduling.js +6 -6
- package/dist/esm/internals/scheduling.js.map +1 -1
- package/dist/esm/internals/signal.d.ts +20 -0
- package/dist/esm/internals/signal.d.ts.map +1 -0
- package/dist/esm/internals/{state.js → signal.js} +25 -22
- package/dist/esm/internals/signal.js.map +1 -0
- package/dist/{cjs → esm/internals}/trace.d.ts +1 -1
- package/dist/esm/internals/trace.d.ts.map +1 -0
- package/dist/esm/{trace.js → internals/trace.js} +1 -1
- package/dist/esm/internals/trace.js.map +1 -0
- package/dist/esm/internals/utils/equals.d.ts +4 -4
- package/dist/esm/internals/utils/equals.d.ts.map +1 -1
- package/dist/esm/internals/utils/equals.js.map +1 -1
- package/dist/esm/internals/utils/type-utils.d.ts +0 -2
- package/dist/esm/internals/utils/type-utils.d.ts.map +1 -1
- package/dist/esm/internals/utils/type-utils.js +0 -4
- package/dist/esm/internals/utils/type-utils.js.map +1 -1
- package/dist/esm/internals/watch.d.ts +4 -0
- package/dist/esm/internals/watch.d.ts.map +1 -0
- package/dist/esm/internals/{connect.js → watch.js} +7 -7
- package/dist/esm/internals/watch.js.map +1 -0
- package/dist/esm/internals/weakref.d.ts.map +1 -0
- package/dist/esm/internals/weakref.js.map +1 -0
- package/dist/esm/react/component.d.ts +2 -0
- package/dist/esm/react/component.d.ts.map +1 -0
- package/dist/esm/react/component.js +37 -0
- package/dist/esm/react/component.js.map +1 -0
- package/dist/esm/react/context.d.ts +2 -1
- package/dist/esm/react/context.d.ts.map +1 -1
- package/dist/esm/react/context.js +10 -6
- package/dist/esm/react/context.js.map +1 -1
- package/dist/esm/react/index.d.ts +4 -4
- package/dist/esm/react/index.d.ts.map +1 -1
- package/dist/esm/react/index.js +4 -4
- package/dist/esm/react/index.js.map +1 -1
- package/dist/esm/react/provider.d.ts.map +1 -1
- package/dist/esm/react/provider.js +2 -2
- package/dist/esm/react/provider.js.map +1 -1
- package/dist/esm/react/rendering.d.ts +0 -6
- package/dist/esm/react/rendering.d.ts.map +1 -1
- package/dist/esm/react/rendering.js +1 -17
- package/dist/esm/react/rendering.js.map +1 -1
- package/dist/esm/react/use-reactive.d.ts +7 -0
- package/dist/esm/react/use-reactive.d.ts.map +1 -0
- package/dist/esm/react/use-reactive.js +64 -0
- package/dist/esm/react/use-reactive.js.map +1 -0
- package/dist/esm/react/use-signal.d.ts +3 -0
- package/dist/esm/react/use-signal.d.ts.map +1 -0
- package/dist/esm/react/use-signal.js +10 -0
- package/dist/esm/react/use-signal.js.map +1 -0
- package/dist/esm/{transform.d.ts → transform/async.d.ts} +1 -1
- package/dist/esm/transform/async.d.ts.map +1 -0
- package/dist/esm/{transform.js → transform/async.js} +22 -9
- package/dist/esm/transform/async.js.map +1 -0
- package/dist/esm/transform/callback.d.ts +6 -0
- package/dist/esm/transform/callback.d.ts.map +1 -0
- package/dist/esm/transform/callback.js +256 -0
- package/dist/esm/transform/callback.js.map +1 -0
- package/dist/esm/transform/index.d.ts +5 -0
- package/dist/esm/transform/index.d.ts.map +1 -0
- package/dist/esm/transform/index.js +5 -0
- package/dist/esm/transform/index.js.map +1 -0
- package/dist/esm/transform/preset.d.ts +7 -0
- package/dist/esm/transform/preset.d.ts.map +1 -0
- package/dist/esm/transform/preset.js +17 -0
- package/dist/esm/transform/preset.js.map +1 -0
- package/dist/esm/transform/promise.d.ts +6 -0
- package/dist/esm/transform/promise.d.ts.map +1 -0
- package/dist/esm/transform/promise.js +126 -0
- package/dist/esm/transform/promise.js.map +1 -0
- package/dist/esm/types.d.ts +44 -63
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/utils.d.ts +2 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +2 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +56 -58
- package/react.js +0 -4
- package/transform.js +1 -5
- package/utils.js +15 -0
- package/.turbo/turbo-build.log +0 -12
- package/dist/cjs/hooks.d.ts +0 -16
- package/dist/cjs/hooks.d.ts.map +0 -1
- package/dist/cjs/hooks.js +0 -44
- package/dist/cjs/hooks.js.map +0 -1
- package/dist/cjs/internals/connect.d.ts +0 -4
- package/dist/cjs/internals/connect.d.ts.map +0 -1
- package/dist/cjs/internals/connect.js.map +0 -1
- package/dist/cjs/internals/derived.d.ts +0 -76
- package/dist/cjs/internals/derived.d.ts.map +0 -1
- package/dist/cjs/internals/derived.js.map +0 -1
- package/dist/cjs/internals/state.d.ts +0 -18
- package/dist/cjs/internals/state.d.ts.map +0 -1
- package/dist/cjs/internals/state.js.map +0 -1
- package/dist/cjs/react/setup.d.ts +0 -2
- package/dist/cjs/react/setup.d.ts.map +0 -1
- package/dist/cjs/react/setup.js +0 -14
- package/dist/cjs/react/setup.js.map +0 -1
- package/dist/cjs/react/signal-value.d.ts +0 -6
- package/dist/cjs/react/signal-value.d.ts.map +0 -1
- package/dist/cjs/react/signal-value.js +0 -37
- package/dist/cjs/react/signal-value.js.map +0 -1
- package/dist/cjs/react/state.d.ts +0 -3
- package/dist/cjs/react/state.d.ts.map +0 -1
- package/dist/cjs/react/state.js.map +0 -1
- package/dist/cjs/trace.d.ts.map +0 -1
- package/dist/cjs/trace.js.map +0 -1
- package/dist/cjs/transform.d.ts.map +0 -1
- package/dist/cjs/transform.js.map +0 -1
- package/dist/cjs/weakref.d.ts.map +0 -1
- package/dist/cjs/weakref.js.map +0 -1
- package/dist/esm/hooks.d.ts +0 -16
- package/dist/esm/hooks.d.ts.map +0 -1
- package/dist/esm/hooks.js +0 -37
- package/dist/esm/hooks.js.map +0 -1
- package/dist/esm/internals/connect.d.ts +0 -4
- package/dist/esm/internals/connect.d.ts.map +0 -1
- package/dist/esm/internals/connect.js.map +0 -1
- package/dist/esm/internals/derived.d.ts +0 -76
- package/dist/esm/internals/derived.d.ts.map +0 -1
- package/dist/esm/internals/derived.js.map +0 -1
- package/dist/esm/internals/state.d.ts +0 -18
- package/dist/esm/internals/state.d.ts.map +0 -1
- package/dist/esm/internals/state.js.map +0 -1
- package/dist/esm/react/setup.d.ts +0 -2
- package/dist/esm/react/setup.d.ts.map +0 -1
- package/dist/esm/react/setup.js +0 -11
- package/dist/esm/react/setup.js.map +0 -1
- package/dist/esm/react/signal-value.d.ts +0 -6
- package/dist/esm/react/signal-value.d.ts.map +0 -1
- package/dist/esm/react/signal-value.js +0 -33
- package/dist/esm/react/signal-value.js.map +0 -1
- package/dist/esm/react/state.d.ts +0 -3
- package/dist/esm/react/state.d.ts.map +0 -1
- package/dist/esm/react/state.js +0 -10
- package/dist/esm/react/state.js.map +0 -1
- package/dist/esm/trace.d.ts.map +0 -1
- package/dist/esm/trace.js.map +0 -1
- package/dist/esm/transform.d.ts.map +0 -1
- package/dist/esm/transform.js.map +0 -1
- package/dist/esm/weakref.d.ts.map +0 -1
- package/dist/esm/weakref.js.map +0 -1
- package/src/__tests__/__snapshots__/context.test.ts.snap +0 -2101
- package/src/__tests__/__snapshots__/nesting.test.ts.snap +0 -16201
- package/src/__tests__/__snapshots__/params-and-state.test.ts.snap +0 -1879
- package/src/__tests__/async-task.test.ts +0 -327
- package/src/__tests__/context.test.ts +0 -619
- package/src/__tests__/gc.test.ts +0 -256
- package/src/__tests__/nesting.test.ts +0 -298
- package/src/__tests__/params-and-state.test.ts +0 -230
- package/src/__tests__/reactive-async.test.ts +0 -548
- package/src/__tests__/reactive-sync.test.ts +0 -130
- package/src/__tests__/subscription.test.ts +0 -510
- package/src/__tests__/utils/async.ts +0 -6
- package/src/__tests__/utils/instrumented-hooks.ts +0 -410
- package/src/__tests__/utils/permute.ts +0 -85
- package/src/config.ts +0 -54
- package/src/debug.ts +0 -14
- package/src/hooks.ts +0 -82
- package/src/index.ts +0 -20
- package/src/internals/async.ts +0 -563
- package/src/internals/connect.ts +0 -49
- package/src/internals/consumer.ts +0 -13
- package/src/internals/contexts.ts +0 -173
- package/src/internals/derived.ts +0 -217
- package/src/internals/dirty.ts +0 -91
- package/src/internals/edge.ts +0 -109
- package/src/internals/get.ts +0 -298
- package/src/internals/scheduling.ts +0 -160
- package/src/internals/state.ts +0 -111
- package/src/internals/utils/debug-name.ts +0 -14
- package/src/internals/utils/equals.ts +0 -12
- package/src/internals/utils/hash.ts +0 -221
- package/src/internals/utils/stringify.ts +0 -57
- package/src/internals/utils/type-utils.ts +0 -19
- package/src/react/__tests__/async.test.tsx +0 -704
- package/src/react/__tests__/basic.test.tsx +0 -95
- package/src/react/__tests__/contexts.test.tsx +0 -181
- package/src/react/__tests__/subscriptions.test.tsx +0 -49
- package/src/react/__tests__/utils.tsx +0 -40
- package/src/react/context.ts +0 -14
- package/src/react/index.ts +0 -6
- package/src/react/provider.tsx +0 -18
- package/src/react/rendering.ts +0 -43
- package/src/react/setup.ts +0 -11
- package/src/react/signal-value.ts +0 -50
- package/src/react/state.ts +0 -13
- package/src/trace.ts +0 -454
- package/src/transform.ts +0 -113
- package/src/types.ts +0 -115
- package/src/weakref.ts +0 -9
- package/tsconfig.json +0 -13
- package/vitest.workspace.ts +0 -61
- /package/dist/cjs/{weakref.d.ts → internals/weakref.d.ts} +0 -0
- /package/dist/cjs/{weakref.js → internals/weakref.js} +0 -0
- /package/dist/esm/{weakref.d.ts → internals/weakref.d.ts} +0 -0
- /package/dist/esm/{weakref.js → internals/weakref.js} +0 -0
@@ -1,410 +0,0 @@
|
|
1
|
-
import { afterEach, Assertion, expect } from 'vitest';
|
2
|
-
import {
|
3
|
-
reactive as _reactive,
|
4
|
-
subscription as _subscription,
|
5
|
-
SignalSubscribe,
|
6
|
-
withContexts,
|
7
|
-
task as _task,
|
8
|
-
watcher,
|
9
|
-
} from '../../index.js';
|
10
|
-
import { ReactiveTask, ReactiveValue, SignalOptionsWithInit, SignalSubscription } from '../../types.js';
|
11
|
-
import { Context, ContextImpl, getCurrentScope, ROOT_SCOPE, SignalScope } from '../../internals/contexts.js';
|
12
|
-
import { DerivedSignal } from '../../internals/derived.js';
|
13
|
-
import { ReactivePromise } from '../../internals/async.js';
|
14
|
-
import { hashValue } from '../../internals/utils/hash.js';
|
15
|
-
|
16
|
-
class SignalHookCounts {
|
17
|
-
name: string;
|
18
|
-
|
19
|
-
get = 0;
|
20
|
-
set = 0;
|
21
|
-
compute = 0;
|
22
|
-
|
23
|
-
resolve = 0;
|
24
|
-
|
25
|
-
subscribe = 0;
|
26
|
-
update = 0;
|
27
|
-
unsubscribe = 0;
|
28
|
-
internalGet = 0;
|
29
|
-
internalSet = 0;
|
30
|
-
error = 0;
|
31
|
-
|
32
|
-
effect = 0;
|
33
|
-
|
34
|
-
constructor(name: string) {
|
35
|
-
this.name = name;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
|
39
|
-
const countsKeys = Object.keys(new SignalHookCounts('')).filter(k => k !== 'name') as (keyof SignalHookCounts)[];
|
40
|
-
|
41
|
-
let currentOrder: string[] | undefined = [];
|
42
|
-
|
43
|
-
type ContextPair<T extends unknown[]> = {
|
44
|
-
[K in keyof T]: [Context<T[K]>, NoInfer<T[K]>];
|
45
|
-
};
|
46
|
-
|
47
|
-
interface CustomMatchers<R = unknown> {
|
48
|
-
toHaveSignalValue: (v: any) => Assertion<R>;
|
49
|
-
toHaveCounts: (counts: Partial<SignalHookCounts>) => Assertion<R>;
|
50
|
-
toHaveValueAndCounts: (v: any, counts: Partial<SignalHookCounts>) => Assertion<R>;
|
51
|
-
toHaveComputedOrder: (order: string[]) => Assertion<R>;
|
52
|
-
}
|
53
|
-
|
54
|
-
declare module 'vitest' {
|
55
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
56
|
-
interface Assertion<T = any> extends CustomMatchers<T> {}
|
57
|
-
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
58
|
-
interface AsymmetricMatchersContaining extends CustomMatchers {}
|
59
|
-
}
|
60
|
-
|
61
|
-
let unsubs: (() => void)[] = [];
|
62
|
-
|
63
|
-
afterEach(() => {
|
64
|
-
unsubs.forEach(unsub => unsub());
|
65
|
-
});
|
66
|
-
|
67
|
-
let TEST_ID = 0;
|
68
|
-
|
69
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
70
|
-
const WATCHERS = new WeakMap<Function, DerivedSignal<unknown, unknown[]>>();
|
71
|
-
|
72
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
73
|
-
function getWatcherForHook(hook: Function) {
|
74
|
-
let w = WATCHERS.get(hook);
|
75
|
-
|
76
|
-
if (!w) {
|
77
|
-
w = watcher(
|
78
|
-
() => {
|
79
|
-
let result = hook();
|
80
|
-
|
81
|
-
if (result instanceof ReactivePromise) {
|
82
|
-
result = result.value;
|
83
|
-
}
|
84
|
-
|
85
|
-
return result;
|
86
|
-
},
|
87
|
-
{ desc: 'test' + TEST_ID++ },
|
88
|
-
) as DerivedSignal<unknown, unknown[]>;
|
89
|
-
|
90
|
-
unsubs.push(w.addListener(() => {}));
|
91
|
-
|
92
|
-
WATCHERS.set(hook, w);
|
93
|
-
}
|
94
|
-
|
95
|
-
return w;
|
96
|
-
}
|
97
|
-
|
98
|
-
function toHaveSignalValue(
|
99
|
-
this: { equals(a: unknown, b: unknown): boolean },
|
100
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
101
|
-
hook: Function,
|
102
|
-
value: any,
|
103
|
-
) {
|
104
|
-
if (hook instanceof ReactivePromise) {
|
105
|
-
return {
|
106
|
-
pass: this.equals(hook.value, value),
|
107
|
-
message: () =>
|
108
|
-
`Expected subscription value to be ${JSON.stringify(value)}, but got ${JSON.stringify(hook.value)}`,
|
109
|
-
};
|
110
|
-
}
|
111
|
-
|
112
|
-
const signalValue = getWatcherForHook(hook).get();
|
113
|
-
|
114
|
-
return {
|
115
|
-
pass: this.equals(signalValue, value),
|
116
|
-
message: () => `Expected signal value to be ${value}, but got ${signalValue}`,
|
117
|
-
};
|
118
|
-
}
|
119
|
-
|
120
|
-
function toHaveCounts(hook: { [COUNTS]: SignalHookCounts }, counts: SignalHookCounts) {
|
121
|
-
const signalCounts = hook[COUNTS];
|
122
|
-
|
123
|
-
if (!signalCounts) {
|
124
|
-
return {
|
125
|
-
pass: false,
|
126
|
-
message: () => 'Signal not found in counts map',
|
127
|
-
};
|
128
|
-
}
|
129
|
-
|
130
|
-
for (const key of countsKeys) {
|
131
|
-
const count = counts[key];
|
132
|
-
|
133
|
-
if (count !== undefined && signalCounts[key] !== count) {
|
134
|
-
return {
|
135
|
-
pass: false,
|
136
|
-
message: () => `Expected ${key} count to be ${count} but got ${signalCounts[key]}`,
|
137
|
-
};
|
138
|
-
}
|
139
|
-
}
|
140
|
-
|
141
|
-
return {
|
142
|
-
pass: true,
|
143
|
-
message: () => 'Counts match',
|
144
|
-
};
|
145
|
-
}
|
146
|
-
|
147
|
-
expect.addSnapshotSerializer({
|
148
|
-
serialize(val) {
|
149
|
-
const counts = val[COUNTS];
|
150
|
-
const value = getWatcherForHook(val).get();
|
151
|
-
|
152
|
-
return JSON.stringify([value, counts], null, 2);
|
153
|
-
},
|
154
|
-
test(val) {
|
155
|
-
return val[COUNTS] !== undefined;
|
156
|
-
},
|
157
|
-
});
|
158
|
-
|
159
|
-
expect.extend({
|
160
|
-
toHaveSignalValue,
|
161
|
-
toHaveCounts,
|
162
|
-
|
163
|
-
toHaveValueAndCounts(signal, value, counts) {
|
164
|
-
const valueResult = toHaveSignalValue.call(this, signal, value);
|
165
|
-
const countsResult = toHaveCounts.call(this, signal, counts);
|
166
|
-
|
167
|
-
return {
|
168
|
-
pass: valueResult.pass && countsResult.pass,
|
169
|
-
message: () => {
|
170
|
-
const messages = [
|
171
|
-
!valueResult.pass && valueResult.message(),
|
172
|
-
!countsResult.pass && countsResult.message(),
|
173
|
-
].filter(m => m);
|
174
|
-
|
175
|
-
return messages.join('\n');
|
176
|
-
},
|
177
|
-
};
|
178
|
-
},
|
179
|
-
|
180
|
-
toHaveComputedOrder(fn: () => void, expectedOrder: string[]) {
|
181
|
-
const order = (currentOrder = []);
|
182
|
-
|
183
|
-
fn();
|
184
|
-
|
185
|
-
currentOrder = undefined;
|
186
|
-
|
187
|
-
return {
|
188
|
-
pass: this.equals(order, expectedOrder),
|
189
|
-
message: () => `Expected compute count to be ${expectedOrder.toString()} but got ${order.toString()}`,
|
190
|
-
};
|
191
|
-
},
|
192
|
-
});
|
193
|
-
|
194
|
-
function getContextKeys(scope: SignalScope): symbol[] {
|
195
|
-
const contexts = scope['contexts'];
|
196
|
-
|
197
|
-
const keys = Object.getOwnPropertySymbols(contexts);
|
198
|
-
|
199
|
-
if (scope['parentScope']) {
|
200
|
-
return [...getContextKeys(scope['parentScope']), ...keys];
|
201
|
-
}
|
202
|
-
|
203
|
-
return keys;
|
204
|
-
}
|
205
|
-
|
206
|
-
function getSortedContexts(scope: SignalScope) {
|
207
|
-
const keys = getContextKeys(scope).sort((a, b) => a.toString().localeCompare(b.toString()));
|
208
|
-
|
209
|
-
return keys.map(key => {
|
210
|
-
const context = scope['contexts'][key];
|
211
|
-
|
212
|
-
return [key, context];
|
213
|
-
});
|
214
|
-
}
|
215
|
-
|
216
|
-
function getCountsFor(name: string, map: Map<number, SignalHookCounts>, scope: SignalScope, args: unknown[] = []) {
|
217
|
-
const key = hashValue([args, getSortedContexts(scope)]);
|
218
|
-
let countsForArgs = map.get(key);
|
219
|
-
|
220
|
-
if (!countsForArgs) {
|
221
|
-
countsForArgs = new SignalHookCounts(name);
|
222
|
-
map.set(key, countsForArgs);
|
223
|
-
}
|
224
|
-
|
225
|
-
return countsForArgs;
|
226
|
-
}
|
227
|
-
|
228
|
-
const COUNTS = Symbol('counts');
|
229
|
-
|
230
|
-
export type SubscriptionWithCounts<T> = ReactivePromise<T> & {
|
231
|
-
[COUNTS]: SignalHookCounts;
|
232
|
-
};
|
233
|
-
|
234
|
-
export type ReactiveTaskWithCounts<T, Args extends unknown[]> = ReactiveTask<T, Args> & {
|
235
|
-
[COUNTS]: SignalHookCounts;
|
236
|
-
};
|
237
|
-
|
238
|
-
export type ReactiveFunctionWithCounts<T, Args extends unknown[]> = ((...args: Args) => ReactiveValue<T>) & {
|
239
|
-
[COUNTS]: SignalHookCounts;
|
240
|
-
};
|
241
|
-
|
242
|
-
export type ReactiveBuilderFunction<T, Args extends unknown[]> = ((...args: Args) => ReactiveValue<T>) & {
|
243
|
-
[COUNTS]: SignalHookCounts;
|
244
|
-
watch: () => () => void;
|
245
|
-
withParams: (...args: Args) => ReactiveBuilderFunction<T, []>;
|
246
|
-
withContexts: (...contexts: [Context<unknown>, unknown][]) => ReactiveBuilderFunction<T, Args>;
|
247
|
-
};
|
248
|
-
|
249
|
-
// Create a function-class hybrid for the builder pattern
|
250
|
-
function createBuilderFunction<T, Args extends unknown[]>(
|
251
|
-
originalFn: (...args: Args) => ReactiveValue<T>,
|
252
|
-
countsMap: Map<number, SignalHookCounts>,
|
253
|
-
args: Args,
|
254
|
-
contexts?: [Context<unknown>, unknown][],
|
255
|
-
): ReactiveBuilderFunction<T, []>;
|
256
|
-
function createBuilderFunction<T, Args extends unknown[]>(
|
257
|
-
originalFn: (...args: Args) => ReactiveValue<T>,
|
258
|
-
countsMap: Map<number, SignalHookCounts>,
|
259
|
-
args?: undefined,
|
260
|
-
contexts?: [Context<unknown>, unknown][],
|
261
|
-
): ReactiveBuilderFunction<T, Args>;
|
262
|
-
function createBuilderFunction<T, Args extends unknown[]>(
|
263
|
-
originalFn: (...args: Args) => ReactiveValue<T>,
|
264
|
-
countsMap: Map<number, SignalHookCounts>,
|
265
|
-
args?: Args,
|
266
|
-
contexts?: [Context<unknown>, unknown][],
|
267
|
-
): ReactiveBuilderFunction<T, Args> {
|
268
|
-
// Cast the function to include our additional properties
|
269
|
-
const builderFn = ((...passedArgs: Args) => {
|
270
|
-
if (args && passedArgs.length > 0) {
|
271
|
-
throw new Error('reactive function already has parameters');
|
272
|
-
}
|
273
|
-
|
274
|
-
let usedArgs = args ?? passedArgs;
|
275
|
-
|
276
|
-
const scope = getCurrentScope();
|
277
|
-
const counts = getCountsFor(originalFn.name, countsMap, scope, usedArgs);
|
278
|
-
|
279
|
-
// increment the get count since each time this is called, we're getting the value
|
280
|
-
counts.get++;
|
281
|
-
|
282
|
-
if (contexts) {
|
283
|
-
return withContexts(contexts, () => originalFn(...usedArgs));
|
284
|
-
}
|
285
|
-
|
286
|
-
return originalFn(...usedArgs);
|
287
|
-
}) as ReactiveBuilderFunction<T, Args>;
|
288
|
-
|
289
|
-
// Add the builder methods
|
290
|
-
builderFn.watch = (...args: Args) => {
|
291
|
-
const unsub = watcher(() => builderFn(...args)).addListener(() => {});
|
292
|
-
unsubs.push(unsub);
|
293
|
-
return unsub;
|
294
|
-
};
|
295
|
-
|
296
|
-
builderFn.withParams = (...withArgs: Args) => {
|
297
|
-
if (args) {
|
298
|
-
throw new Error('reactive function already has parameters');
|
299
|
-
}
|
300
|
-
|
301
|
-
return createBuilderFunction(originalFn, countsMap, withArgs, contexts);
|
302
|
-
};
|
303
|
-
|
304
|
-
builderFn.withContexts = (...withContexts: [Context<unknown>, unknown][]) => {
|
305
|
-
if (contexts) {
|
306
|
-
throw new Error('reactive function already has contexts');
|
307
|
-
}
|
308
|
-
|
309
|
-
return createBuilderFunction(originalFn, countsMap, args as Args, withContexts) as ReactiveBuilderFunction<T, Args>;
|
310
|
-
};
|
311
|
-
|
312
|
-
const scope = contexts ? ROOT_SCOPE.getChild(contexts as [ContextImpl<unknown>, unknown][]) : ROOT_SCOPE;
|
313
|
-
builderFn[COUNTS] = getCountsFor(originalFn.name, countsMap, scope, args);
|
314
|
-
|
315
|
-
return builderFn;
|
316
|
-
}
|
317
|
-
|
318
|
-
export function reactive<T, Args extends unknown[]>(
|
319
|
-
fn: (...args: Args) => T,
|
320
|
-
opts?: Partial<SignalOptionsWithInit<T, Args>>,
|
321
|
-
): ReactiveBuilderFunction<T, Args> {
|
322
|
-
const countsMap = new Map<number, SignalHookCounts>();
|
323
|
-
|
324
|
-
return createBuilderFunction(
|
325
|
-
_reactive((...args: any[]) => {
|
326
|
-
const scope = getCurrentScope();
|
327
|
-
const counts = getCountsFor(opts?.desc ?? 'unknownReactive', countsMap, scope, args);
|
328
|
-
|
329
|
-
counts.compute++;
|
330
|
-
|
331
|
-
return fn(...(args as any));
|
332
|
-
}, opts) as ReactiveFunctionWithCounts<T, Args>,
|
333
|
-
countsMap,
|
334
|
-
);
|
335
|
-
}
|
336
|
-
|
337
|
-
export const task: typeof _task = (fn, opts) => {
|
338
|
-
const counts = new SignalHookCounts(opts?.desc ?? 'unknownTask');
|
339
|
-
|
340
|
-
const wrapper = _task((...args: any[]) => {
|
341
|
-
counts.compute++;
|
342
|
-
|
343
|
-
return fn(...(args as any));
|
344
|
-
}, opts) as ReactiveTaskWithCounts<any, any>;
|
345
|
-
|
346
|
-
wrapper[COUNTS] = counts;
|
347
|
-
|
348
|
-
return wrapper;
|
349
|
-
};
|
350
|
-
|
351
|
-
export const subscription = <T>(
|
352
|
-
fn: SignalSubscribe<T>,
|
353
|
-
opts?: Partial<SignalOptionsWithInit<T, unknown[]>>,
|
354
|
-
): ReturnType<typeof _subscription<T>> => {
|
355
|
-
const counts = new SignalHookCounts(opts?.desc ?? 'unknownSubscription');
|
356
|
-
|
357
|
-
let wrapper = _subscription<T>(({ get, set, setError }) => {
|
358
|
-
counts.subscribe++;
|
359
|
-
counts.compute++;
|
360
|
-
|
361
|
-
const result = fn({
|
362
|
-
get: () => {
|
363
|
-
counts.internalGet++;
|
364
|
-
return get();
|
365
|
-
},
|
366
|
-
set: v => {
|
367
|
-
counts.internalSet++;
|
368
|
-
set(v);
|
369
|
-
},
|
370
|
-
setError: (error: unknown) => {
|
371
|
-
counts.error++;
|
372
|
-
setError(error);
|
373
|
-
},
|
374
|
-
});
|
375
|
-
|
376
|
-
let subscriptionWrapper: SignalSubscription | (() => unknown) | undefined;
|
377
|
-
|
378
|
-
if (result) {
|
379
|
-
if (typeof result === 'function') {
|
380
|
-
subscriptionWrapper = () => {
|
381
|
-
counts.unsubscribe++;
|
382
|
-
result();
|
383
|
-
};
|
384
|
-
} else {
|
385
|
-
subscriptionWrapper = {};
|
386
|
-
|
387
|
-
if (result.unsubscribe) {
|
388
|
-
subscriptionWrapper.unsubscribe = () => {
|
389
|
-
counts.unsubscribe++;
|
390
|
-
result.unsubscribe!();
|
391
|
-
};
|
392
|
-
}
|
393
|
-
|
394
|
-
if (result.update) {
|
395
|
-
subscriptionWrapper.update = () => {
|
396
|
-
counts.compute++;
|
397
|
-
counts.update++;
|
398
|
-
result.update!();
|
399
|
-
};
|
400
|
-
}
|
401
|
-
}
|
402
|
-
}
|
403
|
-
|
404
|
-
return subscriptionWrapper;
|
405
|
-
}, opts) as SubscriptionWithCounts<T>;
|
406
|
-
|
407
|
-
wrapper[COUNTS] = counts;
|
408
|
-
|
409
|
-
return wrapper as ReturnType<typeof _subscription<T>>;
|
410
|
-
};
|
@@ -1,85 +0,0 @@
|
|
1
|
-
import { describe } from 'vitest';
|
2
|
-
import { ReactiveBuilderFunction, reactive, subscription } from './instrumented-hooks.js';
|
3
|
-
import { SignalOptionsWithInit } from '../../types.js';
|
4
|
-
|
5
|
-
const createMethods = [
|
6
|
-
{
|
7
|
-
name: 'createComputed',
|
8
|
-
create: reactive,
|
9
|
-
},
|
10
|
-
{
|
11
|
-
name: 'createAsyncComputed',
|
12
|
-
create: <T, Args extends unknown[]>(
|
13
|
-
fn: (...args: Args) => T | Promise<T>,
|
14
|
-
opts?: Partial<SignalOptionsWithInit<Promise<T>, Args>>,
|
15
|
-
): ReactiveBuilderFunction<T, Args> => {
|
16
|
-
const computed = reactive(async (...args: Args) => {
|
17
|
-
return fn(...args);
|
18
|
-
}, opts);
|
19
|
-
|
20
|
-
return reactive((...args: Args) => {
|
21
|
-
return computed(...args).value as T;
|
22
|
-
});
|
23
|
-
},
|
24
|
-
},
|
25
|
-
{
|
26
|
-
name: 'createSubscription',
|
27
|
-
create: function _createSubscription<T, Args extends unknown[]>(
|
28
|
-
fn: (...args: Args) => T,
|
29
|
-
opts?: Partial<SignalOptionsWithInit<T, Args>>,
|
30
|
-
): ReactiveBuilderFunction<T, Args> {
|
31
|
-
const computed = reactive((...args: Args) => {
|
32
|
-
return subscription(
|
33
|
-
state => {
|
34
|
-
state.set(fn(...args));
|
35
|
-
|
36
|
-
return {
|
37
|
-
update: () => {
|
38
|
-
state.set(fn(...args));
|
39
|
-
},
|
40
|
-
};
|
41
|
-
},
|
42
|
-
opts as Partial<SignalOptionsWithInit<T, unknown[]>>,
|
43
|
-
);
|
44
|
-
});
|
45
|
-
|
46
|
-
return reactive((...args: Args) => {
|
47
|
-
return computed(...args).value as T;
|
48
|
-
}, opts);
|
49
|
-
},
|
50
|
-
},
|
51
|
-
];
|
52
|
-
|
53
|
-
function generatePermutations(n: number, m: number): number[][] {
|
54
|
-
const results: number[][] = [];
|
55
|
-
|
56
|
-
function generate(current: number[], remaining: number) {
|
57
|
-
if (remaining === 0) {
|
58
|
-
results.push([...current]);
|
59
|
-
return;
|
60
|
-
}
|
61
|
-
|
62
|
-
for (let i = 0; i < n; i++) {
|
63
|
-
current.push(i);
|
64
|
-
generate(current, remaining - 1);
|
65
|
-
current.pop();
|
66
|
-
}
|
67
|
-
}
|
68
|
-
|
69
|
-
generate([], m);
|
70
|
-
return results;
|
71
|
-
}
|
72
|
-
|
73
|
-
type CreateMethod = (typeof createMethods)[number]['create'];
|
74
|
-
|
75
|
-
export function permute(m: number, fn: (...args: CreateMethod[]) => void) {
|
76
|
-
const testCases = generatePermutations(createMethods.length, m);
|
77
|
-
|
78
|
-
for (const testCase of testCases) {
|
79
|
-
const testMethods = [createMethods[testCase[0]], ...testCase.slice(1).map(i => createMethods[i])];
|
80
|
-
|
81
|
-
describe(`${testMethods.map(m => m.name).join(', ')}`, () => {
|
82
|
-
fn(...testMethods.map(m => m.create));
|
83
|
-
});
|
84
|
-
}
|
85
|
-
}
|
package/src/config.ts
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
import { DerivedSignal } from './internals/derived.js';
|
2
|
-
import { SignalScope } from './internals/contexts.js';
|
3
|
-
import { ReactiveValue } from './types.js';
|
4
|
-
import { StateSignal } from './internals/state.js';
|
5
|
-
import { CURRENT_CONSUMER } from './internals/get.js';
|
6
|
-
|
7
|
-
export type FlushCallback = () => void;
|
8
|
-
|
9
|
-
export type FlushFn = (fn: FlushCallback) => void;
|
10
|
-
export type BatchFn = (fn: () => void) => void;
|
11
|
-
|
12
|
-
interface SignalHooksConfig {
|
13
|
-
scheduleFlush: FlushFn;
|
14
|
-
runBatch: BatchFn;
|
15
|
-
getFrameworkScope: () => SignalScope | undefined;
|
16
|
-
useStateSignal: <T>(signal: StateSignal<T>) => T;
|
17
|
-
useDerivedSignal: <T, Args extends unknown[]>(signal: DerivedSignal<T, Args>) => ReactiveValue<T>;
|
18
|
-
}
|
19
|
-
|
20
|
-
export let scheduleFlush: FlushFn = flushWatchers => {
|
21
|
-
setTimeout(() => {
|
22
|
-
flushWatchers();
|
23
|
-
}, 0);
|
24
|
-
};
|
25
|
-
|
26
|
-
export let runBatch: BatchFn = fn => fn();
|
27
|
-
|
28
|
-
export let getFrameworkScope: () => SignalScope | undefined = () => undefined;
|
29
|
-
|
30
|
-
let useFrameworkStateSignal: <T>(signal: StateSignal<T>) => T = signal => signal.get();
|
31
|
-
let useFrameworkDerivedSignal: <T, Args extends unknown[]>(
|
32
|
-
signal: DerivedSignal<T, Args>,
|
33
|
-
) => ReactiveValue<T> = signal => signal.get();
|
34
|
-
|
35
|
-
export function useDerivedSignal<T, Args extends unknown[]>(signal: DerivedSignal<T, Args>): ReactiveValue<T> {
|
36
|
-
if (CURRENT_CONSUMER !== undefined) {
|
37
|
-
return signal.get();
|
38
|
-
} else {
|
39
|
-
// eslint-disable-next-line react-hooks/rules-of-hooks
|
40
|
-
return useFrameworkDerivedSignal(signal);
|
41
|
-
}
|
42
|
-
}
|
43
|
-
|
44
|
-
export function useStateSignal<T>(signal: StateSignal<T>): T {
|
45
|
-
return useFrameworkStateSignal(signal);
|
46
|
-
}
|
47
|
-
|
48
|
-
export function setConfig(cfg: Partial<SignalHooksConfig>) {
|
49
|
-
scheduleFlush = cfg.scheduleFlush ?? scheduleFlush;
|
50
|
-
runBatch = cfg.runBatch ?? runBatch;
|
51
|
-
getFrameworkScope = cfg.getFrameworkScope ?? getFrameworkScope;
|
52
|
-
useFrameworkStateSignal = cfg.useStateSignal ?? useFrameworkStateSignal;
|
53
|
-
useFrameworkDerivedSignal = cfg.useDerivedSignal ?? useFrameworkDerivedSignal;
|
54
|
-
}
|
package/src/debug.ts
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
export {
|
2
|
-
setTracing,
|
3
|
-
createTracer,
|
4
|
-
createTracerFromId,
|
5
|
-
removeTracer,
|
6
|
-
VisualizerNode,
|
7
|
-
type VisualizerLink,
|
8
|
-
TracerEventType,
|
9
|
-
Tracer,
|
10
|
-
TRACER,
|
11
|
-
SignalType,
|
12
|
-
} from './trace.js';
|
13
|
-
|
14
|
-
export { scheduleTracer } from './internals/scheduling.js';
|
package/src/hooks.ts
DELETED
@@ -1,82 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
ReactiveTask,
|
3
|
-
ReactiveValue,
|
4
|
-
ReadyReactivePromise,
|
5
|
-
ReadyReactiveValue,
|
6
|
-
Signal,
|
7
|
-
SignalOptions,
|
8
|
-
SignalSubscribe,
|
9
|
-
type SignalOptionsWithInit,
|
10
|
-
} from './types.js';
|
11
|
-
import { useDerivedSignal } from './config.js';
|
12
|
-
import { getCurrentScope, SignalScope } from './internals/contexts.js';
|
13
|
-
import { createStateSignal } from './internals/state.js';
|
14
|
-
import { createDerivedSignal, DerivedSignalDefinition } from './internals/derived.js';
|
15
|
-
import { ReactivePromise } from './internals/async.js';
|
16
|
-
import { Tracer } from './trace.js';
|
17
|
-
import { equalsFrom } from './internals/utils/equals.js';
|
18
|
-
|
19
|
-
export const state = createStateSignal;
|
20
|
-
|
21
|
-
export function reactive<T, Args extends unknown[]>(
|
22
|
-
fn: (...args: Args) => T,
|
23
|
-
opts?: Partial<SignalOptionsWithInit<T, Args>>,
|
24
|
-
): (...args: Args) => ReactiveValue<T>;
|
25
|
-
export function reactive<T, Args extends unknown[]>(
|
26
|
-
fn: (...args: Args) => T,
|
27
|
-
opts: SignalOptionsWithInit<T, Args>,
|
28
|
-
): (...args: Args) => ReadyReactiveValue<T>;
|
29
|
-
export function reactive<T, Args extends unknown[]>(
|
30
|
-
fn: (...args: Args) => T,
|
31
|
-
opts?: Partial<SignalOptionsWithInit<T, Args>>,
|
32
|
-
): (...args: Args) => ReactiveValue<T> {
|
33
|
-
const def: DerivedSignalDefinition<T, Args> = {
|
34
|
-
compute: fn,
|
35
|
-
equals: equalsFrom(opts?.equals),
|
36
|
-
shouldGC: opts?.shouldGC,
|
37
|
-
isSubscription: false,
|
38
|
-
};
|
39
|
-
|
40
|
-
return (...args) => {
|
41
|
-
const scope = getCurrentScope();
|
42
|
-
const signal = scope.get(def, args, opts);
|
43
|
-
|
44
|
-
return useDerivedSignal(signal)!;
|
45
|
-
};
|
46
|
-
}
|
47
|
-
|
48
|
-
export function subscription<T>(subscribe: SignalSubscribe<T>, opts?: SignalOptions<T, unknown[]>): ReactivePromise<T>;
|
49
|
-
export function subscription<T>(
|
50
|
-
subscribe: SignalSubscribe<T>,
|
51
|
-
opts: SignalOptionsWithInit<T, unknown[]>,
|
52
|
-
): ReadyReactivePromise<T>;
|
53
|
-
export function subscription<T>(
|
54
|
-
subscribe: SignalSubscribe<T>,
|
55
|
-
opts?: Partial<SignalOptionsWithInit<T, unknown[]>>,
|
56
|
-
): ReactivePromise<T> | ReadyReactivePromise<T> {
|
57
|
-
const scope = getCurrentScope();
|
58
|
-
|
59
|
-
return ReactivePromise.createSubscription(subscribe, scope, opts);
|
60
|
-
}
|
61
|
-
|
62
|
-
export const task = <T, Args extends unknown[]>(
|
63
|
-
fn: (...args: Args) => Promise<T>,
|
64
|
-
opts?: Partial<SignalOptionsWithInit<T, Args>>,
|
65
|
-
): ReactiveTask<T, Args> => {
|
66
|
-
const scope = getCurrentScope();
|
67
|
-
|
68
|
-
return ReactivePromise.createTask(fn, scope, opts);
|
69
|
-
};
|
70
|
-
|
71
|
-
export function watcher<T>(
|
72
|
-
fn: () => T,
|
73
|
-
opts?: SignalOptions<T, unknown[]> & { scope?: SignalScope; tracer?: Tracer },
|
74
|
-
): Signal<ReactiveValue<T>> {
|
75
|
-
const def: DerivedSignalDefinition<T, unknown[]> = {
|
76
|
-
compute: fn,
|
77
|
-
equals: equalsFrom(opts?.equals),
|
78
|
-
isSubscription: false,
|
79
|
-
};
|
80
|
-
|
81
|
-
return createDerivedSignal(def, undefined, undefined, opts?.scope, opts);
|
82
|
-
}
|
package/src/index.ts
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
export type * from './types.js';
|
2
|
-
|
3
|
-
export { state, reactive, subscription, task, watcher } from './hooks.js';
|
4
|
-
|
5
|
-
export { isReactivePromise, isReactiveTask, isReactiveSubscription } from './internals/async.js';
|
6
|
-
|
7
|
-
export { callback } from './internals/get.js';
|
8
|
-
|
9
|
-
export {
|
10
|
-
createContext,
|
11
|
-
useContext,
|
12
|
-
withContexts,
|
13
|
-
setRootContexts,
|
14
|
-
SignalScope,
|
15
|
-
CONTEXT_KEY,
|
16
|
-
} from './internals/contexts.js';
|
17
|
-
|
18
|
-
export { setConfig } from './config.js';
|
19
|
-
|
20
|
-
export { hashValue, registerCustomHash } from './internals/utils/hash.js';
|