UNPKG

npm-submodules

Version:

Simple way to manage typescipt and angular2 submodules from one repository

57 lines (56 loc) 2.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const path = require("path"); const constants_1 = require("../../utils/constants"); const merge_package_json_1 = require("../../utils/merge-package-json"); // import { TsmOptions } from '../../types'; // todo: replace const readPkg = require('read-pkg'); const writePkg = require('write-pkg'); /** * Smart merge of package.json files like Object.assign({}, src, dist) * @param opts * @param localDependencies * @param options */ function buildPkgJson(opts, localDependencies, options) { // read base package.json const base = readPkg.sync(constants_1.ROOT); // read package.json in module root folder const module = readPkg.sync(opts.src); // merge packages localDependenciesVersionFallback(base, localDependencies); const pkg = merge_package_json_1.mergePackageJson({ base, module, localDependencies }); pkg.version = pkg.version || base.version; // write packages // todo: for some reason, read pkg ignores readme.md and says that readme not found, and this is not true delete pkg.readme; return writePkg(opts.dist, pkg); } exports.buildPkgJson = buildPkgJson; /** * * @param tsmOptions * @param options */ function buildPkgs(tsmOptions, options) { // 0. read base package.json // 1. read all sub module packages // 2. include sub module versions in modules hash // if options.local === true, resolve local dependencies as file paths: "module-a": "../module-a" // in general you need non relative dependencies only before publishing const localDependencies = tsmOptions.reduce((memo, val) => { memo[val.pkg.name] = !options.local ? val.pkg.version : path.resolve(val.dist); return memo; }, {}); // 3. merge packages return Promise.all(tsmOptions.map(optPkg => buildPkgJson(optPkg, localDependencies, options))); // 4. validate required fields in packages // todo: } exports.buildPkgs = buildPkgs; function localDependenciesVersionFallback(base, localDependencies) { for (let pkgName in localDependencies) { localDependencies[pkgName] = localDependencies[pkgName] || base.version; } }