From 5fc8a8fda468dee9e562e8a6d99514d22c73581e Mon Sep 17 00:00:00 2001 From: CountBleck Date: Sat, 7 Oct 2023 15:44:05 -0700 Subject: [PATCH] Clean up the web build Just like the DTS build, the web build now exports functions instead of being spawned as a child process. Also, the web build no longer fails silently upon error. --- scripts/build-web.js | 73 ++++++++++++++++++++++---------------------- scripts/build.js | 30 +++++++++--------- 2 files changed, 52 insertions(+), 51 deletions(-) diff --git a/scripts/build-web.js b/scripts/build-web.js index 619cc03380..b897addffa 100644 --- a/scripts/build-web.js +++ b/scripts/build-web.js @@ -1,42 +1,43 @@ -import path from "path"; +import {dirname, join} from "path"; import fs from "fs"; -import { createRequire } from "module"; import { fileURLToPath } from "url"; -const dirname = path.dirname(fileURLToPath(import.meta.url)); -const require = createRequire(import.meta.url); -const pkg = require("../package-lock.json"); +const __dirname = dirname(fileURLToPath(import.meta.url)); -const mainVersion = pkg.version; -const binaryenVersion = pkg.dependencies.binaryen.version; -const longVersion = pkg.dependencies.long.version; +export function buildWeb() { + const pkg = JSON.parse(fs.readFileSync(join(__dirname, "../package-lock.json"))); -const distUrl = mainVersion === "0.0.0" ? `./` : `https://cdn.jsdelivr.net/npm/assemblyscript@${mainVersion}/dist/`; -const binaryenUrl = `https://cdn.jsdelivr.net/npm/binaryen@${binaryenVersion}/index.js`; -const longUrl = `https://cdn.jsdelivr.net/npm/long@${longVersion}/index.js`; -const importmap = { - "imports": { - "assemblyscript": `${distUrl}assemblyscript.js`, - "assemblyscript/asc": `${distUrl}asc.js`, - "binaryen": binaryenUrl, - "long": longUrl - } -}; + const mainVersion = pkg.version; + const binaryenVersion = pkg.dependencies.binaryen.version; + const longVersion = pkg.dependencies.long.version; + + const distUrl = mainVersion === "0.0.0" ? `./` : `https://cdn.jsdelivr.net/npm/assemblyscript@${mainVersion}/dist/`; + const binaryenUrl = `https://cdn.jsdelivr.net/npm/binaryen@${binaryenVersion}/index.js`; + const longUrl = `https://cdn.jsdelivr.net/npm/long@${longVersion}/index.js`; + const importmap = { + "imports": { + "assemblyscript": `${distUrl}assemblyscript.js`, + "assemblyscript/asc": `${distUrl}asc.js`, + "binaryen": binaryenUrl, + "long": longUrl + } + }; -fs.writeFileSync(path.join(dirname, "..", "dist", "importmap.json"), `${JSON.stringify(importmap, null, 2)} -`); -fs.writeFileSync(path.join(dirname, "..", "dist", "web.js"), `var ASSEMBLYSCRIPT_VERSION = ${JSON.stringify(mainVersion)}; -var ASSEMBLYSCRIPT_IMPORTMAP = ${JSON.stringify(importmap, null, 2)}; -if (!document.currentScript.src.includes("noinstall")) { - let elem = document.createElement("script"); - elem.type = "importmap"; - elem.text = JSON.stringify(ASSEMBLYSCRIPT_IMPORTMAP); - document.head.appendChild(elem); -} -if (!document.currentScript.src.includes("noshim")) { - let elem = document.createElement("script"); - elem.async = true; - elem.src = "https://cdn.jsdelivr.net/npm/es-module-shims@1/dist/es-module-shims.wasm.min.js"; - document.head.appendChild(elem); -} -`); + fs.writeFileSync(join(__dirname, "..", "dist", "importmap.json"), `${JSON.stringify(importmap, null, 2)} + `); + fs.writeFileSync(join(__dirname, "..", "dist", "web.js"), `var ASSEMBLYSCRIPT_VERSION = ${JSON.stringify(mainVersion)}; + var ASSEMBLYSCRIPT_IMPORTMAP = ${JSON.stringify(importmap, null, 2)}; + if (!document.currentScript.src.includes("noinstall")) { + let elem = document.createElement("script"); + elem.type = "importmap"; + elem.text = JSON.stringify(ASSEMBLYSCRIPT_IMPORTMAP); + document.head.appendChild(elem); + } + if (!document.currentScript.src.includes("noshim")) { + let elem = document.createElement("script"); + elem.async = true; + elem.src = "https://cdn.jsdelivr.net/npm/es-module-shims@1/dist/es-module-shims.wasm.min.js"; + document.head.appendChild(elem); + } + `); +} \ No newline at end of file diff --git a/scripts/build.js b/scripts/build.js index 2a32361d3b..0bc68ca1d2 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -1,12 +1,12 @@ import fs from "fs"; import path from "path"; import { fileURLToPath } from "url"; -import childProcess from "child_process"; import esbuild from "esbuild"; import { globSync } from "glob"; import { createRequire } from "module"; import { stdoutColors } from "../util/terminal.js"; +import {buildWeb} from "./build-web.js"; import * as dts from "./build-dts.js"; const require = createRequire(import.meta.url); @@ -175,22 +175,22 @@ const webPlugin = { setup(build) { build.onEnd(() => { const startTime = Date.now(); - const stdout = []; - console.log(`${time()} - ${"web"} - Starting new build ...`); - childProcess.spawn("node", [ "./build-web.js" ], { - cwd: dirname, - stdio: "pipe" - }).on("data", data => { - stdout.push(data.toString()); - }).on("error", err => { + console.log(`${time()} - web - Starting new build ...`); + + try { + buildWeb(); + const duration = Date.now() - startTime; - console.log(stdout.join("")); - console.log(`${time()} - ${"web"} - ${stdoutColors.red("ERROR")} (had errors, ${duration} ms)`); - }).on("close", code => { - if (code) return; + console.log(`${time()} - web - ${stdoutColors.green("SUCCESS")} (no errors, ${duration} ms)`); + process.exitCode = 0; + } catch (e) { const duration = Date.now() - startTime; - console.log(`${time()} - ${"web"} - ${stdoutColors.green("SUCCESS")} (no errors, ${duration} ms)`); - }); + console.error(e); + console.log(`${time()} - web - ${stdoutColors.red("ERROR")} (had errors, ${duration} ms)`); + process.exitCode = 1; + } finally { + buildingDefinitions = false; + } }); } };