autor
Version:
My way for running TS scripts
56 lines (55 loc) • 1.45 kB
JavaScript
import fs from "fs/promises";
import { sep, extname } from "path";
global.CFG = {};
let jspath = `${process.cwd()}/.built`;
async function load(path, inits) {
let mod;
try {
mod = await import(`file://${path}`);
}
catch { }
if (mod?.init) {
inits.push(mod.init);
}
}
//env
const env_inits = [];
async function load_dir(path) {
const ls = await fs.readdir(path, {
withFileTypes: true,
recursive: false,
});
const dirs = [];
for (let i = 0; i < ls.length; i++) {
const e = ls[i];
if (e.isFile() && e.name == "0.js") {
await load(`${path}/0.js`, env_inits);
return;
}
else if (e.isDirectory()) {
dirs.push(e.name);
}
}
for (let i = 0; i < dirs.length; i++) {
const dir = dirs[i];
await load_dir(`${path}/${dir}`);
}
}
await load_dir(`${jspath}/env`);
//cfg
const cfg_inits = [];
await load(`${jspath}/.autor.js`, cfg_inits);
const spath = process.argv[2];
const dirs = spath.split(sep).slice(0, -1);
for (let i = 0; i < dirs.length; i++) {
await load(`${jspath}/${dirs.slice(0, i + 1).join("/")}/.autor.js`, cfg_inits);
}
await load(`${jspath}/${spath.replace(extname(spath), ".cfg.js")}`, cfg_inits);
//env-inits
for (let i = 0; i < env_inits.length; i++) {
await env_inits[i]();
}
//cfg-inits
for (let i = 0; i < cfg_inits.length; i++) {
await cfg_inits[i]();
}