create-managed-component
Version:
An easy way to create a Managed Component
52 lines (51 loc) • 2.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = __importDefault(require("path"));
const fs_1 = __importDefault(require("fs"));
const locreq_1 = __importDefault(require("locreq"));
const locreq = (0, locreq_1.default)(__dirname);
function initTemplate(config) {
const { displayName, namespace, description, icon, implements: imps, permissions, } = config;
if (!fs_1.default.existsSync(namespace)) {
fs_1.default.mkdirSync(namespace);
}
const manifest = {
name: displayName,
namespace,
description,
icon,
implements: imps,
permissions,
};
fs_1.default.writeFileSync(`${namespace}/manifest.json`, JSON.stringify(manifest, null, 2));
fs_1.default.writeFileSync(`${namespace}/.npmignore`, 'src');
processDir(config);
}
exports.default = initTemplate;
function processDir(config, subdir = '.') {
const { displayName, namespace, description, implements: imps } = config;
const templateDir = path_1.default.resolve(locreq.resolve('template'), subdir);
const targetDir = path_1.default.resolve(namespace, subdir);
if (!fs_1.default.existsSync(targetDir)) {
fs_1.default.mkdirSync(targetDir, { recursive: true });
}
const files = fs_1.default.readdirSync(templateDir);
for (const file of files) {
console.log(file);
const src = path_1.default.resolve(templateDir, file);
const dest = path_1.default.resolve(targetDir, file).replace(/\.keep$/, ''); // we suffix .npmignore file with `.keep` in order to prevent template files it mentions being not published to npm
if (fs_1.default.lstatSync(src).isDirectory()) {
processDir(config, subdir + '/' + path_1.default.basename(src));
}
else {
const data = fs_1.default.readFileSync(src, 'utf8');
const replaced = data.replace(/{{ displayName }}/g, displayName);
const replaced2 = replaced.replace(/{{ namespace }}/g, namespace);
const replaced3 = replaced2.replace(/{{ description }}/g, description);
fs_1.default.writeFileSync(dest, replaced3);
}
}
}