123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- "use strict";
- var __assign = (this && this.__assign) || function () {
- __assign = Object.assign || function(t) {
- for (var s, i = 1, n = arguments.length; i < n; i++) {
- s = arguments[i];
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
- t[p] = s[p];
- }
- return t;
- };
- return __assign.apply(this, arguments);
- };
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.optionalRequireCwd = exports.optionalRequire = exports.makeOptionalRequire = exports.tryResolve = exports.tryRequire = exports.setDefaultLog = void 0;
- var assert_1 = __importDefault(require("assert"));
- var require_at_1 = __importDefault(require("require-at"));
- /* eslint-disable max-params, complexity, no-eval */
- // `require` from this module's context
- // Using `eval` to avoid tripping bundlers like webpack
- var xrequire = eval("require");
- // Copied from https://github.com/yarnpkg/berry/blob/d5454007c9c76becfa97b36a92de299a3694afd5/packages/yarnpkg-pnp/sources/loader/makeApi.ts#L27
- // Splits a require request into its components, or return null if the request is a file path
- var pnpDependencyNameRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
- /**
- * Change a module name request into a Yarn Berry PnP dependency name,
- * since the dependency name is what will be included in the error message.
- * For example, `optionalRequire('my-package/package.json')` will print a message like
- * `Your application tried to access my-package,` without the `/package.json` at the end of it.
- * This function grabs the dependency name only, or returns `null` if it can't find it.
- * @param {string} name Requested name
- * @returns {string} Dependency name
- */
- function getPnpDependencyName(name) {
- var dependencyNameMatch = name.match(pnpDependencyNameRegExp);
- if (!dependencyNameMatch)
- return null;
- return dependencyNameMatch[1];
- }
- /**
- * Check if an error from require is really due to the module not found,
- * and not because the module itself trying to require another module
- * that's not found.
- *
- * @param err - the error
- * @param name - name of the module being required
- * @returns true or false
- */
- function findModuleNotFound(err, name) {
- // Check the first line of the error message
- var msg = err.message.split("\n")[0];
- /* istanbul ignore if */
- if (!msg) {
- return false;
- }
- // Check for "Cannot find module 'foo'"
- if (msg.includes("'" + name + "'")) {
- return true;
- }
- var pnpDependencyName = getPnpDependencyName(name);
- if (pnpDependencyName) {
- return (
- // Check for "Your application tried to access foo (a peer dependency) ..." (Yarn Berry PnP)
- // https://github.com/yarnpkg/berry/blob/e81dc0d29bb2f41818d9c5c1c74bab1406fb979b/packages/yarnpkg-pnp/sources/loader/makeApi.ts#L680
- msg.includes(" " + pnpDependencyName + " ") ||
- // Check for "Your application tried to access foo. While ..." (Yarn Berry PnP)
- // https://github.com/yarnpkg/berry/blob/e81dc0d29bb2f41818d9c5c1c74bab1406fb979b/packages/yarnpkg-pnp/sources/loader/makeApi.ts#L704
- msg.includes(" " + pnpDependencyName + ". ") ||
- // Check for "Your application tried to access foo, but ..." (Yarn Berry PnP)
- // https://github.com/yarnpkg/berry/blob/e81dc0d29bb2f41818d9c5c1c74bab1406fb979b/packages/yarnpkg-pnp/sources/loader/makeApi.ts#L718
- msg.includes(" " + pnpDependencyName + ", "));
- }
- return false;
- }
- /**
- * Default log function
- *
- * @param message - message to log
- * @param path - path of the module to require
- */
- function defaultLog(message, path) {
- console.log("Just FYI: " + message + "; Path \"" + path + "\"");
- }
- var __defaultLog = defaultLog;
- function setDefaultLog(log) {
- __defaultLog = log;
- }
- exports.setDefaultLog = setDefaultLog;
- function _getOptions(optsOrMsg, requireFunction, log) {
- if (requireFunction === void 0) { requireFunction = xrequire; }
- if (typeof optsOrMsg === "object") {
- var opts = __assign({ require: requireFunction, log: log }, optsOrMsg);
- (0, assert_1.default)(!(opts.hasOwnProperty("notFound") && opts.hasOwnProperty("default")), "optionalRequire: options set with both `notFound` and `default`");
- return opts;
- }
- else {
- return { require: requireFunction, log: log, message: optsOrMsg };
- }
- }
- /**
- * Internal optional require implementation
- *
- * @param path - path to module to require
- * @param optsOrMsg - options or message to log in case module not found
- * @returns require or resolve result
- */
- function _optionalRequire(path, opts) {
- try {
- return opts.resolve ? opts.require.resolve(path) : opts.require(path);
- }
- catch (e) {
- // exception that's not due to the module itself not found
- if (e.code !== "MODULE_NOT_FOUND" || !findModuleNotFound(e, path)) {
- // if the module we are requiring fail because it try to require a
- // module that's not found, then we have to report this as failed.
- if (typeof opts.fail === "function") {
- return opts.fail(e);
- }
- throw e;
- }
- if (opts.message) {
- var message = opts.message === true ? "" : opts.message + " - ";
- var r = opts.resolve ? "resolved" : "found";
- opts.log(message + "optional module not " + r, path);
- }
- if (typeof opts.notFound === "function") {
- return opts.notFound(e);
- }
- return opts.default;
- }
- }
- /**
- * try to require a module with optional handling in case it's not found or fail to require
- *
- * @param callerRequire - `require` from caller context
- * @param path - path to module to require
- * @param optsOrMsg - options or message to log in case of exceptions
- * @returns require result
- */
- function tryRequire(callerRequire, path, optsOrMsg) {
- var opts = _getOptions(optsOrMsg, callerRequire, __defaultLog);
- opts.resolve = false;
- return _optionalRequire(path, opts);
- }
- exports.tryRequire = tryRequire;
- /**
- * try to resolve a module with optional handling in case it's not found or fail to require
- *
- * @param callerRequire - `require` from caller context
- * @param path - path to module to require
- * @param optsOrMsg - options or message to log in case of exceptions
- * @returns resolve result
- */
- function tryResolve(callerRequire, path, optsOrMsg) {
- var opts = _getOptions(optsOrMsg, callerRequire, __defaultLog);
- opts.resolve = true;
- return _optionalRequire(path, opts);
- }
- exports.tryResolve = tryResolve;
- /**
- * Make an optional require function, using the `require` from caller's context.
- *
- * @param callerRequire - `require` from caller's context
- * @param log - function to log if module is not found
- * @returns required module
- */
- function makeOptionalRequire(callerRequire, log) {
- var x = function (path, optsOrMsg) {
- var opts = _getOptions(optsOrMsg, callerRequire, x.log);
- return _optionalRequire(path, opts);
- };
- x.resolve = function (path, optsOrMsg) {
- var opts = _getOptions(optsOrMsg, callerRequire, x.log);
- opts.resolve = true;
- return _optionalRequire(path, opts);
- };
- x.log = log || __defaultLog;
- return x;
- }
- exports.makeOptionalRequire = makeOptionalRequire;
- /**
- * A default optionalRequire function using `require` from optional-require's context.
- *
- * @remarks because `require` is from optional-require's context, you won't be able to
- * do `optionalRequire("./my-module")`.
- *
- * You can still override the `require` using `options.require` with the one from your
- * calling context.
- *
- */
- exports.optionalRequire = makeOptionalRequire(xrequire);
- /**
- * An optionalRequire function using `require` from CWD context
- *
- * @remarks because `require` is from CWD context, if you do `optionalRequireCwd("./my-module")`
- * then it will look for `my-module` in CWD.
- *
- * @remarks You can still override the `require` using `options.require` with the one from your
- * calling context.
- */
- exports.optionalRequireCwd = makeOptionalRequire((0, require_at_1.default)(process.cwd()));
- //# sourceMappingURL=index.js.map
|