magnet-core
Version:
Magnet's core, a simple module loader.
73 lines • 3.38 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs = require("fs-extra");
const glob = require("glob");
const _promise = require("bluebird");
const fp_1 = require("lodash/fp");
const lodash_1 = require("lodash");
// TODO: Only get when from cli
// import pkg from './package.json'
const globAsync = _promise.promisify(glob);
const getNodeModulePackageJSON = function () {
return __awaiter(this, void 0, void 0, function* () {
const allPackageJSON = yield globAsync('./node_modules/*/package.json');
return yield _promise.all(allPackageJSON.map((packageJSONPath) => fs.readJson(packageJSONPath)));
});
};
const filterOutMagnetModule = fp_1.flow(fp_1.map((json) => {
if (!json.keywords || !lodash_1.intersection(json.keywords, ['magnet', 'magnetjs']).length) {
return;
}
return json.name;
}), fp_1.compact, fp_1.without(['magnet-config']));
const getModuleConfigFiles = function (files) {
return __awaiter(this, void 0, void 0, function* () {
const configFiles = yield _promise.all(files.map((moduleName) => __awaiter(this, void 0, void 0, function* () {
return yield globAsync(`${process.cwd()}/node_modules/${moduleName}/*/config/*.js`);
})));
return lodash_1.flatten(configFiles);
});
};
const formatPath = function (files) {
return files.map((path) => ({
path,
name: path.split('config/')[1]
}));
};
const copyFiles = fp_1.flow(fp_1.differenceWith((moduleFile, currentFile) => moduleFile.name === currentFile.name), fp_1.map(file => {
return fs.copy(file.path, `./src/config/${file.name}`);
}));
function default_1() {
return __awaiter(this, void 0, void 0, function* () {
try {
const allPackageJSON = yield getNodeModulePackageJSON();
const magnetModules = filterOutMagnetModule(allPackageJSON);
let [moduleConfigFiles, localModuleConfigFiles, currentConfigFiles] = yield _promise.all([
getModuleConfigFiles(magnetModules),
globAsync(`${process.cwd()}/local_modules/*/config/*.js`),
globAsync('./src/config/**.js')
]);
moduleConfigFiles = formatPath(moduleConfigFiles);
localModuleConfigFiles = formatPath(localModuleConfigFiles);
currentConfigFiles = formatPath(currentConfigFiles);
yield _promise.all([
...copyFiles(moduleConfigFiles, currentConfigFiles),
...copyFiles(localModuleConfigFiles, currentConfigFiles)
]);
console.log('Completed copy config files');
}
catch (err) {
console.error(err);
}
});
}
exports.default = default_1;
//# sourceMappingURL=copy-config.js.map