You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					1220 lines
				
				34 KiB
			
		
		
			
		
	
	
					1220 lines
				
				34 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | 
 | ||
|  | Object.defineProperty(exports, '__esModule', { value: true }); | ||
|  | 
 | ||
|  | var path = require('path'); | ||
|  | var isBuiltinModule = require('is-builtin-module'); | ||
|  | var deepMerge = require('deepmerge'); | ||
|  | var isModule = require('is-module'); | ||
|  | var fs = require('fs'); | ||
|  | var util = require('util'); | ||
|  | var url = require('url'); | ||
|  | var resolve = require('resolve'); | ||
|  | var pluginutils = require('@rollup/pluginutils'); | ||
|  | 
 | ||
|  | function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | ||
|  | 
 | ||
|  | var path__default = /*#__PURE__*/_interopDefaultLegacy(path); | ||
|  | var isBuiltinModule__default = /*#__PURE__*/_interopDefaultLegacy(isBuiltinModule); | ||
|  | var deepMerge__default = /*#__PURE__*/_interopDefaultLegacy(deepMerge); | ||
|  | var isModule__default = /*#__PURE__*/_interopDefaultLegacy(isModule); | ||
|  | var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); | ||
|  | var resolve__default = /*#__PURE__*/_interopDefaultLegacy(resolve); | ||
|  | 
 | ||
|  | var version = "13.3.0"; | ||
|  | 
 | ||
|  | util.promisify(fs__default["default"].access); | ||
|  | const readFile$1 = util.promisify(fs__default["default"].readFile); | ||
|  | const realpath = util.promisify(fs__default["default"].realpath); | ||
|  | const stat = util.promisify(fs__default["default"].stat); | ||
|  | 
 | ||
