Spaces:
Sleeping
Sleeping
pythonic-rag-FastAPIReact
/
frontend
/node_modules
/@rollup
/plugin-node-resolve
/dist
/es
/index.js
| import path, { dirname, resolve, extname, normalize, sep } from 'path'; | |
| import builtinList from 'builtin-modules'; | |
| import deepMerge from 'deepmerge'; | |
| import isModule from 'is-module'; | |
| import fs, { realpathSync } from 'fs'; | |
| import { promisify } from 'util'; | |
| import { pathToFileURL, fileURLToPath } from 'url'; | |
| import resolve$1 from 'resolve'; | |
| import { createFilter } from '@rollup/pluginutils'; | |
| const access = promisify(fs.access); | |
| const readFile = promisify(fs.readFile); | |
| const realpath = promisify(fs.realpath); | |
| const stat = promisify(fs.stat); | |
| async function exists(filePath) { | |
| try { | |
| await access(filePath); | |
| return true; | |
| } catch { | |
| return false; | |
| } | |
| } | |
| 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); | |
| // 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 = realpathSync(pkgPath); | |
| } | |
| const pkgRoot = 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 = resolve(pkgRoot, resolved); | |
| } | |
| /* eslint-disable no-param-reassign */ | |
| browser[key] = resolved; | |
| if (key[0] === '.') { | |
| const absoluteKey = resolve(pkgRoot, key); | |
| browser[absoluteKey] = resolved; | |
| if (!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 = 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)) { | |
| internalPackageInfo.hasModuleSideEffects = createFilter(packageSideEffects, 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 */ | |
| const fileExists = promisify(fs.exists); | |
| function isModuleDir(current, moduleDirs) { | |
| return moduleDirs.some((dir) => current.endsWith(dir)); | |
| } | |
| async function findPackageJson(base, moduleDirs) { | |
| const { root } = path.parse(base); | |
| let current = base; | |
| while (current !== root && !isModuleDir(current, moduleDirs)) { | |
| const pkgJsonPath = path.join(current, 'package.json'); | |
| if (await fileExists(pkgJsonPath)) { | |
| const pkgJsonString = fs.readFileSync(pkgJsonPath, 'utf-8'); | |
| return { pkgJson: JSON.parse(pkgJsonString), pkgPath: current, pkgJsonPath }; | |
| } | |
| current = path.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) { | |
| super(createErrorMsg(context, 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 ? pathToFileURL(result.location) : null; | |
| } | |
| const result = await context.resolveId(`${target}${subpath}`, context.pkgURL.href); | |
| return result ? pathToFileURL(result.location) : 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 = 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, 'Invalid import specifier.'); | |
| } | |
| return resolvePackageImportsExports(context, { | |
| matchKey: importSpecifier, | |
| matchObj: imports, | |
| internal: true | |
| }); | |
| } | |
| const resolveImportPath = promisify(resolve$1); | |
| const readFile$1 = promisify(fs.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$1(pkgJsonPath, 'utf-8')); | |
| return { pkgJsonPath, pkgJson }; | |
| } catch (_) { | |
| return null; | |
| } | |
| } | |
| async function resolveId({ | |
| importer, | |
| importSpecifier, | |
| exportConditions, | |
| warn, | |
| 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; | |
| const pkgName = getPackageName(importSpecifier); | |
| 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 resolveId({ | |
| importSpecifier: id, | |
| importer: parent, | |
| exportConditions, | |
| warn, | |
| packageInfoCache, | |
| extensions, | |
| mainFields, | |
| preserveSymlinks, | |
| useBrowserOverrides, | |
| baseDir, | |
| moduleDirectories | |
| }); | |
| } | |
| }); | |
| location = fileURLToPath(resolveResult); | |
| } else if (pkgName) { | |
| // it's a bare import, find the package.json and resolve using package exports if available | |
| const result = await getPackageJson(importer, pkgName, resolveOptions, moduleDirectories); | |
| if (result && result.pkgJson.exports) { | |
| const { pkgJson, pkgJsonPath } = result; | |
| try { | |
| const subpath = | |
| pkgName === importSpecifier ? '.' : `.${importSpecifier.substring(pkgName.length)}`; | |
| const pkgDr = pkgJsonPath.replace('package.json', ''); | |
| const pkgURL = pathToFileURL(pkgDr); | |
| const context = { | |
| importer, | |
| importSpecifier, | |
| moduleDirs: moduleDirectories, | |
| pkgURL, | |
| pkgJsonPath, | |
| conditions: exportConditions | |
| }; | |
| const resolvedPackageExport = await resolvePackageExports( | |
| context, | |
| subpath, | |
| pkgJson.exports | |
| ); | |
| location = fileURLToPath(resolvedPackageExport); | |
| } catch (error) { | |
| if (error instanceof ResolveError) { | |
| return error; | |
| } | |
| throw error; | |
| } | |
| } | |
| } | |
| if (!location) { | |
| // package has no imports or exports, use classic node resolve | |
| try { | |
| location = await resolveImportPath(importSpecifier, resolveOptions); | |
| } catch (error) { | |
| if (error.code !== 'MODULE_NOT_FOUND') { | |
| throw error; | |
| } | |
| return null; | |
| } | |
| } | |
| if (!preserveSymlinks) { | |
| if (await exists(location)) { | |
| location = await realpath(location); | |
| } | |
| } | |
| return { | |
| location, | |
| hasModuleSideEffects, | |
| hasPackageEntry, | |
| packageBrowserField, | |
| packageInfo | |
| }; | |
| } | |
| // Resolve module specifiers in order. Promise resolves to the first module that resolves | |
| // successfully, or the error that resulted from the last attempted module resolution. | |
| async function resolveImportSpecifiers({ | |
| importer, | |
| importSpecifierList, | |
| exportConditions, | |
| warn, | |
| packageInfoCache, | |
| extensions, | |
| mainFields, | |
| preserveSymlinks, | |
| useBrowserOverrides, | |
| baseDir, | |
| moduleDirectories, | |
| rootDir, | |
| ignoreSideEffectsForRoot | |
| }) { | |
| let lastResolveError; | |
| for (let i = 0; i < importSpecifierList.length; i++) { | |
| // eslint-disable-next-line no-await-in-loop | |
| const result = await resolveId({ | |
| importer, | |
| importSpecifier: importSpecifierList[i], | |
| exportConditions, | |
| warn, | |
| packageInfoCache, | |
| extensions, | |
| mainFields, | |
| preserveSymlinks, | |
| useBrowserOverrides, | |
| baseDir, | |
| moduleDirectories, | |
| rootDir, | |
| ignoreSideEffectsForRoot | |
| }); | |
| if (result instanceof ResolveError) { | |
| lastResolveError = result; | |
| } else if (result) { | |
| return result; | |
| } | |
| } | |
| if (lastResolveError) { | |
| // only log the last failed resolve error | |
| warn(lastResolveError); | |
| } | |
| return null; | |
| } | |
| 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 }; | |
| } | |
| /* eslint-disable no-param-reassign, no-shadow, no-undefined */ | |
| const builtins = new Set(builtinList); | |
| 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({}, 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 = 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)); | |
| } | |
| const resolveOnly = options.resolveOnly.map((pattern) => { | |
| if (pattern instanceof RegExp) { | |
| return pattern; | |
| } | |
| const normalized = pattern.replace(/[\\^$*+?.()|[\]{}]/g, '\\$&'); | |
| return new RegExp(`^${normalized}$`); | |
| }); | |
| const browserMapCache = new Map(); | |
| let preserveSymlinks; | |
| return { | |
| name: 'node-resolve', | |
| buildStart(options) { | |
| rollupOptions = options; | |
| for (const warning of warnings) { | |
| this.warn(warning); | |
| } | |
| ({ preserveSymlinks } = options); | |
| }, | |
| generateBundle() { | |
| readCachedFile.clear(); | |
| isFileCached.clear(); | |
| isDirCached.clear(); | |
| }, | |
| async resolveId(importee, importer, opts) { | |
| 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; | |
| } | |
| // strip query params from import | |
| const [importPath, params] = importee.split('?'); | |
| const importSuffix = `${params ? `?${params}` : ''}`; | |
| importee = importPath; | |
| const baseDir = !importer || dedupe(importee) ? rootDir : dirname(importer); | |
| // https://github.com/defunctzombie/package-browser-field-spec | |
| const browser = browserMapCache.get(importer); | |
| if (useBrowserOverrides && browser) { | |
| const resolvedImportee = resolve(baseDir, importee); | |
| if (browser[importee] === false || browser[resolvedImportee] === false) { | |
| return ES6_BROWSER_EMPTY; | |
| } | |
| const browserImportee = | |
| 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 = resolve(baseDir, importee); | |
| isRelativeImport = true; | |
| } | |
| if ( | |
| !isRelativeImport && | |
| resolveOnly.length && | |
| !resolveOnly.some((pattern) => pattern.test(id)) | |
| ) { | |
| if (normalizeInput(rollupOptions.input).includes(importee)) { | |
| return null; | |
| } | |
| return false; | |
| } | |
| const importSpecifierList = []; | |
| 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. If we don't find anything, we try resolving it as we | |
| // got it. | |
| importSpecifierList.push(`./${importee}`); | |
| } | |
| const importeeIsBuiltin = builtins.has(importee); | |
| if (importeeIsBuiltin) { | |
| // The `resolve` library will not resolve packages with the same | |
| // name as a node built-in module. If we're resolving something | |
| // that's a builtin, and we don't prefer to find built-ins, we | |
| // first try to look up a local module with that name. If we don't | |
| // find anything, we resolve the builtin which just returns back | |
| // the built-in's name. | |
| 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)); | |
| } | |
| } | |
| } | |
| importSpecifierList.push(importee); | |
| const warn = (...args) => this.warn(...args); | |
| const isRequire = | |
| opts && opts.custom && opts.custom['node-resolve'] && opts.custom['node-resolve'].isRequire; | |
| const exportConditions = isRequire ? conditionsCjs : conditionsEsm; | |
| const resolvedWithoutBuiltins = await resolveImportSpecifiers({ | |
| importer, | |
| importSpecifierList, | |
| exportConditions, | |
| warn, | |
| packageInfoCache, | |
| extensions, | |
| mainFields, | |
| preserveSymlinks, | |
| useBrowserOverrides, | |
| baseDir, | |
| moduleDirectories, | |
| rootDir, | |
| ignoreSideEffectsForRoot | |
| }); | |
| 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 ES6_BROWSER_EMPTY; | |
| } | |
| location = packageBrowserField[location]; | |
| } | |
| browserMapCache.set(location, packageBrowserField); | |
| } | |
| if (hasPackageEntry && !preserveSymlinks) { | |
| const fileExists = await exists(location); | |
| if (fileExists) { | |
| location = await realpath(location); | |
| } | |
| } | |
| idToPackageInfo.set(location, packageInfo); | |
| if (hasPackageEntry) { | |
| if (importeeIsBuiltin && preferBuiltins) { | |
| if (!isPreferBuiltinsSet && resolvedWithoutBuiltins && resolved !== importee) { | |
| this.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(normalize(jail.trim(sep))) !== 0) { | |
| return null; | |
| } | |
| } | |
| if (options.modulesOnly && (await exists(location))) { | |
| const code = await readFile(location, 'utf-8'); | |
| if (isModule(code)) { | |
| return { | |
| id: `${location}${importSuffix}`, | |
| moduleSideEffects: hasModuleSideEffects(location) | |
| }; | |
| } | |
| return null; | |
| } | |
| const result = { | |
| id: `${location}${importSuffix}`, | |
| moduleSideEffects: hasModuleSideEffects(location) | |
| }; | |
| return result; | |
| }, | |
| load(importee) { | |
| if (importee === ES6_BROWSER_EMPTY) { | |
| return 'export default {};'; | |
| } | |
| return null; | |
| }, | |
| getPackageInfoForId(id) { | |
| return idToPackageInfo.get(id); | |
| } | |
| }; | |
| } | |
| export default nodeResolve; | |
| export { DEFAULTS, nodeResolve }; | |