Compare commits

..

2 Commits

Author SHA1 Message Date
ae4895fff3 add progrossbar 2022-11-29 19:14:48 +09:00
1f3eab6593 fix bug: string escape 2022-11-29 19:14:36 +09:00
3 changed files with 89 additions and 32 deletions

View File

@ -74,6 +74,14 @@
"https://deno.land/std@0.161.0/path/posix.ts": "6b63de7097e68c8663c84ccedc0fd977656eb134432d818ecd3a4e122638ac24", "https://deno.land/std@0.161.0/path/posix.ts": "6b63de7097e68c8663c84ccedc0fd977656eb134432d818ecd3a4e122638ac24",
"https://deno.land/std@0.161.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9", "https://deno.land/std@0.161.0/path/separator.ts": "fe1816cb765a8068afb3e8f13ad272351c85cbc739af56dacfc7d93d710fe0f9",
"https://deno.land/std@0.161.0/path/win32.ts": "ee8826dce087d31c5c81cd414714e677eb68febc40308de87a2ce4b40e10fb8d", "https://deno.land/std@0.161.0/path/win32.ts": "ee8826dce087d31c5c81cd414714e677eb68febc40308de87a2ce4b40e10fb8d",
"https://deno.land/std@0.162.0/_util/assert.ts": "e94f2eb37cebd7f199952e242c77654e43333c1ac4c5c700e929ea3aa5489f74",
"https://deno.land/std@0.162.0/bytes/bytes_list.ts": "aba5e2369e77d426b10af1de0dcc4531acecec27f9b9056f4f7bfbf8ac147ab4",
"https://deno.land/std@0.162.0/bytes/equals.ts": "3c3558c3ae85526f84510aa2b48ab2ad7bdd899e2e0f5b7a8ffc85acb3a6043a",
"https://deno.land/std@0.162.0/bytes/mod.ts": "b2e342fd3669176a27a4e15061e9d588b89c1aaf5008ab71766e23669565d179",
"https://deno.land/std@0.162.0/fmt/colors.ts": "9e36a716611dcd2e4865adea9c4bec916b5c60caad4cdcdc630d4974e6bb8bd4",
"https://deno.land/std@0.162.0/io/buffer.ts": "fae02290f52301c4e0188670e730cd902f9307fb732d79c4aa14ebdc82497289",
"https://deno.land/std@0.162.0/io/types.d.ts": "107e1e64834c5ba917c783f446b407d33432c5d612c4b3430df64fc2b4ecf091",
"https://deno.land/std@0.162.0/streams/conversion.ts": "555c6c249f3acf85655f2d0af52d1cb3168e40b1c1fa26beefea501b333abe28",
"https://deno.land/std@0.166.0/_util/asserts.ts": "d0844e9b62510f89ce1f9878b046f6a57bf88f208a10304aab50efcb48365272", "https://deno.land/std@0.166.0/_util/asserts.ts": "d0844e9b62510f89ce1f9878b046f6a57bf88f208a10304aab50efcb48365272",
"https://deno.land/std@0.166.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934", "https://deno.land/std@0.166.0/_util/os.ts": "8a33345f74990e627b9dfe2de9b040004b08ea5146c7c9e8fe9a29070d193934",
"https://deno.land/std@0.166.0/bytes/bytes_list.ts": "aba5e2369e77d426b10af1de0dcc4531acecec27f9b9056f4f7bfbf8ac147ab4", "https://deno.land/std@0.166.0/bytes/bytes_list.ts": "aba5e2369e77d426b10af1de0dcc4531acecec27f9b9056f4f7bfbf8ac147ab4",
@ -276,6 +284,13 @@
"https://deno.land/x/fresh@1.1.2/src/server/types.ts": "dde992ab4ee635df71a7fc96fe4cd85943c1a9286ea8eb586563d5f5ca154955", "https://deno.land/x/fresh@1.1.2/src/server/types.ts": "dde992ab4ee635df71a7fc96fe4cd85943c1a9286ea8eb586563d5f5ca154955",
"https://deno.land/x/importmap@0.2.1/_util.ts": "ada9a9618b537e6c0316c048a898352396c882b9f2de38aba18fd3f2950ede89", "https://deno.land/x/importmap@0.2.1/_util.ts": "ada9a9618b537e6c0316c048a898352396c882b9f2de38aba18fd3f2950ede89",
"https://deno.land/x/importmap@0.2.1/mod.ts": "ae3d1cd7eabd18c01a4960d57db471126b020f23b37ef14e1359bbb949227ade", "https://deno.land/x/importmap@0.2.1/mod.ts": "ae3d1cd7eabd18c01a4960d57db471126b020f23b37ef14e1359bbb949227ade",
"https://deno.land/x/progress@v1.3.4/deps.ts": "83050e627263931d853ba28b7c15c80bf4be912bea7e0d3d13da2bc0aaf7889d",
"https://deno.land/x/progress@v1.3.4/mod.ts": "ca65cf56c63d48ac4806f62a6ee5e5889dc19b8bd9a3be2bfeee6c8c4a483786",
"https://deno.land/x/progress@v1.3.4/multi.ts": "755f05ce3d1f859142c6a1e67972f8765ee29eac7bfdec8126008c312addbeef",
"https://deno.land/x/progress@v1.3.4/time.ts": "e7ab1975dadf519c8881a333cbc661d6048da2b1c2f4a7d3e995065d53340144",
"https://deno.land/x/progressbar@v0.2.0/progressbar.ts": "d571c5505c2afd792d729f2467a017dd3a108c82ecb4421280fa86eec6d25a05",
"https://deno.land/x/progressbar@v0.2.0/styles.ts": "2ba8cfb41688c0ca497ed740bda342f55e629043397eef43180665aa34ef2f01",
"https://deno.land/x/progressbar@v0.2.0/widgets.ts": "73aa6d06b6a89a4dfd8d15e97ca634bc1e82c7993cd95ba56459f900d2e02838",
"https://deno.land/x/rutt@0.0.13/mod.ts": "af981cfb95131152bf50fc9140fc00cb3efb6563df2eded1d408361d8577df20", "https://deno.land/x/rutt@0.0.13/mod.ts": "af981cfb95131152bf50fc9140fc00cb3efb6563df2eded1d408361d8577df20",
"https://deno.land/x/ts_morph@16.0.0/common/DenoRuntime.ts": "537800e840d0994f9055164e11bf33eadf96419246af0d3c453793c3ae67bdb3", "https://deno.land/x/ts_morph@16.0.0/common/DenoRuntime.ts": "537800e840d0994f9055164e11bf33eadf96419246af0d3c453793c3ae67bdb3",
"https://deno.land/x/ts_morph@16.0.0/common/mod.ts": "01985d2ee7da8d1caee318a9d07664774fbee4e31602bc2bb6bb62c3489555ed", "https://deno.land/x/ts_morph@16.0.0/common/mod.ts": "01985d2ee7da8d1caee318a9d07664774fbee4e31602bc2bb6bb62c3489555ed",

