dot-plop
Version:
A simple approach to PlopJS with first class TypeScript support and a one-line plopfile
57 lines • 2.25 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs_extra_1 = require("fs-extra");
const import_cwd_1 = __importDefault(require("import-cwd"));
const path_1 = require("path");
const paths = __importStar(require("./paths"));
function loadModulesInDir(dirPath) {
return fs_extra_1.existsSync(dirPath)
? fs_extra_1.readdirSync(dirPath).flatMap((p) => {
const { excluded = [], ...elements } = import_cwd_1.default(path_1.join(dirPath, p));
delete elements.default;
return Object.entries(elements).filter(([key]) => {
return !excluded.includes(key);
});
})
: [];
}
function autoDiscover(plop) {
function callIfFn(value) {
if (typeof value === 'function') {
return value(plop);
}
else {
return value;
}
}
if (!fs_extra_1.existsSync(paths.dotPlop))
throw new Error(`could not find ${paths.dotPlop}`);
/* --------------------- LOAD GENERATORS --------------------- */
loadModulesInDir(paths.generators).forEach(([key, generator]) => {
plop.setGenerator(key, callIfFn(generator));
});
/* ----------------------- LOAD ACTIONS ---------------------- */
loadModulesInDir(paths.actions).forEach(([key, actionFn]) => {
plop.setActionType(key, actionFn);
});
/* ----------------- LOAD HANDLEBARS HELPERS ----------------- */
loadModulesInDir(paths.helpers).forEach(([key, helper]) => {
plop.setHelper(key, helper);
});
/* ------------------- LOAD INQUIRER PROMPT ------------------ */
loadModulesInDir(paths.prompts).forEach(([key, prompt]) => {
plop.setPrompt(key, prompt);
});
}
exports.autoDiscover = autoDiscover;
//# sourceMappingURL=autoDiscover.js.map