@k14v/nlink
Version:
Modifies the global NodeJS module links to transpiled directory src -> lib
87 lines (86 loc) • 4 kB
JavaScript
;
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;