@askrjs/askr 0.0.48 → 0.0.49
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/dist/benchmark.js +6 -6
- package/dist/benchmark.js.map +1 -1
- package/dist/boot/hydration.js +140 -0
- package/dist/boot/hydration.js.map +1 -0
- package/dist/boot/index.d.ts +3 -56
- package/dist/boot/index.d.ts.map +1 -1
- package/dist/boot/index.js +62 -410
- package/dist/boot/index.js.map +1 -1
- package/dist/boot/root-lifecycle.d.ts +15 -0
- package/dist/boot/root-lifecycle.d.ts.map +1 -0
- package/dist/boot/root-lifecycle.js +205 -0
- package/dist/boot/root-lifecycle.js.map +1 -0
- package/dist/boot/route-startup.js +45 -0
- package/dist/boot/route-startup.js.map +1 -0
- package/dist/boot/types.d.ts +62 -0
- package/dist/boot/types.d.ts.map +1 -0
- package/dist/common/component.d.ts +3 -1
- package/dist/common/component.d.ts.map +1 -1
- package/dist/common/jsx.d.ts +1 -1
- package/dist/common/jsx.d.ts.map +1 -1
- package/dist/common/jsx.js.map +1 -1
- package/dist/common/props.d.ts +1 -1
- package/dist/common/render-context.js +55 -0
- package/dist/common/render-context.js.map +1 -0
- package/dist/common/router.d.ts +5 -1
- package/dist/common/router.d.ts.map +1 -1
- package/dist/common/ssr.d.ts +1 -1
- package/dist/common/ssr.js.map +1 -1
- package/dist/common/vnode.d.ts +5 -4
- package/dist/common/vnode.d.ts.map +1 -1
- package/dist/common/vnode.js.map +1 -1
- package/dist/components/error-boundary.d.ts +1 -1
- package/dist/components/error-boundary.js +2 -1
- package/dist/components/error-boundary.js.map +1 -1
- package/dist/components/link.js.map +1 -1
- package/dist/control/for.js +2 -1
- package/dist/control/for.js.map +1 -1
- package/dist/data/data-runtime.d.ts +28 -0
- package/dist/data/data-runtime.d.ts.map +1 -0
- package/dist/data/data-runtime.js +114 -0
- package/dist/data/data-runtime.js.map +1 -0
- package/dist/data/index.d.ts +6 -142
- package/dist/data/index.js +5 -539
- package/dist/data/invalidation.d.ts +9 -0
- package/dist/data/invalidation.d.ts.map +1 -0
- package/dist/data/invalidation.js +27 -0
- package/dist/data/invalidation.js.map +1 -0
- package/dist/data/mutation-cell.d.ts +28 -0
- package/dist/data/mutation-cell.d.ts.map +1 -0
- package/dist/data/mutation-cell.js +132 -0
- package/dist/data/mutation-cell.js.map +1 -0
- package/dist/data/query-cell.d.ts +46 -0
- package/dist/data/query-cell.d.ts.map +1 -0
- package/dist/data/query-cell.js +290 -0
- package/dist/data/query-cell.js.map +1 -0
- package/dist/data/query-key.js +42 -0
- package/dist/data/query-key.js.map +1 -0
- package/dist/data/shared.js +20 -0
- package/dist/data/shared.js.map +1 -0
- package/dist/data/types.d.ts +161 -0
- package/dist/data/types.d.ts.map +1 -0
- package/dist/foundations/icon/icon.d.ts.map +1 -1
- package/dist/foundations/icon/icon.js.map +1 -1
- package/dist/foundations/structures/portal.d.ts +1 -1
- package/dist/foundations/structures/portal.d.ts.map +1 -1
- package/dist/foundations/structures/portal.js +2 -1
- package/dist/foundations/structures/portal.js.map +1 -1
- package/dist/fx/fx.d.ts +1 -1
- package/dist/fx/fx.js +5 -4
- package/dist/fx/fx.js.map +1 -1
- package/dist/fx/timing.d.ts.map +1 -1
- package/dist/fx/timing.js +10 -6
- package/dist/fx/timing.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/jsx/index.d.ts +2 -1
- package/dist/jsx/index.js +3 -2
- package/dist/jsx/types.d.ts +2 -0
- package/dist/jsx/types.js +2 -1
- package/dist/jsx-runtime2.d.ts +2 -1
- package/dist/jsx-runtime2.js +3 -2
- package/dist/renderer/attributes.js +231 -0
- package/dist/renderer/attributes.js.map +1 -0
- package/dist/renderer/boundaries.js +266 -0
- package/dist/renderer/boundaries.js.map +1 -0
- package/dist/renderer/child-shape.js +85 -0
- package/dist/renderer/child-shape.js.map +1 -0
- package/dist/renderer/children.js +3 -2
- package/dist/renderer/children.js.map +1 -1
- package/dist/renderer/cleanup.js +2 -1
- package/dist/renderer/cleanup.js.map +1 -1
- package/dist/renderer/component-host-cleanup.js +68 -0
- package/dist/renderer/component-host-cleanup.js.map +1 -0
- package/dist/renderer/component-host-instances.js +65 -0
- package/dist/renderer/component-host-instances.js.map +1 -0
- package/dist/renderer/component-host.js +247 -0
- package/dist/renderer/component-host.js.map +1 -0
- package/dist/renderer/dom-host.js +13 -0
- package/dist/renderer/dom-host.js.map +1 -0
- package/dist/renderer/dom-internal.js +185 -0
- package/dist/renderer/dom-internal.js.map +1 -0
- package/dist/renderer/dom.js +9 -2356
- package/dist/renderer/element-children.js +279 -0
- package/dist/renderer/element-children.js.map +1 -0
- package/dist/renderer/env.js +2 -1
- package/dist/renderer/error-boundary-dom.js +29 -0
- package/dist/renderer/error-boundary-dom.js.map +1 -0
- package/dist/renderer/evaluate-dom-range.js +85 -0
- package/dist/renderer/evaluate-dom-range.js.map +1 -0
- package/dist/renderer/evaluate-reconcile.js +281 -0
- package/dist/renderer/evaluate-reconcile.js.map +1 -0
- package/dist/renderer/evaluate.js +13 -399
- package/dist/renderer/evaluate.js.map +1 -1
- package/dist/renderer/fastpath.js +6 -5
- package/dist/renderer/fastpath.js.map +1 -1
- package/dist/renderer/for-commit-dom-map.js +83 -0
- package/dist/renderer/for-commit-dom-map.js.map +1 -0
- package/dist/renderer/for-commit-removal.js +36 -0
- package/dist/renderer/for-commit-removal.js.map +1 -0
- package/dist/renderer/for-commit-reorder.js +89 -0
- package/dist/renderer/for-commit-reorder.js.map +1 -0
- package/dist/renderer/for-commit.js +6 -188
- package/dist/renderer/for-commit.js.map +1 -1
- package/dist/renderer/index.js +28 -16
- package/dist/renderer/index.js.map +1 -1
- package/dist/renderer/keyed-children.js +32 -0
- package/dist/renderer/keyed-children.js.map +1 -0
- package/dist/renderer/keyed.js +2 -15
- package/dist/renderer/keyed.js.map +1 -1
- package/dist/renderer/namespaces.js +23 -0
- package/dist/renderer/namespaces.js.map +1 -0
- package/dist/renderer/prop-bindings.js +280 -0
- package/dist/renderer/prop-bindings.js.map +1 -0
- package/dist/renderer/reactive-child-dom.js +133 -0
- package/dist/renderer/reactive-child-dom.js.map +1 -0
- package/dist/renderer/reactive-child-sources.js +184 -0
- package/dist/renderer/reactive-child-sources.js.map +1 -0
- package/dist/renderer/reactive-children.js +294 -0
- package/dist/renderer/reactive-children.js.map +1 -0
- package/dist/renderer/reconcile-commit.js +38 -0
- package/dist/renderer/reconcile-commit.js.map +1 -0
- package/dist/renderer/reconcile-fastpaths.js +106 -0
- package/dist/renderer/reconcile-fastpaths.js.map +1 -0
- package/dist/renderer/reconcile-resolution.js +187 -0
- package/dist/renderer/reconcile-resolution.js.map +1 -0
- package/dist/renderer/reconcile.js +9 -371
- package/dist/renderer/reconcile.js.map +1 -1
- package/dist/renderer/retained-element-rollback.js +276 -0
- package/dist/renderer/retained-element-rollback.js.map +1 -0
- package/dist/renderer/stable-patch.js +82 -0
- package/dist/renderer/stable-patch.js.map +1 -0
- package/dist/renderer/static-reuse.js +96 -0
- package/dist/renderer/static-reuse.js.map +1 -0
- package/dist/renderer/types.js +2 -1
- package/dist/renderer/utils.js +4 -4
- package/dist/renderer/utils.js.map +1 -1
- package/dist/resources/index.d.ts +3 -2
- package/dist/resources/index.js +5 -2
- package/dist/router/access.js +36 -0
- package/dist/router/access.js.map +1 -0
- package/dist/router/activity.d.ts +10 -0
- package/dist/router/activity.d.ts.map +1 -0
- package/dist/router/activity.js +89 -0
- package/dist/router/activity.js.map +1 -0
- package/dist/router/authoring.d.ts +22 -0
- package/dist/router/authoring.d.ts.map +1 -0
- package/dist/router/authoring.js +198 -0
- package/dist/router/authoring.js.map +1 -0
- package/dist/router/index.d.ts +12 -4
- package/dist/router/index.js +10 -3
- package/dist/router/internal-types.d.ts +31 -0
- package/dist/router/internal-types.d.ts.map +1 -0
- package/dist/router/lazy.d.ts +19 -0
- package/dist/router/lazy.d.ts.map +1 -0
- package/dist/router/lazy.js +52 -0
- package/dist/router/lazy.js.map +1 -0
- package/dist/router/manifest.d.ts +10 -0
- package/dist/router/manifest.d.ts.map +1 -0
- package/dist/router/manifest.js +49 -0
- package/dist/router/manifest.js.map +1 -0
- package/dist/router/navigate.d.ts +4 -51
- package/dist/router/navigate.d.ts.map +1 -1
- package/dist/router/navigate.js +16 -459
- package/dist/router/navigate.js.map +1 -1
- package/dist/router/navigation-registry.d.ts +32 -0
- package/dist/router/navigation-registry.d.ts.map +1 -0
- package/dist/router/navigation-registry.js +105 -0
- package/dist/router/navigation-registry.js.map +1 -0
- package/dist/router/navigation-scroll.d.ts +14 -0
- package/dist/router/navigation-scroll.d.ts.map +1 -0
- package/dist/router/navigation-scroll.js +93 -0
- package/dist/router/navigation-scroll.js.map +1 -0
- package/dist/router/navigation-targets.d.ts +31 -0
- package/dist/router/navigation-targets.d.ts.map +1 -0
- package/dist/router/navigation-targets.js +253 -0
- package/dist/router/navigation-targets.js.map +1 -0
- package/dist/router/policy.d.ts +7 -1
- package/dist/router/policy.d.ts.map +1 -1
- package/dist/router/policy.js +27 -9
- package/dist/router/policy.js.map +1 -1
- package/dist/router/rendering.d.ts +10 -0
- package/dist/router/rendering.d.ts.map +1 -0
- package/dist/router/rendering.js +45 -0
- package/dist/router/rendering.js.map +1 -0
- package/dist/router/resolution.d.ts +17 -0
- package/dist/router/resolution.d.ts.map +1 -0
- package/dist/router/resolution.js +253 -0
- package/dist/router/resolution.js.map +1 -0
- package/dist/router/route-query.d.ts +17 -0
- package/dist/router/route-query.d.ts.map +1 -0
- package/dist/router/route-query.js +47 -0
- package/dist/router/route-query.js.map +1 -0
- package/dist/router/route.d.ts +8 -149
- package/dist/router/route.js +8 -854
- package/dist/router/store.d.ts +50 -0
- package/dist/router/store.d.ts.map +1 -0
- package/dist/router/store.js +171 -0
- package/dist/router/store.js.map +1 -0
- package/dist/runtime/access.js +45 -0
- package/dist/runtime/access.js.map +1 -0
- package/dist/runtime/child-scope.d.ts +1 -1
- package/dist/runtime/child-scope.js +4 -1
- package/dist/runtime/child-scope.js.map +1 -1
- package/dist/runtime/component-cleanup.d.ts +16 -0
- package/dist/runtime/component-cleanup.d.ts.map +1 -0
- package/dist/runtime/component-cleanup.js +70 -0
- package/dist/runtime/component-cleanup.js.map +1 -0
- package/dist/runtime/component-commit.js +165 -0
- package/dist/runtime/component-commit.js.map +1 -0
- package/dist/runtime/component-contracts.js +5 -0
- package/dist/runtime/component-facade.d.ts +5 -0
- package/dist/runtime/component-facade.js +4 -0
- package/dist/runtime/component-internal.d.ts +100 -0
- package/dist/runtime/component-internal.d.ts.map +1 -0
- package/dist/runtime/component-internal.js +219 -0
- package/dist/runtime/component-internal.js.map +1 -0
- package/dist/runtime/component-lifecycle.d.ts +49 -0
- package/dist/runtime/component-lifecycle.d.ts.map +1 -0
- package/dist/runtime/component-lifecycle.js +176 -0
- package/dist/runtime/component-lifecycle.js.map +1 -0
- package/dist/runtime/component-scope.d.ts +55 -0
- package/dist/runtime/component-scope.d.ts.map +1 -0
- package/dist/runtime/component-scope.js +154 -0
- package/dist/runtime/component-scope.js.map +1 -0
- package/dist/runtime/component.d.ts +4 -152
- package/dist/runtime/component.js +4 -692
- package/dist/runtime/context.d.ts +1 -1
- package/dist/runtime/context.js +6 -4
- package/dist/runtime/context.js.map +1 -1
- package/dist/runtime/control.d.ts +3 -3
- package/dist/runtime/control.js +2 -1
- package/dist/runtime/control.js.map +1 -1
- package/dist/runtime/derive.d.ts.map +1 -1
- package/dist/runtime/derive.js +6 -5
- package/dist/runtime/derive.js.map +1 -1
- package/dist/runtime/effect.d.ts +1 -1
- package/dist/runtime/effect.d.ts.map +1 -1
- package/dist/runtime/effect.js +2 -2
- package/dist/runtime/effect.js.map +1 -1
- package/dist/runtime/events.js +3 -3
- package/dist/runtime/events.js.map +1 -1
- package/dist/runtime/fastlane.js +13 -27
- package/dist/runtime/fastlane.js.map +1 -1
- package/dist/runtime/for-bench.d.ts +1 -1
- package/dist/runtime/for-bench.js +1 -4
- package/dist/runtime/for-bench.js.map +1 -1
- package/dist/runtime/for-internal.d.ts +43 -0
- package/dist/runtime/for-internal.d.ts.map +1 -0
- package/dist/runtime/for-internal.js +98 -0
- package/dist/runtime/for-internal.js.map +1 -0
- package/dist/runtime/for-reconcile.d.ts +8 -0
- package/dist/runtime/for-reconcile.d.ts.map +1 -0
- package/dist/runtime/for-reconcile.js +389 -0
- package/dist/runtime/for-reconcile.js.map +1 -0
- package/dist/runtime/for-scopes.d.ts +26 -0
- package/dist/runtime/for-scopes.d.ts.map +1 -0
- package/dist/runtime/for-scopes.js +160 -0
- package/dist/runtime/for-scopes.js.map +1 -0
- package/dist/runtime/for-signals.d.ts +30 -0
- package/dist/runtime/for-signals.d.ts.map +1 -0
- package/dist/runtime/for-signals.js +139 -0
- package/dist/runtime/for-signals.js.map +1 -0
- package/dist/runtime/for.d.ts +4 -66
- package/dist/runtime/for.js +5 -773
- package/dist/runtime/lifecycle-operations.d.ts +31 -0
- package/dist/runtime/lifecycle-operations.d.ts.map +1 -0
- package/dist/runtime/lifecycle-operations.js +195 -0
- package/dist/runtime/lifecycle-operations.js.map +1 -0
- package/dist/runtime/operations.d.ts +3 -40
- package/dist/runtime/operations.js +2 -357
- package/dist/runtime/readable.d.ts +2 -3
- package/dist/runtime/readable.d.ts.map +1 -1
- package/dist/runtime/readable.js +6 -5
- package/dist/runtime/readable.js.map +1 -1
- package/dist/runtime/resource-cell.js +2 -2
- package/dist/runtime/resource-cell.js.map +1 -1
- package/dist/runtime/resource-operation.d.ts +13 -0
- package/dist/runtime/resource-operation.d.ts.map +1 -0
- package/dist/runtime/resource-operation.js +170 -0
- package/dist/runtime/resource-operation.js.map +1 -0
- package/dist/runtime/runtime.d.ts +42 -0
- package/dist/runtime/runtime.d.ts.map +1 -0
- package/dist/runtime/runtime.js +59 -0
- package/dist/runtime/runtime.js.map +1 -0
- package/dist/runtime/scheduler.d.ts +5 -1
- package/dist/runtime/scheduler.d.ts.map +1 -1
- package/dist/runtime/scheduler.js +17 -17
- package/dist/runtime/scheduler.js.map +1 -1
- package/dist/runtime/selector.js +4 -3
- package/dist/runtime/selector.js.map +1 -1
- package/dist/runtime/snapshot-source.d.ts +1 -1
- package/dist/runtime/snapshot-source.js +1 -1
- package/dist/runtime/state.js +2 -1
- package/dist/runtime/state.js.map +1 -1
- package/dist/ssg/batch-render.js +2 -1
- package/dist/ssg/batch-render.js.map +1 -1
- package/dist/ssg/create-static-gen.d.ts +9 -3
- package/dist/ssg/create-static-gen.d.ts.map +1 -1
- package/dist/ssg/create-static-gen.js +12 -99
- package/dist/ssg/create-static-gen.js.map +1 -1
- package/dist/ssg/generation-plan.js +70 -0
- package/dist/ssg/generation-plan.js.map +1 -0
- package/dist/ssg/incremental-manifest.js +1 -1
- package/dist/ssg/static-routes.js +101 -0
- package/dist/ssg/static-routes.js.map +1 -0
- package/dist/ssg/types.d.ts +15 -7
- package/dist/ssg/types.d.ts.map +1 -1
- package/dist/ssr/boundaries.js +113 -0
- package/dist/ssr/boundaries.js.map +1 -0
- package/dist/ssr/component-runtime.js +111 -0
- package/dist/ssr/component-runtime.js.map +1 -0
- package/dist/ssr/context.d.ts +3 -1
- package/dist/ssr/context.d.ts.map +1 -1
- package/dist/ssr/context.js +9 -2
- package/dist/ssr/context.js.map +1 -1
- package/dist/ssr/errors.d.ts +2 -0
- package/dist/ssr/errors.js +11 -1
- package/dist/ssr/errors.js.map +1 -1
- package/dist/ssr/escape.js +3 -3
- package/dist/ssr/escape.js.map +1 -1
- package/dist/ssr/hydration-data.js +10 -0
- package/dist/ssr/hydration-data.js.map +1 -0
- package/dist/ssr/hydration-verify.d.ts +12 -0
- package/dist/ssr/hydration-verify.d.ts.map +1 -0
- package/dist/ssr/hydration-verify.js +144 -0
- package/dist/ssr/hydration-verify.js.map +1 -0
- package/dist/ssr/index-internal.d.ts +15 -0
- package/dist/ssr/index-internal.d.ts.map +1 -0
- package/dist/ssr/index-internal.js +19 -0
- package/dist/ssr/index-internal.js.map +1 -0
- package/dist/ssr/index.d.ts +5 -57
- package/dist/ssr/index.js +3 -738
- package/dist/ssr/render-keys.js +9 -32
- package/dist/ssr/render-keys.js.map +1 -1
- package/dist/ssr/render-resolved.d.ts +1 -1
- package/dist/ssr/render-resolved.d.ts.map +1 -1
- package/dist/ssr/render-resolved.js +4 -2
- package/dist/ssr/render-resolved.js.map +1 -1
- package/dist/ssr/render-sync.d.ts +21 -0
- package/dist/ssr/render-sync.d.ts.map +1 -0
- package/dist/ssr/render-sync.js +275 -0
- package/dist/ssr/render-sync.js.map +1 -0
- package/dist/ssr/route-policy-resolution.js +77 -0
- package/dist/ssr/route-policy-resolution.js.map +1 -0
- package/dist/ssr/route-render.d.ts +77 -0
- package/dist/ssr/route-render.d.ts.map +1 -0
- package/dist/ssr/route-render.js +119 -0
- package/dist/ssr/route-render.js.map +1 -0
- package/dist/ssr/sink.d.ts +26 -0
- package/dist/ssr/sink.d.ts.map +1 -0
- package/dist/ssr/types.d.ts +1 -0
- package/dist/ssr/types.d.ts.map +1 -1
- package/dist/ssr/verify-hydration.js.map +1 -1
- package/dist/testing/index.d.ts +1 -2
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +2 -1
- package/dist/testing/index.js.map +1 -1
- package/package.json +4 -3
- package/dist/data/index.d.ts.map +0 -1
- package/dist/data/index.js.map +0 -1
- package/dist/renderer/dom.js.map +0 -1
- package/dist/router/route.d.ts.map +0 -1
- package/dist/router/route.js.map +0 -1
- package/dist/runtime/component.d.ts.map +0 -1
- package/dist/runtime/component.js.map +0 -1
- package/dist/runtime/for.d.ts.map +0 -1
- package/dist/runtime/for.js.map +0 -1
- package/dist/runtime/operations.d.ts.map +0 -1
- package/dist/runtime/operations.js.map +0 -1
- package/dist/runtime/ssr-bridge.js +0 -24
- package/dist/runtime/ssr-bridge.js.map +0 -1
- package/dist/ssr/index.d.ts.map +0 -1
- package/dist/ssr/index.js.map +0 -1
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
//#region src/runtime/lifecycle-operations.d.ts
|
|
2
|
+
type ActivityPredicate = () => boolean;
|
|
3
|
+
interface TimerOptions {
|
|
4
|
+
when?: ActivityPredicate | readonly ActivityPredicate[];
|
|
5
|
+
}
|
|
6
|
+
declare function routeActive(pathOrPaths: string | readonly string[]): ActivityPredicate;
|
|
7
|
+
declare function documentVisible(): ActivityPredicate;
|
|
8
|
+
declare function windowFocused(): ActivityPredicate;
|
|
9
|
+
type ListenerOptions = boolean | AddEventListenerOptions | undefined;
|
|
10
|
+
declare function on(target: EventTarget, event: string, handler: EventListener, options?: ListenerOptions): void;
|
|
11
|
+
declare function timer(intervalMs: number, fn: () => void, options?: TimerOptions): void;
|
|
12
|
+
declare function stream<T>(_source: unknown, _options?: Record<string, unknown>): {
|
|
13
|
+
value: T | null;
|
|
14
|
+
pending: boolean;
|
|
15
|
+
error: Error | null;
|
|
16
|
+
};
|
|
17
|
+
declare function task(fn: () => void | (() => void) | PromiseLike<void | (() => void)>): void;
|
|
18
|
+
/**
|
|
19
|
+
* Capture the result of a synchronous expression at call time and return a
|
|
20
|
+
* thunk that returns the captured value later. This is a low-level helper for
|
|
21
|
+
* cases where async continuations need to observe a snapshot of values at the
|
|
22
|
+
* moment scheduling occurred.
|
|
23
|
+
*
|
|
24
|
+
* Usage (public API):
|
|
25
|
+
* const snapshot = capture(() => someState());
|
|
26
|
+
* Promise.resolve().then(() => { use(snapshot()); });
|
|
27
|
+
*/
|
|
28
|
+
declare function capture<T>(fn: () => T): () => T;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { ActivityPredicate, TimerOptions, capture, documentVisible, on, routeActive, stream, task, timer, windowFocused };
|
|
31
|
+
//# sourceMappingURL=lifecycle-operations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-operations.d.ts","names":[],"sources":["../../src/runtime/lifecycle-operations.ts"],"mappings":";KAQY,iBAAA;AAAA,UAEK,YAAA;EACf,IAAA,GAAO,iBAAA,YAA6B,iBAAiB;AAAA;AAAA,iBAsDvC,WAAA,CACd,WAAA,+BACC,iBAAiB;AAAA,iBAIJ,eAAA,IAAmB,iBAAiB;AAAA,iBAKpC,aAAA,IAAiB,iBAAiB;AAAA,KAO7C,eAAA,aAA4B,uBAAuB;AAAA,iBAuGxC,EAAA,CACd,MAAA,EAAQ,WAAA,EACR,KAAA,UACA,OAAA,EAAS,aAAA,EACT,OAAA,GAAU,eAAA;AAAA,iBA8FI,KAAA,CACd,UAAA,UACA,EAAA,cACA,OAAA,GAAU,YAAY;AAAA,iBA8BR,MAAA,IACd,OAAA,WACA,QAAA,GAAW,MAAA;EACR,KAAA,EAAO,CAAA;EAAU,OAAA;EAAkB,KAAA,EAAO,KAAA;AAAA;AAAA,iBAK/B,IAAA,CACd,EAAgE,8BAAhC,WAAW;;;;AAnQzB;AAIpB;;;;AAAoD;AAKpD;iBAqSgB,OAAA,IAAW,EAAA,QAAU,CAAA,SAAU,CAAC"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { claimHookIndex, getCurrentComponentInstance } from "./component-scope.js";
|
|
2
|
+
import { registerCommitOperation } from "./component-internal.js";
|
|
3
|
+
import "./component.js";
|
|
4
|
+
import { isRouteActivityActive } from "../common/route-activity.js";
|
|
5
|
+
//#region src/runtime/lifecycle-operations.ts
|
|
6
|
+
function normalizePredicates(predicates) {
|
|
7
|
+
if (!predicates) return [];
|
|
8
|
+
return typeof predicates === "function" ? [predicates] : predicates;
|
|
9
|
+
}
|
|
10
|
+
function allPredicatesPass(predicates) {
|
|
11
|
+
for (const predicate of predicates) if (!predicate()) return false;
|
|
12
|
+
return true;
|
|
13
|
+
}
|
|
14
|
+
function getLifecycleSlot(instance, index, kind, create) {
|
|
15
|
+
const existing = instance.lifecycleSlots[index];
|
|
16
|
+
if (existing) {
|
|
17
|
+
const slot = existing;
|
|
18
|
+
if (slot.kind !== kind) throw new Error(`${kind}() lifecycle order violation: slot ${index} already belongs to ${slot.kind}(). Keep lifecycle primitives in a stable top-level order.`);
|
|
19
|
+
return existing;
|
|
20
|
+
}
|
|
21
|
+
const slot = create();
|
|
22
|
+
instance.lifecycleSlots[index] = slot;
|
|
23
|
+
return slot;
|
|
24
|
+
}
|
|
25
|
+
function routeActive(pathOrPaths) {
|
|
26
|
+
return () => isRouteActivityActive(pathOrPaths);
|
|
27
|
+
}
|
|
28
|
+
function documentVisible() {
|
|
29
|
+
return () => typeof document === "undefined" || document.visibilityState !== "hidden";
|
|
30
|
+
}
|
|
31
|
+
function windowFocused() {
|
|
32
|
+
return () => typeof document === "undefined" || typeof document.hasFocus !== "function" || document.hasFocus();
|
|
33
|
+
}
|
|
34
|
+
function normalizeListenerOptions(options) {
|
|
35
|
+
if (options === void 0 || typeof options === "boolean") return options;
|
|
36
|
+
return {
|
|
37
|
+
...options.capture !== void 0 ? { capture: options.capture } : {},
|
|
38
|
+
...options.once !== void 0 ? { once: options.once } : {},
|
|
39
|
+
...options.passive !== void 0 ? { passive: options.passive } : {},
|
|
40
|
+
...options.signal !== void 0 ? { signal: options.signal } : {}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function listenerOptionsEqual(a, b) {
|
|
44
|
+
if (a === b) return true;
|
|
45
|
+
if (typeof a === "boolean" || typeof b === "boolean") return a === b;
|
|
46
|
+
if (!a || !b) return a === b;
|
|
47
|
+
return a.capture === b.capture && a.once === b.once && a.passive === b.passive && a.signal === b.signal;
|
|
48
|
+
}
|
|
49
|
+
function detachListenerSlot(slot) {
|
|
50
|
+
if (!slot.attached || !slot.target) return;
|
|
51
|
+
slot.target.removeEventListener(slot.event, slot.listener, slot.options);
|
|
52
|
+
slot.attached = false;
|
|
53
|
+
}
|
|
54
|
+
function commitListenerSlot(instance, slot) {
|
|
55
|
+
slot.handler = slot.pendingHandler;
|
|
56
|
+
if (!slot.attached || slot.target !== slot.pendingTarget || slot.event !== slot.pendingEvent || !listenerOptionsEqual(slot.options, slot.pendingOptions)) {
|
|
57
|
+
detachListenerSlot(slot);
|
|
58
|
+
slot.target = slot.pendingTarget;
|
|
59
|
+
slot.event = slot.pendingEvent;
|
|
60
|
+
slot.options = slot.pendingOptions;
|
|
61
|
+
slot.target.addEventListener(slot.event, slot.listener, slot.options);
|
|
62
|
+
slot.attached = true;
|
|
63
|
+
}
|
|
64
|
+
if (!slot.cleanupRegistered) {
|
|
65
|
+
slot.cleanupRegistered = true;
|
|
66
|
+
instance.cleanupFns.push(() => {
|
|
67
|
+
detachListenerSlot(slot);
|
|
68
|
+
slot.cleanupRegistered = false;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function on(target, event, handler, options) {
|
|
73
|
+
const instance = getCurrentComponentInstance();
|
|
74
|
+
if (!instance) return;
|
|
75
|
+
const index = claimHookIndex(instance, "on");
|
|
76
|
+
const normalizedOptions = normalizeListenerOptions(options);
|
|
77
|
+
const slot = getLifecycleSlot(instance, index, "listener", () => {
|
|
78
|
+
const createdSlot = {
|
|
79
|
+
kind: "listener",
|
|
80
|
+
target: null,
|
|
81
|
+
event,
|
|
82
|
+
handler,
|
|
83
|
+
listener: ((evt) => {
|
|
84
|
+
createdSlot.handler.call(createdSlot.target, evt);
|
|
85
|
+
}),
|
|
86
|
+
options: void 0,
|
|
87
|
+
pendingTarget: target,
|
|
88
|
+
pendingEvent: event,
|
|
89
|
+
pendingHandler: handler,
|
|
90
|
+
pendingOptions: normalizedOptions,
|
|
91
|
+
attached: false,
|
|
92
|
+
cleanupRegistered: false
|
|
93
|
+
};
|
|
94
|
+
return createdSlot;
|
|
95
|
+
});
|
|
96
|
+
slot.pendingTarget = target;
|
|
97
|
+
slot.pendingEvent = event;
|
|
98
|
+
slot.pendingHandler = handler;
|
|
99
|
+
slot.pendingOptions = normalizedOptions;
|
|
100
|
+
registerCommitOperation(() => {
|
|
101
|
+
commitListenerSlot(instance, slot);
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function stopTimerSlot(slot) {
|
|
105
|
+
if (slot.id === null) return;
|
|
106
|
+
clearInterval(slot.id);
|
|
107
|
+
slot.id = null;
|
|
108
|
+
}
|
|
109
|
+
function startTimerSlot(slot) {
|
|
110
|
+
slot.id = setInterval(() => {
|
|
111
|
+
if (allPredicatesPass(slot.predicates)) slot.callback();
|
|
112
|
+
}, slot.intervalMs ?? slot.pendingIntervalMs);
|
|
113
|
+
}
|
|
114
|
+
function commitTimerSlot(instance, slot) {
|
|
115
|
+
const intervalChanged = slot.intervalMs !== slot.pendingIntervalMs;
|
|
116
|
+
slot.callback = slot.pendingCallback;
|
|
117
|
+
slot.predicates = slot.pendingPredicates;
|
|
118
|
+
if (slot.id === null || intervalChanged) {
|
|
119
|
+
stopTimerSlot(slot);
|
|
120
|
+
slot.intervalMs = slot.pendingIntervalMs;
|
|
121
|
+
startTimerSlot(slot);
|
|
122
|
+
}
|
|
123
|
+
if (!slot.cleanupRegistered) {
|
|
124
|
+
slot.cleanupRegistered = true;
|
|
125
|
+
instance.cleanupFns.push(() => {
|
|
126
|
+
stopTimerSlot(slot);
|
|
127
|
+
slot.cleanupRegistered = false;
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function timer(intervalMs, fn, options) {
|
|
132
|
+
const instance = getCurrentComponentInstance();
|
|
133
|
+
if (!instance) return;
|
|
134
|
+
const index = claimHookIndex(instance, "timer");
|
|
135
|
+
const predicates = normalizePredicates(options?.when);
|
|
136
|
+
const slot = getLifecycleSlot(instance, index, "timer", () => ({
|
|
137
|
+
kind: "timer",
|
|
138
|
+
id: null,
|
|
139
|
+
intervalMs: null,
|
|
140
|
+
pendingIntervalMs: intervalMs,
|
|
141
|
+
callback: fn,
|
|
142
|
+
predicates,
|
|
143
|
+
pendingCallback: fn,
|
|
144
|
+
pendingPredicates: predicates,
|
|
145
|
+
cleanupRegistered: false
|
|
146
|
+
}));
|
|
147
|
+
slot.pendingIntervalMs = intervalMs;
|
|
148
|
+
slot.pendingCallback = fn;
|
|
149
|
+
slot.pendingPredicates = predicates;
|
|
150
|
+
registerCommitOperation(() => {
|
|
151
|
+
commitTimerSlot(instance, slot);
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function stream(_source, _options) {
|
|
155
|
+
return {
|
|
156
|
+
value: null,
|
|
157
|
+
pending: true,
|
|
158
|
+
error: null
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
function task(fn) {
|
|
162
|
+
const instance = getCurrentComponentInstance();
|
|
163
|
+
if (!instance) return;
|
|
164
|
+
const slot = getLifecycleSlot(instance, claimHookIndex(instance, "task"), "task", () => ({
|
|
165
|
+
kind: "task",
|
|
166
|
+
started: false,
|
|
167
|
+
task: fn
|
|
168
|
+
}));
|
|
169
|
+
if (!slot.started) {
|
|
170
|
+
slot.task = fn;
|
|
171
|
+
registerCommitOperation(async () => {
|
|
172
|
+
if (slot.started) return;
|
|
173
|
+
slot.started = true;
|
|
174
|
+
return await slot.task();
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Capture the result of a synchronous expression at call time and return a
|
|
180
|
+
* thunk that returns the captured value later. This is a low-level helper for
|
|
181
|
+
* cases where async continuations need to observe a snapshot of values at the
|
|
182
|
+
* moment scheduling occurred.
|
|
183
|
+
*
|
|
184
|
+
* Usage (public API):
|
|
185
|
+
* const snapshot = capture(() => someState());
|
|
186
|
+
* Promise.resolve().then(() => { use(snapshot()); });
|
|
187
|
+
*/
|
|
188
|
+
function capture(fn) {
|
|
189
|
+
const value = fn();
|
|
190
|
+
return () => value;
|
|
191
|
+
}
|
|
192
|
+
//#endregion
|
|
193
|
+
export { capture, documentVisible, on, routeActive, stream, task, timer, windowFocused };
|
|
194
|
+
|
|
195
|
+
//# sourceMappingURL=lifecycle-operations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lifecycle-operations.js","names":[],"sources":["../../src/runtime/lifecycle-operations.ts"],"sourcesContent":["import {\n claimHookIndex,\n getCurrentComponentInstance,\n registerCommitOperation,\n type ComponentInstance,\n} from './component';\nimport { isRouteActivityActive } from '../common/route-activity';\n\nexport type ActivityPredicate = () => boolean;\n\nexport interface TimerOptions {\n when?: ActivityPredicate | readonly ActivityPredicate[];\n}\n\nfunction normalizePredicates(\n predicates: TimerOptions['when']\n): readonly ActivityPredicate[] {\n if (!predicates) {\n return [];\n }\n\n return typeof predicates === 'function' ? [predicates] : predicates;\n}\n\nfunction allPredicatesPass(predicates: readonly ActivityPredicate[]): boolean {\n for (const predicate of predicates) {\n if (!predicate()) {\n return false;\n }\n }\n\n return true;\n}\n\ntype LifecycleSlotKind = 'timer' | 'listener' | 'task';\n\ntype LifecycleSlot = {\n kind: LifecycleSlotKind;\n};\n\nfunction getLifecycleSlot<TSlot extends LifecycleSlot>(\n instance: ComponentInstance,\n index: number,\n kind: TSlot['kind'],\n create: () => TSlot\n): TSlot {\n const existing = instance.lifecycleSlots[index];\n\n if (existing) {\n const slot = existing as LifecycleSlot;\n if (slot.kind !== kind) {\n throw new Error(\n `${kind}() lifecycle order violation: slot ${index} already belongs to ${slot.kind}(). ` +\n 'Keep lifecycle primitives in a stable top-level order.'\n );\n }\n\n return existing as TSlot;\n }\n\n const slot = create();\n instance.lifecycleSlots[index] = slot;\n return slot;\n}\n\nexport function routeActive(\n pathOrPaths: string | readonly string[]\n): ActivityPredicate {\n return () => isRouteActivityActive(pathOrPaths);\n}\n\nexport function documentVisible(): ActivityPredicate {\n return () =>\n typeof document === 'undefined' || document.visibilityState !== 'hidden';\n}\n\nexport function windowFocused(): ActivityPredicate {\n return () =>\n typeof document === 'undefined' ||\n typeof document.hasFocus !== 'function' ||\n document.hasFocus();\n}\n\ntype ListenerOptions = boolean | AddEventListenerOptions | undefined;\n\ntype NormalizedListenerOptions =\n | boolean\n | {\n capture?: boolean;\n once?: boolean;\n passive?: boolean;\n signal?: AbortSignal;\n }\n | undefined;\n\ninterface ListenerSlot extends LifecycleSlot {\n kind: 'listener';\n target: EventTarget | null;\n event: string;\n handler: EventListener;\n listener: EventListener;\n options: NormalizedListenerOptions;\n pendingTarget: EventTarget;\n pendingEvent: string;\n pendingHandler: EventListener;\n pendingOptions: NormalizedListenerOptions;\n attached: boolean;\n cleanupRegistered: boolean;\n}\n\nfunction normalizeListenerOptions(\n options: ListenerOptions\n): NormalizedListenerOptions {\n if (options === undefined || typeof options === 'boolean') {\n return options;\n }\n\n return {\n ...(options.capture !== undefined ? { capture: options.capture } : {}),\n ...(options.once !== undefined ? { once: options.once } : {}),\n ...(options.passive !== undefined ? { passive: options.passive } : {}),\n ...(options.signal !== undefined ? { signal: options.signal } : {}),\n };\n}\n\nfunction listenerOptionsEqual(\n a: NormalizedListenerOptions,\n b: NormalizedListenerOptions\n): boolean {\n if (a === b) {\n return true;\n }\n if (typeof a === 'boolean' || typeof b === 'boolean') {\n return a === b;\n }\n if (!a || !b) {\n return a === b;\n }\n\n return (\n a.capture === b.capture &&\n a.once === b.once &&\n a.passive === b.passive &&\n a.signal === b.signal\n );\n}\n\nfunction detachListenerSlot(slot: ListenerSlot): void {\n if (!slot.attached || !slot.target) {\n return;\n }\n\n slot.target.removeEventListener(slot.event, slot.listener, slot.options);\n slot.attached = false;\n}\n\nfunction commitListenerSlot(\n instance: ComponentInstance,\n slot: ListenerSlot\n): void {\n slot.handler = slot.pendingHandler;\n\n const shouldReattach =\n !slot.attached ||\n slot.target !== slot.pendingTarget ||\n slot.event !== slot.pendingEvent ||\n !listenerOptionsEqual(slot.options, slot.pendingOptions);\n\n if (shouldReattach) {\n detachListenerSlot(slot);\n slot.target = slot.pendingTarget;\n slot.event = slot.pendingEvent;\n slot.options = slot.pendingOptions;\n slot.target.addEventListener(slot.event, slot.listener, slot.options);\n slot.attached = true;\n }\n\n if (!slot.cleanupRegistered) {\n slot.cleanupRegistered = true;\n instance.cleanupFns.push(() => {\n detachListenerSlot(slot);\n slot.cleanupRegistered = false;\n });\n }\n}\n\nexport function on(\n target: EventTarget,\n event: string,\n handler: EventListener,\n options?: ListenerOptions\n): void {\n const instance = getCurrentComponentInstance();\n if (!instance) {\n return;\n }\n\n const index = claimHookIndex(instance, 'on');\n const normalizedOptions = normalizeListenerOptions(options);\n const slot = getLifecycleSlot<ListenerSlot>(\n instance,\n index,\n 'listener',\n () => {\n const createdSlot = {\n kind: 'listener' as const,\n target: null,\n event,\n handler,\n listener: ((evt: Event) => {\n createdSlot.handler.call(createdSlot.target, evt);\n }) as EventListener,\n options: undefined,\n pendingTarget: target,\n pendingEvent: event,\n pendingHandler: handler,\n pendingOptions: normalizedOptions,\n attached: false,\n cleanupRegistered: false,\n };\n return createdSlot;\n }\n );\n\n slot.pendingTarget = target;\n slot.pendingEvent = event;\n slot.pendingHandler = handler;\n slot.pendingOptions = normalizedOptions;\n\n registerCommitOperation(() => {\n commitListenerSlot(instance, slot);\n });\n}\n\ninterface TimerSlot extends LifecycleSlot {\n kind: 'timer';\n id: ReturnType<typeof setInterval> | null;\n intervalMs: number | null;\n pendingIntervalMs: number;\n callback: () => void;\n predicates: readonly ActivityPredicate[];\n pendingCallback: () => void;\n pendingPredicates: readonly ActivityPredicate[];\n cleanupRegistered: boolean;\n}\n\nfunction stopTimerSlot(slot: TimerSlot): void {\n if (slot.id === null) {\n return;\n }\n\n clearInterval(slot.id);\n slot.id = null;\n}\n\nfunction startTimerSlot(slot: TimerSlot): void {\n slot.id = setInterval(() => {\n if (allPredicatesPass(slot.predicates)) {\n slot.callback();\n }\n }, slot.intervalMs ?? slot.pendingIntervalMs);\n}\n\nfunction commitTimerSlot(instance: ComponentInstance, slot: TimerSlot): void {\n const intervalChanged = slot.intervalMs !== slot.pendingIntervalMs;\n\n slot.callback = slot.pendingCallback;\n slot.predicates = slot.pendingPredicates;\n\n if (slot.id === null || intervalChanged) {\n stopTimerSlot(slot);\n slot.intervalMs = slot.pendingIntervalMs;\n startTimerSlot(slot);\n }\n\n if (!slot.cleanupRegistered) {\n slot.cleanupRegistered = true;\n instance.cleanupFns.push(() => {\n stopTimerSlot(slot);\n slot.cleanupRegistered = false;\n });\n }\n}\n\nexport function timer(\n intervalMs: number,\n fn: () => void,\n options?: TimerOptions\n): void {\n const instance = getCurrentComponentInstance();\n if (!instance) {\n return;\n }\n\n const index = claimHookIndex(instance, 'timer');\n const predicates = normalizePredicates(options?.when);\n const slot = getLifecycleSlot<TimerSlot>(instance, index, 'timer', () => ({\n kind: 'timer',\n id: null,\n intervalMs: null,\n pendingIntervalMs: intervalMs,\n callback: fn,\n predicates,\n pendingCallback: fn,\n pendingPredicates: predicates,\n cleanupRegistered: false,\n }));\n\n slot.pendingIntervalMs = intervalMs;\n slot.pendingCallback = fn;\n slot.pendingPredicates = predicates;\n\n registerCommitOperation(() => {\n commitTimerSlot(instance, slot);\n });\n}\n\nexport function stream<T>(\n _source: unknown,\n _options?: Record<string, unknown>\n): { value: T | null; pending: boolean; error: Error | null } {\n // Stub implementation: no-op.\n return { value: null, pending: true, error: null };\n}\n\nexport function task(\n fn: () => void | (() => void) | PromiseLike<void | (() => void)>\n): void {\n const instance = getCurrentComponentInstance();\n if (!instance) {\n return;\n }\n\n const index = claimHookIndex(instance, 'task');\n const slot = getLifecycleSlot<\n LifecycleSlot & {\n kind: 'task';\n started: boolean;\n task: typeof fn;\n }\n >(instance, index, 'task', () => ({\n kind: 'task',\n started: false,\n task: fn,\n }));\n\n if (!slot.started) {\n slot.task = fn;\n registerCommitOperation(async () => {\n if (slot.started) {\n return;\n }\n\n slot.started = true;\n return await slot.task();\n });\n }\n}\n\n/**\n * Capture the result of a synchronous expression at call time and return a\n * thunk that returns the captured value later. This is a low-level helper for\n * cases where async continuations need to observe a snapshot of values at the\n * moment scheduling occurred.\n *\n * Usage (public API):\n * const snapshot = capture(() => someState());\n * Promise.resolve().then(() => { use(snapshot()); });\n */\nexport function capture<T>(fn: () => T): () => T {\n const value = fn();\n return () => value;\n}\n"],"mappings":"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"}
|
|
@@ -1,40 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
pending: boolean;
|
|
5
|
-
error: Error | null;
|
|
6
|
-
refresh(): void;
|
|
7
|
-
}
|
|
8
|
-
type ActivityPredicate = () => boolean;
|
|
9
|
-
interface TimerOptions {
|
|
10
|
-
when?: ActivityPredicate | readonly ActivityPredicate[];
|
|
11
|
-
}
|
|
12
|
-
declare function routeActive(pathOrPaths: string | readonly string[]): ActivityPredicate;
|
|
13
|
-
declare function documentVisible(): ActivityPredicate;
|
|
14
|
-
declare function windowFocused(): ActivityPredicate;
|
|
15
|
-
declare function resource<T, const TDeps extends readonly unknown[]>(fn: (opts: {
|
|
16
|
-
signal: AbortSignal;
|
|
17
|
-
}) => PromiseLike<T> | T, deps: TDeps): ResourceResult<T>;
|
|
18
|
-
type ListenerOptions = boolean | AddEventListenerOptions | undefined;
|
|
19
|
-
declare function on(target: EventTarget, event: string, handler: EventListener, options?: ListenerOptions): void;
|
|
20
|
-
declare function timer(intervalMs: number, fn: () => void, options?: TimerOptions): void;
|
|
21
|
-
declare function stream<T>(_source: unknown, _options?: Record<string, unknown>): {
|
|
22
|
-
value: T | null;
|
|
23
|
-
pending: boolean;
|
|
24
|
-
error: Error | null;
|
|
25
|
-
};
|
|
26
|
-
declare function task(fn: () => void | (() => void) | PromiseLike<void | (() => void)>): void;
|
|
27
|
-
/**
|
|
28
|
-
* Capture the result of a synchronous expression at call time and return a
|
|
29
|
-
* thunk that returns the captured value later. This is a low-level helper for
|
|
30
|
-
* cases where async continuations need to observe a snapshot of values at the
|
|
31
|
-
* moment scheduling occurred.
|
|
32
|
-
*
|
|
33
|
-
* Usage (public API):
|
|
34
|
-
* const snapshot = capture(() => someState());
|
|
35
|
-
* Promise.resolve().then(() => { use(snapshot()); });
|
|
36
|
-
*/
|
|
37
|
-
declare function capture<T>(fn: () => T): () => T;
|
|
38
|
-
//#endregion
|
|
39
|
-
export { ActivityPredicate, ResourceResult, TimerOptions, capture, documentVisible, on, resource, routeActive, stream, task, timer, windowFocused };
|
|
40
|
-
//# sourceMappingURL=operations.d.ts.map
|
|
1
|
+
import { ResourceResult, resource } from "./resource-operation.js";
|
|
2
|
+
import { ActivityPredicate, TimerOptions, capture, documentVisible, on, routeActive, stream, task, timer, windowFocused } from "./lifecycle-operations.js";
|
|
3
|
+
export { type ActivityPredicate, type ResourceResult, type TimerOptions, capture, documentVisible, on, resource, routeActive, stream, task, timer, windowFocused };
|
|
@@ -1,358 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { claimHookIndex, getCurrentComponentInstance, registerCommitOperation } from "./component.js";
|
|
4
|
-
import { state } from "./state.js";
|
|
5
|
-
import { brandSnapshotSource } from "./snapshot-source.js";
|
|
6
|
-
import { SSRDataMissingError } from "../common/ssr-errors.js";
|
|
7
|
-
import { isRouteActivityActive } from "../common/route-activity.js";
|
|
8
|
-
import { getSSRBridge } from "./ssr-bridge.js";
|
|
9
|
-
import { ResourceCell } from "./resource-cell.js";
|
|
10
|
-
//#region src/runtime/operations.ts
|
|
11
|
-
function normalizePredicates(predicates) {
|
|
12
|
-
if (!predicates) return [];
|
|
13
|
-
return typeof predicates === "function" ? [predicates] : predicates;
|
|
14
|
-
}
|
|
15
|
-
function allPredicatesPass(predicates) {
|
|
16
|
-
for (const predicate of predicates) if (!predicate()) return false;
|
|
17
|
-
return true;
|
|
18
|
-
}
|
|
19
|
-
function getLifecycleSlot(instance, index, kind, create) {
|
|
20
|
-
const existing = instance.lifecycleSlots[index];
|
|
21
|
-
if (existing) {
|
|
22
|
-
const slot = existing;
|
|
23
|
-
if (slot.kind !== kind) throw new Error(`${kind}() lifecycle order violation: slot ${index} already belongs to ${slot.kind}(). Keep lifecycle primitives in a stable top-level order.`);
|
|
24
|
-
return existing;
|
|
25
|
-
}
|
|
26
|
-
const slot = create();
|
|
27
|
-
instance.lifecycleSlots[index] = slot;
|
|
28
|
-
return slot;
|
|
29
|
-
}
|
|
30
|
-
function routeActive(pathOrPaths) {
|
|
31
|
-
return () => isRouteActivityActive(pathOrPaths);
|
|
32
|
-
}
|
|
33
|
-
function documentVisible() {
|
|
34
|
-
return () => typeof document === "undefined" || document.visibilityState !== "hidden";
|
|
35
|
-
}
|
|
36
|
-
function windowFocused() {
|
|
37
|
-
return () => typeof document === "undefined" || typeof document.hasFocus !== "function" || document.hasFocus();
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Resource primitive — simple, deterministic async primitive
|
|
41
|
-
* Usage: resource(fn, deps)
|
|
42
|
-
* - fn receives { signal }
|
|
43
|
-
* - captures execution context once at creation (synchronous step only)
|
|
44
|
-
* - executes at most once per generation; stale async results are ignored
|
|
45
|
-
* - refresh() cancels in-flight execution, increments generation and re-runs
|
|
46
|
-
* - exposes { value, pending, error, refresh }
|
|
47
|
-
* - during SSR, async results are disallowed and will throw synchronously
|
|
48
|
-
*/
|
|
49
|
-
function resource(fn, deps = []) {
|
|
50
|
-
const instance = getCurrentComponentInstance();
|
|
51
|
-
const inst = instance;
|
|
52
|
-
if (!instance) {
|
|
53
|
-
const ssr = getSSRBridge();
|
|
54
|
-
const renderData = ssr.getCurrentRenderData();
|
|
55
|
-
if (renderData) {
|
|
56
|
-
const key = ssr.getNextKey();
|
|
57
|
-
if (!(key in renderData)) ssr.throwSSRDataMissing();
|
|
58
|
-
const val = renderData[key];
|
|
59
|
-
return brandSnapshotSource({
|
|
60
|
-
value: val,
|
|
61
|
-
pending: false,
|
|
62
|
-
error: null,
|
|
63
|
-
refresh: () => {}
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
if (ssr.getCurrentSSRContext()) ssr.throwSSRDataMissing();
|
|
67
|
-
throw new Error("[Askr] resource() must be called during component render inside an app. Do not create resources at module scope or outside render.");
|
|
68
|
-
}
|
|
69
|
-
const ssr = getSSRBridge();
|
|
70
|
-
const renderData = ssr.getCurrentRenderData();
|
|
71
|
-
if (renderData) {
|
|
72
|
-
const key = ssr.getNextKey();
|
|
73
|
-
if (!(key in renderData)) ssr.throwSSRDataMissing();
|
|
74
|
-
const val = renderData[key];
|
|
75
|
-
const h = state({
|
|
76
|
-
cell: void 0,
|
|
77
|
-
snapshot: brandSnapshotSource({
|
|
78
|
-
value: val,
|
|
79
|
-
pending: false,
|
|
80
|
-
error: null,
|
|
81
|
-
refresh: () => {}
|
|
82
|
-
})
|
|
83
|
-
})();
|
|
84
|
-
h.snapshot.value = val;
|
|
85
|
-
h.snapshot.pending = false;
|
|
86
|
-
h.snapshot.error = null;
|
|
87
|
-
return h.snapshot;
|
|
88
|
-
}
|
|
89
|
-
const holder = state({
|
|
90
|
-
cell: void 0,
|
|
91
|
-
snapshot: brandSnapshotSource({
|
|
92
|
-
value: null,
|
|
93
|
-
pending: true,
|
|
94
|
-
error: null,
|
|
95
|
-
refresh: () => {}
|
|
96
|
-
})
|
|
97
|
-
});
|
|
98
|
-
const h = holder();
|
|
99
|
-
if (!h.cell) {
|
|
100
|
-
const cell = new ResourceCell(fn, deps, getCurrentContextFrame());
|
|
101
|
-
cell.ownerName = inst.fn?.name || "<anonymous>";
|
|
102
|
-
h.cell = cell;
|
|
103
|
-
h.snapshot = cell.snapshot;
|
|
104
|
-
const unsubscribe = cell.subscribe(() => {
|
|
105
|
-
const cur = holder();
|
|
106
|
-
cur.snapshot.value = cell.snapshot.value;
|
|
107
|
-
cur.snapshot.pending = cell.snapshot.pending;
|
|
108
|
-
cur.snapshot.error = cell.snapshot.error;
|
|
109
|
-
holder.set(cur);
|
|
110
|
-
try {
|
|
111
|
-
inst.notifyUpdate?.();
|
|
112
|
-
} catch {}
|
|
113
|
-
});
|
|
114
|
-
(inst.cleanupFns ??= []).push(() => {
|
|
115
|
-
unsubscribe();
|
|
116
|
-
cell.dispose();
|
|
117
|
-
});
|
|
118
|
-
if (inst.ssr) {
|
|
119
|
-
cell.start(true, false);
|
|
120
|
-
if (!cell.pending) {
|
|
121
|
-
const cur = holder();
|
|
122
|
-
cur.snapshot.value = cell.value;
|
|
123
|
-
cur.snapshot.pending = cell.pending;
|
|
124
|
-
cur.snapshot.error = cell.error;
|
|
125
|
-
}
|
|
126
|
-
} else {
|
|
127
|
-
const scheduledGeneration = cell.generation;
|
|
128
|
-
globalScheduler.enqueueInLane("post", () => {
|
|
129
|
-
if (!inst.notifyUpdate || cell.generation !== scheduledGeneration) return;
|
|
130
|
-
try {
|
|
131
|
-
cell.start(false, false);
|
|
132
|
-
} catch (err) {
|
|
133
|
-
const cur = holder();
|
|
134
|
-
cur.snapshot.value = cell.value;
|
|
135
|
-
cur.snapshot.pending = cell.pending;
|
|
136
|
-
cur.snapshot.error = err ?? null;
|
|
137
|
-
holder.set(cur);
|
|
138
|
-
inst.notifyUpdate?.();
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
if (!cell.pending) {
|
|
142
|
-
const cur = holder();
|
|
143
|
-
cur.snapshot.value = cell.value;
|
|
144
|
-
cur.snapshot.pending = cell.pending;
|
|
145
|
-
cur.snapshot.error = cell.error;
|
|
146
|
-
holder.set(cur);
|
|
147
|
-
inst.notifyUpdate?.();
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
const cell = h.cell;
|
|
153
|
-
cell.setLoader(fn);
|
|
154
|
-
if (!cell.deps || cell.deps.length !== deps.length || cell.deps.some((d, i) => !Object.is(d, deps[i]))) {
|
|
155
|
-
cell.deps = deps.slice();
|
|
156
|
-
cell.generation++;
|
|
157
|
-
cell.pending = true;
|
|
158
|
-
cell.error = null;
|
|
159
|
-
h.snapshot.pending = true;
|
|
160
|
-
h.snapshot.error = null;
|
|
161
|
-
try {
|
|
162
|
-
if (inst.ssr) {
|
|
163
|
-
cell.start(true, false);
|
|
164
|
-
if (!cell.pending) {
|
|
165
|
-
const cur = holder();
|
|
166
|
-
cur.snapshot.value = cell.value;
|
|
167
|
-
cur.snapshot.pending = cell.pending;
|
|
168
|
-
cur.snapshot.error = cell.error;
|
|
169
|
-
}
|
|
170
|
-
} else {
|
|
171
|
-
const scheduledGeneration = cell.generation;
|
|
172
|
-
globalScheduler.enqueueInLane("post", () => {
|
|
173
|
-
if (!inst.notifyUpdate || cell.generation !== scheduledGeneration) return;
|
|
174
|
-
cell.start(false, false);
|
|
175
|
-
if (!cell.pending) {
|
|
176
|
-
const cur = holder();
|
|
177
|
-
cur.snapshot.value = cell.value;
|
|
178
|
-
cur.snapshot.pending = cell.pending;
|
|
179
|
-
cur.snapshot.error = cell.error;
|
|
180
|
-
holder.set(cur);
|
|
181
|
-
inst.notifyUpdate?.();
|
|
182
|
-
}
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
} catch (err) {
|
|
186
|
-
if (err instanceof SSRDataMissingError) throw err;
|
|
187
|
-
cell.error = err;
|
|
188
|
-
cell.pending = false;
|
|
189
|
-
const cur = holder();
|
|
190
|
-
cur.snapshot.value = cell.value;
|
|
191
|
-
cur.snapshot.pending = cell.pending;
|
|
192
|
-
cur.snapshot.error = cell.error;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
return h.snapshot;
|
|
196
|
-
}
|
|
197
|
-
function normalizeListenerOptions(options) {
|
|
198
|
-
if (options === void 0 || typeof options === "boolean") return options;
|
|
199
|
-
return {
|
|
200
|
-
...options.capture !== void 0 ? { capture: options.capture } : {},
|
|
201
|
-
...options.once !== void 0 ? { once: options.once } : {},
|
|
202
|
-
...options.passive !== void 0 ? { passive: options.passive } : {},
|
|
203
|
-
...options.signal !== void 0 ? { signal: options.signal } : {}
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
function listenerOptionsEqual(a, b) {
|
|
207
|
-
if (a === b) return true;
|
|
208
|
-
if (typeof a === "boolean" || typeof b === "boolean") return a === b;
|
|
209
|
-
if (!a || !b) return a === b;
|
|
210
|
-
return a.capture === b.capture && a.once === b.once && a.passive === b.passive && a.signal === b.signal;
|
|
211
|
-
}
|
|
212
|
-
function detachListenerSlot(slot) {
|
|
213
|
-
if (!slot.attached || !slot.target) return;
|
|
214
|
-
slot.target.removeEventListener(slot.event, slot.listener, slot.options);
|
|
215
|
-
slot.attached = false;
|
|
216
|
-
}
|
|
217
|
-
function commitListenerSlot(instance, slot) {
|
|
218
|
-
slot.handler = slot.pendingHandler;
|
|
219
|
-
if (!slot.attached || slot.target !== slot.pendingTarget || slot.event !== slot.pendingEvent || !listenerOptionsEqual(slot.options, slot.pendingOptions)) {
|
|
220
|
-
detachListenerSlot(slot);
|
|
221
|
-
slot.target = slot.pendingTarget;
|
|
222
|
-
slot.event = slot.pendingEvent;
|
|
223
|
-
slot.options = slot.pendingOptions;
|
|
224
|
-
slot.target.addEventListener(slot.event, slot.listener, slot.options);
|
|
225
|
-
slot.attached = true;
|
|
226
|
-
}
|
|
227
|
-
if (!slot.cleanupRegistered) {
|
|
228
|
-
slot.cleanupRegistered = true;
|
|
229
|
-
instance.cleanupFns.push(() => {
|
|
230
|
-
detachListenerSlot(slot);
|
|
231
|
-
slot.cleanupRegistered = false;
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
function on(target, event, handler, options) {
|
|
236
|
-
const instance = getCurrentComponentInstance();
|
|
237
|
-
if (!instance) return;
|
|
238
|
-
const index = claimHookIndex(instance, "on");
|
|
239
|
-
const normalizedOptions = normalizeListenerOptions(options);
|
|
240
|
-
const slot = getLifecycleSlot(instance, index, "listener", () => {
|
|
241
|
-
const createdSlot = {
|
|
242
|
-
kind: "listener",
|
|
243
|
-
target: null,
|
|
244
|
-
event,
|
|
245
|
-
handler,
|
|
246
|
-
listener: ((evt) => {
|
|
247
|
-
createdSlot.handler.call(createdSlot.target, evt);
|
|
248
|
-
}),
|
|
249
|
-
options: void 0,
|
|
250
|
-
pendingTarget: target,
|
|
251
|
-
pendingEvent: event,
|
|
252
|
-
pendingHandler: handler,
|
|
253
|
-
pendingOptions: normalizedOptions,
|
|
254
|
-
attached: false,
|
|
255
|
-
cleanupRegistered: false
|
|
256
|
-
};
|
|
257
|
-
return createdSlot;
|
|
258
|
-
});
|
|
259
|
-
slot.pendingTarget = target;
|
|
260
|
-
slot.pendingEvent = event;
|
|
261
|
-
slot.pendingHandler = handler;
|
|
262
|
-
slot.pendingOptions = normalizedOptions;
|
|
263
|
-
registerCommitOperation(() => {
|
|
264
|
-
commitListenerSlot(instance, slot);
|
|
265
|
-
});
|
|
266
|
-
}
|
|
267
|
-
function stopTimerSlot(slot) {
|
|
268
|
-
if (slot.id === null) return;
|
|
269
|
-
clearInterval(slot.id);
|
|
270
|
-
slot.id = null;
|
|
271
|
-
}
|
|
272
|
-
function startTimerSlot(slot) {
|
|
273
|
-
slot.id = setInterval(() => {
|
|
274
|
-
if (allPredicatesPass(slot.predicates)) slot.callback();
|
|
275
|
-
}, slot.intervalMs ?? slot.pendingIntervalMs);
|
|
276
|
-
}
|
|
277
|
-
function commitTimerSlot(instance, slot) {
|
|
278
|
-
const intervalChanged = slot.intervalMs !== slot.pendingIntervalMs;
|
|
279
|
-
slot.callback = slot.pendingCallback;
|
|
280
|
-
slot.predicates = slot.pendingPredicates;
|
|
281
|
-
if (slot.id === null || intervalChanged) {
|
|
282
|
-
stopTimerSlot(slot);
|
|
283
|
-
slot.intervalMs = slot.pendingIntervalMs;
|
|
284
|
-
startTimerSlot(slot);
|
|
285
|
-
}
|
|
286
|
-
if (!slot.cleanupRegistered) {
|
|
287
|
-
slot.cleanupRegistered = true;
|
|
288
|
-
instance.cleanupFns.push(() => {
|
|
289
|
-
stopTimerSlot(slot);
|
|
290
|
-
slot.cleanupRegistered = false;
|
|
291
|
-
});
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
function timer(intervalMs, fn, options) {
|
|
295
|
-
const instance = getCurrentComponentInstance();
|
|
296
|
-
if (!instance) return;
|
|
297
|
-
const index = claimHookIndex(instance, "timer");
|
|
298
|
-
const predicates = normalizePredicates(options?.when);
|
|
299
|
-
const slot = getLifecycleSlot(instance, index, "timer", () => ({
|
|
300
|
-
kind: "timer",
|
|
301
|
-
id: null,
|
|
302
|
-
intervalMs: null,
|
|
303
|
-
pendingIntervalMs: intervalMs,
|
|
304
|
-
callback: fn,
|
|
305
|
-
predicates,
|
|
306
|
-
pendingCallback: fn,
|
|
307
|
-
pendingPredicates: predicates,
|
|
308
|
-
cleanupRegistered: false
|
|
309
|
-
}));
|
|
310
|
-
slot.pendingIntervalMs = intervalMs;
|
|
311
|
-
slot.pendingCallback = fn;
|
|
312
|
-
slot.pendingPredicates = predicates;
|
|
313
|
-
registerCommitOperation(() => {
|
|
314
|
-
commitTimerSlot(instance, slot);
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
function stream(_source, _options) {
|
|
318
|
-
return {
|
|
319
|
-
value: null,
|
|
320
|
-
pending: true,
|
|
321
|
-
error: null
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
function task(fn) {
|
|
325
|
-
const instance = getCurrentComponentInstance();
|
|
326
|
-
if (!instance) return;
|
|
327
|
-
const slot = getLifecycleSlot(instance, claimHookIndex(instance, "task"), "task", () => ({
|
|
328
|
-
kind: "task",
|
|
329
|
-
started: false,
|
|
330
|
-
task: fn
|
|
331
|
-
}));
|
|
332
|
-
if (!slot.started) {
|
|
333
|
-
slot.task = fn;
|
|
334
|
-
registerCommitOperation(async () => {
|
|
335
|
-
if (slot.started) return;
|
|
336
|
-
slot.started = true;
|
|
337
|
-
return await slot.task();
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
/**
|
|
342
|
-
* Capture the result of a synchronous expression at call time and return a
|
|
343
|
-
* thunk that returns the captured value later. This is a low-level helper for
|
|
344
|
-
* cases where async continuations need to observe a snapshot of values at the
|
|
345
|
-
* moment scheduling occurred.
|
|
346
|
-
*
|
|
347
|
-
* Usage (public API):
|
|
348
|
-
* const snapshot = capture(() => someState());
|
|
349
|
-
* Promise.resolve().then(() => { use(snapshot()); });
|
|
350
|
-
*/
|
|
351
|
-
function capture(fn) {
|
|
352
|
-
const value = fn();
|
|
353
|
-
return () => value;
|
|
354
|
-
}
|
|
355
|
-
//#endregion
|
|
1
|
+
import { resource } from "./resource-operation.js";
|
|
2
|
+
import { capture, documentVisible, on, routeActive, stream, task, timer, windowFocused } from "./lifecycle-operations.js";
|
|
356
3
|
export { capture, documentVisible, on, resource, routeActive, stream, task, timer, windowFocused };
|
|
357
|
-
|
|
358
|
-
//# sourceMappingURL=operations.js.map
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ComponentInstance } from "./component.js";
|
|
2
|
-
|
|
1
|
+
import { ComponentInstance } from "./component-internal.js";
|
|
3
2
|
//#region src/runtime/readable.d.ts
|
|
4
3
|
interface DerivedSubscriber {
|
|
5
4
|
_markDirty(): void;
|
|
@@ -26,5 +25,5 @@ declare function markReadableDerivedSubscribersDirty(source: ReadableSource<unkn
|
|
|
26
25
|
declare function markReactivePropsDirtySource(source: ReadableSource<unknown>): void;
|
|
27
26
|
declare function notifyReadableReaders(source: ReadableSource<unknown>, skipInstance?: ComponentInstance | null): boolean;
|
|
28
27
|
//#endregion
|
|
29
|
-
export { ReadableSource };
|
|
28
|
+
export { DerivedSubscriber, ReadableSource };
|
|
30
29
|
//# sourceMappingURL=readable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readable.d.ts","names":[],"sources":["../../src/runtime/readable.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"readable.d.ts","names":[],"sources":["../../src/runtime/readable.ts"],"mappings":";;UAMiB,iBAAA;EACf,UAAA;EACA,yBAAA,GAA4B,GAAG,CAAC,cAAA;AAAA;AAAA,UAGjB,cAAA;EAAA,IACX,CAAA;EACJ,YAAA;EACA,gBAAA;EACA,QAAA,GAAW,GAAA,CAAI,iBAAA;EACf,mBAAA,GAAsB,GAAA,CAAI,iBAAA;EAC1B,QAAA;AAAA;AAAA,iBAGc,iBAAA,CAAkB,MAAe;AAAA,iBAkCjC,kBAAA,CAAmB,MAA+B,EAAvB,cAAc;AAAA,iBAsCzC,2BAAA,IACd,cAAA,EAAgB,GAAA,CAAI,cAAA,YACpB,EAAA,QAAU,CAAA,GACT,CAAA;AAAA,iBAWa,6BAAA,CACd,QAA2B,EAAjB,iBAAiB;AAAA,iBAiBb,yCAAA,CACd,QAAA,EAAU,iBAAA,EACV,KAAA,sBACA,MAAA,EAAQ,GAAA,CAAI,cAAA,wBACZ,yBAAA,GACI,GAAA,CAAI,cAAA;AAAA,iBAkDM,4BAAA,CACd,QAA2B,EAAjB,iBAAiB;AAAA,iBAiBb,uBAAA,IACd,UAAA,EAAY,iBAAA,EACZ,EAAA,QAAU,CAAA,GACT,CAAA;AAAA,iBAaa,kCAAA,CACd,UAAA,EAAY,iBAAA,EACZ,WAAA,EAAa,GAAA,CAAI,cAAA,YACjB,WAAA,EAAa,GAAA,CAAI,cAAA;AAAA,iBAkBH,mCAAA,CACd,UAAA,EAAY,iBAAA,EACZ,OAAA,EAAS,GAAA,CAAI,cAAA;AAAA,iBAQC,mCAAA,CACd,MAA+B,EAAvB,cAAc;AAAA,iBAYR,4BAAA,CACd,MAA+B,EAAvB,cAAc;AAAA,iBASR,qBAAA,CACd,MAAA,EAAQ,cAAA,WACR,YAAA,GAAe,iBAAiB"}
|