@b9g/crank 0.6.1 → 0.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/async.js ADDED
@@ -0,0 +1,233 @@
1
+ /// <reference types="async.d.ts" />
2
+ import { createElement } from './crank.js';
3
+
4
+ /**
5
+ * Creates a lazy-loaded component from an initializer function.
6
+ *
7
+ * @param initializer - Function that returns a Promise resolving to a component or module
8
+ * @returns A component that loads the target component on first render
9
+ *
10
+ * @example
11
+ * ```jsx
12
+ * const LazyComponent = lazy(() => import('./MyComponent'));
13
+ *
14
+ * <Suspense fallback={<div>Loading...</div>}>
15
+ * <LazyComponent prop="value" />
16
+ * </Suspense>
17
+ * ```
18
+ */
19
+ function lazy(initializer) {
20
+ return async function* LazyComponent(props) {
21
+ let Component = await initializer();
22
+ if (Component && typeof Component === "object" && "default" in Component) {
23
+ Component = Component.default;
24
+ }
25
+ if (typeof Component !== "function") {
26
+ throw new Error("Lazy component initializer must return a Component or a module with a default export that is a Component.");
27
+ }
28
+ for (props of this) {
29
+ yield createElement(Component, props);
30
+ }
31
+ };
32
+ }
33
+ async function SuspenseEmpty() {
34
+ await new Promise((resolve) => setTimeout(resolve));
35
+ return null;
36
+ }
37
+ async function SuspenseFallback({ children, timeout, schedule, }) {
38
+ if (schedule) {
39
+ this.schedule(schedule);
40
+ }
41
+ await new Promise((resolve) => setTimeout(resolve, timeout));
42
+ return children;
43
+ }
44
+ function SuspenseChildren({ children, schedule, }) {
45
+ if (schedule) {
46
+ this.schedule(schedule);
47
+ }
48
+ return children;
49
+ }
50
+ /**
51
+ * A component that displays a fallback while its children are loading.
52
+ *
53
+ * When used within a SuspenseList, coordinates with siblings to control
54
+ * reveal order and fallback behavior.
55
+ *
56
+ * @param children - The content to display when loading is complete
57
+ * @param fallback - The content to display while children are loading
58
+ * @param timeout - Time in milliseconds before showing fallback (defaults to
59
+ * 300ms standalone, or inherits from SuspenseList)
60
+ *
61
+ * @example
62
+ * ```jsx
63
+ * <Suspense fallback={<div>Loading...</div>}>
64
+ * <AsyncComponent />
65
+ * </Suspense>
66
+ * ```
67
+ */
68
+ async function* Suspense({ children, fallback, timeout, }) {
69
+ const controller = this.consume(SuspenseListController);
70
+ if (controller) {
71
+ controller.register(this);
72
+ }
73
+ this.provide(SuspenseListController, undefined);
74
+ let initial = true;
75
+ for await ({ children, fallback, timeout } of this) {
76
+ if (timeout == null) {
77
+ if (controller) {
78
+ timeout = controller.timeout;
79
+ }
80
+ else {
81
+ timeout = 300;
82
+ }
83
+ }
84
+ if (!controller) {
85
+ yield createElement(SuspenseFallback, {
86
+ timeout: timeout,
87
+ children: fallback,
88
+ });
89
+ yield children;
90
+ continue;
91
+ }
92
+ if (controller.revealOrder !== "together") {
93
+ if (!controller.isHead(this)) {
94
+ yield createElement(SuspenseEmpty);
95
+ }
96
+ if (controller.tail !== "hidden") {
97
+ yield createElement(SuspenseFallback, {
98
+ timeout: timeout,
99
+ schedule: initial
100
+ ? () => controller.scheduleFallback(this)
101
+ : undefined,
102
+ children: fallback,
103
+ });
104
+ }
105
+ }
106
+ yield createElement(SuspenseChildren, {
107
+ schedule: initial ? () => controller.scheduleChildren(this) : undefined,
108
+ children,
109
+ });
110
+ initial = false;
111
+ }
112
+ }
113
+ const SuspenseListController = Symbol.for("SuspenseListController");
114
+ /**
115
+ * Coordinates the reveal order of multiple <Suspense> children.
116
+ *
117
+ * Controls when child <Suspense> components show their content or fallbacks
118
+ * based on the specified reveal order. The <SuspenseList> resolves when
119
+ * coordination effort is complete (not necessarily when all content is
120
+ * loaded).
121
+ *
122
+ * @param revealOrder - How children should be revealed:
123
+ * - "forwards" (default): Show children in document order, waiting for
124
+ * predecessors
125
+ * - "backwards": Show children in reverse order, waiting for successors
126
+ * - "together": Show all children simultaneously when all are ready
127
+ * In Crank, the default behavior of async components is to render together,
128
+ * so "together" might not be necessary if you are not using <Suspense>
129
+ * fallbacks.
130
+ * @param tail - How to handle fallbacks:
131
+ * - "collapsed" (default): Show only the fallback for the next unresolved
132
+ * Suspense component
133
+ * - "hidden": Hide all fallbacks
134
+ * Tail behavior only applies when revealOrder is not "together".
135
+ * @param timeout - Default timeout for Suspense children in milliseconds
136
+ * @param children - The elements containing Suspense components to coordinate.
137
+ * Suspense components which are not rendered immediately (because they are
138
+ * the children of another async component) will not be coordinated.
139
+ *
140
+ * @example
141
+ * ```jsx
142
+ * <SuspenseList revealOrder="forwards" tail="collapsed">
143
+ * <Suspense fallback={<div>Loading A...</div>}>
144
+ * <ComponentA />
145
+ * </Suspense>
146
+ * <Suspense fallback={<div>Loading B...</div>}>
147
+ * <ComponentB />
148
+ * </Suspense>
149
+ * </SuspenseList>
150
+ * ```
151
+ */
152
+ function* SuspenseList({ revealOrder = "forwards", tail = "collapsed", timeout, children, }) {
153
+ let registering = true;
154
+ const suspenseItems = [];
155
+ const controller = {
156
+ timeout,
157
+ revealOrder,
158
+ tail,
159
+ register(ctx) {
160
+ if (registering) {
161
+ let childrenResolver;
162
+ const childrenPromise = new Promise((r) => (childrenResolver = r));
163
+ suspenseItems.push({
164
+ ctx,
165
+ childrenResolver: childrenResolver,
166
+ childrenPromise,
167
+ });
168
+ return;
169
+ }
170
+ },
171
+ isHead(ctx) {
172
+ const index = suspenseItems.findIndex((item) => item.ctx === ctx);
173
+ if (index === -1) {
174
+ return false;
175
+ }
176
+ if (revealOrder === "forwards") {
177
+ return index === 0;
178
+ }
179
+ else if (revealOrder === "backwards") {
180
+ return index === suspenseItems.length - 1;
181
+ }
182
+ return false;
183
+ },
184
+ async scheduleFallback(ctx) {
185
+ const index = suspenseItems.findIndex((item) => item.ctx === ctx);
186
+ if (index === -1) {
187
+ return;
188
+ }
189
+ else if (revealOrder === "forwards") {
190
+ await Promise.all(suspenseItems.slice(0, index).map((item) => item.childrenPromise));
191
+ }
192
+ else if (revealOrder === "backwards") {
193
+ await Promise.all(suspenseItems.slice(index + 1).map((item) => item.childrenPromise));
194
+ }
195
+ },
196
+ async scheduleChildren(ctx) {
197
+ const index = suspenseItems.findIndex((item) => item.ctx === ctx);
198
+ if (index === -1) {
199
+ return;
200
+ }
201
+ // This children content is ready
202
+ suspenseItems[index].childrenResolver();
203
+ // Children coordination - determine when this content should show
204
+ if (revealOrder === "together") {
205
+ await Promise.all(suspenseItems.map((item) => item.childrenPromise));
206
+ }
207
+ else if (revealOrder === "forwards") {
208
+ await Promise.all(suspenseItems.slice(0, index + 1).map((item) => item.childrenPromise));
209
+ }
210
+ else if (revealOrder === "backwards") {
211
+ await Promise.all(suspenseItems.slice(index).map((item) => item.childrenPromise));
212
+ }
213
+ },
214
+ };
215
+ this.provide(SuspenseListController, controller);
216
+ for ({
217
+ revealOrder = "forwards",
218
+ tail = "collapsed",
219
+ timeout,
220
+ children,
221
+ } of this) {
222
+ registering = true;
223
+ // TODO: Is there a fixed amount of microtasks that we can wait for?
224
+ setTimeout(() => (registering = false));
225
+ controller.timeout = timeout;
226
+ controller.revealOrder = revealOrder;
227
+ controller.tail = tail;
228
+ yield children;
229
+ }
230
+ }
231
+
232
+ export { Suspense, SuspenseList, lazy };
233
+ //# sourceMappingURL=async.js.map
package/async.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async.js","sources":["../src/async.ts"],"sourcesContent":["import type {Children, Component, Context} from \"./crank.js\";\nimport {createElement} from \"./crank.js\";\n\n/**\n * Creates a lazy-loaded component from an initializer function.\n *\n * @param initializer - Function that returns a Promise resolving to a component or module\n * @returns A component that loads the target component on first render\n *\n * @example\n * ```jsx\n * const LazyComponent = lazy(() => import('./MyComponent'));\n *\n * <Suspense fallback={<div>Loading...</div>}>\n * <LazyComponent prop=\"value\" />\n * </Suspense>\n * ```\n */\nexport function lazy<T extends Component>(\n\tinitializer: () => Promise<T | {default: T}>,\n): T {\n\treturn async function* LazyComponent(\n\t\tthis: Context,\n\t\tprops: any,\n\t): AsyncGenerator<Children> {\n\t\tlet Component = await initializer();\n\t\tif (Component && typeof Component === \"object\" && \"default\" in Component) {\n\t\t\tComponent = Component.default;\n\t\t}\n\n\t\tif (typeof Component !== \"function\") {\n\t\t\tthrow new Error(\n\t\t\t\t\"Lazy component initializer must return a Component or a module with a default export that is a Component.\",\n\t\t\t);\n\t\t}\n\n\t\tfor (props of this) {\n\t\t\tyield createElement(Component, props);\n\t\t}\n\t} as unknown as T;\n}\n\nasync function SuspenseEmpty() {\n\tawait new Promise((resolve) => setTimeout(resolve));\n\treturn null;\n}\n\nasync function SuspenseFallback(\n\tthis: Context,\n\t{\n\t\tchildren,\n\t\ttimeout,\n\t\tschedule,\n\t}: {\n\t\tchildren: Children;\n\t\ttimeout: number;\n\t\tschedule?: () => Promise<unknown>;\n\t},\n): Promise<Children> {\n\tif (schedule) {\n\t\tthis.schedule(schedule);\n\t}\n\n\tawait new Promise((resolve) => setTimeout(resolve, timeout));\n\treturn children;\n}\n\nfunction SuspenseChildren(\n\tthis: Context,\n\t{\n\t\tchildren,\n\t\tschedule,\n\t}: {\n\t\tchildren: Children;\n\t\tschedule?: () => Promise<unknown>;\n\t},\n) {\n\tif (schedule) {\n\t\tthis.schedule(schedule);\n\t}\n\n\treturn children;\n}\n\n/**\n * A component that displays a fallback while its children are loading.\n *\n * When used within a SuspenseList, coordinates with siblings to control\n * reveal order and fallback behavior.\n *\n * @param children - The content to display when loading is complete\n * @param fallback - The content to display while children are loading\n * @param timeout - Time in milliseconds before showing fallback (defaults to\n * 300ms standalone, or inherits from SuspenseList)\n *\n * @example\n * ```jsx\n * <Suspense fallback={<div>Loading...</div>}>\n * <AsyncComponent />\n * </Suspense>\n * ```\n */\nexport async function* Suspense(\n\tthis: Context,\n\t{\n\t\tchildren,\n\t\tfallback,\n\t\ttimeout,\n\t}: {children: Children; fallback: Children; timeout?: number},\n): AsyncGenerator<Children> {\n\tconst controller = this.consume(SuspenseListController);\n\tif (controller) {\n\t\tcontroller.register(this);\n\t}\n\n\tthis.provide(SuspenseListController, undefined);\n\tlet initial = true;\n\tfor await ({children, fallback, timeout} of this) {\n\t\tif (timeout == null) {\n\t\t\tif (controller) {\n\t\t\t\ttimeout = controller.timeout;\n\t\t\t} else {\n\t\t\t\ttimeout = 300;\n\t\t\t}\n\t\t}\n\n\t\tif (!controller) {\n\t\t\tyield createElement(SuspenseFallback, {\n\t\t\t\ttimeout: timeout!,\n\t\t\t\tchildren: fallback,\n\t\t\t});\n\t\t\tyield children;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (controller.revealOrder !== \"together\") {\n\t\t\tif (!controller.isHead(this)) {\n\t\t\t\tyield createElement(SuspenseEmpty);\n\t\t\t}\n\n\t\t\tif (controller.tail !== \"hidden\") {\n\t\t\t\tyield createElement(SuspenseFallback, {\n\t\t\t\t\ttimeout: timeout!,\n\t\t\t\t\tschedule: initial\n\t\t\t\t\t\t? () => controller.scheduleFallback(this)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\tchildren: fallback,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tyield createElement(SuspenseChildren, {\n\t\t\tschedule: initial ? () => controller.scheduleChildren(this) : undefined,\n\t\t\tchildren,\n\t\t});\n\n\t\tinitial = false;\n\t}\n}\n\nconst SuspenseListController = Symbol.for(\"SuspenseListController\");\n\ninterface SuspenseListController {\n\ttimeout?: number;\n\trevealOrder?: \"forwards\" | \"backwards\" | \"together\";\n\ttail?: \"collapsed\" | \"hidden\";\n\tregister(ctx: Context): void;\n\tisHead(ctx: Context): boolean;\n\tscheduleFallback(ctx: Context): Promise<void>;\n\tscheduleChildren(ctx: Context): Promise<void>;\n}\n\ndeclare global {\n\tnamespace Crank {\n\t\tinterface ProvisionMap {\n\t\t\t[SuspenseListController]: SuspenseListController;\n\t\t}\n\t}\n}\n\n/**\n * Coordinates the reveal order of multiple <Suspense> children.\n *\n * Controls when child <Suspense> components show their content or fallbacks\n * based on the specified reveal order. The <SuspenseList> resolves when\n * coordination effort is complete (not necessarily when all content is\n * loaded).\n *\n * @param revealOrder - How children should be revealed:\n * - \"forwards\" (default): Show children in document order, waiting for\n * predecessors\n * - \"backwards\": Show children in reverse order, waiting for successors\n * - \"together\": Show all children simultaneously when all are ready\n * In Crank, the default behavior of async components is to render together,\n * so \"together\" might not be necessary if you are not using <Suspense>\n * fallbacks.\n * @param tail - How to handle fallbacks:\n * - \"collapsed\" (default): Show only the fallback for the next unresolved\n * Suspense component\n * - \"hidden\": Hide all fallbacks\n * Tail behavior only applies when revealOrder is not \"together\".\n * @param timeout - Default timeout for Suspense children in milliseconds\n * @param children - The elements containing Suspense components to coordinate.\n * Suspense components which are not rendered immediately (because they are\n * the children of another async component) will not be coordinated.\n *\n * @example\n * ```jsx\n * <SuspenseList revealOrder=\"forwards\" tail=\"collapsed\">\n * <Suspense fallback={<div>Loading A...</div>}>\n * <ComponentA />\n * </Suspense>\n * <Suspense fallback={<div>Loading B...</div>}>\n * <ComponentB />\n * </Suspense>\n * </SuspenseList>\n * ```\n */\nexport function* SuspenseList(\n\tthis: Context,\n\t{\n\t\trevealOrder = \"forwards\",\n\t\ttail = \"collapsed\",\n\t\ttimeout,\n\t\tchildren,\n\t}: {\n\t\trevealOrder?: \"forwards\" | \"backwards\" | \"together\";\n\t\ttail?: \"collapsed\" | \"hidden\";\n\t\ttimeout?: number;\n\t\tchildren: Children;\n\t},\n): Generator<Children> {\n\tlet registering = true;\n\tconst suspenseItems: Array<{\n\t\tctx: Context;\n\t\tchildrenResolver: () => void;\n\t\tchildrenPromise: Promise<void>;\n\t}> = [];\n\n\tconst controller: SuspenseListController = {\n\t\ttimeout,\n\t\trevealOrder,\n\t\ttail,\n\t\tregister(ctx: Context) {\n\t\t\tif (registering) {\n\t\t\t\tlet childrenResolver: () => void;\n\n\t\t\t\tconst childrenPromise = new Promise<void>(\n\t\t\t\t\t(r) => (childrenResolver = r),\n\t\t\t\t);\n\n\t\t\t\tsuspenseItems.push({\n\t\t\t\t\tctx,\n\t\t\t\t\tchildrenResolver: childrenResolver!,\n\t\t\t\t\tchildrenPromise,\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t},\n\n\t\tisHead(ctx: Context): boolean {\n\t\t\tconst index = suspenseItems.findIndex((item) => item.ctx === ctx);\n\t\t\tif (index === -1) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (revealOrder === \"forwards\") {\n\t\t\t\treturn index === 0;\n\t\t\t} else if (revealOrder === \"backwards\") {\n\t\t\t\treturn index === suspenseItems.length - 1;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\tasync scheduleFallback(ctx: Context) {\n\t\t\tconst index = suspenseItems.findIndex((item) => item.ctx === ctx);\n\t\t\tif (index === -1) {\n\t\t\t\treturn;\n\t\t\t} else if (revealOrder === \"forwards\") {\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tsuspenseItems.slice(0, index).map((item) => item.childrenPromise),\n\t\t\t\t);\n\t\t\t} else if (revealOrder === \"backwards\") {\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tsuspenseItems.slice(index + 1).map((item) => item.childrenPromise),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\n\t\tasync scheduleChildren(ctx: Context) {\n\t\t\tconst index = suspenseItems.findIndex((item) => item.ctx === ctx);\n\t\t\tif (index === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// This children content is ready\n\t\t\tsuspenseItems[index].childrenResolver();\n\t\t\t// Children coordination - determine when this content should show\n\t\t\tif (revealOrder === \"together\") {\n\t\t\t\tawait Promise.all(suspenseItems.map((item) => item.childrenPromise));\n\t\t\t} else if (revealOrder === \"forwards\") {\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tsuspenseItems.slice(0, index + 1).map((item) => item.childrenPromise),\n\t\t\t\t);\n\t\t\t} else if (revealOrder === \"backwards\") {\n\t\t\t\tawait Promise.all(\n\t\t\t\t\tsuspenseItems.slice(index).map((item) => item.childrenPromise),\n\t\t\t\t);\n\t\t\t}\n\t\t},\n\t};\n\n\tthis.provide(SuspenseListController, controller);\n\tfor ({\n\t\trevealOrder = \"forwards\",\n\t\ttail = \"collapsed\",\n\t\ttimeout,\n\t\tchildren,\n\t} of this) {\n\t\tregistering = true;\n\t\t// TODO: Is there a fixed amount of microtasks that we can wait for?\n\t\tsetTimeout(() => (registering = false));\n\t\tcontroller.timeout = timeout;\n\t\tcontroller.revealOrder = revealOrder;\n\t\tcontroller.tail = tail;\n\t\tyield children;\n\t}\n}\n"],"names":[],"mappings":"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"}