Skip to content

Commit 2d7c0e0

Browse files
committed
build: refactor scripts to use Bun APIs
1 parent 1a73fef commit 2d7c0e0

File tree

10 files changed

+78
-113
lines changed

10 files changed

+78
-113
lines changed

bun.lockb

-7.28 KB
Binary file not shown.

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
"prettier-plugin-svelte": "latest",
3737
"svelte": "latest",
3838
"svelte-focus-key": "latest",
39-
"totalist": "latest",
4039
"typescript": "latest",
4140
"vite": "latest"
4241
},

scripts/build-languages.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1+
import { $ } from "bun";
12
import hljs from "highlight.js";
3+
import type { ModuleNames } from "./build-styles";
24
import { createMarkdown } from "./utils/create-markdown";
3-
import { mkdir } from "./utils/fs";
45
import { toCamelCase } from "./utils/to-pascal-case";
56
import { writeTo } from "./utils/write-to";
6-
import type { ModuleNames } from "./build-styles";
77

88
export async function buildLanguages() {
99
console.time("build languages");
10-
mkdir("src/languages");
10+
await $`rm -rf src/styles; mkdir src/styles`;
1111

1212
let languages = hljs.listLanguages();
1313
let markdown = createMarkdown("Languages", languages.length);

scripts/build-styles.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1+
import { $, Glob } from "bun";
12
import path from "node:path";
2-
import { totalist } from "totalist";
33
import { createMarkdown } from "./utils/create-markdown";
4-
import { copyFile, mkdir, readFile } from "./utils/fs";
54
import { minifyCss } from "./utils/minify-css";
65
import { toCamelCase } from "./utils/to-pascal-case";
76
import { writeTo } from "./utils/write-to";
@@ -10,19 +9,16 @@ export type ModuleNames = Array<{ name: string; moduleName: string }>;
109

1110
export async function buildStyles() {
1211
console.time("build styles");
13-
mkdir("src/styles");
12+
await $`rm -rf src/styles; mkdir src/styles`;
1413

1514
let scoped_styles = "";
1615
let names: string[] = [];
1716
let styles: ModuleNames = [];
1817

19-
await totalist("node_modules/highlight.js/styles", async (file, absPath) => {
20-
/**
21-
* highlight.js >=v11.19.0 also ships minified
22-
* CSS with the extension `.min.css`.
23-
*
24-
* We only include non-minified CSS files.
25-
*/
18+
const glob = new Glob("**/*");
19+
20+
for await (const file of glob.scan("node_modules/highlight.js/styles")) {
21+
const absPath = path.resolve("node_modules/highlight.js/styles", file);
2622
if (/(?<!\.min)\.(css)$/.test(file)) {
2723
let { name, dir } = path.parse(file);
2824
let moduleName = toCamelCase(name);
@@ -39,7 +35,7 @@ export async function buildStyles() {
3935
names.push(name);
4036
styles.push({ name, moduleName });
4137

42-
const content = await readFile(absPath, "utf-8");
38+
const content = await Bun.file(absPath).text();
4339
const css_minified = minifyCss(content);
4440

4541
// Escape backticks for JS template literal.
@@ -73,10 +69,10 @@ export async function buildStyles() {
7369
} else {
7470
// Copy over other file types, like images.
7571
if (!/\.(css)$/.test(file)) {
76-
await copyFile(absPath, `src/styles/${file}`);
72+
await $`cp ${absPath} src/styles/`;
7773
}
7874
}
79-
});
75+
}
8076

8177
styles = styles.sort((a, b) => {
8278
if (a.name > b.name) return 1;

scripts/index.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
1+
import { $ } from "bun";
2+
13
import { buildLanguages } from "./build-languages";
24
import { buildStyles } from "./build-styles";
3-
import { mkdir } from "./utils/fs";
4-
5-
(async () => {
6-
mkdir("www/data");
75

8-
await buildLanguages();
9-
await buildStyles();
10-
})();
6+
await $`rm -rf www/data; mkdir www/data`;
7+
await buildLanguages();
8+
await buildStyles();

scripts/npm-package.ts

Lines changed: 57 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,76 +1,65 @@
1-
import fs from "node:fs";
2-
import { mkdir, writeFile } from "./utils/fs";
1+
import { $ } from "bun";
32

4-
async function npmPackage() {
5-
console.time("package");
3+
console.time("package");
4+
await $`rm -rf package; mkdir package`;
5+
await Bun.write("./package/package.json", Bun.file("./package.json"));
6+
await Bun.write("./package/README.md", Bun.file("./README.md"));
7+
await Bun.write("./package/LICENSE", Bun.file("./LICENSE"));
68

7-
mkdir("./package");
9+
// Copy source folder to package
10+
await $`cp -r ./src/ ./package`;
811

9-
await Bun.write("./package/package.json", Bun.file("./package.json"));
10-
await Bun.write("./package/README.md", Bun.file("./README.md"));
11-
await Bun.write("./package/LICENSE", Bun.file("./LICENSE"));
12+
const pkgJson = await Bun.file("./package/package.json").json();
1213

13-
// Copy source folder to package
14-
mkdir("./package/src");
15-
fs.cpSync("./src", "./package", { recursive: true });
16-
fs.rmSync("./package/src", { recursive: true, force: true });
14+
delete pkgJson.scripts;
15+
delete pkgJson.devDependencies;
1716

18-
const pkgJson = JSON.parse(
19-
fs.readFileSync("./package/package.json", "utf-8"),
20-
);
17+
pkgJson.exports = {
18+
".": {
19+
types: "./index.d.ts",
20+
svelte: "./index.js",
21+
},
22+
"./*.svelte": {
23+
types: "./*.svelte.d.ts",
24+
import: "./*.svelte",
25+
},
26+
"./styles/*.css": {
27+
import: "./styles/*.css",
28+
},
29+
"./styles": {
30+
types: "./styles/index.d.ts",
31+
import: "./styles/index.js",
32+
},
33+
"./styles/*": {
34+
types: "./styles/*.d.ts",
35+
import: "./styles/*.js",
36+
},
37+
"./styles/*.js": {
38+
types: "./styles/*.d.ts",
39+
import: "./styles/*.js",
40+
},
41+
"./languages": {
42+
types: "./languages/index.d.ts",
43+
import: "./languages/index.js",
44+
},
45+
"./languages/*": {
46+
types: "./languages/*.d.ts",
47+
import: "./languages/*.js",
48+
},
49+
"./languages/*.js": {
50+
types: "./languages/*.d.ts",
51+
import: "./languages/*.js",
52+
},
53+
"./package.json": "./package.json",
54+
};
2155

22-
delete pkgJson.scripts;
23-
delete pkgJson.devDependencies;
56+
// Svelte entry point is deprecated but we preserve it for backwards compatibility.
57+
pkgJson.svelte = "./index.js";
58+
pkgJson.types = "./index.d.ts";
2459

25-
pkgJson.exports = {
26-
".": {
27-
types: "./index.d.ts",
28-
svelte: "./index.js",
29-
},
30-
"./*.svelte": {
31-
types: "./*.svelte.d.ts",
32-
import: "./*.svelte",
33-
},
34-
"./styles/*.css": {
35-
import: "./styles/*.css",
36-
},
37-
"./styles": {
38-
types: "./styles/index.d.ts",
39-
import: "./styles/index.js",
40-
},
41-
"./styles/*": {
42-
types: "./styles/*.d.ts",
43-
import: "./styles/*.js",
44-
},
45-
"./styles/*.js": {
46-
types: "./styles/*.d.ts",
47-
import: "./styles/*.js",
48-
},
49-
"./languages": {
50-
types: "./languages/index.d.ts",
51-
import: "./languages/index.js",
52-
},
53-
"./languages/*": {
54-
types: "./languages/*.d.ts",
55-
import: "./languages/*.js",
56-
},
57-
"./languages/*.js": {
58-
types: "./languages/*.d.ts",
59-
import: "./languages/*.js",
60-
},
61-
"./package.json": "./package.json",
62-
};
60+
// Most modern bundlers know if standalone StyleSheets are used.
61+
// We specify it here to be sure so that it will not be mistakenly tree-shaken.
62+
pkgJson.sideEffects = ["src/styles/*.css"];
6363

64-
// Svelte entry point is deprecated but we preserve it for backwards compatibility.
65-
pkgJson.svelte = "./index.js";
66-
pkgJson.types = "./index.d.ts";
67-
68-
// Most modern bundlers know if standalone StyleSheets are used.
69-
// We specify it here to be sure so that it will not be mistakenly tree-shaken.
70-
pkgJson.sideEffects = ["src/styles/*.css"];
71-
72-
await writeFile("./package/package.json", JSON.stringify(pkgJson, null, 2));
73-
console.timeEnd("package");
74-
}
75-
76-
npmPackage();
64+
await Bun.write("./package/package.json", JSON.stringify(pkgJson, null, 2));
65+
console.timeEnd("package");

scripts/utils/create-markdown.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
1-
import fs from "node:fs";
2-
3-
const pkg = JSON.parse(
4-
fs.readFileSync(new URL("../../package.json", import.meta.url), "utf8"),
5-
);
1+
import { dependencies } from "../../package.json";
62

73
/** Creates header metadata for supported languages/styles */
84
export const createMarkdown = (type: "Languages" | "Styles", len: number) =>
95
`
106
# Supported ${type}
117
128
> ${len} ${type.toLowerCase()} exported from highlight.js@${
13-
pkg.dependencies["highlight.js"]
9+
dependencies["highlight.js"]
1410
}
1511
`;

scripts/utils/fs.ts

Lines changed: 0 additions & 12 deletions
This file was deleted.

scripts/utils/write-to.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import path from "node:path";
22
import prettier, { type BuiltInParserName } from "prettier";
3-
import { writeFile } from "./fs";
43

54
const PARSER: Record<string, BuiltInParserName> = {
65
".md": "markdown",
@@ -17,5 +16,5 @@ export async function writeTo(file: string, source: string | object) {
1716

1817
if (!parser) throw new Error(`No parser found for ${file}`);
1918

20-
await writeFile(file, await prettier.format(value, { parser }));
19+
await Bun.write(file, await prettier.format(value, { parser }));
2120
}

tsconfig.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@
1313
"svelte-highlight/*": ["./src/*"]
1414
}
1515
},
16-
"include": ["src/**/*", "www/**/*", "tests/**/*", "scripts/**/*"],
16+
"include": ["src/**/*", "www/**/*", "tests/**/*", "scripts/**/*"]
1717
}

0 commit comments

Comments
 (0)