timpla
Version:
An optimal website development experience for [server-side] web frameworks.
35 lines • 1.92 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var chalk_1 = require("chalk");
var del = require("del");
var log = require("fancy-log");
var internal_1 = require("../internal");
exports.clean = function (_a) {
var src = _a.src, dest = _a.dest, cleanOptions = _a.clean;
return function (cb) {
if (!cleanOptions) {
return cb;
}
var cleanPatterns = cleanOptions.patterns || internal_1.projectDestPath();
cleanPatterns = Array.isArray(cleanPatterns) ? cleanPatterns : [cleanPatterns];
var delOptions = cleanOptions.delOptions;
var invalidCleanPaths = [internal_1.TIMPLA_PROCESS.INIT_CWD, internal_1.projectSrcPath(), src];
/** Blacklist naughty ways to delete files. */
var isInvalidCleanPathConfig = cleanPatterns.every(function (e) {
var resolvedRule = internal_1.projectPath(e);
var relativeRule = e;
var isNotInBlacklist = !invalidCleanPaths.includes(relativeRule) && !invalidCleanPaths.includes(resolvedRule);
// If a user adds `../ etc.`
var isNotDirectParent = !internal_1.isChildOf(internal_1.TIMPLA_PROCESS.INIT_CWD, e) && !internal_1.isChildOf(internal_1.TIMPLA_PROCESS.INIT_CWD, resolvedRule);
return !isNotInBlacklist && !isNotDirectParent;
});
if (isInvalidCleanPathConfig) {
log.error(chalk_1.default.red("=== To protect your files, Timpla skipped the misconfigured clean task.\n Please ensure that the dest option in timplaconfig is set to a path different from your project root! ===\n You attempted to run it with:\n " + cleanOptions.patterns + "\n Blacklisted paths:\n " + invalidCleanPaths + "\n "));
cb();
}
else {
return del(cleanPatterns, delOptions);
}
};
};
//# sourceMappingURL=clean.js.map