signalium 1.2.2 → 2.0.1
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 +37 -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 -23
- 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 +15 -14
- package/dist/cjs/internals/contexts.d.ts.map +1 -1
- package/dist/cjs/internals/contexts.js +52 -52
- package/dist/cjs/internals/contexts.js.map +1 -1
- package/dist/cjs/internals/core-api.d.ts +14 -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 +15 -14
- package/dist/esm/internals/contexts.d.ts.map +1 -1
- package/dist/esm/internals/contexts.js +46 -46
- package/dist/esm/internals/contexts.js.map +1 -1
- package/dist/esm/internals/core-api.d.ts +14 -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 -21
- 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 -177
- 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
package/src/trace.ts
DELETED
@@ -1,454 +0,0 @@
|
|
1
|
-
import { scheduleTracer } from './internals/scheduling.js';
|
2
|
-
import { DerivedSignal, SignalId } from './internals/derived.js';
|
3
|
-
import { Signal } from './types.js';
|
4
|
-
|
5
|
-
export let TRACER: TracerProxy | undefined;
|
6
|
-
|
7
|
-
export interface VisualizerLink {
|
8
|
-
connected: boolean;
|
9
|
-
version: number;
|
10
|
-
node: VisualizerNode;
|
11
|
-
}
|
12
|
-
|
13
|
-
export interface TracerMeta {
|
14
|
-
id: string | number;
|
15
|
-
desc: string;
|
16
|
-
params: string;
|
17
|
-
tracer?: Tracer;
|
18
|
-
}
|
19
|
-
|
20
|
-
export enum TracerEventType {
|
21
|
-
StartUpdate = 'StartUpdate',
|
22
|
-
EndUpdate = 'EndUpdate',
|
23
|
-
StartLoading = 'StartLoading',
|
24
|
-
EndLoading = 'EndLoading',
|
25
|
-
|
26
|
-
Connected = 'Connected',
|
27
|
-
Disconnected = 'Disconnected',
|
28
|
-
|
29
|
-
ConsumeState = 'ConsumeState',
|
30
|
-
}
|
31
|
-
|
32
|
-
type StartUpdateEvent = {
|
33
|
-
type: TracerEventType.StartUpdate;
|
34
|
-
id: string | number;
|
35
|
-
};
|
36
|
-
|
37
|
-
type EndUpdateEvent = {
|
38
|
-
type: TracerEventType.EndUpdate;
|
39
|
-
id: string | number;
|
40
|
-
value: unknown;
|
41
|
-
preserveChildren?: boolean;
|
42
|
-
};
|
43
|
-
|
44
|
-
type StartLoadingEvent = {
|
45
|
-
type: TracerEventType.StartLoading;
|
46
|
-
id: string | number;
|
47
|
-
};
|
48
|
-
|
49
|
-
type EndLoadingEvent = {
|
50
|
-
type: TracerEventType.EndLoading;
|
51
|
-
id: string | number;
|
52
|
-
value: unknown;
|
53
|
-
};
|
54
|
-
|
55
|
-
type ConnectedEvent = {
|
56
|
-
type: TracerEventType.Connected;
|
57
|
-
id: string | number;
|
58
|
-
childId: string | number;
|
59
|
-
nodeType: SignalType;
|
60
|
-
name?: string;
|
61
|
-
params?: string;
|
62
|
-
};
|
63
|
-
|
64
|
-
type DisconnectedEvent = {
|
65
|
-
type: TracerEventType.Disconnected;
|
66
|
-
id: string | number;
|
67
|
-
childId: string | number;
|
68
|
-
};
|
69
|
-
|
70
|
-
type ConsumeStateEvent = {
|
71
|
-
type: TracerEventType.ConsumeState;
|
72
|
-
id: string | number;
|
73
|
-
childId: string | number;
|
74
|
-
value: unknown;
|
75
|
-
setValue: (value: unknown) => void;
|
76
|
-
};
|
77
|
-
|
78
|
-
type TracerEvent =
|
79
|
-
| StartUpdateEvent
|
80
|
-
| EndUpdateEvent
|
81
|
-
| StartLoadingEvent
|
82
|
-
| EndLoadingEvent
|
83
|
-
| ConnectedEvent
|
84
|
-
| DisconnectedEvent
|
85
|
-
| ConsumeStateEvent;
|
86
|
-
|
87
|
-
export enum SignalType {
|
88
|
-
State = 'state',
|
89
|
-
Reactive = 'reactive',
|
90
|
-
Watcher = 'watcher',
|
91
|
-
}
|
92
|
-
|
93
|
-
export class VisualizerNode {
|
94
|
-
private subscribers: (() => void)[] = [];
|
95
|
-
|
96
|
-
private nextStateChildren: VisualizerNode[] = [];
|
97
|
-
|
98
|
-
public stateChildren: VisualizerNode[] = [];
|
99
|
-
public children: VisualizerLink[] = [];
|
100
|
-
public updating = true;
|
101
|
-
public loading = false;
|
102
|
-
public version = 0;
|
103
|
-
|
104
|
-
private updatingVersion = 0;
|
105
|
-
private didConnect = false;
|
106
|
-
|
107
|
-
constructor(
|
108
|
-
private tracer: Tracer,
|
109
|
-
public depth: number,
|
110
|
-
public type: SignalType,
|
111
|
-
public id: string | number,
|
112
|
-
public value: unknown,
|
113
|
-
public name?: string,
|
114
|
-
public params?: string,
|
115
|
-
private _setValue?: (value: unknown) => void,
|
116
|
-
) {
|
117
|
-
this.tracer.maxDepth = Math.max(this.tracer.maxDepth, this.depth);
|
118
|
-
}
|
119
|
-
|
120
|
-
get showParams() {
|
121
|
-
return this.tracer.showParams;
|
122
|
-
}
|
123
|
-
|
124
|
-
get showValue() {
|
125
|
-
return this.tracer.showValue;
|
126
|
-
}
|
127
|
-
|
128
|
-
get interactive() {
|
129
|
-
return this.tracer.interactive;
|
130
|
-
}
|
131
|
-
|
132
|
-
setValue(value: unknown) {
|
133
|
-
if (this.type !== SignalType.State) {
|
134
|
-
throw new Error('setValue is only allowed on state nodes');
|
135
|
-
}
|
136
|
-
|
137
|
-
this._setValue?.(value);
|
138
|
-
this.notify();
|
139
|
-
scheduleTracer(this.tracer);
|
140
|
-
}
|
141
|
-
|
142
|
-
connectChild(child: VisualizerNode): boolean {
|
143
|
-
let childLink = this.children.find(
|
144
|
-
link => link.node.id === child.id || (link.node.name === child.name && link.version !== this.updatingVersion),
|
145
|
-
);
|
146
|
-
|
147
|
-
let shouldSkip = false;
|
148
|
-
|
149
|
-
if (childLink) {
|
150
|
-
if (!child.didConnect) {
|
151
|
-
child.value = childLink.node.value;
|
152
|
-
child.children = childLink.node.children.map(link => ({
|
153
|
-
...link,
|
154
|
-
version: child.version,
|
155
|
-
}));
|
156
|
-
}
|
157
|
-
|
158
|
-
childLink.node = child;
|
159
|
-
childLink.connected = true;
|
160
|
-
childLink.version = this.updatingVersion;
|
161
|
-
shouldSkip = true;
|
162
|
-
} else {
|
163
|
-
this.children.push({
|
164
|
-
connected: true,
|
165
|
-
node: child,
|
166
|
-
version: this.updatingVersion,
|
167
|
-
});
|
168
|
-
}
|
169
|
-
|
170
|
-
child.didConnect = true;
|
171
|
-
this.notify();
|
172
|
-
|
173
|
-
return shouldSkip;
|
174
|
-
}
|
175
|
-
|
176
|
-
disconnectChild(childId: string | number) {
|
177
|
-
const childLink = this.children.find(link => link.node.id === childId);
|
178
|
-
|
179
|
-
if (!childLink) {
|
180
|
-
return;
|
181
|
-
}
|
182
|
-
|
183
|
-
childLink.connected = false;
|
184
|
-
|
185
|
-
this.notify();
|
186
|
-
}
|
187
|
-
|
188
|
-
startUpdate() {
|
189
|
-
this.updating = true;
|
190
|
-
this.updatingVersion++;
|
191
|
-
|
192
|
-
this.notify();
|
193
|
-
}
|
194
|
-
|
195
|
-
endUpdate(value: unknown, preserveChildren = false) {
|
196
|
-
this.updating = false;
|
197
|
-
this.value = value;
|
198
|
-
if (!preserveChildren) {
|
199
|
-
this.stateChildren = this.nextStateChildren;
|
200
|
-
}
|
201
|
-
this.nextStateChildren = [];
|
202
|
-
this.notify();
|
203
|
-
}
|
204
|
-
|
205
|
-
startLoading() {
|
206
|
-
this.loading = true;
|
207
|
-
this.notify();
|
208
|
-
}
|
209
|
-
|
210
|
-
endLoading(value: unknown) {
|
211
|
-
this.loading = false;
|
212
|
-
this.value = value;
|
213
|
-
this.notify();
|
214
|
-
}
|
215
|
-
|
216
|
-
consumeState(id: string | number, value: unknown, setValue: (value: unknown) => void) {
|
217
|
-
const existing = this.stateChildren.find(child => child.id === id);
|
218
|
-
|
219
|
-
if (existing) {
|
220
|
-
existing.value = value;
|
221
|
-
this.nextStateChildren.push(existing);
|
222
|
-
existing.notify();
|
223
|
-
} else {
|
224
|
-
const node = new VisualizerNode(
|
225
|
-
this.tracer,
|
226
|
-
this.depth + 1,
|
227
|
-
SignalType.State,
|
228
|
-
id,
|
229
|
-
value,
|
230
|
-
undefined,
|
231
|
-
undefined,
|
232
|
-
setValue,
|
233
|
-
);
|
234
|
-
node.updating = false;
|
235
|
-
this.nextStateChildren.push(node);
|
236
|
-
}
|
237
|
-
}
|
238
|
-
|
239
|
-
notify() {
|
240
|
-
this.version++;
|
241
|
-
for (const subscriber of this.subscribers) {
|
242
|
-
subscriber();
|
243
|
-
}
|
244
|
-
}
|
245
|
-
|
246
|
-
subscribe(subscriber: () => void) {
|
247
|
-
this.subscribers.push(subscriber);
|
248
|
-
|
249
|
-
return () => {
|
250
|
-
this.subscribers = this.subscribers.filter(s => s !== subscriber);
|
251
|
-
};
|
252
|
-
}
|
253
|
-
}
|
254
|
-
|
255
|
-
let ID = 0;
|
256
|
-
|
257
|
-
class TraceFlush {
|
258
|
-
private forceComplete = false;
|
259
|
-
public promise: Promise<void>;
|
260
|
-
public id = ID++;
|
261
|
-
constructor(tracer: Tracer, queue: TracerEvent[], previousFlush?: TraceFlush) {
|
262
|
-
this.promise = this.runFlush(tracer, queue, previousFlush);
|
263
|
-
}
|
264
|
-
|
265
|
-
complete() {
|
266
|
-
this.forceComplete = true;
|
267
|
-
return this.promise;
|
268
|
-
}
|
269
|
-
|
270
|
-
private async runFlush(tracer: Tracer, queue: TracerEvent[], previousFlush?: TraceFlush) {
|
271
|
-
if (previousFlush) {
|
272
|
-
await previousFlush.complete();
|
273
|
-
}
|
274
|
-
|
275
|
-
for (let i = 0; i < queue.length; i++) {
|
276
|
-
const event = queue[i];
|
277
|
-
const nextEvent = queue[i + 1];
|
278
|
-
|
279
|
-
const skipDelay = tracer.handleEvent(event, nextEvent);
|
280
|
-
|
281
|
-
if (!this.forceComplete && !skipDelay && tracer.delay > 0 && !document.hidden) {
|
282
|
-
await new Promise(resolve => setTimeout(resolve, tracer.delay));
|
283
|
-
}
|
284
|
-
}
|
285
|
-
}
|
286
|
-
}
|
287
|
-
|
288
|
-
export class Tracer {
|
289
|
-
private nodeMap = new Map<string | number, VisualizerNode>();
|
290
|
-
|
291
|
-
delay = 200;
|
292
|
-
maxDepth = 0;
|
293
|
-
|
294
|
-
private initialized = false;
|
295
|
-
|
296
|
-
constructor(
|
297
|
-
id: string | number,
|
298
|
-
immediate = false,
|
299
|
-
public showParams = true,
|
300
|
-
public showValue = true,
|
301
|
-
public interactive = true,
|
302
|
-
) {
|
303
|
-
// If it's immediate, we should run the first flush immediately, skipping animations
|
304
|
-
this.initialized = !immediate;
|
305
|
-
|
306
|
-
const node = new VisualizerNode(this, 0, SignalType.Watcher, id, '');
|
307
|
-
|
308
|
-
this.rootNode = node;
|
309
|
-
this.nodeMap.set(id, node);
|
310
|
-
}
|
311
|
-
|
312
|
-
public rootNode: VisualizerNode;
|
313
|
-
|
314
|
-
private eventQueue: TracerEvent[] = [];
|
315
|
-
private currentFlush: TraceFlush | undefined;
|
316
|
-
|
317
|
-
emit(event: TracerEvent) {
|
318
|
-
if (event.type === TracerEventType.Connected || event.type === TracerEventType.ConsumeState) {
|
319
|
-
const node = this.nodeMap.get(event.id);
|
320
|
-
|
321
|
-
if (!node || (event.type === TracerEventType.Connected && !event.name)) {
|
322
|
-
return;
|
323
|
-
}
|
324
|
-
|
325
|
-
if (!this.nodeMap.has(event.childId)) {
|
326
|
-
const name = event.type === TracerEventType.Connected ? event.name : undefined;
|
327
|
-
const params = event.type === TracerEventType.Connected ? event.params : undefined;
|
328
|
-
const nodeType = event.type === TracerEventType.Connected ? event.nodeType : SignalType.State;
|
329
|
-
|
330
|
-
this.nodeMap.set(
|
331
|
-
event.childId,
|
332
|
-
new VisualizerNode(this, node.depth + 1, nodeType, event.childId, '', name, params),
|
333
|
-
);
|
334
|
-
}
|
335
|
-
}
|
336
|
-
|
337
|
-
if (this.initialized) {
|
338
|
-
this.eventQueue.push(event);
|
339
|
-
} else {
|
340
|
-
this.handleEvent(event);
|
341
|
-
}
|
342
|
-
}
|
343
|
-
|
344
|
-
handleEvent(event: TracerEvent, nextEvent?: TracerEvent) {
|
345
|
-
const node = this.nodeMap.get(event.id);
|
346
|
-
|
347
|
-
if (!node) {
|
348
|
-
return true;
|
349
|
-
}
|
350
|
-
|
351
|
-
let skipDelay = nextEvent?.type === TracerEventType.StartLoading;
|
352
|
-
|
353
|
-
if (event.type === TracerEventType.Connected) {
|
354
|
-
let child = this.nodeMap.get(event.childId);
|
355
|
-
|
356
|
-
if (!child) {
|
357
|
-
throw new Error(`Child node ${event.childId} not found`);
|
358
|
-
}
|
359
|
-
|
360
|
-
skipDelay = node.connectChild(child);
|
361
|
-
} else if (event.type === TracerEventType.Disconnected) {
|
362
|
-
node.disconnectChild(event.childId);
|
363
|
-
} else if (event.type === TracerEventType.StartUpdate) {
|
364
|
-
node.startUpdate();
|
365
|
-
if (
|
366
|
-
nextEvent &&
|
367
|
-
nextEvent.id === event.id &&
|
368
|
-
(nextEvent.type === TracerEventType.EndUpdate || nextEvent.type === TracerEventType.StartLoading)
|
369
|
-
) {
|
370
|
-
skipDelay = true;
|
371
|
-
}
|
372
|
-
} else if (event.type === TracerEventType.EndUpdate) {
|
373
|
-
node.endUpdate(event.value, event.preserveChildren);
|
374
|
-
} else if (event.type === TracerEventType.StartLoading) {
|
375
|
-
node.startLoading();
|
376
|
-
skipDelay = true;
|
377
|
-
} else if (event.type === TracerEventType.EndLoading) {
|
378
|
-
node.endLoading(event.value);
|
379
|
-
} else if (event.type === TracerEventType.ConsumeState) {
|
380
|
-
node.consumeState(event.childId, event.value, event.setValue);
|
381
|
-
}
|
382
|
-
|
383
|
-
return skipDelay;
|
384
|
-
}
|
385
|
-
|
386
|
-
async flush() {
|
387
|
-
if (this.eventQueue.length === 0) {
|
388
|
-
return;
|
389
|
-
}
|
390
|
-
|
391
|
-
this.currentFlush = new TraceFlush(this, this.eventQueue, this.currentFlush);
|
392
|
-
this.eventQueue = [];
|
393
|
-
}
|
394
|
-
|
395
|
-
addListener(listener: () => void) {
|
396
|
-
this.initialized = true;
|
397
|
-
return this.rootNode.subscribe(listener);
|
398
|
-
}
|
399
|
-
}
|
400
|
-
|
401
|
-
class TracerProxy {
|
402
|
-
private tracers: Tracer[] = [];
|
403
|
-
|
404
|
-
constructor() {}
|
405
|
-
|
406
|
-
emit(event: TracerEvent) {
|
407
|
-
this.tracers.forEach(tracer => tracer.emit(event));
|
408
|
-
}
|
409
|
-
|
410
|
-
createTracer(id: string | number, immediate = false): Tracer {
|
411
|
-
const tracer = new Tracer(id, immediate);
|
412
|
-
|
413
|
-
this.tracers.push(tracer);
|
414
|
-
|
415
|
-
return tracer;
|
416
|
-
}
|
417
|
-
|
418
|
-
removeTracer(tracer: Tracer) {
|
419
|
-
this.tracers = this.tracers.filter(t => t !== tracer);
|
420
|
-
}
|
421
|
-
|
422
|
-
flush() {
|
423
|
-
this.tracers.forEach(tracer => tracer.flush());
|
424
|
-
}
|
425
|
-
}
|
426
|
-
|
427
|
-
export function setTracing(enabled: boolean) {
|
428
|
-
if (enabled) {
|
429
|
-
TRACER = new TracerProxy();
|
430
|
-
} else {
|
431
|
-
TRACER = undefined;
|
432
|
-
}
|
433
|
-
}
|
434
|
-
|
435
|
-
export function createTracer(_signal: Signal<unknown>, immediate = false) {
|
436
|
-
const signal = _signal as unknown as DerivedSignal<unknown, unknown[]>;
|
437
|
-
return createTracerFromId(signal.tracerMeta!.id, immediate);
|
438
|
-
}
|
439
|
-
|
440
|
-
export function createTracerFromId(id: string | number, immediate = false) {
|
441
|
-
if (!TRACER) {
|
442
|
-
throw new Error('Tracing is not enabled');
|
443
|
-
}
|
444
|
-
|
445
|
-
return TRACER.createTracer(id, immediate);
|
446
|
-
}
|
447
|
-
|
448
|
-
export function removeTracer(tracer: Tracer) {
|
449
|
-
if (!TRACER) {
|
450
|
-
throw new Error('Tracing is not enabled');
|
451
|
-
}
|
452
|
-
|
453
|
-
TRACER.removeTracer(tracer);
|
454
|
-
}
|
package/src/transform.ts
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
import type { NodePath, PluginObj, types as t } from '@babel/core';
|
2
|
-
|
3
|
-
export interface SignaliumAsyncTransformOptions {
|
4
|
-
transformedImports: [string, string | RegExp][];
|
5
|
-
}
|
6
|
-
|
7
|
-
export function signaliumAsyncTransform(opts?: SignaliumAsyncTransformOptions): (api: any) => PluginObj {
|
8
|
-
const transformedImports: Record<string, [string | RegExp]> = {
|
9
|
-
callback: ['signalium'],
|
10
|
-
reactive: ['signalium'],
|
11
|
-
subscription: ['signalium'],
|
12
|
-
task: ['signalium'],
|
13
|
-
};
|
14
|
-
|
15
|
-
for (const [name, path] of opts?.transformedImports ?? []) {
|
16
|
-
const existing = transformedImports[name];
|
17
|
-
|
18
|
-
if (existing) {
|
19
|
-
existing.push(path);
|
20
|
-
} else {
|
21
|
-
transformedImports[name] = [path];
|
22
|
-
}
|
23
|
-
}
|
24
|
-
|
25
|
-
return api => {
|
26
|
-
const t = api.types;
|
27
|
-
|
28
|
-
const isReactiveCall = (path: any) => {
|
29
|
-
if (!t.isCallExpression(path.node)) return false;
|
30
|
-
const callee = path.node.callee;
|
31
|
-
|
32
|
-
const importPath = transformedImports[callee.name];
|
33
|
-
|
34
|
-
if (!importPath) return false;
|
35
|
-
|
36
|
-
// Check if reactive is imported from signalium
|
37
|
-
const binding = path.scope.getBinding(callee.name);
|
38
|
-
if (!binding || !t.isImportSpecifier(binding.path.node)) return false;
|
39
|
-
|
40
|
-
const importDecl = binding.path.parent;
|
41
|
-
|
42
|
-
if (!t.isImportDeclaration(importDecl)) return false;
|
43
|
-
|
44
|
-
return importPath.some(p =>
|
45
|
-
typeof p === 'string' ? importDecl.source.value === p : p.test(importDecl.source.value),
|
46
|
-
);
|
47
|
-
};
|
48
|
-
|
49
|
-
function convertReactiveToGenerator(path: NodePath<t.FunctionExpression | t.ArrowFunctionExpression>) {
|
50
|
-
// Only transform if parent is a reactive() call
|
51
|
-
const parentPath = path.parentPath;
|
52
|
-
if (!isReactiveCall(parentPath)) return;
|
53
|
-
if (!path.node.async) return;
|
54
|
-
|
55
|
-
// Transform all await expressions to yields
|
56
|
-
path.traverse({
|
57
|
-
AwaitExpression(awaitPath) {
|
58
|
-
const funcParent = awaitPath.getFunctionParent();
|
59
|
-
if (funcParent?.node !== path.node) return;
|
60
|
-
|
61
|
-
awaitPath.replaceWith(t.yieldExpression(awaitPath.node.argument));
|
62
|
-
},
|
63
|
-
});
|
64
|
-
|
65
|
-
// Remove async keyword
|
66
|
-
path.node.async = false;
|
67
|
-
|
68
|
-
if (t.isArrowFunctionExpression(path.node)) {
|
69
|
-
// Convert arrow function to regular function expression
|
70
|
-
let hasThis = false;
|
71
|
-
|
72
|
-
// Scan for this keywords
|
73
|
-
path.traverse({
|
74
|
-
ThisExpression() {
|
75
|
-
hasThis = true;
|
76
|
-
},
|
77
|
-
});
|
78
|
-
|
79
|
-
const functionBody = t.isBlockStatement(path.node.body)
|
80
|
-
? path.node.body
|
81
|
-
: t.blockStatement([t.returnStatement(path.node.body)]);
|
82
|
-
|
83
|
-
const newFunction = t.functionExpression(
|
84
|
-
null,
|
85
|
-
path.node.params,
|
86
|
-
functionBody,
|
87
|
-
true, // generator
|
88
|
-
false, // async
|
89
|
-
);
|
90
|
-
|
91
|
-
// If we found 'this' usage, wrap in bind call
|
92
|
-
if (hasThis) {
|
93
|
-
path.replaceWith(
|
94
|
-
t.callExpression(t.memberExpression(newFunction, t.identifier('bind')), [t.thisExpression()]),
|
95
|
-
);
|
96
|
-
} else {
|
97
|
-
path.replaceWith(newFunction);
|
98
|
-
}
|
99
|
-
} else {
|
100
|
-
// Regular function - just set generator flag
|
101
|
-
path.node.generator = true;
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
return {
|
106
|
-
name: 'transform-reactive-async',
|
107
|
-
visitor: {
|
108
|
-
FunctionExpression: convertReactiveToGenerator,
|
109
|
-
ArrowFunctionExpression: convertReactiveToGenerator,
|
110
|
-
},
|
111
|
-
};
|
112
|
-
};
|
113
|
-
}
|
package/src/types.ts
DELETED
@@ -1,115 +0,0 @@
|
|
1
|
-
import { SignalScope } from './internals/contexts.js';
|
2
|
-
|
3
|
-
export interface Signal<T = unknown> {
|
4
|
-
get(): T;
|
5
|
-
addListener(listener: SignalListener): () => void;
|
6
|
-
}
|
7
|
-
|
8
|
-
export interface StateSignal<T> extends Signal<T> {
|
9
|
-
set(value: T): void;
|
10
|
-
peek(): T;
|
11
|
-
update(updater: (value: T) => T): void;
|
12
|
-
}
|
13
|
-
|
14
|
-
/**
|
15
|
-
* @deprecated Use `StateSignal` instead.
|
16
|
-
*/
|
17
|
-
export type WriteableSignal<T> = StateSignal<T>;
|
18
|
-
|
19
|
-
export type SignalEquals<T> = (prev: T, next: T) => boolean;
|
20
|
-
|
21
|
-
export type SignalListener = () => void;
|
22
|
-
|
23
|
-
export type SignalSubscription = {
|
24
|
-
update?(): void;
|
25
|
-
unsubscribe?(): void;
|
26
|
-
};
|
27
|
-
|
28
|
-
export interface SubscriptionState<T> {
|
29
|
-
get: () => T | undefined;
|
30
|
-
set: (value: T | Promise<T>) => void;
|
31
|
-
setError: (error: unknown) => void;
|
32
|
-
}
|
33
|
-
|
34
|
-
export type SignalSubscribe<T> = (
|
35
|
-
state: SubscriptionState<T>,
|
36
|
-
) => SignalSubscription | (() => unknown) | undefined | void;
|
37
|
-
|
38
|
-
export interface SignalOptions<T, Args extends unknown[]> {
|
39
|
-
equals?: SignalEquals<T> | false;
|
40
|
-
id?: string;
|
41
|
-
desc?: string;
|
42
|
-
scope?: SignalScope;
|
43
|
-
paramKey?: (...args: Args) => string;
|
44
|
-
|
45
|
-
/**
|
46
|
-
* Called when signal's watchCount reaches 0.
|
47
|
-
* Return `true` to allow GC, `false` to prevent it.
|
48
|
-
* If not provided, defaults to always allowing GC.
|
49
|
-
*/
|
50
|
-
shouldGC?: (signal: object, value: T, args: Args) => boolean;
|
51
|
-
}
|
52
|
-
|
53
|
-
export interface SignalOptionsWithInit<T, Args extends unknown[]> extends SignalOptions<T, Args> {
|
54
|
-
initValue: T extends Promise<infer U> ? U : T extends Generator<any, infer U, any> ? U : T;
|
55
|
-
}
|
56
|
-
|
57
|
-
export interface Thenable<T> {
|
58
|
-
then(onfulfilled?: (value: T) => void, onrejected?: (reason: unknown) => void): void;
|
59
|
-
finally: any;
|
60
|
-
catch: any;
|
61
|
-
[Symbol.toStringTag]: string;
|
62
|
-
}
|
63
|
-
|
64
|
-
export interface BaseReactivePromise<T> extends Promise<T> {
|
65
|
-
value: T | undefined;
|
66
|
-
error: unknown;
|
67
|
-
|
68
|
-
isPending: boolean;
|
69
|
-
isRejected: boolean;
|
70
|
-
isResolved: boolean;
|
71
|
-
isSettled: boolean;
|
72
|
-
isReady: boolean;
|
73
|
-
|
74
|
-
rerun(): void;
|
75
|
-
}
|
76
|
-
|
77
|
-
export interface PendingReactivePromise<T> extends BaseReactivePromise<T> {
|
78
|
-
value: undefined;
|
79
|
-
isReady: false;
|
80
|
-
}
|
81
|
-
|
82
|
-
export interface ReadyReactivePromise<T> extends BaseReactivePromise<T> {
|
83
|
-
value: T;
|
84
|
-
isReady: true;
|
85
|
-
}
|
86
|
-
|
87
|
-
export type ReactivePromise<T> = PendingReactivePromise<T> | ReadyReactivePromise<T>;
|
88
|
-
|
89
|
-
export type ReactiveTask<T, Args extends unknown[]> = Omit<ReactivePromise<T>, 'notify'> & {
|
90
|
-
run(...args: Args): ReactivePromise<T>;
|
91
|
-
};
|
92
|
-
|
93
|
-
export type ReactiveSubscription<T> = Omit<ReactivePromise<T>, 'rerun'>;
|
94
|
-
|
95
|
-
export type ReactiveValue<T> =
|
96
|
-
// We have to first check if T is a ReactiveTask, because it will also match Promise<T>
|
97
|
-
T extends ReactiveTask<infer U, infer Args>
|
98
|
-
? ReactiveTask<U, Args>
|
99
|
-
: T extends Promise<infer U>
|
100
|
-
? ReactivePromise<U>
|
101
|
-
: T extends Generator<any, infer U>
|
102
|
-
? ReactivePromise<U>
|
103
|
-
: T;
|
104
|
-
|
105
|
-
// This type is used when initial values are provided to async functions and
|
106
|
-
// subscriptions. It allows us to skip checking `isReady` when there is always
|
107
|
-
// a guaranteed value to return.
|
108
|
-
export type ReadyReactiveValue<T> =
|
109
|
-
T extends ReactiveTask<infer U, infer Args>
|
110
|
-
? ReactiveTask<U, Args>
|
111
|
-
: T extends Promise<infer U>
|
112
|
-
? ReadyReactivePromise<U>
|
113
|
-
: T extends Generator<any, infer U>
|
114
|
-
? ReadyReactivePromise<U>
|
115
|
-
: T;
|
package/src/weakref.ts
DELETED
package/tsconfig.json
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
{
|
2
|
-
"extends": "../../tsconfig.json",
|
3
|
-
"compilerOptions": {
|
4
|
-
"outDir": "dist/esm",
|
5
|
-
"rootDir": "src",
|
6
|
-
"declaration": true,
|
7
|
-
"declarationMap": true,
|
8
|
-
"sourceMap": true,
|
9
|
-
"jsx": "react-jsx"
|
10
|
-
},
|
11
|
-
"include": ["src"],
|
12
|
-
"exclude": ["**/__tests__"]
|
13
|
-
}
|