makit
Version:
Make in JavaScript done right!
40 lines (39 loc) • 1.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Prerequisites = void 0;
const string_1 = require("../utils/string");
const util_1 = require("util");
const inspectSymbol = Symbol.for('nodejs.util.inspect.custom') || 'inspect';
class Prerequisites {
constructor(decl) {
this.dynamicDependencies = new Map();
this.decl = decl;
}
getPrerequisites(ctx) {
const results = [];
this.addRequisites(ctx, this.decl, results);
return results;
}
addRequisites(ctx, decl, results) {
if (typeof decl === 'string') {
results.push(decl.match(/\$\d/)
// 存在分组匹配,则从 match 数组获得匹配的分组
? decl.replace(/\$(\d+)/g, (_, i) => ctx.match[i])
: decl);
}
else if (Array.isArray(decl)) {
for (const item of decl)
this.addRequisites(ctx, item, results);
}
else if (typeof decl === 'function') {
this.addRequisites(ctx, decl(ctx), results);
}
else {
throw new Error('invalid prerequisite:' + decl);
}
}
[inspectSymbol]() {
return string_1.inline(util_1.inspect(this.decl));
}
}
exports.Prerequisites = Prerequisites;