UNPKG

@mistlog/typetype

Version:

A programming language designed for typescript type generation

61 lines (60 loc) 2.07 kB
"use strict"; 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;