@alanchenchen/cbml-processor
Version:
基于cbml parser和cbml规范实现的构建工具
47 lines (46 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.runTask = void 0;
const tslib_1 = require("tslib");
const promises_1 = require("fs/promises");
const path_1 = require("path");
const parser_1 = require("./parser");
const generater_1 = require("./generater");
/**
* 根据单个文件的配置项,顺序执行插件,并生成目标文件
*
* @param source.input
* @param source.output
* @param plugins
* @returns
*/
const runTask = ({ input, output }, plugins) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () {
try {
const inputPath = (0, path_1.resolve)(process.cwd(), input);
const inputCode = yield (0, promises_1.readFile)(inputPath, { encoding: 'utf-8' });
let CBMLRootEle = (0, parser_1.parseCBMLEle)(inputCode, {
range: true,
source: false
});
for (const pluginFunc of plugins) {
// 运行插件,操作AST
const res = yield pluginFunc(CBMLRootEle, inputCode);
if (res) {
CBMLRootEle = res;
}
}
const outputCode = (0, generater_1.generateCode)(CBMLRootEle);
if (output) {
yield (0, promises_1.writeFile)((0, path_1.resolve)(process.cwd(), output), outputCode);
}
return {
input,
output,
outputCode
};
}
catch (error) {
return Promise.reject(error);
}
});
exports.runTask = runTask;