UNPKG

@k14v/nlink

Version:

Modifies the global NodeJS module links to transpiled directory src -> lib

87 lines (86 loc) 4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ensureLinks = void 0; /// <reference path="../typings/npm-root.d.ts" /> const find_up_1 = __importDefault(require("find-up")); const path_1 = __importDefault(require("path")); const util_1 = __importDefault(require("util")); const fs_1 = __importDefault(require("fs")); const os_1 = require("os"); const utils_1 = require("./utils"); const readConfig_1 = __importDefault(require("./readConfig")); const logger_1 = __importDefault(require("./logger")); const npm_root_1 = __importDefault(require("npm-root")); const npmrp = util_1.default.promisify(npm_root_1.default); const ensureLinks = async (opts) => { const { cwd: cwdDir = process.cwd(), logger = logger_1.default, workspace = true, ...restOptions } = { ...opts }; const linkModule = (target, linkpath) => { const realpathLinkedModuleDir = (0, utils_1.symlinkRealpathSync)(linkpath); if (target === realpathLinkedModuleDir) { logger.silly(`Already linked to ${target}`); return false; } else { logger.silly(`Removing ${linkpath}`); logger.silly(`Linking ${linkpath} -> ${target}`); return (0, utils_1.symlinkRelative)(target, linkpath, true); } }; const config = { ...(await (0, readConfig_1.default)(opts)), ...(0, utils_1.cleanUndef)(restOptions) }; const pkgLinkPath = path_1.default.join(config.lib, 'package.json'); logger.silly(`Linking package.json to "${pkgLinkPath}"`); if ((0, utils_1.symlinkRelative)(config.pkgPath, pkgLinkPath, true)) { logger(`Package.json linked "${config.pkgPath}" to "${pkgLinkPath}"`); } else { throw new Error('Failed to link package.json'); } ; const linkSuites = [{ name: 'yarn', dir: path_1.default.resolve((0, os_1.homedir)(), '.config/yarn/link'), }, { name: 'npm', dir: await npmrp({ global: true }), }]; linkSuites.forEach(({ dir, name }) => { logger.silly(`Checking if "${name}" config exist in "${dir}"`); if (fs_1.default.existsSync(dir)) { logger.info(`Detected "${name}" config in "${dir}"`); const linkedModuleDir = path_1.default.resolve(dir, config.name); logger.silly(`Checking if the module exists as "${name}" link in "${linkedModuleDir}"`); if ((0, utils_1.symlinkExistsSync)(linkedModuleDir)) { logger.info(`Detected linked module "${linkedModuleDir}"`); logger.silly(`Replacing module link "${linkedModuleDir}" to "${config.lib}"`); if (linkModule(config.lib, linkedModuleDir)) { logger(`Module linked "${linkedModuleDir}" to "${config.lib}"`); } ; } } }); if (workspace) { const workspacePkgPath = find_up_1.default.sync('package.json', { cwd: path_1.default.resolve(cwdDir, '..'), }); if (workspacePkgPath) { const linkedModuleDir = path_1.default.resolve(path_1.default.dirname(workspacePkgPath), 'node_modules', config.name); logger.silly(`Checking if the module exist as link in workspace "${linkedModuleDir}"`); if ((0, utils_1.symlinkExistsSync)(linkedModuleDir)) { logger.info(`Detected workspace linked path "${linkedModuleDir}"`); linkModule(config.lib, linkedModuleDir); } else { logger.silly(`Skiping "${config.name}" doesn't exist in workspace "${workspacePkgPath}"`); } } } else { logger.silly(`Skiping find module in workspace "opts.workspace=${workspace}"`); } }; exports.ensureLinks = ensureLinks; exports.default = exports.ensureLinks;