From 8934c12798579c8278898a477f34638c0d769537 Mon Sep 17 00:00:00 2001 From: Nulo Date: Tue, 20 Dec 2022 17:22:19 -0300 Subject: [PATCH] compilar: Reestructurar --- compilar.ts | 118 +++++++++++++++++++++++++++------------------------- 1 file changed, 61 insertions(+), 57 deletions(-) diff --git a/compilar.ts b/compilar.ts index 0aad8d1..c2d90c4 100644 --- a/compilar.ts +++ b/compilar.ts @@ -25,53 +25,18 @@ const config: Config = { buildPath: "build", }; -const wikilinkExp = /\[\[(.+?)\]\]/giu; - -interface Connection { - linked: string; - linker: string; -} - -async function scanForConnections(sourcePath: string): Promise { - const dir = await opendir(sourcePath); - let connections: Connection[] = []; - for await (const entry of dir) { - const extension = extname(entry.name); - if (extension === ".md") { - const name = basename(entry.name, ".md"); - const file = await readFile(join(config.sourcePath, entry.name), "utf-8"); - for (const [, linked] of file.matchAll(wikilinkExp)) { - connections.push({ linked, linker: name }); - } - } - } - return connections; -} - -async function hackilyTransformHtml(html: string): Promise { - html = html - .replaceAll("$1`); - for (const [match, archivo] of html.matchAll( - //g - )) { - html = html.replace(match, await compileContentHtml(config, archivo)); - } - return html; -} - const connections = await scanForConnections(config.sourcePath); await mkdir(config.buildPath, { recursive: true }); const dir = await opendir(config.sourcePath); let pageList: string[] = []; -let promises: { [key: string]: Promise } = {}; +let promises: Promise[] = []; for await (const entry of dir) { if (!entry.isFile()) continue; - promises[entry.name] = compileFile(entry.name); + promises.push(compileFile(entry.name)); } -await Promise.all(Object.values(promises)); +await Promise.all(promises); await compilePageList(config, pageList); @@ -86,27 +51,11 @@ async function compileFile(name: string) { } if ([".md", ".gen"].includes(extension)) { pageList.push(basename(name, extension)); - await compileFullHtml(config, name); + await compilePage(config, name); } } -async function compilePageList(config: Config, pageList: string[]) { - const name = "Lista de páginas"; - const outputPath = join(config.buildPath, name + ".html"); - const html = - generateHead(name, name) + - generateHeader(name, "compilar.ts") + - `
    - ${pageList - .sort((a, b) => a.localeCompare(b, "es", { sensitivity: "base" })) - .map((name) => `
  • ${name}
  • `) - .join("\n")} -
-`; - await writeFile(outputPath, html); -} - -async function compileFullHtml(config: Config, sourceFileName: string) { +async function compilePage(config: Config, sourceFileName: string) { const name = basename(sourceFileName, extname(sourceFileName)); const isIndex = name === "index"; const title = isIndex ? "nulo.in" : name; @@ -130,7 +79,7 @@ async function compileFullHtml(config: Config, sourceFileName: string) { // Get HTML // ============================================== -//TODO: memoize +// TODO: memoize function compileContentHtml( config: Config, sourceFileName: string @@ -213,6 +162,49 @@ function generateConnectionsSection(fileConnections: Connection[]): string { : ""; } +async function compilePageList(config: Config, pageList: string[]) { + const name = "Lista de páginas"; + const outputPath = join(config.buildPath, name + ".html"); + const html = + generateHead(name, name) + + generateHeader(name, "compilar.ts") + + `
    + ${pageList + .sort((a, b) => a.localeCompare(b, "es", { sensitivity: "base" })) + .map((name) => `
  • ${name}
  • `) + .join("\n")} +
+`; + await writeFile(outputPath, html); +} + +// ============================================== +// Conexiones +// ============================================== + +interface Connection { + linked: string; + linker: string; +} + +const wikilinkExp = /\[\[(.+?)\]\]/giu; + +async function scanForConnections(sourcePath: string): Promise { + const dir = await opendir(sourcePath); + let connections: Connection[] = []; + for await (const entry of dir) { + const extension = extname(entry.name); + if (extension === ".md") { + const name = basename(entry.name, ".md"); + const file = await readFile(join(config.sourcePath, entry.name), "utf-8"); + for (const [, linked] of file.matchAll(wikilinkExp)) { + connections.push({ linked, linker: name }); + } + } + } + return connections; +} + // ============================================== // Markdown utils // ============================================== @@ -221,3 +213,15 @@ function renderMarkdown(markdown: string) { const parsed = reader.parse(markdown); return writer.render(parsed); } + +async function hackilyTransformHtml(html: string): Promise { + html = html + .replaceAll("$1`); + for (const [match, archivo] of html.matchAll( + //g + )) { + html = html.replace(match, await compileContentHtml(config, archivo)); + } + return html; +}