UNPKG

syncpack

Version:

Manage multiple package.json files, such as in Lerna Monorepos and Yarn/Pnpm Workspaces

47 lines (46 loc) 2.4 kB
"use strict"; exports.__esModule = true; exports.getWrappers = void 0; var expect_more_1 = require("expect-more"); var fs_extra_1 = require("fs-extra"); var glob_1 = require("glob"); var path_1 = require("path"); var read_yaml_file_1 = require("read-yaml-file"); var constants_1 = require("../../constants"); var getPatternsFromJson = function (fileName, getProperties) { var filePath = path_1.resolve(process.cwd(), fileName); var config = fs_extra_1.readJsonSync(filePath, { throws: false }); if (!config) return null; var packages = getProperties(config).find(expect_more_1.isArrayOfStrings); return packages ? [process.cwd()].concat(packages).map(function (dirPath) { return path_1.join(dirPath, 'package.json'); }) : null; }; var getYarnPatterns = function () { return getPatternsFromJson('package.json', function (config) { var _a; return [config.workspaces, (_a = config.workspaces) === null || _a === void 0 ? void 0 : _a.packages]; }); }; var getLernaPatterns = function () { return getPatternsFromJson('lerna.json', function (config) { return [config.packages]; }); }; var getPnpmPatterns = function () { try { var filePath = path_1.resolve(process.cwd(), 'pnpm-workspace.yaml'); var config = read_yaml_file_1.sync(filePath); var packages = [config.packages].find(expect_more_1.isArrayOfStrings); return packages ? [process.cwd()].concat(packages).map(function (dirPath) { return path_1.join(dirPath, 'package.json'); }) : null; } catch (err) { return null; } }; var hasCliPatterns = function (program) { return program.source && program.source.length > 0; }; var getCliPatterns = function (program) { return program.source; }; var getDefaultPatterns = function () { return constants_1.ALL_PATTERNS; }; var resolvePattern = function (pattern) { return glob_1.sync(pattern, { absolute: true }); }; var reduceFlatArray = function (all, next) { return all.concat(next); }; var createWrapper = function (filePath) { return ({ contents: fs_extra_1.readJsonSync(filePath), filePath: filePath }); }; exports.getWrappers = function (program) { return (hasCliPatterns(program) ? getCliPatterns(program) : getYarnPatterns() || getPnpmPatterns() || getLernaPatterns() || getDefaultPatterns()) .map(resolvePattern) .reduce(reduceFlatArray, []) .map(createWrapper); };