@vidact/runtime 0.2.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/LICENSE +21 -0
- package/README.md +50 -0
- package/dist/actions.d.ts +37 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +295 -0
- package/dist/actions.js.map +1 -0
- package/dist/async.d.ts +22 -0
- package/dist/async.d.ts.map +1 -0
- package/dist/async.js +24 -0
- package/dist/async.js.map +1 -0
- package/dist/compiled/async-resource.d.ts +7 -0
- package/dist/compiled/async-resource.d.ts.map +1 -0
- package/dist/compiled/async-resource.js +89 -0
- package/dist/compiled/async-resource.js.map +1 -0
- package/dist/compiled/core.d.ts +183 -0
- package/dist/compiled/core.d.ts.map +1 -0
- package/dist/compiled/core.js +3170 -0
- package/dist/compiled/core.js.map +1 -0
- package/dist/compiled/types.d.ts +63 -0
- package/dist/compiled/types.d.ts.map +1 -0
- package/dist/compiled/types.js +7 -0
- package/dist/compiled/types.js.map +1 -0
- package/dist/compiled/validation.d.ts +2 -0
- package/dist/compiled/validation.d.ts.map +1 -0
- package/dist/compiled/validation.js +22 -0
- package/dist/compiled/validation.js.map +1 -0
- package/dist/component-spread.d.ts +6 -0
- package/dist/component-spread.d.ts.map +1 -0
- package/dist/component-spread.js +71 -0
- package/dist/component-spread.js.map +1 -0
- package/dist/concurrent.d.ts +26 -0
- package/dist/concurrent.d.ts.map +1 -0
- package/dist/concurrent.js +244 -0
- package/dist/concurrent.js.map +1 -0
- package/dist/direct-dom.d.ts +14 -0
- package/dist/direct-dom.d.ts.map +1 -0
- package/dist/direct-dom.js +239 -0
- package/dist/direct-dom.js.map +1 -0
- package/dist/dom/attributes.d.ts +7 -0
- package/dist/dom/attributes.d.ts.map +1 -0
- package/dist/dom/attributes.js +52 -0
- package/dist/dom/attributes.js.map +1 -0
- package/dist/dom/events.d.ts +3 -0
- package/dist/dom/events.d.ts.map +1 -0
- package/dist/dom/events.js +78 -0
- package/dist/dom/events.js.map +1 -0
- package/dist/dom/forms.d.ts +7 -0
- package/dist/dom/forms.d.ts.map +1 -0
- package/dist/dom/forms.js +217 -0
- package/dist/dom/forms.js.map +1 -0
- package/dist/dom/intrinsic.d.ts +19 -0
- package/dist/dom/intrinsic.d.ts.map +1 -0
- package/dist/dom/intrinsic.js +53 -0
- package/dist/dom/intrinsic.js.map +1 -0
- package/dist/dom/namespace.d.ts +3 -0
- package/dist/dom/namespace.d.ts.map +1 -0
- package/dist/dom/namespace.js +34 -0
- package/dist/dom/namespace.js.map +1 -0
- package/dist/dom/namespaces.d.ts +9 -0
- package/dist/dom/namespaces.d.ts.map +1 -0
- package/dist/dom/namespaces.js +14 -0
- package/dist/dom/namespaces.js.map +1 -0
- package/dist/dom/properties.d.ts +27 -0
- package/dist/dom/properties.d.ts.map +1 -0
- package/dist/dom/properties.js +333 -0
- package/dist/dom/properties.js.map +1 -0
- package/dist/dom/style-properties.d.ts +2 -0
- package/dist/dom/style-properties.d.ts.map +1 -0
- package/dist/dom/style-properties.js +47 -0
- package/dist/dom/style-properties.js.map +1 -0
- package/dist/dom/styles.d.ts +4 -0
- package/dist/dom/styles.d.ts.map +1 -0
- package/dist/dom/styles.js +77 -0
- package/dist/dom/styles.js.map +1 -0
- package/dist/dom-forms.d.ts +3 -0
- package/dist/dom-forms.d.ts.map +1 -0
- package/dist/dom-forms.js +17 -0
- package/dist/dom-forms.js.map +1 -0
- package/dist/dom-styles.d.ts +3 -0
- package/dist/dom-styles.d.ts.map +1 -0
- package/dist/dom-styles.js +11 -0
- package/dist/dom-styles.js.map +1 -0
- package/dist/env.d.ts +6 -0
- package/dist/framework-hydrate.d.ts +21 -0
- package/dist/framework-hydrate.d.ts.map +1 -0
- package/dist/framework-hydrate.js +165 -0
- package/dist/framework-hydrate.js.map +1 -0
- package/dist/framework-protocol.d.ts +33 -0
- package/dist/framework-protocol.d.ts.map +1 -0
- package/dist/framework-protocol.js +235 -0
- package/dist/framework-protocol.js.map +1 -0
- package/dist/framework.d.ts +39 -0
- package/dist/framework.d.ts.map +1 -0
- package/dist/framework.js +111 -0
- package/dist/framework.js.map +1 -0
- package/dist/hydrate.d.ts +9 -0
- package/dist/hydrate.d.ts.map +1 -0
- package/dist/hydrate.js +14 -0
- package/dist/hydrate.js.map +1 -0
- package/dist/hydration-bridge.d.ts +62 -0
- package/dist/hydration-bridge.d.ts.map +1 -0
- package/dist/hydration-bridge.js +95 -0
- package/dist/hydration-bridge.js.map +1 -0
- package/dist/hydration.d.ts +29 -0
- package/dist/hydration.d.ts.map +1 -0
- package/dist/hydration.js +489 -0
- package/dist/hydration.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/indexed-list.d.ts +12 -0
- package/dist/indexed-list.d.ts.map +1 -0
- package/dist/indexed-list.js +10 -0
- package/dist/indexed-list.js.map +1 -0
- package/dist/jsx-runtime.d.ts +12 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +27 -0
- package/dist/jsx-runtime.js.map +1 -0
- package/dist/keyed-list.d.ts +17 -0
- package/dist/keyed-list.d.ts.map +1 -0
- package/dist/keyed-list.js +180 -0
- package/dist/keyed-list.js.map +1 -0
- package/dist/metadata.d.ts +4 -0
- package/dist/metadata.d.ts.map +1 -0
- package/dist/metadata.js +187 -0
- package/dist/metadata.js.map +1 -0
- package/dist/nested-prop.d.ts +4 -0
- package/dist/nested-prop.d.ts.map +1 -0
- package/dist/nested-prop.js +18 -0
- package/dist/nested-prop.js.map +1 -0
- package/dist/profiling.d.ts +10 -0
- package/dist/profiling.d.ts.map +1 -0
- package/dist/profiling.js +21 -0
- package/dist/profiling.js.map +1 -0
- package/dist/protocol.d.ts +3 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +7 -0
- package/dist/protocol.js.map +1 -0
- package/dist/raw-html.d.ts +3 -0
- package/dist/raw-html.d.ts.map +1 -0
- package/dist/raw-html.js +172 -0
- package/dist/raw-html.js.map +1 -0
- package/dist/ref.d.ts +6 -0
- package/dist/ref.d.ts.map +1 -0
- package/dist/ref.js +5 -0
- package/dist/ref.js.map +1 -0
- package/dist/renderable-protocol.d.ts +10 -0
- package/dist/renderable-protocol.d.ts.map +1 -0
- package/dist/renderable-protocol.js +12 -0
- package/dist/renderable-protocol.js.map +1 -0
- package/dist/renderable.d.ts +27 -0
- package/dist/renderable.d.ts.map +1 -0
- package/dist/renderable.js +147 -0
- package/dist/renderable.js.map +1 -0
- package/dist/retained-ui.d.ts +8 -0
- package/dist/retained-ui.d.ts.map +1 -0
- package/dist/retained-ui.js +12 -0
- package/dist/retained-ui.js.map +1 -0
- package/dist/root.d.ts +18 -0
- package/dist/root.d.ts.map +1 -0
- package/dist/root.js +94 -0
- package/dist/root.js.map +1 -0
- package/dist/scheduler.d.ts +10 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +124 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/server-framework.d.ts +52 -0
- package/dist/server-framework.d.ts.map +1 -0
- package/dist/server-framework.js +247 -0
- package/dist/server-framework.js.map +1 -0
- package/dist/server.d.ts +159 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +793 -0
- package/dist/server.js.map +1 -0
- package/dist/shared/promise.d.ts +4 -0
- package/dist/shared/promise.d.ts.map +1 -0
- package/dist/shared/promise.js +23 -0
- package/dist/shared/promise.js.map +1 -0
- package/dist/source-mask.d.ts +7 -0
- package/dist/source-mask.d.ts.map +1 -0
- package/dist/source-mask.js +74 -0
- package/dist/source-mask.js.map +1 -0
- package/dist/spread.d.ts +3 -0
- package/dist/spread.d.ts.map +1 -0
- package/dist/spread.js +103 -0
- package/dist/spread.js.map +1 -0
- package/dist/state-slot.d.ts +18 -0
- package/dist/state-slot.d.ts.map +1 -0
- package/dist/state-slot.js +46 -0
- package/dist/state-slot.js.map +1 -0
- package/dist/testing.d.ts +7 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +18 -0
- package/dist/testing.js.map +1 -0
- package/package.json +151 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# @vidact/runtime
|
|
2
|
+
|
|
3
|
+
## 0.2.0-beta.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Add compiled renderable capabilities and React dependency compilation support.
|
|
8
|
+
|
|
9
|
+
## 0.1.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- 807f973: Ship the initial Vidact release with prebuilt Node-API compiler bindings, the
|
|
14
|
+
shared JavaScript compiler API and CLI wrapper, the Vite integration, runtime,
|
|
15
|
+
testing helpers, and React-shaped TypeScript definitions.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Vidact contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# @vidact/runtime
|
|
2
|
+
|
|
3
|
+
Runtime entry points for code generated by the Vidact compiler. Applications
|
|
4
|
+
normally receive these imports from `@vidact/vite` rather than calling compiler
|
|
5
|
+
primitives directly.
|
|
6
|
+
|
|
7
|
+
- `@vidact/runtime`: client mounting and direct DOM operations
|
|
8
|
+
- `@vidact/runtime/hydrate`: client hydration and hydration JSX runtimes
|
|
9
|
+
- `@vidact/runtime/server`: deterministic string/static server rendering
|
|
10
|
+
- `@vidact/runtime/async`: opt-in resources, `lazy`, and staged Suspense
|
|
11
|
+
- `@vidact/runtime/concurrent`: transitions, deferred values, and synchronous flushing
|
|
12
|
+
- `@vidact/runtime/actions`: queued action state, optimistic layers, function
|
|
13
|
+
form actions, and form status
|
|
14
|
+
- `@vidact/runtime/retained-ui`: retained Activity connections
|
|
15
|
+
- `@vidact/runtime/profiling`: compiler-owned profiling and owner stacks
|
|
16
|
+
- `@vidact/runtime/framework`: browser framework metadata and resource hints
|
|
17
|
+
- `@vidact/runtime/framework/protocol`: framework references and closed value serialization
|
|
18
|
+
- `@vidact/runtime/framework/server`: request-scoped streams, continuations,
|
|
19
|
+
and explicit client boundaries
|
|
20
|
+
- `@vidact/runtime/framework/hydrate`: async client-module loading, event replay,
|
|
21
|
+
independent boundary hydration, and boundary replacement
|
|
22
|
+
- `@vidact/runtime/testing`: deterministic runtime queue draining
|
|
23
|
+
|
|
24
|
+
Capabilities compose through separate imports. Hydrate builds import
|
|
25
|
+
`@vidact/runtime/hydrate` plus each enabled client feature; server builds use
|
|
26
|
+
`@vidact/runtime/server` plus the framework protocol or streaming entry when
|
|
27
|
+
needed. There are no feature cross-product or target-alias facades.
|
|
28
|
+
|
|
29
|
+
The compiler and runtime validate the `vidact-runtime-v1` protocol. Server and
|
|
30
|
+
hydration builds must use matching package versions.
|
|
31
|
+
|
|
32
|
+
Framework client boundaries use the closed `vidact-framework-v1` value model.
|
|
33
|
+
The server checks references against an application-supplied manifest, and the
|
|
34
|
+
browser asks an application-supplied loader for that exact reference. Vidact
|
|
35
|
+
does not import a serialized path, implement React Flight, or automatically
|
|
36
|
+
split a `"use client"` module graph.
|
|
37
|
+
|
|
38
|
+
Text inputs and textareas use React-shaped controlled-form timing: `onInput`
|
|
39
|
+
receives the native `input` event, while `onChange` is dispatched from that same
|
|
40
|
+
native event. Both handlers observe the browser-updated `target.value` before
|
|
41
|
+
Vidact restores an unaccepted controlled edit. Selects, checkboxes, radios, and
|
|
42
|
+
file inputs dispatch `onChange` from the native `change` event.
|
|
43
|
+
|
|
44
|
+
`mountHotRoot(import.meta.hot, host, application)` provides owner-safe client
|
|
45
|
+
replacement. Hydrated applications use `hydrateHotRoot` from a hydrate entry so
|
|
46
|
+
the first evaluation claims server markup and later evaluations replace its
|
|
47
|
+
owner. Vite application entries must also contain a lexical
|
|
48
|
+
`import.meta.hot.accept()` call so Vite recognizes the HMR boundary. Local
|
|
49
|
+
compiled state resets when the module changes; stable external stores are the
|
|
50
|
+
supported state-preservation boundary.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { CompiledScope } from './compiled/types.js';
|
|
2
|
+
import { type DirectChild, type DirectProps } from './direct-dom.js';
|
|
3
|
+
import type { SourceMask } from './source-mask.js';
|
|
4
|
+
import type { StateSlot } from './state-slot.js';
|
|
5
|
+
declare const FORM_ACTION_EXECUTE: unique symbol;
|
|
6
|
+
export interface FormStatus {
|
|
7
|
+
readonly pending: boolean;
|
|
8
|
+
readonly data: FormData | null;
|
|
9
|
+
readonly method: 'get' | 'post';
|
|
10
|
+
readonly action: FunctionFormAction | null;
|
|
11
|
+
}
|
|
12
|
+
export type FunctionFormAction = (data: FormData) => unknown | PromiseLike<unknown>;
|
|
13
|
+
type ActionDispatch<Payload> = {
|
|
14
|
+
(payload: Payload): void;
|
|
15
|
+
readonly permalink?: string;
|
|
16
|
+
readonly [FORM_ACTION_EXECUTE]: (payload: Payload) => Promise<void>;
|
|
17
|
+
};
|
|
18
|
+
export interface OptimisticSlot<Value, Update> {
|
|
19
|
+
readonly get: () => Value;
|
|
20
|
+
readonly set: (update: Update) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare function createCompiledActionState<State, Payload>(scope: CompiledScope, stateSource: SourceMask, pendingSource: SourceMask, action: (previousState: State, payload: Payload) => State | PromiseLike<State>, initialState: State, permalink?: string): {
|
|
23
|
+
readonly get: () => {
|
|
24
|
+
readonly value: State;
|
|
25
|
+
readonly pending: boolean;
|
|
26
|
+
};
|
|
27
|
+
readonly set: ActionDispatch<Payload>;
|
|
28
|
+
};
|
|
29
|
+
export declare function createCompiledOptimistic<Value, Update = Value>(scope: CompiledScope, reads: SourceMask, writes: SourceMask, evaluate: () => Value, reducer?: (current: Value, update: Update) => Value): OptimisticSlot<Value, Update>;
|
|
30
|
+
export declare function createCompiledFormStatus(scope: CompiledScope, sourceMask: SourceMask): StateSlot<FormStatus>;
|
|
31
|
+
export declare function ActionForm(props: DirectProps): DirectChild;
|
|
32
|
+
export declare function compiledFormAction<Value>(value: Value): Value;
|
|
33
|
+
export declare function useActionState(): never;
|
|
34
|
+
export declare function useOptimistic(): never;
|
|
35
|
+
export declare function useFormStatus(): never;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAQxD,OAAO,EAAK,KAAK,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD,QAAA,MAAM,mBAAmB,eAAuD,CAAA;AAEhF,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAA;CAC3C;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;AAWnF,KAAK,cAAc,CAAC,OAAO,IAAI;IAC7B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,CAAC,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACpE,CAAA;AAeD,MAAM,WAAW,cAAc,CAAC,KAAK,EAAE,MAAM;IAC3C,QAAQ,CAAC,GAAG,EAAE,MAAM,KAAK,CAAA;IACzB,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACvC;AAaD,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EACtD,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,UAAU,EACvB,aAAa,EAAE,UAAU,EACzB,MAAM,EAAE,CAAC,aAAa,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,KAAK,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,EAC9E,YAAY,EAAE,KAAK,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB;IACD,QAAQ,CAAC,GAAG,EAAE,MAAM;QAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAA;IACxE,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;CACtC,CA+FA;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAC5D,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,KAAK,EACrB,OAAO,GAAE,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,KACjB,GAC3B,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAkD/B;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EACpB,UAAU,EAAE,UAAU,GACrB,SAAS,CAAC,UAAU,CAAC,CAYvB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAuE1D;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,CAG7D;AAED,wBAAgB,cAAc,IAAI,KAAK,CAEtC;AAED,wBAAgB,aAAa,IAAI,KAAK,CAErC;AAED,wBAAgB,aAAa,IAAI,KAAK,CAErC"}
|
package/dist/actions.js
ADDED
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { captureCompiledTask, createContext, createCompiledExternalStore, createCompiledState, registerCompiledCleanup, runWithCompiledContext, useContext, } from './compiled/core.js';
|
|
2
|
+
import { registerTransitionAborter, registerTransitionFinalizer, registerTransitionSettlement, runUrgentUpdate, startIndependentTransition, } from './concurrent.js';
|
|
3
|
+
import { h } from './direct-dom.js';
|
|
4
|
+
import { resetActionForm } from './dom/forms.js';
|
|
5
|
+
import { installDomPropHandler } from './dom/properties.js';
|
|
6
|
+
const DEV = typeof __VIDACT_DEV__ === 'undefined' || __VIDACT_DEV__;
|
|
7
|
+
const FORM_ACTION_EXECUTE = Symbol(DEV ? 'Vidact.FormActionExecute' : undefined);
|
|
8
|
+
const defaultFormStatus = {
|
|
9
|
+
pending: false,
|
|
10
|
+
data: null,
|
|
11
|
+
method: 'get',
|
|
12
|
+
action: null,
|
|
13
|
+
};
|
|
14
|
+
const functionActions = new WeakMap();
|
|
15
|
+
const formStatusContext = createContext(undefined);
|
|
16
|
+
let actionDomInstalled = false;
|
|
17
|
+
let activeActionFrame;
|
|
18
|
+
export function createCompiledActionState(scope, stateSource, pendingSource, action, initialState, permalink) {
|
|
19
|
+
const state = createCompiledState(scope, stateSource, () => initialState);
|
|
20
|
+
const pending = createCompiledState(scope, pendingSource, false);
|
|
21
|
+
const task = captureCompiledTask(scope);
|
|
22
|
+
const queue = [];
|
|
23
|
+
let running = false;
|
|
24
|
+
const enqueue = (payload, reportError) => {
|
|
25
|
+
runUrgentUpdate(() => pending.replace(true));
|
|
26
|
+
return new Promise((resolve, reject) => {
|
|
27
|
+
queue.push({ payload, reportError, resolve, reject });
|
|
28
|
+
processNext();
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
const dispatch = ((payload) => {
|
|
32
|
+
void enqueue(payload, true);
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(dispatch, FORM_ACTION_EXECUTE, {
|
|
35
|
+
value: (payload) => enqueue(payload, false),
|
|
36
|
+
});
|
|
37
|
+
if (permalink !== undefined)
|
|
38
|
+
Object.defineProperty(dispatch, 'permalink', { value: permalink });
|
|
39
|
+
const processNext = () => {
|
|
40
|
+
if (running)
|
|
41
|
+
return;
|
|
42
|
+
const entry = queue.shift();
|
|
43
|
+
if (entry === undefined) {
|
|
44
|
+
runUrgentUpdate(() => pending.replace(false));
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
running = true;
|
|
48
|
+
const frame = createActionFrame();
|
|
49
|
+
let result;
|
|
50
|
+
const previousFrame = activeActionFrame;
|
|
51
|
+
activeActionFrame = frame;
|
|
52
|
+
try {
|
|
53
|
+
result = action(state.get(), entry.payload);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
activeActionFrame = previousFrame;
|
|
57
|
+
finishFailure(entry, frame, error);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
activeActionFrame = previousFrame;
|
|
61
|
+
void Promise.resolve(result).then((nextState) => {
|
|
62
|
+
if (task.disposed()) {
|
|
63
|
+
entry.resolve();
|
|
64
|
+
running = false;
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
runActionTransition(() => {
|
|
68
|
+
state.replace(nextState);
|
|
69
|
+
settleActionFrame(frame);
|
|
70
|
+
}, () => {
|
|
71
|
+
entry.resolve();
|
|
72
|
+
running = false;
|
|
73
|
+
processNext();
|
|
74
|
+
});
|
|
75
|
+
}, (error) => finishFailure(entry, frame, error));
|
|
76
|
+
};
|
|
77
|
+
const finishFailure = (entry, frame, error) => {
|
|
78
|
+
if (task.disposed()) {
|
|
79
|
+
entry.resolve();
|
|
80
|
+
running = false;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
runActionTransition(() => settleActionFrame(frame), () => {
|
|
84
|
+
running = false;
|
|
85
|
+
if (entry.reportError) {
|
|
86
|
+
entry.resolve();
|
|
87
|
+
task.report(error);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
entry.reject(error);
|
|
91
|
+
}
|
|
92
|
+
processNext();
|
|
93
|
+
});
|
|
94
|
+
};
|
|
95
|
+
return {
|
|
96
|
+
get: () => ({ value: state.get(), pending: pending.get() }),
|
|
97
|
+
set: dispatch,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
export function createCompiledOptimistic(scope, reads, writes, evaluate, reducer = (_current, update) => update) {
|
|
101
|
+
const slot = createCompiledState(scope, writes, () => evaluate());
|
|
102
|
+
let layers = [];
|
|
103
|
+
const compute = (items = layers) => items.reduce((value, layer) => (layer.settling ? value : reducer(value, layer.update)), evaluate());
|
|
104
|
+
scope[0](reads, () => slot.replace(compute()));
|
|
105
|
+
const add = (update) => {
|
|
106
|
+
const frame = activeActionFrame ?? {};
|
|
107
|
+
const layer = { frame, update, settling: false };
|
|
108
|
+
layers.push(layer);
|
|
109
|
+
try {
|
|
110
|
+
runUrgentUpdate(() => slot.replace(compute()));
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
layers = layers.filter((item) => item !== layer);
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
const settle = () => settleOptimisticFrame(frame);
|
|
117
|
+
if (activeActionFrame !== undefined) {
|
|
118
|
+
activeActionFrame.settlements.add(settle);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
if (registerTransitionSettlement(() => startIndependentTransition(settle)))
|
|
122
|
+
return;
|
|
123
|
+
layers = layers.filter((item) => item !== layer);
|
|
124
|
+
runUrgentUpdate(() => slot.replace(compute()));
|
|
125
|
+
throw new Error(DEV ? 'optimistic updates must run inside an Action or transition' : 'V035');
|
|
126
|
+
};
|
|
127
|
+
const settleOptimisticFrame = (frame) => {
|
|
128
|
+
const settling = layers.filter((layer) => layer.frame === frame);
|
|
129
|
+
if (settling.length === 0)
|
|
130
|
+
return;
|
|
131
|
+
for (const layer of settling)
|
|
132
|
+
layer.settling = true;
|
|
133
|
+
slot.replace(compute());
|
|
134
|
+
if (registerTransitionFinalizer(() => {
|
|
135
|
+
layers = layers.filter((layer) => layer.frame !== frame);
|
|
136
|
+
})) {
|
|
137
|
+
registerTransitionAborter(() => {
|
|
138
|
+
for (const layer of settling)
|
|
139
|
+
layer.settling = false;
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
layers = layers.filter((layer) => layer.frame !== frame);
|
|
144
|
+
};
|
|
145
|
+
return { get: slot.get, set: add };
|
|
146
|
+
}
|
|
147
|
+
export function createCompiledFormStatus(scope, sourceMask) {
|
|
148
|
+
const store = useContext(formStatusContext);
|
|
149
|
+
if (store === undefined)
|
|
150
|
+
return createCompiledState(scope, sourceMask, () => defaultFormStatus);
|
|
151
|
+
return createCompiledExternalStore(scope, sourceMask, (notify) => {
|
|
152
|
+
store.listeners.add(notify);
|
|
153
|
+
return () => store.listeners.delete(notify);
|
|
154
|
+
}, () => store.current);
|
|
155
|
+
}
|
|
156
|
+
export function ActionForm(props) {
|
|
157
|
+
ensureActionDom();
|
|
158
|
+
const task = captureCompiledTask();
|
|
159
|
+
const store = { current: defaultFormStatus, listeners: new Set() };
|
|
160
|
+
const children = normalizeChildren(props?.children);
|
|
161
|
+
const form = runWithCompiledContext(formStatusContext, store, () => h('form', props, ...children));
|
|
162
|
+
let activeSubmissions = 0;
|
|
163
|
+
let latestSubmission = 0;
|
|
164
|
+
let latestSucceeded = false;
|
|
165
|
+
const submit = (event) => {
|
|
166
|
+
const submitter = event.submitter;
|
|
167
|
+
const hasSubmitterOverride = submitter instanceof Element &&
|
|
168
|
+
(functionActions.has(submitter) || submitter.hasAttribute('formaction'));
|
|
169
|
+
const action = hasSubmitterOverride
|
|
170
|
+
? functionActions.get(submitter)
|
|
171
|
+
: functionActions.get(form);
|
|
172
|
+
if (action === undefined)
|
|
173
|
+
return;
|
|
174
|
+
event.preventDefault();
|
|
175
|
+
const submission = latestSubmission + 1;
|
|
176
|
+
latestSubmission = submission;
|
|
177
|
+
activeSubmissions += 1;
|
|
178
|
+
const data = createFormData(form, submitter);
|
|
179
|
+
publishFormStatus(store, {
|
|
180
|
+
pending: true,
|
|
181
|
+
data,
|
|
182
|
+
method: 'post',
|
|
183
|
+
action,
|
|
184
|
+
});
|
|
185
|
+
const frame = createActionFrame();
|
|
186
|
+
let result;
|
|
187
|
+
const previousFrame = activeActionFrame;
|
|
188
|
+
activeActionFrame = frame;
|
|
189
|
+
try {
|
|
190
|
+
result = executeFormAction(action, data);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
activeActionFrame = previousFrame;
|
|
194
|
+
finishFormAction(submission, false, frame, error);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
activeActionFrame = previousFrame;
|
|
198
|
+
void Promise.resolve(result).then(() => finishFormAction(submission, true, frame), (error) => finishFormAction(submission, false, frame, error));
|
|
199
|
+
};
|
|
200
|
+
const finishFormAction = (submission, succeeded, frame, error) => {
|
|
201
|
+
if (task.disposed())
|
|
202
|
+
return;
|
|
203
|
+
runActionTransition(() => settleActionFrame(frame), () => {
|
|
204
|
+
activeSubmissions -= 1;
|
|
205
|
+
if (submission === latestSubmission)
|
|
206
|
+
latestSucceeded = succeeded;
|
|
207
|
+
if (activeSubmissions === 0) {
|
|
208
|
+
if (latestSucceeded)
|
|
209
|
+
resetActionForm(form);
|
|
210
|
+
publishFormStatus(store, defaultFormStatus);
|
|
211
|
+
}
|
|
212
|
+
if (!succeeded)
|
|
213
|
+
task.report(error);
|
|
214
|
+
});
|
|
215
|
+
};
|
|
216
|
+
form.addEventListener('submit', submit);
|
|
217
|
+
registerCompiledCleanup(() => form.removeEventListener('submit', submit));
|
|
218
|
+
return form;
|
|
219
|
+
}
|
|
220
|
+
export function compiledFormAction(value) {
|
|
221
|
+
ensureActionDom();
|
|
222
|
+
return value;
|
|
223
|
+
}
|
|
224
|
+
export function useActionState() {
|
|
225
|
+
throw new Error(DEV ? 'useActionState requires compiler lowering' : 'V036');
|
|
226
|
+
}
|
|
227
|
+
export function useOptimistic() {
|
|
228
|
+
throw new Error(DEV ? 'useOptimistic requires compiler lowering' : 'V037');
|
|
229
|
+
}
|
|
230
|
+
export function useFormStatus() {
|
|
231
|
+
throw new Error(DEV ? 'useFormStatus requires compiler lowering' : 'V038');
|
|
232
|
+
}
|
|
233
|
+
function createActionFrame() {
|
|
234
|
+
return { settlements: new Set() };
|
|
235
|
+
}
|
|
236
|
+
function settleActionFrame(frame) {
|
|
237
|
+
for (const settle of frame.settlements)
|
|
238
|
+
settle();
|
|
239
|
+
if (!registerTransitionFinalizer(() => frame.settlements.clear()))
|
|
240
|
+
frame.settlements.clear();
|
|
241
|
+
}
|
|
242
|
+
function runActionTransition(stage, complete) {
|
|
243
|
+
let committed = false;
|
|
244
|
+
startIndependentTransition(() => {
|
|
245
|
+
stage();
|
|
246
|
+
registerTransitionFinalizer(() => {
|
|
247
|
+
committed = true;
|
|
248
|
+
});
|
|
249
|
+
registerTransitionSettlement(() => {
|
|
250
|
+
if (committed) {
|
|
251
|
+
complete();
|
|
252
|
+
}
|
|
253
|
+
else {
|
|
254
|
+
queueMicrotask(() => runActionTransition(stage, complete));
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
function ensureActionDom() {
|
|
260
|
+
if (actionDomInstalled)
|
|
261
|
+
return;
|
|
262
|
+
actionDomInstalled = true;
|
|
263
|
+
installDomPropHandler((element, name, value) => {
|
|
264
|
+
const valid = (name === 'action' && element instanceof HTMLFormElement) ||
|
|
265
|
+
(name === 'formAction' &&
|
|
266
|
+
(element instanceof HTMLButtonElement || element instanceof HTMLInputElement));
|
|
267
|
+
if (!valid)
|
|
268
|
+
return false;
|
|
269
|
+
if (typeof value !== 'function') {
|
|
270
|
+
functionActions.delete(element);
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
functionActions.set(element, value);
|
|
274
|
+
element.removeAttribute(name === 'action' ? 'action' : 'formaction');
|
|
275
|
+
return true;
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
function executeFormAction(action, data) {
|
|
279
|
+
const specialized = action[FORM_ACTION_EXECUTE];
|
|
280
|
+
return specialized === undefined ? action(data) : specialized(data);
|
|
281
|
+
}
|
|
282
|
+
function createFormData(form, submitter) {
|
|
283
|
+
return submitter === null ? new FormData(form) : new FormData(form, submitter);
|
|
284
|
+
}
|
|
285
|
+
function publishFormStatus(store, status) {
|
|
286
|
+
store.current = status;
|
|
287
|
+
for (const listener of store.listeners)
|
|
288
|
+
listener();
|
|
289
|
+
}
|
|
290
|
+
function normalizeChildren(value) {
|
|
291
|
+
if (value === undefined)
|
|
292
|
+
return [];
|
|
293
|
+
return (Array.isArray(value) ? value : [value]);
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/async.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ASYNC_RESOURCE, type AsyncResourceState, type CompiledContext, type CompiledRenderValue, type CompiledRenderValue as LazyRenderValue, type CompiledScope, type StructuralBinding } from './compiled/types.js';
|
|
2
|
+
import type { SourceMask } from './source-mask.js';
|
|
3
|
+
import type { StateSlot } from './state-slot.js';
|
|
4
|
+
export interface AsyncResource<Value> {
|
|
5
|
+
readonly [ASYNC_RESOURCE]: AsyncResourceState<Value>;
|
|
6
|
+
}
|
|
7
|
+
export interface ResourceOptions {
|
|
8
|
+
readonly cancel?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface LazyModule<Props extends Record<string, unknown>> {
|
|
11
|
+
readonly default: (props: Props) => LazyRenderValue;
|
|
12
|
+
}
|
|
13
|
+
export declare function createResource<Value>(input: PromiseLike<Value>, options?: ResourceOptions): AsyncResource<Value>;
|
|
14
|
+
export declare function use<Value>(input: CompiledContext<Value> | AsyncResource<Value> | PromiseLike<Value>): Value;
|
|
15
|
+
export declare function lazy<Props extends Record<string, unknown>>(load: () => PromiseLike<LazyModule<Props>>): (props: Props) => CompiledRenderValue;
|
|
16
|
+
export declare function suspense(render: () => CompiledRenderValue, fallback: () => CompiledRenderValue): StructuralBinding;
|
|
17
|
+
export declare function createCompiledAsync<Value>(scope: CompiledScope, reads: SourceMask, writes: SourceMask, evaluate: () => CompiledContext<Value> | AsyncResource<Value> | PromiseLike<Value>): StateSlot<Value>;
|
|
18
|
+
export declare function Suspense(props: {
|
|
19
|
+
readonly children?: (() => CompiledRenderValue) | readonly [() => CompiledRenderValue];
|
|
20
|
+
readonly fallback: () => CompiledRenderValue;
|
|
21
|
+
}): StructuralBinding;
|
|
22
|
+
//# sourceMappingURL=async.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.d.ts","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"AAaA,OAAO,EACL,cAAc,EACd,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,IAAI,eAAe,EAC3C,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAEhD,MAAM,WAAW,aAAa,CAAC,KAAK;IAClC,QAAQ,CAAC,CAAC,cAAc,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,UAAU,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,eAAe,CAAA;CACpD;AAED,wBAAgB,cAAc,CAAC,KAAK,EAClC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EACzB,OAAO,GAAE,eAAoB,GAC5B,aAAa,CAAC,KAAK,CAAC,CAEtB;AAED,wBAAgB,GAAG,CAAC,KAAK,EACvB,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GACxE,KAAK,CAEP;AAED,wBAAgB,IAAI,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxD,IAAI,EAAE,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GACzC,CAAC,KAAK,EAAE,KAAK,KAAK,mBAAmB,CAEvC;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,mBAAmB,EACjC,QAAQ,EAAE,MAAM,mBAAmB,GAClC,iBAAiB,CAEnB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EACvC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,UAAU,EACjB,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,eAAe,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GACjF,SAAS,CAAC,KAAK,CAAC,CAElB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,mBAAmB,CAAC,GAAG,SAAS,CAAC,MAAM,mBAAmB,CAAC,CAAA;IACtF,QAAQ,CAAC,QAAQ,EAAE,MAAM,mBAAmB,CAAA;CAC7C,GAAG,iBAAiB,CAEpB"}
|
package/dist/async.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// oxlint-disable-next-line typescript/triple-slash-reference -- Include compiler feature defines.
|
|
2
|
+
/// <reference path="./env.d.ts" />
|
|
3
|
+
import { createResource as createAsyncResource, lazy as createLazyComponent, useAsync, } from './compiled/async-resource.js';
|
|
4
|
+
import { Suspense as createSuspenseComponent, createCompiledAsync as createAsyncSlot, suspense as createSuspenseBinding, } from './compiled/core.js';
|
|
5
|
+
import { ASYNC_RESOURCE, } from './compiled/types.js';
|
|
6
|
+
export function createResource(input, options = {}) {
|
|
7
|
+
return createAsyncResource(input, options);
|
|
8
|
+
}
|
|
9
|
+
export function use(input) {
|
|
10
|
+
return useAsync(input);
|
|
11
|
+
}
|
|
12
|
+
export function lazy(load) {
|
|
13
|
+
return createLazyComponent(load);
|
|
14
|
+
}
|
|
15
|
+
export function suspense(render, fallback) {
|
|
16
|
+
return createSuspenseBinding(render, fallback);
|
|
17
|
+
}
|
|
18
|
+
export function createCompiledAsync(scope, reads, writes, evaluate) {
|
|
19
|
+
return createAsyncSlot(scope, reads, writes, evaluate);
|
|
20
|
+
}
|
|
21
|
+
export function Suspense(props) {
|
|
22
|
+
return createSuspenseComponent(props);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=async.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../src/async.ts"],"names":[],"mappings":"AAAA,kGAAkG;AAClG,mCAAmC;AAEnC,OAAO,EACL,cAAc,IAAI,mBAAmB,EACrC,IAAI,IAAI,mBAAmB,EAC3B,QAAQ,GACT,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,QAAQ,IAAI,uBAAuB,EACnC,mBAAmB,IAAI,eAAe,EACtC,QAAQ,IAAI,qBAAqB,GAClC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,cAAc,GAOf,MAAM,qBAAqB,CAAA;AAgB5B,MAAM,UAAU,cAAc,CAC5B,KAAyB,EACzB,OAAO,GAAoB,EAAE;IAE7B,OAAO,mBAAmB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,GAAG,CACjB,KAAyE;IAEzE,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,IAA0C;IAE1C,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,MAAiC,EACjC,QAAmC;IAEnC,OAAO,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAoB,EACpB,KAAiB,EACjB,MAAkB,EAClB,QAAkF;IAElF,OAAO,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAGxB;IACC,OAAO,uBAAuB,CAAC,KAAK,CAAC,CAAA;AACvC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type AsyncResource, type CompiledContext, type CompiledRenderValue, type LazyModule, type ResourceOptions, type Suspension } from './types.js';
|
|
2
|
+
export declare function createResource<Value>(input: PromiseLike<Value>, options?: ResourceOptions): AsyncResource<Value>;
|
|
3
|
+
export declare function useAsync<Value>(input: CompiledContext<Value> | AsyncResource<Value> | PromiseLike<Value>): Value;
|
|
4
|
+
export declare function lazy<Props extends Record<string, unknown>>(load: () => PromiseLike<LazyModule<Props>>): (props: Props) => CompiledRenderValue;
|
|
5
|
+
export declare function isSuspension(value: unknown): value is Suspension;
|
|
6
|
+
export declare function subscribeResource(resource: AsyncResource<unknown>, listener: () => void): () => void;
|
|
7
|
+
//# sourceMappingURL=async-resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-resource.d.ts","sourceRoot":"","sources":["../../src/compiled/async-resource.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,aAAa,EAElB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,YAAY,CAAA;AAKnB,wBAAgB,cAAc,CAAC,KAAK,EAClC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,EACzB,OAAO,GAAE,eAAoB,GAC5B,aAAa,CAAC,KAAK,CAAC,CAqBtB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAC5B,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GACxE,KAAK,CAGP;AAED,wBAAgB,IAAI,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxD,IAAI,EAAE,MAAM,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GACzC,CAAC,KAAK,EAAE,KAAK,KAAK,mBAAmB,CAUvC;AAMD,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AASD,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,CAAC,OAAO,CAAC,EAChC,QAAQ,EAAE,MAAM,IAAI,GACnB,MAAM,IAAI,CAeZ"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { isPromiseLike } from '../shared/promise.js';
|
|
2
|
+
import { DEV, isCompiledContext, useContext } from './core.js';
|
|
3
|
+
import { ASYNC_RESOURCE, SUSPENSION, } from './types.js';
|
|
4
|
+
const noop = () => { };
|
|
5
|
+
const promiseResources = new WeakMap();
|
|
6
|
+
export function createResource(input, options = {}) {
|
|
7
|
+
if (!isPromiseLike(input)) {
|
|
8
|
+
throw new TypeError(DEV ? 'createResource requires a promise-like value' : 'V029');
|
|
9
|
+
}
|
|
10
|
+
const existing = promiseResources.get(input);
|
|
11
|
+
if (existing !== undefined)
|
|
12
|
+
return existing;
|
|
13
|
+
const state = {
|
|
14
|
+
status: 'pending',
|
|
15
|
+
value: undefined,
|
|
16
|
+
reason: undefined,
|
|
17
|
+
listeners: new Set(),
|
|
18
|
+
cancel: options.cancel,
|
|
19
|
+
subscribers: 0,
|
|
20
|
+
};
|
|
21
|
+
const resource = { [ASYNC_RESOURCE]: state };
|
|
22
|
+
promiseResources.set(input, resource);
|
|
23
|
+
void Promise.resolve(input).then((value) => settleResource(state, 'fulfilled', value), (reason) => settleResource(state, 'rejected', reason));
|
|
24
|
+
return resource;
|
|
25
|
+
}
|
|
26
|
+
export function useAsync(input) {
|
|
27
|
+
if (isCompiledContext(input))
|
|
28
|
+
return useContext(input);
|
|
29
|
+
return readResource(isAsyncResource(input) ? input : createResource(input));
|
|
30
|
+
}
|
|
31
|
+
export function lazy(load) {
|
|
32
|
+
let resource;
|
|
33
|
+
return (props) => {
|
|
34
|
+
resource ??= createResource(load());
|
|
35
|
+
const module = readResource(resource);
|
|
36
|
+
if (typeof module?.default !== 'function') {
|
|
37
|
+
throw new TypeError(DEV ? 'lazy loader must resolve to a default component export' : 'V030');
|
|
38
|
+
}
|
|
39
|
+
return module.default(props);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
function isAsyncResource(value) {
|
|
43
|
+
return typeof value === 'object' && value !== null && ASYNC_RESOURCE in value;
|
|
44
|
+
}
|
|
45
|
+
export function isSuspension(value) {
|
|
46
|
+
return typeof value === 'object' && value !== null && SUSPENSION in value;
|
|
47
|
+
}
|
|
48
|
+
function readResource(resource) {
|
|
49
|
+
const state = resource[ASYNC_RESOURCE];
|
|
50
|
+
if (state.status === 'fulfilled')
|
|
51
|
+
return state.value;
|
|
52
|
+
if (state.status === 'rejected')
|
|
53
|
+
throw state.reason;
|
|
54
|
+
throw { [SUSPENSION]: true, resource };
|
|
55
|
+
}
|
|
56
|
+
export function subscribeResource(resource, listener) {
|
|
57
|
+
const state = resource[ASYNC_RESOURCE];
|
|
58
|
+
if (state.status !== 'pending') {
|
|
59
|
+
queueMicrotask(listener);
|
|
60
|
+
return noop;
|
|
61
|
+
}
|
|
62
|
+
let active = true;
|
|
63
|
+
state.subscribers += 1;
|
|
64
|
+
state.listeners.add(listener);
|
|
65
|
+
return () => {
|
|
66
|
+
if (!active)
|
|
67
|
+
return;
|
|
68
|
+
active = false;
|
|
69
|
+
if (state.listeners.delete(listener))
|
|
70
|
+
state.subscribers -= 1;
|
|
71
|
+
if (state.status === 'pending' && state.subscribers === 0)
|
|
72
|
+
state.cancel?.();
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function settleResource(state, status, result) {
|
|
76
|
+
if (state.status !== 'pending')
|
|
77
|
+
return;
|
|
78
|
+
state.status = status;
|
|
79
|
+
if (status === 'fulfilled')
|
|
80
|
+
state.value = result;
|
|
81
|
+
else
|
|
82
|
+
state.reason = result;
|
|
83
|
+
const listeners = [...state.listeners];
|
|
84
|
+
state.listeners.clear();
|
|
85
|
+
state.subscribers = 0;
|
|
86
|
+
for (const listener of listeners)
|
|
87
|
+
listener();
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=async-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-resource.js","sourceRoot":"","sources":["../../src/compiled/async-resource.ts"],"names":[],"mappings":"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"}
|