This repository has been archived by the owner on Jan 10, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 5
/
build.config.ts
59 lines (56 loc) · 1.97 KB
/
build.config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import { dirname, resolve } from "node:path";
import { writeFile, mkdir, readFile, cp } from "node:fs/promises";
import { defineBuildConfig } from "unbuild";
export default defineBuildConfig({
failOnWarn: false,
declaration: false,
rollup: {
inlineDependencies: true,
emitCJS: false,
replace: {
preventAssignment: false,
delimiters: ["", ""],
values: {
"const isBrowser = ": "const isBrowser = true ||",
window: "({})",
"await fetch(": "await (globalThis.__shiki_fetch__||globalThis.fetch)(",
"process.env.VSCODE_TEXTMATE_DEBUG": "false",
},
},
},
entries: ["./src/shiki", "./src/shiki.node"],
hooks: {
async "build:before"(ctx) {
const genDir = resolve(ctx.options.rootDir, "gen");
await mkdir(genDir, { recursive: true });
const shiki = await import("shiki");
const assets = [
...shiki.BUNDLED_LANGUAGES.map((lang) => `languages/${lang.path}`),
...shiki.BUNDLED_THEMES.map((theme) => `themes/${theme}.json`),
];
const assetsCode = `export default {\n${assets
.map((asset) => ` '${asset}': () => import('shiki/${asset}')`)
.join(",\n")}\n}`;
await writeFile(resolve(genDir, "assets.ts"), assetsCode);
const buff = await readFile("./node_modules/shiki/dist/onig.wasm");
await writeFile(
resolve(genDir, "onig.ts"),
`export default () => "${buff.toString("base64")}"`
);
},
async "rollup:done"(ctx) {
// eslint-disable-next-line unicorn/prefer-module
const shikiDir = dirname(require.resolve("shiki/package.json"));
const assetsDir = resolve(ctx.options.outDir, "assets");
for (const item of ["languages", "themes", "dist/onig.wasm"]) {
await cp(resolve(shikiDir, item), resolve(assetsDir, item), {
recursive: true,
});
}
await cp(
resolve(shikiDir, "dist/index.d.ts"),
resolve(ctx.options.outDir, "shiki.d.ts")
);
},
},
});