@mistlog/typetype
Version:
A programming language designed for typescript type generation
61 lines (60 loc) • 2.07 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.debug = exports.clean = exports.build = void 0;
const filewalker_1 = __importDefault(require("filewalker"));
const node_watch_1 = __importDefault(require("node-watch"));
const fs_1 = require("fs");
const src_1 = require("../src");
const fs_extra_1 = require("fs-extra");
function TraverseDirectory(path, callback) {
const action = (relative, stats, absolute) => callback(relative, absolute);
filewalker_1.default(path)
.on("file", action)
.on("error", error => console.log(error))
.walk();
}
function transformFile(absolute, config = { debug: false }) {
const input = fs_1.readFileSync(absolute, "utf8");
const output = src_1.transform(input, config).code;
fs_extra_1.outputFileSync(absolute.replace(".type", ".ts"), output, "utf8");
}
function build(dir, options) {
if (options.watch) {
node_watch_1.default(dir, { recursive: true }, (event, absolute) => {
if (absolute.endsWith(".type")) {
console.log(event, absolute);
debug(absolute);
}
});
}
else {
TraverseDirectory(dir, (relative, absolute) => {
if (absolute.endsWith(".type")) {
transformFile(absolute);
}
});
}
}
exports.build = build;
function clean(dir) {
TraverseDirectory(dir, (relative, absolute) => {
if (absolute.endsWith(".type")) {
fs_extra_1.removeSync(absolute.replace(".type", ".ts"));
}
});
}
exports.clean = clean;
function debug(absolute) {
try {
transformFile(absolute, { debug: true });
}
catch (error) {
console.log(`build type failed: ${absolute}`);
console.log(error.message);
console.log(error.backtrace);
}
}
exports.debug = debug;