From 68636182a416af30e24eb979820c00f6eed30bdd Mon Sep 17 00:00:00 2001
From: Corey Butler <770982+coreybutler@users.noreply.github.com>
Date: Mon, 30 Dec 2024 16:24:29 -0600
Subject: [PATCH] add a local build tool

---
 build.js | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 build.js

diff --git a/build.js b/build.js
new file mode 100644
index 00000000..13a65bf1
--- /dev/null
+++ b/build.js
@@ -0,0 +1,48 @@
+// This is a deno helper script to locally build the installer using Inno Setup
+// Yeah, I know  it's not Node, but we need to compile this and Node SEAs on Win32 are a PITA.
+const content = await Deno.readTextFile('./nvm.iss')
+const data = JSON.parse(await Deno.readTextFile('./src/manifest.json'))
+const {version} = data
+const output = content.replaceAll('{{VERSION}}', version)
+await Deno.writeTextFile('./.tmp.iss', output)
+
+console.log('Viewing /.tmp.iss')
+output.split("\n").forEach((line, num) => {
+  let n = `${num+1}`
+  while (n.length < 3) {
+    n = ' ' + n
+  }
+
+  console.log(`${n} | ${line}`)
+})
+
+const command = await new Deno.Command('.\\assets\\buildtools\\iscc.exe', {
+  args: ['.\\.tmp.iss'],
+  stdout: 'piped',
+  stderr: 'piped',
+})
+
+const process = command.spawn();
+
+// Stream stdout
+(async () => {
+  const decoder = new TextDecoder();
+  for await (const chunk of process.stdout) {
+    console.log(decoder.decode(chunk));
+  }
+})();
+
+// Stream stderr
+(async () => {
+  const decoder = new TextDecoder();
+  for await (const chunk of process.stderr) {
+    console.error(decoder.decode(chunk));
+  }
+})();
+
+// Wait for completion
+const status = await process.status;
+Deno.remove('.\\.tmp.iss');
+if (!status.success) {
+  Deno.exit(status.code);
+}