Skip to content

Commit 24129d9

Browse files
authored
Add async task support to VX DOM and host runtime (#676)
## Summary - Add async task plumbing across compiler, JS host, and VX DOM runtime - Update web SSR/bootstrap and browser/runtime code paths to handle async task commands - Extend smoke, browser, and CLI tests plus the mini-wikipedia example to cover the new flow ## Testing - Added and updated unit, browser, and smoke coverage for async VX task behavior - Not run (not requested)
1 parent b701830 commit 24129d9

24 files changed

Lines changed: 1276 additions & 578 deletions

File tree

apps/cli/src/__tests__/bootstrap.test.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,10 @@ describe("runBootstrap", () => {
142142
const clientVoyd = await readFile(resolve(target, "src/client.voyd"), "utf8");
143143
expect(clientVoyd).toContain("pub fn app() -> Program<ClientArticle, Msg>");
144144
expect(clientVoyd).toContain("on_input={(event: InputEvent) -> Msg");
145+
expect(clientVoyd).toContain("state_kind: String");
146+
expect(clientVoyd).toContain("tasks::detach do:");
147+
expect(clientVoyd).toContain("Cmd<Msg>::perform<i32>");
148+
expect(clientVoyd).toContain("on_click={Msg::Save {}}");
145149
expect(clientVoyd).toContain("http_client::post");
146150

147151
const css = await readFile(resolve(target, "src/style.css"), "utf8");
@@ -151,21 +155,21 @@ describe("runBootstrap", () => {
151155
const mainVoyd = await readFile(resolve(target, "src/main.voyd"), "utf8");
152156
expect(mainVoyd).toContain("pub fn main(): (server::HttpServer");
153157
expect(mainVoyd).toContain("tasks::TaskRuntime");
154-
expect(mainVoyd).toContain("server::serve_each");
155-
expect(mainVoyd).toContain("server::ServeTaskPolicy::sequential()");
158+
expect(mainVoyd).toContain("serve(port: app_port(), host: app_host()");
156159
expect(mainVoyd).toContain("max_body_bytes: 65536");
157-
expect(mainVoyd).toContain('adopt(serve_dir("./public".as_slice()))');
160+
expect(mainVoyd).toContain('adopt(serve_dir("./public"))');
158161
expect(mainVoyd).not.toContain('"/api/articles"');
159-
expect(mainVoyd).toContain('.get_context("/wiki".as_slice()');
160-
expect(mainVoyd).toContain('.post_context("/wiki/:slug/body".as_slice()');
161-
expect(mainVoyd).toContain('.post_context("/wiki/:slug".as_slice()');
162+
expect(mainVoyd).toContain('get("/wiki") do(ctx: Context):');
163+
expect(mainVoyd).toContain('post("/wiki/:slug/body") do(ctx: Context):');
164+
expect(mainVoyd).toContain('post("/wiki/:slug") do(ctx: Context):');
162165
expect(mainVoyd).toContain("request_text_body(ctx)");
163166
expect(mainVoyd).toContain('form_article_body(request_text_body(ctx))');
164167
expect(mainVoyd).toContain('parse_query(input).get("body".as_slice())');
165168
expect(mainVoyd).toContain("write_file_string(article_path(slug), body)");
166169
expect(mainVoyd).toContain("fn is_slug_rune(rune: i32) -> bool");
167170
expect(mainVoyd).toContain("not is_slug_rune(rune)");
168-
expect(mainVoyd).toContain("{article.status}");
171+
expect(mainVoyd).toContain("state_kind: String");
172+
expect(mainVoyd).toContain("{article.state_message}");
169173
expect(mainVoyd).not.toContain('>Saved</span>');
170174
expect(mainVoyd).toContain('href="/assets/client.css"');
171175
expect(mainVoyd).toContain("document<MsgPack, ClientArticle>");

0 commit comments

Comments
 (0)