View File

@ -57,8 +57,7 @@ export class DocParser {
let [key, value] = splitTwo(line, ':'); let [key, value] = splitTwo(line, ':');
value = value.trimStart(); value = value.trimStart();
if (value.startsWith('"') && value.endsWith('"')) { if (value.startsWith('"') && value.endsWith('"')) {
value = value.substring(1, value.length - 1); value = JSON.parse( value );
value = value.replace('\\"', '"');
} }
key = key.trimEnd(); key = key.trimEnd();
switch(key){ switch(key){
@ -110,7 +109,7 @@ ${doc.from_url ? `from_url: ${doc.from_url}\n` : ''}name: "${doc.name}"
author: "${doc.author}" author: "${doc.author}"
star: ${doc.star} star: ${doc.star}
fork: ${doc.fork} fork: ${doc.fork}
desc: "${doc.desc.replaceAll("\"", "\\\"")}" desc: ${JSON.stringify(doc.desc)}
url: ${doc.url} url: ${doc.url}
tags: ${JSON.stringify(doc.tags)} tags: ${JSON.stringify(doc.tags)}
--- ---

View File

@ -1,6 +1,7 @@
import { Command } from "cliffy"; import { Command } from "cliffy";
import { DocParser, readDoc, writeDoc, Doc } from "./doc_load/load.ts"; import { DocParser, readDoc, writeDoc, Doc } from "./doc_load/load.ts";
import { expandGlob } from "https://deno.land/std@0.166.0/fs/mod.ts"; import { expandGlob } from "https://deno.land/std@0.166.0/fs/mod.ts";
import ProgressBar from "https://deno.land/x/progress@v1.3.4/mod.ts";
function checkAndPrint(doc: Doc, another: Doc): [boolean, string[]] { function checkAndPrint(doc: Doc, another: Doc): [boolean, string[]] {
const diffs = []; const diffs = [];
@ -44,26 +45,12 @@ function checkAndPrint(doc: Doc, another: Doc): [boolean, string[]] {
return [diffs.length === 0, diffs]; return [diffs.length === 0, diffs];
} }
if(import.meta.main){ async function validateDoc(path: string, parser: DocParser, fix?: boolean, log = console.log): Promise<void> {
const app = new Command() try {
.name("validator") const content = await Deno.readTextFile(path);
.version("0.1.0")
.description("Validate and fix the doc files in the sample directory. glob is supported.")
.option("-v, --verbose", "Enable verbose mode.")
.option("-f, --fix", "Fix the doc files.")
.arguments("[pathes...:string]")
.action(async (options, ...pathes) => {
const { verbose, fix } = options;
const parser = new DocParser();
for (const path of pathes) {
for await (const dir of expandGlob(path)) {
if (verbose) {
console.log(`Processing ${dir.path}`);
}
const content = await Deno.readTextFile(dir.path);
const doc = parser.parseAlternative(content); const doc = parser.parseAlternative(content);
if (fix) { if (fix) {
await writeDoc(dir.path, doc); await writeDoc(path, doc);
} }
else { else {
try { try {
@ -71,21 +58,77 @@ if(import.meta.main){
const another = parser.parse(content); const another = parser.parse(content);
const [isSame, errors] = checkAndPrint(doc, another); const [isSame, errors] = checkAndPrint(doc, another);
if (!isSame) { if (!isSame) {
console.log(`File ${dir.path} is not valid.`); log(`File ${path} is not valid.`);
for (const error of errors) { for (const error of errors) {
console.log("\t",error); log("\t",error);
} }
} }
} }
catch (e) { catch (e) {
if ( e instanceof Error) { if ( e instanceof Error) {
console.log(`File ${dir.path} is not valid. error: ${e.name}`); log(`File ${path} is not valid. error: ${e.name}`);
} }
else { else {
throw e; throw e;
} }
} }
} }
} catch (error) {
log(`File ${path} is not valid. error: ${error.name}`);
throw error;
}
}
if(import.meta.main){
const app = new Command()
.name("validator")
.version("0.1.0")
.description("Validate and fix the doc files in the sample directory. glob is supported.")
.option("-v, --verbose", "Enable verbose mode.")
.option("-f, --fix", "Fix the doc files.")
.option("-p, --progress", "Show progress.")
.arguments("[pathes...:string]")
.action(async (options, ...pathes) => {
const { verbose, fix, progress } = options;
const parser = new DocParser();
if(pathes.length === 0){
console.log("No pathes specified. Use --help to see the usage.");
Deno.exit(1);
}
if (verbose) {
console.log("Verbose mode enabled.");
}
if (progress) {
console.log("Progress mode enabled.");
const targets = (await Promise.all(pathes.map(async (path) => {
const paths = [];
for await (const entry of expandGlob(path)) {
paths.push(entry.path);
}
return paths;
}))).flat();
const bar = new ProgressBar({
total: targets.length,
title: "Validating",
});
let count = 0;
for (const path of targets) {
await validateDoc(path, parser, fix, verbose ? (...args)=>{
bar.console(args.join(" "));
} : () => { });
bar.render(++count);
}
bar.end();
}
else {
for (const path of pathes) {
for await (const dir of expandGlob(path)) {
if (verbose) {
console.log(`Processing ${dir.path}`);
}
validateDoc(dir.path, parser, fix);
}
} }
} }
}); });