UNPKG

@foxpage/foxpage-component-shared

Version:
124 lines (123 loc) 5 kB
var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.resolveExtensions = exports.toAbsolutePath = exports.updatePackageJson = exports.readPackageInfo = exports.existModule = exports.isRootContext = exports.resolveRoot = exports.cwdIsProjectRoot = exports.cwd = exports.isProjectRoot = exports.requireProjectModule = exports.findPackages = exports.findPath = exports.loadFile = void 0; const path_1 = require("path"); const os_1 = require("os"); const fs_extra_1 = require("fs-extra"); const json5_1 = __importDefault(require("json5")); const logger_1 = require("./logger"); const utils_1 = require("./utils"); const formatToPosix = (sourcePath) => { if ((0, os_1.platform)() === 'win32') { return sourcePath.replace(/\\/g, '/'); } return sourcePath; }; const loadFile = (path) => { if (!path) { return; } if (path.endsWith('.json')) { try { return json5_1.default.parse((0, fs_extra_1.readFileSync)(path, { encoding: 'utf8' })); } catch (error) { } } try { const exported = require(path); return exported && exported.default ? exported.default : exported; } catch (error) { logger_1.logger.debug('load file: "%s" fail', path, error); return; } }; exports.loadFile = loadFile; const findPath = (baseDir, mayPaths = []) => { if (!baseDir || mayPaths.length === 0) { return; } const filePath = mayPaths .map(_path => (0, path_1.join)(baseDir, _path)) .map(formatToPosix) .find(v => { try { return (0, fs_extra_1.pathExistsSync)(v); } catch (error) { return false; } }); return filePath; }; exports.findPath = findPath; const findPackages = (root, packageRootDirNames = ['packages'], { exclude = [], include } = {}) => { const findDirPackages = (root) => { const dirs = (0, fs_extra_1.readdirSync)(root) .filter(dirName => !exclude.includes(dirName)) .filter(dirName => { var _a; return (_a = include === null || include === void 0 ? void 0 : include.includes(dirName)) !== null && _a !== void 0 ? _a : true; }) .map(dirname => (0, path_1.join)(root, dirname)); return dirs; }; const dirs = packageRootDirNames .map(pkgDir => (0, path_1.join)(root, pkgDir)) .filter(dir => (0, fs_extra_1.pathExistsSync)(dir)) .map(dir => findDirPackages(dir)) .reduce((all, packageDirs) => all.concat(packageDirs), []) .filter(dir => (0, fs_extra_1.pathExistsSync)((0, path_1.join)(dir, 'package.json'))); return dirs; }; exports.findPackages = findPackages; const requireProjectModule = (moduleName) => { return require(require.resolve(moduleName, { paths: [projectRoot] })); }; exports.requireProjectModule = requireProjectModule; const isProjectRoot = (pathname) => !!(0, exports.findPath)(pathname, ['.git', 'packages', 'package']); exports.isProjectRoot = isProjectRoot; exports.cwd = process.cwd(); exports.cwdIsProjectRoot = (0, exports.isProjectRoot)(exports.cwd); const projectRoot = exports.cwdIsProjectRoot ? exports.cwd : (0, path_1.join)(exports.cwd, '../..'); logger_1.logger.debug('project root: %s', projectRoot); const resolveRoot = (...paths) => (0, path_1.join)(projectRoot, ...paths); exports.resolveRoot = resolveRoot; const isRootContext = (context) => { return (0, exports.findPath)(context, ['packages']); }; exports.isRootContext = isRootContext; const existModule = (moduleName) => { return (0, fs_extra_1.existsSync)((0, exports.resolveRoot)('node_modules', moduleName)); }; exports.existModule = existModule; function readPackageInfo(dirPath, key) { const packageJson = (0, exports.loadFile)((0, path_1.join)(dirPath, 'package.json')); if (packageJson) { if (!key) { return packageJson; } return (0, utils_1.getKey)(packageJson, key); } } exports.readPackageInfo = readPackageInfo; async function updatePackageJson(dirPath, cb) { const jsonPath = (0, path_1.join)(dirPath, 'package.json'); const packageJson = (0, exports.loadFile)(jsonPath); if (packageJson) { const newJson = cb(packageJson); await (0, fs_extra_1.writeJSON)(jsonPath, newJson, { spaces: 2 }); } } exports.updatePackageJson = updatePackageJson; const toAbsolutePath = (pathname, base) => { return (0, path_1.isAbsolute)(pathname) ? pathname : (0, path_1.join)(base, pathname); }; exports.toAbsolutePath = toAbsolutePath; const resolveExtensions = (pathnameList, extensions) => { return pathnameList .map(pathName => extensions.map(ext => pathName + (ext.startsWith('.') ? '' : '.') + ext)) .reduce((all, cur) => { return all.concat(cur); }, []); }; exports.resolveExtensions = resolveExtensions;