Path: blob/main/src/webui/quarto-preview/build.ts
6456 views
import { dirname } from "node:path";12// ensure this is treated as a module3export {};45const args = Deno.args;67// establish target js build time8const kQuartoPreviewJs = "../../resources/preview/quarto-preview.js";9let jsBuildTime: number;10try {11jsBuildTime = Deno.statSync(kQuartoPreviewJs).mtime?.valueOf() || 0;12} catch {13jsBuildTime = 0;14}1516const buildFromArgs = () => {17return args.includes("--force");18};1920const run = async (args: string[], quiet = true) => {21console.log(`Running: npm ${args.join(" ")}`);22const command = new Deno.Command("npm", {23args,24});25const output = await command.output();26if (output.success || quiet) {27return output;28}29console.error("Command failed");30console.log(new TextDecoder().decode(output.stderr));31Deno.exit(output.code);32};3334const buildFromGit = async () => {35let output: Deno.CommandOutput;36try {37const command = new Deno.Command("git", { args: ["ls-files"] });38output = await command.output();39} catch {40// git not installed, rebuild41return true;42}43if (!output.success) {44return true;45}46const stdout = new TextDecoder().decode(output.stdout);47const files = stdout.split("\n").filter((line) => line.length > 0);48return files.some((file) =>49Deno.statSync(file).mtime!.valueOf() > jsBuildTime50);51};5253// check if any of our repo files have a later time54const build = buildFromArgs() || await buildFromGit();5556if (!build) {57console.log("No changes to quarto-preview.js, skipping build");58Deno.exit(0);59}6061console.log("Building quarto-preview.js");62console.log("Installing...");63await run(["install"], false);64console.log("Building...");65await run(["run", "build"], false);666768