Fonts: use Deno methods
This commit is contained in:
parent
0b373fc57e
commit
6b3d96b321
|
@ -1,36 +1,30 @@
|
||||||
import File from "vinyl";
|
import File from "vinyl";
|
||||||
import tmp from "tmp";
|
import tmp from "tmp";
|
||||||
import { execFile } from "node:child_process";
|
|
||||||
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 { lastValueFrom, mergeMap } from "rxjs";
|
import { lastValueFrom, mergeMap } from "rxjs";
|
||||||
|
import { Buffer } from "node:buffer";
|
||||||
|
|
||||||
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"] },
|
||||||
text: { ranges: ["20-7F", "A0-FF", "2000-206F", "20AC"] },
|
text: { ranges: ["20-7F", "A0-FF", "2000-206F", "20AC"] },
|
||||||
};
|
};
|
||||||
|
|
||||||
function compileFont(font: File): Promise<File> {
|
async function compileFont(font: File): Promise<File> {
|
||||||
const [, variant, weight] = /([A-Z][a-z]+)-(\w+)\.ttf$/.exec(font.basename) as string[];
|
const [, variant, weight] = /([A-Z][a-z]+)-(\w+)\.ttf$/.exec(font.basename) as string[];
|
||||||
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, reject) => {
|
await new Deno.Command("pyftsubset", {
|
||||||
execFile("pyftsubset", [
|
args: [font.path, `--unicodes=${unicodes.join(",")}`, `--output-file=${tmpOutput.name}`, "--flavor=woff2"],
|
||||||
font.path,
|
}).output();
|
||||||
`--unicodes=${unicodes.join(",")}`,
|
|
||||||
`--output-file=${tmpOutput.name}`,
|
|
||||||
"--flavor=woff2",
|
|
||||||
]).on("error", (e) => reject(e)).once("exit", () => {
|
|
||||||
font.path = `iosevka-adaedra-${variant.toLowerCase()}-${weight.toLowerCase()}.woff2`;
|
|
||||||
font.contents = readFileSync(tmpOutput.name);
|
|
||||||
(font as any).base = null;
|
|
||||||
|
|
||||||
unlinkSync(tmpOutput.name);
|
font.path = `iosevka-adaedra-${variant.toLowerCase()}-${weight.toLowerCase()}.woff2`;
|
||||||
resolve(font);
|
font.contents = Buffer.from(await Deno.readFile(tmpOutput.name));
|
||||||
});
|
font.base = null;
|
||||||
});
|
|
||||||
|
await Deno.remove(tmpOutput.name);
|
||||||
|
return font;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const fonts = async () => {
|
export const fonts = async () => {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user