UNPKG

xweb-templating

Version:

A cli tool for converting 'tags' to regular html, php or some other format

61 lines (52 loc) 2.56 kB
import { XwebConfig } from "../config/config.js"; import { error, info, status } from "../log.js"; import fs from "fs"; import path from "path"; import { Worker } from "worker_threads"; function swap_extension(file_name: string, from_extension: string, to_extension: string): string { return file_name.slice(0, -from_extension.length) + to_extension; } function create_file(file_path: string, file_content: string) { const DIRECTORY_PATH = path.dirname(file_path); if (!fs.existsSync(DIRECTORY_PATH)) { status("run/convert", `Created required folder called '${DIRECTORY_PATH}'`); fs.mkdirSync(DIRECTORY_PATH, { recursive: true }); } fs.writeFileSync(file_path, file_content); } export function convert(files: string[], CONFIG: XwebConfig) { let file_counter = 0; files.forEach(file_name => { file_counter++; info("run/convert", `Starting conversion of file ${file_counter}/${files.length} "${file_name}"`); const FILE_CONTENT = fs.readFileSync(path.join(process.cwd(), CONFIG.folder.src, file_name), "utf8"); // Read CONFIG.folder.tags and import all CONFIG.tags const TAG_DATA: string[] = []; for (const TAG of CONFIG.tags) { const FILE_PATH = path.join(process.cwd(), CONFIG.folder.tags, TAG + ".js"); if (!fs.existsSync(FILE_PATH)) { error("run/convert", `Cannot read tagset ${TAG} despite it being in the config file, because it doesn't exist in the tagsets folder. Run 'xweb add ${TAG}' to attempt to fetch it from github`); return; } TAG_DATA.push(fs.readFileSync(FILE_PATH, "utf8")); } // Send data to worker const WORKER = new Worker("./bin/convert/worker.js", { workerData: { content: FILE_CONTENT, tags: TAG_DATA, CONFIG } }); WORKER.on("message", data => { status("run/convert", `Finished conversion of file ${file_counter}/${files.length} "${file_name}"`); const NEW_FILE_NAME = swap_extension(file_name, CONFIG.extension.src, CONFIG.extension.out); const OUTPUT_FILE_PATH = path.join(process.cwd(), CONFIG.folder.out, NEW_FILE_NAME); create_file(OUTPUT_FILE_PATH, data); status("run/convert", `Created output file ${NEW_FILE_NAME}`); }); WORKER.on("error", err => { error("run/convert", `File '${file_name}' failed to convert, because '${err}'`); }); }); }