docs: better typlite.typ (#1832)

This commit is contained in:
Myriad-Dreamin 2025-06-22 15:30:24 +08:00 committed by GitHub
parent 483de6f00d
commit b58334cd0e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 86 additions and 72 deletions

View file

@ -1,4 +1,4 @@
import { resolve, basename } from "path";
import { resolve, basename, relative } from "path";
import * as fs from "fs";
import { execSync } from "child_process";
@ -22,14 +22,14 @@ const yarn = (cmd, stdio = "inherit") => {
}
return execSync(script, { stdio });
};
const typlite = (input, output = "-") => {
if (output === "-") {
// return stdout
const res = yarn(`--silent typlite --root ${root} ${input} -`, "pipe");
return res.toString();
}
const typlite = (input, output) => {
const assets_flag = dry
? ""
: `--assets-path ${relative(root, resolve(output, "../assets/images/", basename(input.slice(0, -4))))}`;
return yarn(`typlite ${input} ${output}`);
// return stdout
const res = yarn(`--silent typlite ${assets_flag} --root ${root} ${input} -`, "pipe");
return res.toString();
};
const convert = async (inp, out, opts) => {
@ -37,29 +37,13 @@ const convert = async (inp, out, opts) => {
const output = resolve(root, out);
const { before } = opts || {};
const res = typlite(input).trim();
const res = typlite(input, output).trim();
if (dry) {
console.log(res);
return;
}
const assetsDir = resolve(output, "../assets/images");
fs.mkdirSync(assetsDir, { recursive: true });
// outline all data "data:image/svg+xml;base64," to render on GitHub correctly
const inputName = basename(input);
let imageCnt = 0;
const outputContent =
`<!-- This file is generated by scripts/link-docs.mjs from ${inp}. Do not edit manually. -->\n${before || ""}${res}\n`.replace(
/\"data\:image\/svg\+xml\;base64,([^\"]*)\"/g,
(_, content) => {
const fileName = `${inputName}-inlined${imageCnt}.svg`;
imageCnt += 1;
fs.writeFileSync(resolve(assetsDir, fileName), base64Decode(content));
return `"./assets/images/${fileName}"`;
},
);
const outputContent = `<!-- This file is generated by scripts/link-docs.mjs from ${inp}. Do not edit manually. -->\n${before || ""}${res}\n`;
await fs.promises.writeFile(output, outputContent);
};