@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.
Files changed (197) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +50 -0
  4. package/dist/actions.d.ts +37 -0
  5. package/dist/actions.d.ts.map +1 -0
  6. package/dist/actions.js +295 -0
  7. package/dist/actions.js.map +1 -0
  8. package/dist/async.d.ts +22 -0
  9. package/dist/async.d.ts.map +1 -0
  10. package/dist/async.js +24 -0
  11. package/dist/async.js.map +1 -0
  12. package/dist/compiled/async-resource.d.ts +7 -0
  13. package/dist/compiled/async-resource.d.ts.map +1 -0
  14. package/dist/compiled/async-resource.js +89 -0
  15. package/dist/compiled/async-resource.js.map +1 -0
  16. package/dist/compiled/core.d.ts +183 -0
  17. package/dist/compiled/core.d.ts.map +1 -0
  18. package/dist/compiled/core.js +3170 -0
  19. package/dist/compiled/core.js.map +1 -0
  20. package/dist/compiled/types.d.ts +63 -0
  21. package/dist/compiled/types.d.ts.map +1 -0
  22. package/dist/compiled/types.js +7 -0
  23. package/dist/compiled/types.js.map +1 -0
  24. package/dist/compiled/validation.d.ts +2 -0
  25. package/dist/compiled/validation.d.ts.map +1 -0
  26. package/dist/compiled/validation.js +22 -0
  27. package/dist/compiled/validation.js.map +1 -0
  28. package/dist/component-spread.d.ts +6 -0
  29. package/dist/component-spread.d.ts.map +1 -0
  30. package/dist/component-spread.js +71 -0
  31. package/dist/component-spread.js.map +1 -0
  32. package/dist/concurrent.d.ts +26 -0
  33. package/dist/concurrent.d.ts.map +1 -0
  34. package/dist/concurrent.js +244 -0
  35. package/dist/concurrent.js.map +1 -0
  36. package/dist/direct-dom.d.ts +14 -0
  37. package/dist/direct-dom.d.ts.map +1 -0
  38. package/dist/direct-dom.js +239 -0
  39. package/dist/direct-dom.js.map +1 -0
  40. package/dist/dom/attributes.d.ts +7 -0
  41. package/dist/dom/attributes.d.ts.map +1 -0
  42. package/dist/dom/attributes.js +52 -0
  43. package/dist/dom/attributes.js.map +1 -0
  44. package/dist/dom/events.d.ts +3 -0
  45. package/dist/dom/events.d.ts.map +1 -0
  46. package/dist/dom/events.js +78 -0
  47. package/dist/dom/events.js.map +1 -0
  48. package/dist/dom/forms.d.ts +7 -0
  49. package/dist/dom/forms.d.ts.map +1 -0
  50. package/dist/dom/forms.js +217 -0
  51. package/dist/dom/forms.js.map +1 -0
  52. package/dist/dom/intrinsic.d.ts +19 -0
  53. package/dist/dom/intrinsic.d.ts.map +1 -0
  54. package/dist/dom/intrinsic.js +53 -0
  55. package/dist/dom/intrinsic.js.map +1 -0
  56. package/dist/dom/namespace.d.ts +3 -0
  57. package/dist/dom/namespace.d.ts.map +1 -0
  58. package/dist/dom/namespace.js +34 -0
  59. package/dist/dom/namespace.js.map +1 -0
  60. package/dist/dom/namespaces.d.ts +9 -0
  61. package/dist/dom/namespaces.d.ts.map +1 -0
  62. package/dist/dom/namespaces.js +14 -0
  63. package/dist/dom/namespaces.js.map +1 -0
  64. package/dist/dom/properties.d.ts +27 -0
  65. package/dist/dom/properties.d.ts.map +1 -0
  66. package/dist/dom/properties.js +333 -0
  67. package/dist/dom/properties.js.map +1 -0
  68. package/dist/dom/style-properties.d.ts +2 -0
  69. package/dist/dom/style-properties.d.ts.map +1 -0
  70. package/dist/dom/style-properties.js +47 -0
  71. package/dist/dom/style-properties.js.map +1 -0
  72. package/dist/dom/styles.d.ts +4 -0
  73. package/dist/dom/styles.d.ts.map +1 -0
  74. package/dist/dom/styles.js +77 -0
  75. package/dist/dom/styles.js.map +1 -0
  76. package/dist/dom-forms.d.ts +3 -0
  77. package/dist/dom-forms.d.ts.map +1 -0
  78. package/dist/dom-forms.js +17 -0
  79. package/dist/dom-forms.js.map +1 -0
  80. package/dist/dom-styles.d.ts +3 -0
  81. package/dist/dom-styles.d.ts.map +1 -0
  82. package/dist/dom-styles.js +11 -0
  83. package/dist/dom-styles.js.map +1 -0
  84. package/dist/env.d.ts +6 -0
  85. package/dist/framework-hydrate.d.ts +21 -0
  86. package/dist/framework-hydrate.d.ts.map +1 -0
  87. package/dist/framework-hydrate.js +165 -0
  88. package/dist/framework-hydrate.js.map +1 -0
  89. package/dist/framework-protocol.d.ts +33 -0
  90. package/dist/framework-protocol.d.ts.map +1 -0
  91. package/dist/framework-protocol.js +235 -0
  92. package/dist/framework-protocol.js.map +1 -0
  93. package/dist/framework.d.ts +39 -0
  94. package/dist/framework.d.ts.map +1 -0
  95. package/dist/framework.js +111 -0
  96. package/dist/framework.js.map +1 -0
  97. package/dist/hydrate.d.ts +9 -0
  98. package/dist/hydrate.d.ts.map +1 -0
  99. package/dist/hydrate.js +14 -0
  100. package/dist/hydrate.js.map +1 -0
  101. package/dist/hydration-bridge.d.ts +62 -0
  102. package/dist/hydration-bridge.d.ts.map +1 -0
  103. package/dist/hydration-bridge.js +95 -0
  104. package/dist/hydration-bridge.js.map +1 -0
  105. package/dist/hydration.d.ts +29 -0
  106. package/dist/hydration.d.ts.map +1 -0
  107. package/dist/hydration.js +489 -0
  108. package/dist/hydration.js.map +1 -0
  109. package/dist/index.d.ts +13 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +13 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/indexed-list.d.ts +12 -0
  114. package/dist/indexed-list.d.ts.map +1 -0
  115. package/dist/indexed-list.js +10 -0
  116. package/dist/indexed-list.js.map +1 -0
  117. package/dist/jsx-runtime.d.ts +12 -0
  118. package/dist/jsx-runtime.d.ts.map +1 -0
  119. package/dist/jsx-runtime.js +27 -0
  120. package/dist/jsx-runtime.js.map +1 -0
  121. package/dist/keyed-list.d.ts +17 -0
  122. package/dist/keyed-list.d.ts.map +1 -0
  123. package/dist/keyed-list.js +180 -0
  124. package/dist/keyed-list.js.map +1 -0
  125. package/dist/metadata.d.ts +4 -0
  126. package/dist/metadata.d.ts.map +1 -0
  127. package/dist/metadata.js +187 -0
  128. package/dist/metadata.js.map +1 -0
  129. package/dist/nested-prop.d.ts +4 -0
  130. package/dist/nested-prop.d.ts.map +1 -0
  131. package/dist/nested-prop.js +18 -0
  132. package/dist/nested-prop.js.map +1 -0
  133. package/dist/profiling.d.ts +10 -0
  134. package/dist/profiling.d.ts.map +1 -0
  135. package/dist/profiling.js +21 -0
  136. package/dist/profiling.js.map +1 -0
  137. package/dist/protocol.d.ts +3 -0
  138. package/dist/protocol.d.ts.map +1 -0
  139. package/dist/protocol.js +7 -0
  140. package/dist/protocol.js.map +1 -0
  141. package/dist/raw-html.d.ts +3 -0
  142. package/dist/raw-html.d.ts.map +1 -0
  143. package/dist/raw-html.js +172 -0
  144. package/dist/raw-html.js.map +1 -0
  145. package/dist/ref.d.ts +6 -0
  146. package/dist/ref.d.ts.map +1 -0
  147. package/dist/ref.js +5 -0
  148. package/dist/ref.js.map +1 -0
  149. package/dist/renderable-protocol.d.ts +10 -0
  150. package/dist/renderable-protocol.d.ts.map +1 -0
  151. package/dist/renderable-protocol.js +12 -0
  152. package/dist/renderable-protocol.js.map +1 -0
  153. package/dist/renderable.d.ts +27 -0
  154. package/dist/renderable.d.ts.map +1 -0
  155. package/dist/renderable.js +147 -0
  156. package/dist/renderable.js.map +1 -0
  157. package/dist/retained-ui.d.ts +8 -0
  158. package/dist/retained-ui.d.ts.map +1 -0
  159. package/dist/retained-ui.js +12 -0
  160. package/dist/retained-ui.js.map +1 -0
  161. package/dist/root.d.ts +18 -0
  162. package/dist/root.d.ts.map +1 -0
  163. package/dist/root.js +94 -0
  164. package/dist/root.js.map +1 -0
  165. package/dist/scheduler.d.ts +10 -0
  166. package/dist/scheduler.d.ts.map +1 -0
  167. package/dist/scheduler.js +124 -0
  168. package/dist/scheduler.js.map +1 -0
  169. package/dist/server-framework.d.ts +52 -0
  170. package/dist/server-framework.d.ts.map +1 -0
  171. package/dist/server-framework.js +247 -0
  172. package/dist/server-framework.js.map +1 -0
  173. package/dist/server.d.ts +159 -0
  174. package/dist/server.d.ts.map +1 -0
  175. package/dist/server.js +793 -0
  176. package/dist/server.js.map +1 -0
  177. package/dist/shared/promise.d.ts +4 -0
  178. package/dist/shared/promise.d.ts.map +1 -0
  179. package/dist/shared/promise.js +23 -0
  180. package/dist/shared/promise.js.map +1 -0
  181. package/dist/source-mask.d.ts +7 -0
  182. package/dist/source-mask.d.ts.map +1 -0
  183. package/dist/source-mask.js +74 -0
  184. package/dist/source-mask.js.map +1 -0
  185. package/dist/spread.d.ts +3 -0
  186. package/dist/spread.d.ts.map +1 -0
  187. package/dist/spread.js +103 -0
  188. package/dist/spread.js.map +1 -0
  189. package/dist/state-slot.d.ts +18 -0
  190. package/dist/state-slot.d.ts.map +1 -0
  191. package/dist/state-slot.js +46 -0
  192. package/dist/state-slot.js.map +1 -0
  193. package/dist/testing.d.ts +7 -0
  194. package/dist/testing.d.ts.map +1 -0
  195. package/dist/testing.js +18 -0
  196. package/dist/testing.js.map +1 -0
  197. 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"}
