📜 Update script metadata to include new cheatsheet script
This commit is contained in:
@@ -338,6 +338,15 @@
|
|||||||
"publish_time": 1775409068941,
|
"publish_time": 1775409068941,
|
||||||
"update_time": 1775409068941
|
"update_time": 1775409068941
|
||||||
},
|
},
|
||||||
|
"update-cheatsheet.ts": {
|
||||||
|
"script_name": "update-cheatsheet.ts",
|
||||||
|
"script_length": 2422,
|
||||||
|
"script_sha256": "2b60ecbfc08caf85b4cbfde266ba49d51e86930506c5930ed420559ac712e625",
|
||||||
|
"script_full_url": "https://git.hatter.ink/hatter/ts-scripts/raw/branch/main/single-scripts/update-cheatsheet.ts",
|
||||||
|
"single_script_file": true,
|
||||||
|
"publish_time": 1775925235458,
|
||||||
|
"update_time": 1775925235458
|
||||||
|
},
|
||||||
"upper.ts": {
|
"upper.ts": {
|
||||||
"script_name": "upper.ts",
|
"script_name": "upper.ts",
|
||||||
"script_length": 390,
|
"script_length": 390,
|
||||||
|
|||||||
86
single-scripts/update-cheatsheet.ts
Executable file
86
single-scripts/update-cheatsheet.ts
Executable file
@@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env -S deno run -A
|
||||||
|
|
||||||
|
import { parse } from "jsr:@std/yaml";
|
||||||
|
import {
|
||||||
|
existsPath,
|
||||||
|
exit,
|
||||||
|
joinPath,
|
||||||
|
log,
|
||||||
|
readFileToString,
|
||||||
|
writeStringToFile,
|
||||||
|
} from "../libraries/deno-commons-mod.ts";
|
||||||
|
|
||||||
|
async function main(): Promise<void> {
|
||||||
|
const dirs = Deno.readDir(".");
|
||||||
|
const metas: CheatSheetMeta[] = [];
|
||||||
|
for await (const dirEntry of dirs) {
|
||||||
|
if (dirEntry.isDirectory) {
|
||||||
|
log.debug(dirEntry.name);
|
||||||
|
const cheatSheetMdFile = joinPath(dirEntry.name, "CHEATSHEET.md");
|
||||||
|
if (!await existsPath(cheatSheetMdFile)) {
|
||||||
|
log.debug(`Cheat sheet md not exists: ${cheatSheetMdFile}`);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
const cheatSheetMd = await readFileToString(cheatSheetMdFile);
|
||||||
|
try {
|
||||||
|
const cheatSheetMeta = parseCheatSheetMeta(cheatSheetMd);
|
||||||
|
metas.push(cheatSheetMeta);
|
||||||
|
} catch (e) {
|
||||||
|
log.error(
|
||||||
|
`Parse cheat sheet md: ${cheatSheetMdFile} failed: ${e}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
metas.sort((m1, m2) => {
|
||||||
|
return m1.name.localeCompare(m2.name);
|
||||||
|
});
|
||||||
|
|
||||||
|
await writeStringToFile("meta.json", JSON.stringify(metas, null, 4));
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CheatSheetMeta {
|
||||||
|
name: string;
|
||||||
|
aliases?: Array<string>;
|
||||||
|
repo?: string;
|
||||||
|
description?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseCheatSheetMeta(cheatSheetMd: string): CheatSheetMeta {
|
||||||
|
const yaml = findMetaYaml(cheatSheetMd);
|
||||||
|
let meta = parse(yaml);
|
||||||
|
return meta as CheatSheetMeta;
|
||||||
|
}
|
||||||
|
|
||||||
|
function findMetaYaml(cheatSheetMd: string): string {
|
||||||
|
const lines = cheatSheetMd.split(/\r?\n/);
|
||||||
|
let yaml = [];
|
||||||
|
let inMeta = false;
|
||||||
|
let inYaml = false;
|
||||||
|
for (const line of lines) {
|
||||||
|
if (inMeta) {
|
||||||
|
if (inYaml) {
|
||||||
|
if (line.startsWith("```")) {
|
||||||
|
inYaml = false;
|
||||||
|
return yaml.join("\n");
|
||||||
|
} else {
|
||||||
|
yaml.push(line);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (/^```\s*yaml\s*$/i.test(line)) {
|
||||||
|
inYaml = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (/^\s*([#]+)\s*meta\s*$/i.test(line)) {
|
||||||
|
inMeta = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new Error("Parse cheat sheet md meta failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
main().catch((err) => {
|
||||||
|
log.error(err);
|
||||||
|
exit(1);
|
||||||
|
}).then(() => exit(0));
|
||||||
Reference in New Issue
Block a user