ngm-cli
Version:
Simple way to manage angular submodules in one repository
95 lines • 8.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
// import { TsmOptions } from '../types';
const constants_1 = require("./constants");
const fs = require('fs');
const path = require('path');
const tsconfig = require('tsconfig');
const readPkg = require('read-pkg');
// todo: order by cross dependencies
// todo: add --use-local-dependencies alias --local
// should in the same folder as dist
const _tmp = '.tmp';
/**
* Will try to find package.json in src folder
* if not found will search in 1st level of directories
* Returns list of directories with package.json
* project - string, relative path to folder
*/
function findSubmodules(project, options) {
return listDirs(project)
.then(dirs => orderByCrossDeps(dirs
.filter(dir => isModuleRoot(dir))
.map(dir => ({ dir, tsconfig: tsconfig.loadSync(dir) }))
.map(opt => resolveOptions(project, opt))));
}
exports.findSubmodules = findSubmodules;
function listDirs(project) {
return Promise.resolve([project].concat(fs
.readdirSync(path.resolve(project))
.filter(file => fs.statSync(path.resolve(project, file))
.isDirectory())
.map(dir => path.join(project, dir))));
}
function isModuleRoot(dir) {
if (fs.existsSync(path.join(dir, constants_1.pkgFileName))) {
return !!tsconfig.resolveSync(dir);
}
return false;
}
function resolveOptions(project, opt) {
const tsOutDir = opt.tsconfig.config.compilerOptions.outDir;
const tsConfigDir = path.dirname(opt.tsconfig.path);
const relTsOutDir = path.relative(constants_1.ROOT, path.resolve(tsConfigDir, tsOutDir));
const moduleDir = path.relative(project, opt.dir);
// submodule root
const src = opt.dir;
// tsc out dir
const dist = relTsOutDir.indexOf(moduleDir) == -1
? path.join(relTsOutDir, moduleDir)
: relTsOutDir;
// convert tsout ( '../dist' --> '../.tmp' )
const _distParsed = path.parse(tsOutDir);
let tmp = moduleDir && moduleDir === _distParsed.base
// '../dist/module-1'
? path.join(src, path.format(Object.assign(path.parse(_distParsed.dir), { base: _tmp })), moduleDir)
// '../dist'
: path.resolve(src, path.format(Object.assign({}, _distParsed, { base: _tmp })));
// tsconfig project
return {
src, dist, tmp,
tsconfig: opt.tsconfig,
project: path.relative(constants_1.ROOT, tsConfigDir),
pkg: readPkg.sync(src)
};
}
// todo: split it in
// 1. building cross dependencies
// 2. sorting by cross dependencies count
/**
* */
function orderByCrossDeps(options) {
const pkgName = options.map(opt => opt.pkg.name);
return options
.map(option => {
option.cross = [];
constants_1.dependencyKeys.forEach(depKey => {
if (!option.pkg[depKey]) {
return;
}
pkgName.forEach(name => {
if (name in option.pkg[depKey]) {
option.cross.push(name);
}
});
});
return option;
})
.sort((a, b) => {
if (a.cross.length === b.cross.length) {
return 0;
}
return a.cross.length > b.cross.length ? 1 : -1;
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibW9kdWxlcy1yZXNvbHV0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3N1Ym1vZHVsZXMtcmVzb2x1dGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHlDQUF5QztBQUN6QywyQ0FBZ0U7QUFFaEUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBRXBDLG9DQUFvQztBQUNwQyxtREFBbUQ7QUFFbkQsb0NBQW9DO0FBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQztBQUVwQjs7Ozs7R0FLRztBQUNILHdCQUErQixPQUFlLEVBQUUsT0FBNEI7SUFDMUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7U0FDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQzVCLElBQUk7U0FDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDaEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQyxDQUFDLENBQUM7U0FDckQsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQzNDLENBQUM7QUFDTixDQUFDO0FBUkQsd0NBUUM7QUFFRCxrQkFBa0IsT0FBZTtJQUMvQixNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDcEIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQ2QsRUFBRTtTQUNDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDckQsV0FBVyxFQUFFLENBQUM7U0FDaEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FDdkMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUVELHNCQUFzQixHQUFXO0lBQy9CLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsdUJBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsTUFBTSxDQUFDLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCx3QkFBd0IsT0FBZSxFQUFFLEdBQUc7SUFDMUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztJQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDcEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDN0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xELGlCQUFpQjtJQUNqQixNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO0lBQ3BCLGNBQWM7SUFDZCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxXQUFXLENBQUM7SUFFaEIsNENBQTRDO0lBQzVDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDekMsSUFBSSxHQUFHLEdBQUcsU0FBUyxJQUFJLFNBQVMsS0FBSyxXQUFXLENBQUMsSUFBSTtRQUNuRCxxQkFBcUI7UUFDckIsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO1FBQ2xHLGNBQWM7UUFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsbUJBQW1CO0lBQ25CLE1BQU0sQ0FBQztRQUNMLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRztRQUNkLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBSSxFQUFFLFdBQVcsQ0FBQztRQUN6QyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7S0FDdkIsQ0FBQztBQUNKLENBQUM7QUFFRCxvQkFBb0I7QUFDcEIsaUNBQWlDO0FBQ2pDLHlDQUF5QztBQUN6QztLQUNLO0FBQ0wsMEJBQTBCLE9BQXFCO0lBQzdDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELE1BQU0sQ0FBQyxPQUFPO1NBQ1gsR0FBRyxDQUFhLE1BQU0sQ0FBQyxFQUFFO1FBQ3hCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLDBCQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQztZQUNULENBQUM7WUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNyQixFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQy9CLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMxQixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBYSxFQUFFLENBQWEsRUFBRSxFQUFFO1FBQ3JDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUN0QyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQztRQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRCxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMifQ==