Minor adjustments
This commit is contained in:
parent
cacfdd3bfd
commit
0b373fc57e
17
bin/build.ts
17
bin/build.ts
|
@ -6,31 +6,32 @@ import { svg } from "../lib/tasks/svg.ts";
|
||||||
|
|
||||||
import { argv, exit } from "node:process";
|
import { argv, exit } from "node:process";
|
||||||
|
|
||||||
const wrapTask = (name: string, task: () => Promise<void>) => async () => {
|
type Task = () => Promise<void>;
|
||||||
|
|
||||||
|
const wrapTask = (name: string, task: Task) => async () => {
|
||||||
console.log("[start]", name);
|
console.log("[start]", name);
|
||||||
await task();
|
await task();
|
||||||
console.log("[end]", name);
|
console.log("[end]", name);
|
||||||
};
|
};
|
||||||
|
|
||||||
const TASKS: { [task: string]: () => Promise<void> } = {
|
const TASKS = new Map<string, Task>(Object.entries({
|
||||||
articles: wrapTask("articles", articles),
|
articles: wrapTask("articles", articles),
|
||||||
css: wrapTask("css", css),
|
css: wrapTask("css", css),
|
||||||
fonts: wrapTask("fonts", fonts),
|
fonts: wrapTask("fonts", fonts),
|
||||||
images: wrapTask("images", images),
|
images: wrapTask("images", images),
|
||||||
svg: wrapTask("svg", svg),
|
svg: wrapTask("svg", svg),
|
||||||
};
|
}));
|
||||||
|
|
||||||
const ALL_TASKS = ["fonts", "images", "svg", "css", "articles"];
|
const ALL_TASKS = ["fonts", "images", "svg", "css", "articles"];
|
||||||
|
|
||||||
const args = argv.slice(2);
|
const args = argv.slice(2);
|
||||||
console.log("args", args);
|
await (args.length ? args : ALL_TASKS)
|
||||||
(args.length ? args : ALL_TASKS)
|
|
||||||
.map((task: string) => {
|
.map((task: string) => {
|
||||||
if (!TASKS.hasOwnProperty(task)) {
|
if (!TASKS.has(task)) {
|
||||||
console.error("Unknown task", task);
|
console.error("Unknown task", task);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return TASKS[task];
|
return TASKS.get(task)!;
|
||||||
})
|
})
|
||||||
.reduce((prev: Promise<void>, cur: () => Promise<void>) => prev.then(cur), Promise.resolve());
|
.reduce((prev: Promise<void>, cur: Task) => prev.then(cur), Promise.resolve());
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { execFile } from "node:child_process";
|
||||||
import { readFileSync, unlinkSync } from "node:fs";
|
import { readFileSync, unlinkSync } from "node:fs";
|
||||||
import hashPaths from "../hash.ts";
|
import hashPaths from "../hash.ts";
|
||||||
import { dest, fromGlob } from "../rx-utils.ts";
|
import { dest, fromGlob } from "../rx-utils.ts";
|
||||||
import { mergeMap } from "rxjs";
|
import { lastValueFrom, mergeMap } from "rxjs";
|
||||||
|
|
||||||
const FONT_PRESETS: { [variant: string]: { ranges: string[] } } = {
|
const FONT_PRESETS: { [variant: string]: { ranges: string[] } } = {
|
||||||
mono: { ranges: ["20-7F", "2205", "2E22-2E25", "2713", "2717"] },
|
mono: { ranges: ["20-7F", "2205", "2E22-2E25", "2713", "2717"] },
|
||||||
|
@ -16,13 +16,13 @@ function compileFont(font: File): Promise<File> {
|
||||||
const tmpOutput = tmp.fileSync({ discardDescriptor: true });
|
const tmpOutput = tmp.fileSync({ discardDescriptor: true });
|
||||||
const unicodes = FONT_PRESETS[variant.toLowerCase()].ranges;
|
const unicodes = FONT_PRESETS[variant.toLowerCase()].ranges;
|
||||||
|
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve, reject) => {
|
||||||
execFile("pyftsubset", [
|
execFile("pyftsubset", [
|
||||||
font.path,
|
font.path,
|
||||||
`--unicodes=${unicodes.join(",")}`,
|
`--unicodes=${unicodes.join(",")}`,
|
||||||
`--output-file=${tmpOutput.name}`,
|
`--output-file=${tmpOutput.name}`,
|
||||||
"--flavor=woff2",
|
"--flavor=woff2",
|
||||||
]).once("exit", () => {
|
]).on("error", (e) => reject(e)).once("exit", () => {
|
||||||
font.path = `iosevka-adaedra-${variant.toLowerCase()}-${weight.toLowerCase()}.woff2`;
|
font.path = `iosevka-adaedra-${variant.toLowerCase()}-${weight.toLowerCase()}.woff2`;
|
||||||
font.contents = readFileSync(tmpOutput.name);
|
font.contents = readFileSync(tmpOutput.name);
|
||||||
(font as any).base = null;
|
(font as any).base = null;
|
||||||
|
@ -33,7 +33,9 @@ function compileFont(font: File): Promise<File> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
export const fonts = () =>
|
export const fonts = async () => {
|
||||||
|
await lastValueFrom(
|
||||||
fromGlob("vendor/*.ttf")
|
fromGlob("vendor/*.ttf")
|
||||||
.pipe(mergeMap(compileFont), hashPaths("fonts.manifest"))
|
.pipe(mergeMap(compileFont), hashPaths("fonts.manifest"), mergeMap(dest("dist/_assets"))),
|
||||||
.forEach(dest("dist/_assets"));
|
);
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in New Issue
Block a user