|  | async function fileExists(filePath) { | ||
|  |   try { | ||
|  |     const res = await stat(filePath); | ||
|  |     return res.isFile(); | ||
|  |   } catch { | ||
|  |     return false; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | async function resolveSymlink(path) { | ||
|  |   return (await fileExists(path)) ? realpath(path) : path; | ||
|  | } | ||
|  | 
 | ||
|  | const onError = (error) => { | ||
|  |   if (error.code === 'ENOENT') { | ||
|  |     return false; | ||
|  |   } | ||
|  |   throw error; | ||
|  | }; | ||
|  | 
 | ||
|  | const makeCache = (fn) => { | ||
|  |   const cache = new Map(); | ||
|  |   const wrapped = async (param, done) => { | ||
|  |     if (cache.has(param) === false) { | ||
|  |       cache.set( | ||
|  |         param, | ||
|  |         fn(param).catch((err) => { | ||
|  |           cache.delete(param); | ||
|  |           throw err; | ||
|  |         }) | ||
|  |       ); | ||
|  |     } | ||
|  | 
 | ||
|  |     try { | ||
|  |       const result = cache.get(param); | ||
|  |       const value = await result; | ||
|  |       return done(null, value); | ||
|  |     } catch (error) { | ||
|  |       return done(error); | ||
|  |     } | ||
|  |   }; | ||
|  | 
 | ||
|  |   wrapped.clear = () => cache.clear(); | ||
|  | 
 | ||
|  |   return wrapped; | ||
|  | }; | ||
|  | 
 | ||
|  | const isDirCached = makeCache(async (file) => { | ||
|  |   try { | ||
|  |     const stats = await stat(file); | ||
|  |     return stats.isDirectory(); | ||
|  |   } catch (error) { | ||
|  |     return onError(error); | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | const isFileCached = makeCache(async (file) => { | ||
|  |   try { | ||
|  |     const stats = await stat(file); | ||
|  |     return stats.isFile(); | ||
|  |   } catch (error) { | ||
|  |     return onError(error); | ||
|  |   } | ||
|  | }); | ||
|  | 
 | ||
|  | const readCachedFile = makeCache(readFile$1); | ||
|  | 
 | ||
|  | function handleDeprecatedOptions(opts) { | ||
|  |   const warnings = []; | ||
|  | 
 | ||
|  |   if (opts.customResolveOptions) { | ||
|  |     const { customResolveOptions } = opts; | ||
|  |     if (customResolveOptions.moduleDirectory) { | ||
|  |       // eslint-disable-next-line no-param-reassign
 | ||
|  |       opts.moduleDirectories = Array.isArray(customResolveOptions.moduleDirectory) | ||
|  |         ? customResolveOptions.moduleDirectory | ||
|  |         : [customResolveOptions.moduleDirectory]; | ||
|  | 
 | ||
|  |       warnings.push( | ||
|  |         'node-resolve: The `customResolveOptions.moduleDirectory` option has been deprecated. Use `moduleDirectories`, which must be an array.' | ||
|  |       ); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (customResolveOptions.preserveSymlinks) { | ||
|  |       throw new Error( | ||
|  |         'node-resolve: `customResolveOptions.preserveSymlinks` is no longer an option. We now always use the rollup `preserveSymlinks` option.' | ||
|  |       ); | ||
|  |     } | ||
|  | 
 | ||
|  |     [ | ||
|  |       'basedir', | ||
|  |       'package', | ||
|  |       'extensions', | ||
|  |       'includeCoreModules', | ||
|  |       'readFile', | ||
|  |       'isFile', | ||
|  |       'isDirectory', | ||
|  |       'realpath', | ||
|  |       'packageFilter', | ||
|  |       'pathFilter', | ||
|  |       'paths', | ||
|  |       'packageIterator' | ||
|  |     ].forEach((resolveOption) => { | ||
|  |       if (customResolveOptions[resolveOption]) { | ||
|  |         throw new Error( | ||
|  |           `node-resolve: \`customResolveOptions.${resolveOption}\` is no longer an option. If you need this, please open an issue.` | ||
|  |         ); | ||
|  |       } | ||
|  |     }); | ||
|  |   } | ||
|  | 
 | ||
|  |   return { warnings }; | ||
|  | } | ||
|  | 
 | ||
|  | // returns the imported package name for bare module imports
 | ||
|  | function getPackageName(id) { | ||
|  |   if (id.startsWith('.') || id.startsWith('/')) { | ||
|  |     return null; | ||
|  |   } | ||
|  | 
 | ||
|  |   const split = id.split('/'); | ||
|  | 
 | ||
|  |   // @my-scope/my-package/foo.js -> @my-scope/my-package
 | ||
|  |   // @my-scope/my-package -> @my-scope/my-package
 | ||
|  |   if (split[0][0] === '@') { | ||
|  |     return `${split[0]}/${split[1]}`; | ||
|  |   } | ||
|  | 
 | ||
|  |   // my-package/foo.js -> my-package
 | ||
|  |   // my-package -> my-package
 | ||
|  |   return split[0]; | ||
|  | } | ||
|  | 
 | ||
|  | function getMainFields(options) { | ||
|  |   let mainFields; | ||
|  |   if (options.mainFields) { | ||
|  |     ({ mainFields } = options); | ||
|  |   } else { | ||
|  |     mainFields = ['module', 'main']; | ||
|  |   } | ||
|  |   if (options.browser && mainFields.indexOf('browser') === -1) { | ||
|  |     return ['browser'].concat(mainFields); | ||
|  |   } | ||
|  |   if (!mainFields.length) { | ||
|  |     throw new Error('Please ensure at least one `mainFields` value is specified'); | ||
|  |   } | ||
|  |   return mainFields; | ||
|  | } | ||
|  | 
 | ||
|  | function getPackageInfo(options) { | ||
|  |   const { | ||
|  |     cache, | ||
|  |     extensions, | ||
|  |     pkg, | ||
|  |     mainFields, | ||
|  |     preserveSymlinks, | ||
|  |     useBrowserOverrides, | ||
|  |     rootDir, | ||
|  |     ignoreSideEffectsForRoot | ||
|  |   } = options; | ||
|  |   let { pkgPath } = options; | ||
|  | 
 | ||
|  |   if (cache.has(pkgPath)) { | ||
|  |     return cache.get(pkgPath); | ||
|  |   } | ||
|  | 
 | ||
|  |   // browserify/resolve doesn't realpath paths returned in its packageFilter callback
 | ||
|  |   if (!preserveSymlinks) { | ||
|  |     pkgPath = fs.realpathSync(pkgPath); | ||
|  |   } | ||
|  | 
 | ||
|  |   const pkgRoot = path.dirname(pkgPath); | ||
|  | 
 | ||
|  |   const packageInfo = { | ||
|  |     // copy as we are about to munge the `main` field of `pkg`.
 | ||
|  |     packageJson: { ...pkg }, | ||
|  | 
 | ||
|  |     // path to package.json file
 | ||
|  |     packageJsonPath: pkgPath, | ||
|  | 
 | ||
|  |     // directory containing the package.json
 | ||
|  |     root: pkgRoot, | ||
|  | 
 | ||
|  |     // which main field was used during resolution of this module (main, module, or browser)
 | ||
|  |     resolvedMainField: 'main', | ||
|  | 
 | ||
|  |     // whether the browser map was used to resolve the entry point to this module
 | ||
|  |     browserMappedMain: false, | ||
|  | 
 | ||
|  |     // the entry point of the module with respect to the selected main field and any
 | ||
|  |     // relevant browser mappings.
 | ||
|  |     resolvedEntryPoint: '' | ||
|  |   }; | ||
|  | 
 | ||
|  |   let overriddenMain = false; | ||
|  |   for (let i = 0; i < mainFields.length; i++) { | ||
|  |     const field = mainFields[i]; | ||
|  |     if (typeof pkg[field] === 'string') { | ||
|  |       pkg.main = pkg[field]; | ||
|  |       packageInfo.resolvedMainField = field; | ||
|  |       overriddenMain = true; | ||
|  |       break; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   const internalPackageInfo = { | ||
|  |     cachedPkg: pkg, | ||
|  |     hasModuleSideEffects: () => null, | ||
|  |     hasPackageEntry: overriddenMain !== false || mainFields.indexOf('main') !== -1, | ||
|  |     packageBrowserField: | ||
|  |       useBrowserOverrides && | ||
|  |       typeof pkg.browser === 'object' && | ||
|  |       Object.keys(pkg.browser).reduce((browser, key) => { | ||
|  |         let resolved = pkg.browser[key]; | ||
|  |         if (resolved && resolved[0] === '.') { | ||
|  |           resolved = path.resolve(pkgRoot, resolved); | ||
|  |         } | ||
|  |         /* eslint-disable no-param-reassign */ | ||
|  |         browser[key] = resolved; | ||
|  |         if (key[0] === '.') { | ||
|  |           const absoluteKey = path.resolve(pkgRoot, key); | ||
|  |           browser[absoluteKey] = resolved; | ||
|  |           if (!path.extname(key)) { | ||
|  |             extensions.reduce((subBrowser, ext) => { | ||
|  |               subBrowser[absoluteKey + ext] = subBrowser[key]; | ||
|  |               return subBrowser; | ||
|  |             }, browser); | ||
|  |           } | ||
|  |         } | ||
|  |         return browser; | ||
|  |       }, {}), | ||
|  |     packageInfo | ||
|  |   }; | ||
|  | 
 | ||
|  |   const browserMap = internalPackageInfo.packageBrowserField; | ||
|  |   if ( | ||
|  |     useBrowserOverrides && | ||
|  |     typeof pkg.browser === 'object' && | ||
|  |     // eslint-disable-next-line no-prototype-builtins
 | ||
|  |     browserMap.hasOwnProperty(pkg.main) | ||
|  |   ) { | ||
|  |     packageInfo.resolvedEntryPoint = browserMap[pkg.main]; | ||
|  |     packageInfo.browserMappedMain = true; | ||
|  |   } else { | ||
|  |     // index.node is technically a valid default entrypoint as well...
 | ||
|  |     packageInfo.resolvedEntryPoint = path.resolve(pkgRoot, pkg.main || 'index.js'); | ||
|  |     packageInfo.browserMappedMain = false; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (!ignoreSideEffectsForRoot || rootDir !== pkgRoot) { | ||
|  |     const packageSideEffects = pkg.sideEffects; | ||
|  |     if (typeof packageSideEffects === 'boolean') { | ||
|  |       internalPackageInfo.hasModuleSideEffects = () => packageSideEffects; | ||
|  |     } else if (Array.isArray(packageSideEffects)) { | ||
|  |       const finalPackageSideEffects = packageSideEffects.map((sideEffect) => { | ||
|  |         /* | ||
|  |          * The array accepts simple glob patterns to the relevant files... Patterns like .css, which do not include a /, will be treated like **\/.css. | ||
|  |          * https://webpack.js.org/guides/tree-shaking/
 | ||
|  |          */ | ||
|  |         if (sideEffect.includes('/')) { | ||
|  |           return sideEffect; | ||
|  |         } | ||
|  |         return `**/${sideEffect}`; | ||
|  |       }); | ||
|  |       internalPackageInfo.hasModuleSideEffects = pluginutils.createFilter(finalPackageSideEffects, null, { | ||
|  |         resolve: pkgRoot | ||
|  |       }); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   cache.set(pkgPath, internalPackageInfo); | ||
|  |   return internalPackageInfo; | ||
|  | } | ||
|  | 
 | ||
|  | function normalizeInput(input) { | ||
|  |   if (Array.isArray(input)) { | ||
|  |     return input; | ||
|  |   } else if (typeof input === 'object') { | ||
|  |     return Object.values(input); | ||
|  |   } | ||
|  | 
 | ||
|  |   // otherwise it's a string
 | ||
|  |   return [input]; | ||
|  | } | ||
|  | 
 | ||
|  | /* eslint-disable no-await-in-loop */ | ||
|  | 
 | ||
|  | function isModuleDir(current, moduleDirs) { | ||
|  |   return moduleDirs.some((dir) => current.endsWith(dir)); | ||
|  | } | ||
|  | 
 | ||
|  | async function findPackageJson(base, moduleDirs) { | ||
|  |   const { root } = path__default["default"].parse(base); | ||
|  |   let current = base; | ||
|  | 
 | ||
|  |   while (current !== root && !isModuleDir(current, moduleDirs)) { | ||
|  |     const pkgJsonPath = path__default["default"].join(current, 'package.json'); | ||
|  |     if (await fileExists(pkgJsonPath)) { | ||
|  |       const pkgJsonString = fs__default["default"].readFileSync(pkgJsonPath, 'utf-8'); | ||
|  |       return { pkgJson: JSON.parse(pkgJsonString), pkgPath: current, pkgJsonPath }; | ||
|  |     } | ||
|  |     current = path__default["default"].resolve(current, '..'); | ||
|  |   } | ||
|  |   return null; | ||
|  | } | ||
|  | 
 | ||
|  | function isUrl(str) { | ||
|  |   try { | ||
|  |     return !!new URL(str); | ||
|  |   } catch (_) { | ||
|  |     return false; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | function isConditions(exports) { | ||
|  |   return typeof exports === 'object' && Object.keys(exports).every((k) => !k.startsWith('.')); | ||
|  | } | ||
|  | 
 | ||
|  | function isMappings(exports) { | ||
|  |   return typeof exports === 'object' && !isConditions(exports); | ||
|  | } | ||
|  | 
 | ||
|  | function isMixedExports(exports) { | ||
|  |   const keys = Object.keys(exports); | ||
|  |   return keys.some((k) => k.startsWith('.')) && keys.some((k) => !k.startsWith('.')); | ||
|  | } | ||
|  | 
 | ||
|  | function createBaseErrorMsg(importSpecifier, importer) { | ||
|  |   return `Could not resolve import "${importSpecifier}" in ${importer}`; | ||
|  | } | ||
|  | 
 | ||
|  | function createErrorMsg(context, reason, internal) { | ||
|  |   const { importSpecifier, importer, pkgJsonPath } = context; | ||
|  |   const base = createBaseErrorMsg(importSpecifier, importer); | ||
|  |   const field = internal ? 'imports' : 'exports'; | ||
|  |   return `${base} using ${field} defined in ${pkgJsonPath}.${reason ? ` ${reason}` : ''}`; | ||
|  | } | ||
|  | 
 | ||
|  | class ResolveError extends Error {} | ||
|  | 
 | ||
|  | class InvalidConfigurationError extends ResolveError { | ||
|  |   constructor(context, reason) { | ||
|  |     super(createErrorMsg(context, `Invalid "exports" field. ${reason}`)); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | class InvalidModuleSpecifierError extends ResolveError { | ||
|  |   constructor(context, internal, reason) { | ||
|  |     super(createErrorMsg(context, reason, internal)); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | class InvalidPackageTargetError extends ResolveError { | ||
|  |   constructor(context, reason) { | ||
|  |     super(createErrorMsg(context, reason)); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | /* eslint-disable no-await-in-loop, no-undefined */ | ||
|  | 
 | ||
|  | function includesInvalidSegments(pathSegments, moduleDirs) { | ||
|  |   return pathSegments | ||
|  |     .split('/') | ||
|  |     .slice(1) | ||
|  |     .some((t) => ['.', '..', ...moduleDirs].includes(t)); | ||
|  | } | ||
|  | 
 | ||
|  | async function resolvePackageTarget(context, { target, subpath, pattern, internal }) { | ||
|  |   if (typeof target === 'string') { | ||
|  |     if (!pattern && subpath.length > 0 && !target.endsWith('/')) { | ||
|  |       throw new InvalidModuleSpecifierError(context); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (!target.startsWith('./')) { | ||
|  |       if (internal && !['/', '../'].some((p) => target.startsWith(p)) && !isUrl(target)) { | ||
|  |         // this is a bare package import, remap it and resolve it using regular node resolve
 | ||
|  |         if (pattern) { | ||
|  |           const result = await context.resolveId( | ||
|  |             target.replace(/\*/g, subpath), | ||
|  |             context.pkgURL.href | ||
|  |           ); | ||
|  |           return result ? url.pathToFileURL(result.location).href : null; | ||
|  |         } | ||
|  | 
 | ||
|  |         const result = await context.resolveId(`${target}${subpath}`, context.pkgURL.href); | ||
|  |         return result ? url.pathToFileURL(result.location).href : null; | ||
|  |       } | ||
|  |       throw new InvalidPackageTargetError(context, `Invalid mapping: "${target}".`); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (includesInvalidSegments(target, context.moduleDirs)) { | ||
|  |       throw new InvalidPackageTargetError(context, `Invalid mapping: "${target}".`); | ||
|  |     } | ||
|  | 
 | ||
|  |     const resolvedTarget = new URL(target, context.pkgURL); | ||
|  |     if (!resolvedTarget.href.startsWith(context.pkgURL.href)) { | ||
|  |       throw new InvalidPackageTargetError( | ||
|  |         context, | ||
|  |         `Resolved to ${resolvedTarget.href} which is outside package ${context.pkgURL.href}` | ||
|  |       ); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (includesInvalidSegments(subpath, context.moduleDirs)) { | ||
|  |       throw new InvalidModuleSpecifierError(context); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (pattern) { | ||
|  |       return resolvedTarget.href.replace(/\*/g, subpath); | ||
|  |     } | ||
|  |     return new URL(subpath, resolvedTarget).href; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (Array.isArray(target)) { | ||
|  |     let lastError; | ||
|  |     for (const item of target) { | ||
|  |       try { | ||
|  |         const resolved = await resolvePackageTarget(context, { | ||
|  |           target: item, | ||
|  |           subpath, | ||
|  |           pattern, | ||
|  |           internal | ||
|  |         }); | ||
|  | 
 | ||
|  |         // return if defined or null, but not undefined
 | ||
|  |         if (resolved !== undefined) { | ||
|  |           return resolved; | ||
|  |         } | ||
|  |       } catch (error) { | ||
|  |         if (!(error instanceof InvalidPackageTargetError)) { | ||
|  |           throw error; | ||
|  |         } else { | ||
|  |           lastError = error; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     if (lastError) { | ||
|  |       throw lastError; | ||
|  |     } | ||
|  |     return null; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (target && typeof target === 'object') { | ||
|  |     for (const [key, value] of Object.entries(target)) { | ||
|  |       if (key === 'default' || context.conditions.includes(key)) { | ||
|  |         const resolved = await resolvePackageTarget(context, { | ||
|  |           target: value, | ||
|  |           subpath, | ||
|  |           pattern, | ||
|  |           internal | ||
|  |         }); | ||
|  | 
 | ||
|  |         // return if defined or null, but not undefined
 | ||
|  |         if (resolved !== undefined) { | ||
|  |           return resolved; | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  |     return undefined; | ||
|  |   } | ||
|  | 
 | ||
|  |   if (target === null) { | ||
|  |     return null; | ||
|  |   } | ||
|  | 
 | ||
|  |   throw new InvalidPackageTargetError(context, `Invalid exports field.`); | ||
|  | } | ||
|  | 
 | ||
|  | /* eslint-disable no-await-in-loop */ | ||
|  | 
 | ||
|  | async function resolvePackageImportsExports(context, { matchKey, matchObj, internal }) { | ||
|  |   if (!matchKey.endsWith('*') && matchKey in matchObj) { | ||
|  |     const target = matchObj[matchKey]; | ||
|  |     const resolved = await resolvePackageTarget(context, { target, subpath: '', internal }); | ||
|  |     return resolved; | ||
|  |   } | ||
|  | 
 | ||
|  |   const expansionKeys = Object.keys(matchObj) | ||
|  |     .filter((k) => k.endsWith('/') || k.endsWith('*')) | ||
|  |     .sort((a, b) => b.length - a.length); | ||
|  | 
 | ||
|  |   for (const expansionKey of expansionKeys) { | ||
|  |     const prefix = expansionKey.substring(0, expansionKey.length - 1); | ||
|  | 
 | ||
|  |     if (expansionKey.endsWith('*') && matchKey.startsWith(prefix)) { | ||
|  |       const target = matchObj[expansionKey]; | ||
|  |       const subpath = matchKey.substring(expansionKey.length - 1); | ||
|  |       const resolved = await resolvePackageTarget(context, { | ||
|  |         target, | ||
|  |         subpath, | ||
|  |         pattern: true, | ||
|  |         internal | ||
|  |       }); | ||
|  |       return resolved; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (matchKey.startsWith(expansionKey)) { | ||
|  |       const target = matchObj[expansionKey]; | ||
|  |       const subpath = matchKey.substring(expansionKey.length); | ||
|  | 
 | ||
|  |       const resolved = await resolvePackageTarget(context, { target, subpath, internal }); | ||
|  |       return resolved; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   throw new InvalidModuleSpecifierError(context, internal); | ||
|  | } | ||
|  | 
 | ||
|  | async function resolvePackageExports(context, subpath, exports) { | ||
|  |   if (isMixedExports(exports)) { | ||
|  |     throw new InvalidConfigurationError( | ||
|  |       context, | ||
|  |       'All keys must either start with ./, or without one.' | ||
|  |     ); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (subpath === '.') { | ||
|  |     let mainExport; | ||
|  |     // If exports is a String or Array, or an Object containing no keys starting with ".", then
 | ||
|  |     if (typeof exports === 'string' || Array.isArray(exports) || isConditions(exports)) { | ||
|  |       mainExport = exports; | ||
|  |     } else if (isMappings(exports)) { | ||
|  |       mainExport = exports['.']; | ||
|  |     } | ||
|  | 
 | ||
|  |     if (mainExport) { | ||
|  |       const resolved = await resolvePackageTarget(context, { target: mainExport, subpath: '' }); | ||
|  |       if (resolved) { | ||
|  |         return resolved; | ||
|  |       } | ||
|  |     } | ||
|  |   } else if (isMappings(exports)) { | ||
|  |     const resolvedMatch = await resolvePackageImportsExports(context, { | ||
|  |       matchKey: subpath, | ||
|  |       matchObj: exports | ||
|  |     }); | ||
|  | 
 | ||
|  |     if (resolvedMatch) { | ||
|  |       return resolvedMatch; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   throw new InvalidModuleSpecifierError(context); | ||
|  | } | ||
|  | 
 | ||
|  | async function resolvePackageImports({ | ||
|  |   importSpecifier, | ||
|  |   importer, | ||
|  |   moduleDirs, | ||
|  |   conditions, | ||
|  |   resolveId | ||
|  | }) { | ||
|  |   const result = await findPackageJson(importer, moduleDirs); | ||
|  |   if (!result) { | ||
|  |     throw new Error(createBaseErrorMsg('. Could not find a parent package.json.')); | ||
|  |   } | ||
|  | 
 | ||
|  |   const { pkgPath, pkgJsonPath, pkgJson } = result; | ||
|  |   const pkgURL = url.pathToFileURL(`${pkgPath}/`); | ||
|  |   const context = { | ||
|  |     importer, | ||
|  |     importSpecifier, | ||
|  |     moduleDirs, | ||
|  |     pkgURL, | ||
|  |     pkgJsonPath, | ||
|  |     conditions, | ||
|  |     resolveId | ||
|  |   }; | ||
|  | 
 | ||
|  |   const { imports } = pkgJson; | ||
|  |   if (!imports) { | ||
|  |     throw new InvalidModuleSpecifierError(context, true); | ||
|  |   } | ||
|  | 
 | ||
|  |   if (importSpecifier === '#' || importSpecifier.startsWith('#/')) { | ||
|  |     throw new InvalidModuleSpecifierError(context, true, 'Invalid import specifier.'); | ||
|  |   } | ||
|  | 
 | ||
|  |   return resolvePackageImportsExports(context, { | ||
|  |     matchKey: importSpecifier, | ||
|  |     matchObj: imports, | ||
|  |     internal: true | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | const resolveImportPath = util.promisify(resolve__default["default"]); | ||
|  | const readFile = util.promisify(fs__default["default"].readFile); | ||
|  | 
 | ||
|  | async function getPackageJson(importer, pkgName, resolveOptions, moduleDirectories) { | ||
|  |   if (importer) { | ||
|  |     const selfPackageJsonResult = await findPackageJson(importer, moduleDirectories); | ||
|  |     if (selfPackageJsonResult && selfPackageJsonResult.pkgJson.name === pkgName) { | ||
|  |       // the referenced package name is the current package
 | ||
|  |       return selfPackageJsonResult; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   try { | ||
|  |     const pkgJsonPath = await resolveImportPath(`${pkgName}/package.json`, resolveOptions); | ||
|  |     const pkgJson = JSON.parse(await readFile(pkgJsonPath, 'utf-8')); | ||
|  |     return { pkgJsonPath, pkgJson, pkgPath: path.dirname(pkgJsonPath) }; | ||
|  |   } catch (_) { | ||
|  |     return null; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | async function resolveIdClassic({ | ||
|  |   importSpecifier, | ||
|  |   packageInfoCache, | ||
|  |   extensions, | ||
|  |   mainFields, | ||
|  |   preserveSymlinks, | ||
|  |   useBrowserOverrides, | ||
|  |   baseDir, | ||
|  |   moduleDirectories, | ||
|  |   rootDir, | ||
|  |   ignoreSideEffectsForRoot | ||
|  | }) { | ||
|  |   let hasModuleSideEffects = () => null; | ||
|  |   let hasPackageEntry = true; | ||
|  |   let packageBrowserField = false; | ||
|  |   let packageInfo; | ||
|  | 
 | ||
|  |   const filter = (pkg, pkgPath) => { | ||
|  |     const info = getPackageInfo({ | ||
|  |       cache: packageInfoCache, | ||
|  |       extensions, | ||
|  |       pkg, | ||
|  |       pkgPath, | ||
|  |       mainFields, | ||
|  |       preserveSymlinks, | ||
|  |       useBrowserOverrides, | ||
|  |       rootDir, | ||
|  |       ignoreSideEffectsForRoot | ||
|  |     }); | ||
|  | 
 | ||
|  |     ({ packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = info); | ||
|  | 
 | ||
|  |     return info.cachedPkg; | ||
|  |   }; | ||
|  | 
 | ||
|  |   const resolveOptions = { | ||
|  |     basedir: baseDir, | ||
|  |     readFile: readCachedFile, | ||
|  |     isFile: isFileCached, | ||
|  |     isDirectory: isDirCached, | ||
|  |     extensions, | ||
|  |     includeCoreModules: false, | ||
|  |     moduleDirectory: moduleDirectories, | ||
|  |     preserveSymlinks, | ||
|  |     packageFilter: filter | ||
|  |   }; | ||
|  | 
 | ||
|  |   let location; | ||
|  |   try { | ||
|  |     location = await resolveImportPath(importSpecifier, resolveOptions); | ||
|  |   } catch (error) { | ||
|  |     if (error.code !== 'MODULE_NOT_FOUND') { | ||
|  |       throw error; | ||
|  |     } | ||
|  |     return null; | ||
|  |   } | ||
|  | 
 | ||
|  |   return { | ||
|  |     location: preserveSymlinks ? location : await resolveSymlink(location), | ||
|  |     hasModuleSideEffects, | ||
|  |     hasPackageEntry, | ||
|  |     packageBrowserField, | ||
|  |     packageInfo | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | async function resolveWithExportMap({ | ||
|  |   importer, | ||
|  |   importSpecifier, | ||
|  |   exportConditions, | ||
|  |   packageInfoCache, | ||
|  |   extensions, | ||
|  |   mainFields, | ||
|  |   preserveSymlinks, | ||
|  |   useBrowserOverrides, | ||
|  |   baseDir, | ||
|  |   moduleDirectories, | ||
|  |   rootDir, | ||
|  |   ignoreSideEffectsForRoot | ||
|  | }) { | ||
|  |   if (importSpecifier.startsWith('#')) { | ||
|  |     // this is a package internal import, resolve using package imports field
 | ||
|  |     const resolveResult = await resolvePackageImports({ | ||
|  |       importSpecifier, | ||
|  |       importer, | ||
|  |       moduleDirs: moduleDirectories, | ||
|  |       conditions: exportConditions, | ||
|  |       resolveId(id /* , parent*/) { | ||
|  |         return resolveIdClassic({ | ||
|  |           importSpecifier: id, | ||
|  |           packageInfoCache, | ||
|  |           extensions, | ||
|  |           mainFields, | ||
|  |           preserveSymlinks, | ||
|  |           useBrowserOverrides, | ||
|  |           baseDir, | ||
|  |           moduleDirectories | ||
|  |         }); | ||
|  |       } | ||
|  |     }); | ||
|  | 
 | ||
|  |     const location = url.fileURLToPath(resolveResult); | ||
|  |     return { | ||
|  |       location: preserveSymlinks ? location : await resolveSymlink(location), | ||
|  |       hasModuleSideEffects: () => null, | ||
|  |       hasPackageEntry: true, | ||
|  |       packageBrowserField: false, | ||
|  |       // eslint-disable-next-line no-undefined
 | ||
|  |       packageInfo: undefined | ||
|  |     }; | ||
|  |   } | ||
|  | 
 | ||
|  |   const pkgName = getPackageName(importSpecifier); | ||
|  |   if (pkgName) { | ||
|  |     // it's a bare import, find the package.json and resolve using package exports if available
 | ||
|  |     let hasModuleSideEffects = () => null; | ||
|  |     let hasPackageEntry = true; | ||
|  |     let packageBrowserField = false; | ||
|  |     let packageInfo; | ||
|  | 
 | ||
|  |     const filter = (pkg, pkgPath) => { | ||
|  |       const info = getPackageInfo({ | ||
|  |         cache: packageInfoCache, | ||
|  |         extensions, | ||
|  |         pkg, | ||
|  |         pkgPath, | ||
|  |         mainFields, | ||
|  |         preserveSymlinks, | ||
|  |         useBrowserOverrides, | ||
|  |         rootDir, | ||
|  |         ignoreSideEffectsForRoot | ||
|  |       }); | ||
|  | 
 | ||
|  |       ({ packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = info); | ||
|  | 
 | ||
|  |       return info.cachedPkg; | ||
|  |     }; | ||
|  | 
 | ||
|  |     const resolveOptions = { | ||
|  |       basedir: baseDir, | ||
|  |       readFile: readCachedFile, | ||
|  |       isFile: isFileCached, | ||
|  |       isDirectory: isDirCached, | ||
|  |       extensions, | ||
|  |       includeCoreModules: false, | ||
|  |       moduleDirectory: moduleDirectories, | ||
|  |       preserveSymlinks, | ||
|  |       packageFilter: filter | ||
|  |     }; | ||
|  | 
 | ||
|  |     const result = await getPackageJson(importer, pkgName, resolveOptions, moduleDirectories); | ||
|  | 
 | ||
|  |     if (result && result.pkgJson.exports) { | ||
|  |       const { pkgJson, pkgJsonPath } = result; | ||
|  |       const subpath = | ||
|  |         pkgName === importSpecifier ? '.' : `.${importSpecifier.substring(pkgName.length)}`; | ||
|  |       const pkgDr = pkgJsonPath.replace('package.json', ''); | ||
|  |       const pkgURL = url.pathToFileURL(pkgDr); | ||
|  | 
 | ||
|  |       const context = { | ||
|  |         importer, | ||
|  |         importSpecifier, | ||
|  |         moduleDirs: moduleDirectories, | ||
|  |         pkgURL, | ||
|  |         pkgJsonPath, | ||
|  |         conditions: exportConditions | ||
|  |       }; | ||
|  |       const resolvedPackageExport = await resolvePackageExports(context, subpath, pkgJson.exports); | ||
|  |       const location = url.fileURLToPath(resolvedPackageExport); | ||
|  |       if (location) { | ||
|  |         return { | ||
|  |           location: preserveSymlinks ? location : await resolveSymlink(location), | ||
|  |           hasModuleSideEffects, | ||
|  |           hasPackageEntry, | ||
|  |           packageBrowserField, | ||
|  |           packageInfo | ||
|  |         }; | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return null; | ||
|  | } | ||
|  | 
 | ||
|  | async function resolveWithClassic({ | ||
|  |   importer, | ||
|  |   importSpecifierList, | ||
|  |   exportConditions, | ||
|  |   warn, | ||
|  |   packageInfoCache, | ||
|  |   extensions, | ||
|  |   mainFields, | ||
|  |   preserveSymlinks, | ||
|  |   useBrowserOverrides, | ||
|  |   baseDir, | ||
|  |   moduleDirectories, | ||
|  |   rootDir, | ||
|  |   ignoreSideEffectsForRoot | ||
|  | }) { | ||
|  |   for (let i = 0; i < importSpecifierList.length; i++) { | ||
|  |     // eslint-disable-next-line no-await-in-loop
 | ||
|  |     const result = await resolveIdClassic({ | ||
|  |       importer, | ||
|  |       importSpecifier: importSpecifierList[i], | ||
|  |       exportConditions, | ||
|  |       warn, | ||
|  |       packageInfoCache, | ||
|  |       extensions, | ||
|  |       mainFields, | ||
|  |       preserveSymlinks, | ||
|  |       useBrowserOverrides, | ||
|  |       baseDir, | ||
|  |       moduleDirectories, | ||
|  |       rootDir, | ||
|  |       ignoreSideEffectsForRoot | ||
|  |     }); | ||
|  | 
 | ||
|  |     if (result) { | ||
|  |       return result; | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return null; | ||
|  | } | ||
|  | 
 | ||
|  | // Resolves to the module if found or `null`.
 | ||
|  | // The first import specificer will first be attempted with the exports algorithm.
 | ||
|  | // If this is unsuccesful because export maps are not being used, then all of `importSpecifierList`
 | ||
|  | // will be tried with the classic resolution algorithm
 | ||
|  | async function resolveImportSpecifiers({ | ||
|  |   importer, | ||
|  |   importSpecifierList, | ||
|  |   exportConditions, | ||
|  |   warn, | ||
|  |   packageInfoCache, | ||
|  |   extensions, | ||
|  |   mainFields, | ||
|  |   preserveSymlinks, | ||
|  |   useBrowserOverrides, | ||
|  |   baseDir, | ||
|  |   moduleDirectories, | ||
|  |   rootDir, | ||
|  |   ignoreSideEffectsForRoot | ||
|  | }) { | ||
|  |   try { | ||
|  |     const exportMapRes = await resolveWithExportMap({ | ||
|  |       importer, | ||
|  |       importSpecifier: importSpecifierList[0], | ||
|  |       exportConditions, | ||
|  |       packageInfoCache, | ||
|  |       extensions, | ||
|  |       mainFields, | ||
|  |       preserveSymlinks, | ||
|  |       useBrowserOverrides, | ||
|  |       baseDir, | ||
|  |       moduleDirectories, | ||
|  |       rootDir, | ||
|  |       ignoreSideEffectsForRoot | ||
|  |     }); | ||
|  |     if (exportMapRes) return exportMapRes; | ||
|  |   } catch (error) { | ||
|  |     if (error instanceof ResolveError) { | ||
|  |       warn(error); | ||
|  |       return null; | ||
|  |     } | ||
|  |     throw error; | ||
|  |   } | ||
|  | 
 | ||
|  |   // package has no imports or exports, use classic node resolve
 | ||
|  |   return resolveWithClassic({ | ||
|  |     importer, | ||
|  |     importSpecifierList, | ||
|  |     exportConditions, | ||
|  |     warn, | ||
|  |     packageInfoCache, | ||
|  |     extensions, | ||
|  |     mainFields, | ||
|  |     preserveSymlinks, | ||
|  |     useBrowserOverrides, | ||
|  |     baseDir, | ||
|  |     moduleDirectories, | ||
|  |     rootDir, | ||
|  |     ignoreSideEffectsForRoot | ||
|  |   }); | ||
|  | } | ||
|  | 
 | ||
|  | /* eslint-disable no-param-reassign, no-shadow, no-undefined */ | ||
|  | 
 | ||
|  | const ES6_BROWSER_EMPTY = '\0node-resolve:empty.js'; | ||
|  | const deepFreeze = (object) => { | ||
|  |   Object.freeze(object); | ||
|  | 
 | ||
|  |   for (const value of Object.values(object)) { | ||
|  |     if (typeof value === 'object' && !Object.isFrozen(value)) { | ||
|  |       deepFreeze(value); | ||
|  |     } | ||
|  |   } | ||
|  | 
 | ||
|  |   return object; | ||
|  | }; | ||
|  | 
 | ||
|  | const baseConditions = ['default', 'module']; | ||
|  | const baseConditionsEsm = [...baseConditions, 'import']; | ||
|  | const baseConditionsCjs = [...baseConditions, 'require']; | ||
|  | const defaults = { | ||
|  |   dedupe: [], | ||
|  |   // It's important that .mjs is listed before .js so that Rollup will interpret npm modules
 | ||
|  |   // which deploy both ESM .mjs and CommonJS .js files as ESM.
 | ||
|  |   extensions: ['.mjs', '.js', '.json', '.node'], | ||
|  |   resolveOnly: [], | ||
|  |   moduleDirectories: ['node_modules'], | ||
|  |   ignoreSideEffectsForRoot: false | ||
|  | }; | ||
|  | const DEFAULTS = deepFreeze(deepMerge__default["default"]({}, defaults)); | ||
|  | 
 | ||
|  | function nodeResolve(opts = {}) { | ||
|  |   const { warnings } = handleDeprecatedOptions(opts); | ||
|  | 
 | ||
|  |   const options = { ...defaults, ...opts }; | ||
|  |   const { extensions, jail, moduleDirectories, ignoreSideEffectsForRoot } = options; | ||
|  |   const conditionsEsm = [...baseConditionsEsm, ...(options.exportConditions || [])]; | ||
|  |   const conditionsCjs = [...baseConditionsCjs, ...(options.exportConditions || [])]; | ||
|  |   const packageInfoCache = new Map(); | ||
|  |   const idToPackageInfo = new Map(); | ||
|  |   const mainFields = getMainFields(options); | ||
|  |   const useBrowserOverrides = mainFields.indexOf('browser') !== -1; | ||
|  |   const isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; | ||
|  |   const preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; | ||
|  |   const rootDir = path.resolve(options.rootDir || process.cwd()); | ||
|  |   let { dedupe } = options; | ||
|  |   let rollupOptions; | ||
|  | 
 | ||
|  |   if (typeof dedupe !== 'function') { | ||
|  |     dedupe = (importee) => | ||
|  |       options.dedupe.includes(importee) || options.dedupe.includes(getPackageName(importee)); | ||
|  |   } | ||
|  | 
 | ||
|  |   // creates a function from the patterns to test if a particular module should be bundled.
 | ||
|  |   const allowPatterns = (patterns) => { | ||
|  |     const regexPatterns = patterns.map((pattern) => { | ||
|  |       if (pattern instanceof RegExp) { | ||
|  |         return pattern; | ||
|  |       } | ||
|  |       const normalized = pattern.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'); | ||
|  |       return new RegExp(`^${normalized}$`); | ||
|  |     }); | ||
|  |     return (id) => !regexPatterns.length || regexPatterns.some((pattern) => pattern.test(id)); | ||
|  |   }; | ||
|  | 
 | ||
|  |   const resolveOnly = | ||
|  |     typeof options.resolveOnly === 'function' | ||
|  |       ? options.resolveOnly | ||
|  |       : allowPatterns(options.resolveOnly); | ||
|  | 
 | ||
|  |   const browserMapCache = new Map(); | ||
|  |   let preserveSymlinks; | ||
|  | 
 | ||
|  |   const doResolveId = async (context, importee, importer, custom) => { | ||
|  |     // strip query params from import
 | ||
|  |     const [importPath, params] = importee.split('?'); | ||
|  |     const importSuffix = `${params ? `?${params}` : ''}`; | ||
|  |     importee = importPath; | ||
|  | 
 | ||
|  |     const baseDir = !importer || dedupe(importee) ? rootDir : path.dirname(importer); | ||
|  | 
 | ||
|  |     // https://github.com/defunctzombie/package-browser-field-spec
 | ||
|  |     const browser = browserMapCache.get(importer); | ||
|  |     if (useBrowserOverrides && browser) { | ||
|  |       const resolvedImportee = path.resolve(baseDir, importee); | ||
|  |       if (browser[importee] === false || browser[resolvedImportee] === false) { | ||
|  |         return { id: ES6_BROWSER_EMPTY }; | ||
|  |       } | ||
|  |       const browserImportee = | ||
|  |         (importee[0] !== '.' && browser[importee]) || | ||
|  |         browser[resolvedImportee] || | ||
|  |         browser[`${resolvedImportee}.js`] || | ||
|  |         browser[`${resolvedImportee}.json`]; | ||
|  |       if (browserImportee) { | ||
|  |         importee = browserImportee; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     const parts = importee.split(/[/\\]/); | ||
|  |     let id = parts.shift(); | ||
|  |     let isRelativeImport = false; | ||
|  | 
 | ||
|  |     if (id[0] === '@' && parts.length > 0) { | ||
|  |       // scoped packages
 | ||
|  |       id += `/${parts.shift()}`; | ||
|  |     } else if (id[0] === '.') { | ||
|  |       // an import relative to the parent dir of the importer
 | ||
|  |       id = path.resolve(baseDir, importee); | ||
|  |       isRelativeImport = true; | ||
|  |     } | ||
|  | 
 | ||
|  |     // if it's not a relative import, and it's not requested, reject it.
 | ||
|  |     if (!isRelativeImport && !resolveOnly(id)) { | ||
|  |       if (normalizeInput(rollupOptions.input).includes(importee)) { | ||
|  |         return null; | ||
|  |       } | ||
|  |       return false; | ||
|  |     } | ||
|  | 
 | ||
|  |     const importSpecifierList = [importee]; | ||
|  | 
 | ||
|  |     if (importer === undefined && !importee[0].match(/^\.?\.?\//)) { | ||
|  |       // For module graph roots (i.e. when importer is undefined), we
 | ||
|  |       // need to handle 'path fragments` like `foo/bar` that are commonly
 | ||
|  |       // found in rollup config files. If importee doesn't look like a
 | ||
|  |       // relative or absolute path, we make it relative and attempt to
 | ||
|  |       // resolve it.
 | ||
|  |       importSpecifierList.push(`./${importee}`); | ||
|  |     } | ||
|  | 
 | ||
|  |     // TypeScript files may import '.js' to refer to either '.ts' or '.tsx'
 | ||
|  |     if (importer && importee.endsWith('.js')) { | ||
|  |       for (const ext of ['.ts', '.tsx']) { | ||
|  |         if (importer.endsWith(ext) && extensions.includes(ext)) { | ||
|  |           importSpecifierList.push(importee.replace(/.js$/, ext)); | ||
|  |         } | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     const warn = (...args) => context.warn(...args); | ||
|  |     const isRequire = custom && custom['node-resolve'] && custom['node-resolve'].isRequire; | ||
|  |     const exportConditions = isRequire ? conditionsCjs : conditionsEsm; | ||
|  | 
 | ||
|  |     if (useBrowserOverrides && !exportConditions.includes('browser')) | ||
|  |       exportConditions.push('browser'); | ||
|  | 
 | ||
|  |     const resolvedWithoutBuiltins = await resolveImportSpecifiers({ | ||
|  |       importer, | ||
|  |       importSpecifierList, | ||
|  |       exportConditions, | ||
|  |       warn, | ||
|  |       packageInfoCache, | ||
|  |       extensions, | ||
|  |       mainFields, | ||
|  |       preserveSymlinks, | ||
|  |       useBrowserOverrides, | ||
|  |       baseDir, | ||
|  |       moduleDirectories, | ||
|  |       rootDir, | ||
|  |       ignoreSideEffectsForRoot | ||
|  |     }); | ||
|  | 
 | ||
|  |     const importeeIsBuiltin = isBuiltinModule__default["default"](importee); | ||
|  |     const resolved = | ||
|  |       importeeIsBuiltin && preferBuiltins | ||
|  |         ? { | ||
|  |             packageInfo: undefined, | ||
|  |             hasModuleSideEffects: () => null, | ||
|  |             hasPackageEntry: true, | ||
|  |             packageBrowserField: false | ||
|  |           } | ||
|  |         : resolvedWithoutBuiltins; | ||
|  |     if (!resolved) { | ||
|  |       return null; | ||
|  |     } | ||
|  | 
 | ||
|  |     const { packageInfo, hasModuleSideEffects, hasPackageEntry, packageBrowserField } = resolved; | ||
|  |     let { location } = resolved; | ||
|  |     if (packageBrowserField) { | ||
|  |       if (Object.prototype.hasOwnProperty.call(packageBrowserField, location)) { | ||
|  |         if (!packageBrowserField[location]) { | ||
|  |           browserMapCache.set(location, packageBrowserField); | ||
|  |           return { id: ES6_BROWSER_EMPTY }; | ||
|  |         } | ||
|  |         location = packageBrowserField[location]; | ||
|  |       } | ||
|  |       browserMapCache.set(location, packageBrowserField); | ||
|  |     } | ||
|  | 
 | ||
|  |     if (hasPackageEntry && !preserveSymlinks) { | ||
|  |       const exists = await fileExists(location); | ||
|  |       if (exists) { | ||
|  |         location = await realpath(location); | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     idToPackageInfo.set(location, packageInfo); | ||
|  | 
 | ||
|  |     if (hasPackageEntry) { | ||
|  |       if (importeeIsBuiltin && preferBuiltins) { | ||
|  |         if (!isPreferBuiltinsSet && resolvedWithoutBuiltins && resolved !== importee) { | ||
|  |           context.warn( | ||
|  |             `preferring built-in module '${importee}' over local alternative at '${resolvedWithoutBuiltins.location}', pass 'preferBuiltins: false' to disable this behavior or 'preferBuiltins: true' to disable this warning` | ||
|  |           ); | ||
|  |         } | ||
|  |         return false; | ||
|  |       } else if (jail && location.indexOf(path.normalize(jail.trim(path.sep))) !== 0) { | ||
|  |         return null; | ||
|  |       } | ||
|  |     } | ||
|  | 
 | ||
|  |     if (options.modulesOnly && (await fileExists(location))) { | ||
|  |       const code = await readFile$1(location, 'utf-8'); | ||
|  |       if (isModule__default["default"](code)) { | ||
|  |         return { | ||
|  |           id: `${location}${importSuffix}`, | ||
|  |           moduleSideEffects: hasModuleSideEffects(location) | ||
|  |         }; | ||
|  |       } | ||
|  |       return null; | ||
|  |     } | ||
|  |     return { | ||
|  |       id: `${location}${importSuffix}`, | ||
|  |       moduleSideEffects: hasModuleSideEffects(location) | ||
|  |     }; | ||
|  |   }; | ||
|  | 
 | ||
|  |   return { | ||
|  |     name: 'node-resolve', | ||
|  | 
 | ||
|  |     version, | ||
|  | 
 | ||
|  |     buildStart(buildOptions) { | ||
|  |       rollupOptions = buildOptions; | ||
|  | 
 | ||
|  |       for (const warning of warnings) { | ||
|  |         this.warn(warning); | ||
|  |       } | ||
|  | 
 | ||
|  |       ({ preserveSymlinks } = buildOptions); | ||
|  |     }, | ||
|  | 
 | ||
|  |     generateBundle() { | ||
|  |       readCachedFile.clear(); | ||
|  |       isFileCached.clear(); | ||
|  |       isDirCached.clear(); | ||
|  |     }, | ||
|  | 
 | ||
|  |     async resolveId(importee, importer, resolveOptions) { | ||
|  |       if (importee === ES6_BROWSER_EMPTY) { | ||
|  |         return importee; | ||
|  |       } | ||
|  |       // ignore IDs with null character, these belong to other plugins
 | ||
|  |       if (/\0/.test(importee)) return null; | ||
|  | 
 | ||
|  |       if (/\0/.test(importer)) { | ||
|  |         importer = undefined; | ||
|  |       } | ||
|  | 
 | ||
|  |       const resolved = await doResolveId(this, importee, importer, resolveOptions.custom); | ||
|  |       if (resolved) { | ||
|  |         const resolvedResolved = await this.resolve( | ||
|  |           resolved.id, | ||
|  |           importer, | ||
|  |           Object.assign({ skipSelf: true }, resolveOptions) | ||
|  |         ); | ||
|  |         if (resolvedResolved) { | ||
|  |           // Handle plugins that manually make the result external
 | ||
|  |           if (resolvedResolved.external) { | ||
|  |             return false; | ||
|  |           } | ||
|  |           // Allow other plugins to take over resolution. Rollup core will not
 | ||
|  |           // change the id if it corresponds to an existing file
 | ||
|  |           if (resolvedResolved.id !== resolved.id) { | ||
|  |             return resolvedResolved; | ||
|  |           } | ||
|  |           // Pass on meta information added by other plugins
 | ||
|  |           return { ...resolved, meta: resolvedResolved.meta }; | ||
|  |         } | ||
|  |       } | ||
|  |       return resolved; | ||
|  |     }, | ||
|  | 
 | ||
|  |     load(importee) { | ||
|  |       if (importee === ES6_BROWSER_EMPTY) { | ||
|  |         return 'export default {};'; | ||
|  |       } | ||
|  |       return null; | ||
|  |     }, | ||
|  | 
 | ||
|  |     getPackageInfoForId(id) { | ||
|  |       return idToPackageInfo.get(id); | ||
|  |     } | ||
|  |   }; | ||
|  | } | ||
|  | 
 | ||
|  | exports.DEFAULTS = DEFAULTS; | ||
|  | exports["default"] = nodeResolve; | ||
|  | exports.nodeResolve = nodeResolve; |