code wiki / _hdl_build / nx_js_render_emit.nx
nx_js_render_emit.nx source
↩ module page · 33 lines · 1491 B
1// nx_js_render_emit.nx -- read _offc/nxjs_in.html, run js_render_page (execute the page's inline scripts
2// against a mutable DOM, serialize the mutated tree), and WRITE the result to _offc/nxhtml.html so the
3// existing nx_browser_render_shot can rasterize it. Proves JS-built content reaches the renderer.
4import "nx_syscalls.nx"
5import "nx_js_eval.nx"
6const K_MAGIC_1048576: i64 = 1048576
7
8func jre_pn(v: i64) -> i64 {
9 var m: i64 = v
10 let t: *u8 = sys_mmap(24); var k: i64 = 0
11 if m == 0 { t[0] = 48 as u8; k = 1 } else { while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } }
12 let o: *u8 = sys_mmap(24); var j: i64 = 0
13 while j < k { o[j] = t[k - 1 - j]; j = j + 1 }
14 sys_write(1, o, k); return 0
15}
16
17func main() -> i64 {
18 let lp: *i64 = sys_mmap(16) as *i64
19 let html: *u8 = sys_read_file("_offc/nxjs_in.html\x00" as *u8, lp)
20 let hlen: i64 = lp[0]
21 if hlen <= 0 { sys_write(2, "js_render_emit: no _offc/nxjs_in.html\n\x00" as *u8, 38); return 1 }
22 let cap: i64 = hlen + K_MAGIC_1048576
23 let out: *u8 = sys_mmap(cap)
24 let rlen: i64 = js_render_page(html, hlen, out, cap)
25 let fd: i64 = sys_openat_wr("_offc/nxhtml.html\x00" as *u8, 0x1a4)
26 if fd < 0 { sys_write(2, "js_render_emit: open out failed\n\x00" as *u8, 32); return 2 }
27 sys_write(fd, out, rlen)
28 sys_close(fd)
29 sys_write(1, "js_render_emit: wrote _offc/nxhtml.html len=\x00" as *u8, 44)
30 jre_pn(rlen)
31 sys_write(1, "\n\x00" as *u8, 1)
32 return 0
33}