UNPKG

makit

Version:

Make in JavaScript done right!

99 lines (98 loc) 3.54 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Target = void 0; const context_1 = require("./context"); const util_1 = require("util"); const logger_1 = require("./utils/logger"); const io_1 = require("./io"); const rude_1 = require("./makefile/rude"); const inspectKey = Symbol.for('nodejs.util.inspect.custom') || 'inspect'; const logger = logger_1.Logger.getOrCreate(); var TargetState; (function (TargetState) { TargetState[TargetState["INIT"] = 0] = "INIT"; TargetState[TargetState["STARTED"] = 1] = "STARTED"; TargetState[TargetState["RESOLVED"] = 2] = "RESOLVED"; TargetState[TargetState["REJECTED"] = 3] = "REJECTED"; })(TargetState || (TargetState = {})); class Target { constructor(target, context, mtime, rule) { this.state = TargetState.INIT; this.pendingDependencyCount = 0; this.promises = []; this.name = target; this.ctx = context; this.mtime = mtime; this.rule = rule; } addPromise(resolve, reject) { if (this.state === TargetState.RESOLVED) resolve(this.mtime); else if (this.state === TargetState.REJECTED) reject(this.error); else this.promises.push([resolve, reject]); } resolve() { this.state = TargetState.RESOLVED; while (this.promises.length) { const [resolve] = this.promises.shift(); resolve(this.mtime); } } reject(err) { this.state = TargetState.REJECTED; while (this.promises.length) { const [, reject] = this.promises.shift(); reject(err); } this.error = err; } start() { this.state = TargetState.STARTED; } reset() { this.state = TargetState.INIT; } isStarted() { return this.state >= TargetState.STARTED; } isReady() { return this.state === TargetState.INIT && this.pendingDependencyCount <= 0; } isResolved() { return this.state === TargetState.RESOLVED; } isFinished() { return this.state === TargetState.RESOLVED || this.state === TargetState.REJECTED; } updateMtime() { this.mtime = io_1.IO.getMTime().setModifiedTime(this.ctx.targetFullPath()); } static create({ target, rule, match, root, fs, make }) { const debug = target === '/Users/harttle/src/www-wise/cache/static/amd_modules/@searchfe/debug.js.inline'; const context = new context_1.Context({ target, match, root, fs, make }); const mtime = io_1.IO.getMTime().getModifiedTime(context.targetFullPath()); if (rule) { context.dependencies.push(...rule.prerequisites.getPrerequisites(context)); } return new Target(target, context, mtime, rule); } getDependencies() { return this.ctx.dependencies; } async writeDependency() { const filepath = rude_1.getDependencyFromTarget(this.ctx.target); logger.debug('RUDE', 'writing', filepath, 'with', this.ctx.dynamicDependencies); await this.ctx.outputFile(filepath, JSON.stringify(this.ctx.dynamicDependencies)); await io_1.IO.getMTime().setModifiedTime(this.ctx.toFullPath(filepath)); } [inspectKey]() { const deps = [ ...this.ctx.dependencies, ...this.ctx.dynamicDependencies.map(dep => `${dep}(dynamic)`) ]; return logger_1.hlTarget(this.name) + ': ' + util_1.inspect(deps); } } exports.Target = Target;