aboutsummaryrefslogtreecommitdiff
path: root/client-web/watch-builder.ts
diff options
context:
space:
mode:
Diffstat (limited to 'client-web/watch-builder.ts')
-rw-r--r--client-web/watch-builder.ts36
1 files changed, 36 insertions, 0 deletions
diff --git a/client-web/watch-builder.ts b/client-web/watch-builder.ts
new file mode 100644
index 0000000..05871e1
--- /dev/null
+++ b/client-web/watch-builder.ts
@@ -0,0 +1,36 @@
+
+// `emit` uses fetch to *download* was, that is just stupid
+// import { bundle } from "https://deno.land/x/emit@0.1.1/mod.ts";
+
+// instead, lets run `deno bundle` manually
+
+async function bundle(entry: string, options: { compilerOptions: { checkJs: boolean } }) {
+ const proc = Deno.run({ cmd: ["deno", "bundle", options.compilerOptions.checkJs ? "--check" : "--no-check", "--unstable", entry], stdout: "piped" })
+ const out = await proc.output()
+ const code = new TextDecoder().decode(out)
+ return { code }
+}
+
+let refresh_needed = false
+let refresh_pending = false
+async function refresh() {
+ refresh_needed = true
+ if (refresh_pending) return
+ refresh_needed = false
+ refresh_pending = true
+
+ try {
+ const { code } = await bundle("source/index.ts", { compilerOptions: { checkJs: false } })
+ await Deno.writeTextFile("public/assets/bundle.js", code)
+ } catch (e) { console.error(e) }
+
+ refresh_pending = false
+ if (refresh_needed) refresh()
+}
+
+refresh()
+for await (const event of Deno.watchFs("source")) {
+ if (event.kind == "modify" || event.kind == "create") {
+ refresh()
+ }
+}