@@ -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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"}
@@ -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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAC9D,OAAO,EACL,cAAc,EACd,UAAU,GAQX,MAAM,YAAY,CAAA;AAEnB,MAAM,IAAI,GAAG,GAAS,EAAE,GAAE,CAAC,CAAA;AAC3B,MAAM,gBAAgB,GAAG,IAAI,OAAO,EAAkC,CAAA;AAEtE,MAAM,UAAU,cAAc,CAC5B,KAAyB,EACzB,OAAO,GAAoB,EAAE;IAE7B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,8CAA8C,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IACpF,CAAC;IACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAe,CAAqC,CAAA;IAC1F,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAA;IAC3C,MAAM,KAAK,GAA8B;QACvC,MAAM,EAAE,SAAS;QACjB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,SAAS;QACjB,SAAS,EAAE,IAAI,GAAG,EAAE;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,CAAC;KACf,CAAA;IACD,MAAM,QAAQ,GAAyB,EAAE,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,CAAA;IAClE,gBAAgB,CAAC,GAAG,CAAC,KAAe,EAAE,QAAkC,CAAC,CAAA;IACzE,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAC9B,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,EACpD,CAAC,MAAe,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,CAC/D,CAAA;IACD,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CACtB,KAAyE;IAEzE,IAAI,iBAAiB,CAAQ,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;IAC7D,OAAO,YAAY,CAAC,eAAe,CAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,IAAI,CAClB,IAA0C;IAE1C,IAAI,QAAsD,CAAA;IAC1D,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,QAAQ,KAAK,cAAc,CAAC,IAAI,EAAE,CAAC,CAAA;QACnC,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;QACrC,IAAI,OAAO,MAAM,EAAE,OAAO,KAAK,UAAU,EAAE,CAAC;YAC1C,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,wDAAwD,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;QAC9F,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC,CAAA;AACH,CAAC;AAED,SAAS,eAAe,CAAQ,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,cAAc,IAAI,KAAK,CAAA;AAC/E,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,UAAU,IAAI,KAAK,CAAA;AAC3E,CAAC;AAED,SAAS,YAAY,CAAQ,QAA8B;IACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC,KAAc,CAAA;IAC7D,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU;QAAE,MAAM,KAAK,CAAC,MAAM,CAAA;IACnD,MAAM,EAAE,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAuB,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,QAAgC,EAChC,QAAoB;IAEpB,MAAM,KAAK,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAA;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,cAAc,CAAC,QAAQ,CAAC,CAAA;QACxB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,MAAM,GAAG,IAAI,CAAA;IACjB,KAAK,CAAC,WAAW,IAAI,CAAC,CAAA;IACtB,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;IAC7B,OAAO,GAAG,EAAE;QACV,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,MAAM,GAAG,KAAK,CAAA;QACd,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;YAAE,KAAK,CAAC,WAAW,IAAI,CAAC,CAAA;QAC5D,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,CAAC;YAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAA;IAC7E,CAAC,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CACrB,KAAgC,EAChC,MAAgC,EAChC,MAAuB;IAEvB,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,OAAM;IACtC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;IACrB,IAAI,MAAM,KAAK,WAAW;QAAE,KAAK,CAAC,KAAK,GAAG,MAAe,CAAA;;QACpD,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;IAC1B,MAAM,SAAS,GAAG,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC,CAAA;IACtC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACvB,KAAK,CAAC,WAAW,GAAG,CAAC,CAAA;IACrB,KAAK,MAAM,QAAQ,IAAI,SAAS;QAAE,QAAQ,EAAE,CAAA;AAC9C,CAAC"}