fix: build script for editor tools (#2099)

This commit is contained in:
Myriad-Dreamin 2025-09-02 09:14:50 +08:00 committed by GitHub
parent ce447185d1
commit 985c0c16b8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -3,13 +3,19 @@ import { genVscodeExt } from "./build-l10n.mjs";
import { spawn } from "child_process";
import * as fs from "fs/promises";
import * as path from "path";
import { rimraf } from "rimraf";
import copyDirSync from "cpr";
import {
generate as generateTextmate,
install as installTextmate,
} from "../syntaxes/textmate/main.ts";
/// The default working directory is the root of the project
const cwd = path.resolve(import.meta.dirname, "..");
const vscodeDir = path.resolve(cwd, "editors/vscode");
const previewDir = path.resolve(cwd, "tools/typst-preview-frontend");
const editorToolsDir = path.resolve(cwd, "tools/editor-tools");
/**
* Spawns a command and return a promise that resolves to the code. The id is used to identify the command in the output and prepended to each line.
* The line will be buffered and printed to avoid line crossing.
@ -50,9 +56,11 @@ export function spawnAsync(id, cmd, options = { cwd }) {
});
}
const cwd = path.resolve(import.meta.dirname, "..");
const vscodeDir = path.resolve(cwd, "editors/vscode");
const editorToolsDir = path.resolve(cwd, "editors/editor-tools");
const _copyDirOpts = { deleteFirst: true, overwrite: true, confirm: true };
const copyDir = (fr, to) =>
new Promise((resolve, reject) =>
copyDirSync(fr, to, _copyDirOpts, (err) => (err ? reject(err) : resolve())),
);
export async function extractL10nTs() {
await spawnAsync(
@ -83,30 +91,28 @@ export async function buildSyntax() {
}
export async function buildPreview() {
await Promise.all([
spawnAsync("build:preview:tsc", "cd tools/typst-preview-frontend && npx tsc"),
spawnAsync("build:preview:vite", "cd tools/typst-preview-frontend && npx vite build"),
]);
const run = (id, cmd) => spawnAsync(`build:preview:${id}`, cmd, { cwd: previewDir });
await Promise.all([run("tsc", "npx tsc"), run("vite", "npx vite build")]);
await fs.copyFile(
path.resolve(cwd, "tools/typst-preview-frontend/dist/index.html"),
path.resolve(previewDir, "dist/index.html"),
path.resolve(cwd, "crates/tinymist-assets/src/typst-preview.html"),
);
}
export async function buildEditorTools() {
await spawnAsync("build:editor-tools:tsc", "cd tools/editor-tools && npx tsc");
await spawnAsync(
"build:editor-tools:vite",
"cd tools/editor-tools && npx vite build -- --component=symbol-view",
);
await spawnAsync("build:editor-tools:vite", "cd tools/editor-tools && npx vite build");
const run = (id, cmd) => spawnAsync(`build:editor-tools:${id}`, cmd, { cwd: editorToolsDir });
await run("tsc", "npx tsc");
await run("vite", "npx vite build -- --component=symbol-view");
await run("vite", "npx vite build");
await installEditorTools();
}
export async function installEditorTools() {
await rimraf(path.join(vscodeDir, "out/editor-tools/"));
await fs.mkdir(path.join(vscodeDir, "out/editor-tools/"), { recursive: true });
await fs.copyFile(path.join(editorToolsDir, "dist"), path.join(vscodeDir, "out/editor-tools/"));
await copyDir(path.join(editorToolsDir, "dist"), path.join(vscodeDir, "out/editor-tools/"));
}
export async function checkVersion() {