rollup-plugin-node-resolve
Advanced tools
Comparing version 4.2.4 to 5.0.0
# rollup-plugin-node-resolve changelog | ||
## 5.0.0 (2019-05-15) | ||
* Replace bublé with babel, update dependencies ([#216](https://github.com/rollup/rollup-plugin-node-resolve/pull/216) by @mecurc) | ||
* Handle module side-effects ([#219](https://github.com/rollup/rollup-plugin-node-resolve/pull/219) by @lukastaegert) | ||
### Breaking Changes | ||
* Requires at least rollup@1.11.0 to work (v1.12.0 for module side-effects to be respected) | ||
* If used with rollup-plugin-commonjs, it should be at least v10.0.0 | ||
## 4.2.4 (2019-05-11) | ||
@@ -4,0 +14,0 @@ |
@@ -6,246 +6,350 @@ 'use strict'; | ||
var path = require('path'); | ||
var builtins = _interopDefault(require('builtin-modules')); | ||
var builtinList = _interopDefault(require('builtin-modules')); | ||
var resolveId = _interopDefault(require('resolve')); | ||
var isModule = _interopDefault(require('is-module')); | ||
var fs = _interopDefault(require('fs')); | ||
var rollupPluginutils = require('rollup-pluginutils'); | ||
var ES6_BROWSER_EMPTY = path.resolve( __dirname, '../src/empty.js' ); | ||
// It is important that .mjs occur before .js so that Rollup will interpret npm modules | ||
function _slicedToArray(arr, i) { | ||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); | ||
} | ||
function _arrayWithHoles(arr) { | ||
if (Array.isArray(arr)) return arr; | ||
} | ||
function _iterableToArrayLimit(arr, i) { | ||
var _arr = []; | ||
var _n = true; | ||
var _d = false; | ||
var _e = undefined; | ||
try { | ||
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { | ||
_arr.push(_s.value); | ||
if (i && _arr.length === i) break; | ||
} | ||
} catch (err) { | ||
_d = true; | ||
_e = err; | ||
} finally { | ||
try { | ||
if (!_n && _i["return"] != null) _i["return"](); | ||
} finally { | ||
if (_d) throw _e; | ||
} | ||
} | ||
return _arr; | ||
} | ||
function _nonIterableRest() { | ||
throw new TypeError("Invalid attempt to destructure non-iterable instance"); | ||
} | ||
var peerDependencies = { | ||
rollup: ">=1.11.0" | ||
}; | ||
const builtins = builtinList.reduce((set, id) => set.add(id), new Set()); | ||
const ES6_BROWSER_EMPTY = path.resolve(__dirname, '../src/empty.js'); // It is important that .mjs occur before .js so that Rollup will interpret npm modules | ||
// which deploy both ESM .mjs and CommonJS .js files as ESM. | ||
var DEFAULT_EXTS = [ '.mjs', '.js', '.json', '.node' ]; | ||
var readFileAsync = function (file) { return new Promise(function (fulfil, reject) { return fs.readFile(file, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; | ||
var statAsync = function (file) { return new Promise(function (fulfil, reject) { return fs.stat(file, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; | ||
var cache = function (fn) { | ||
var cache = new Map(); | ||
var wrapped = function (param, done) { | ||
if (cache.has(param) === false) { | ||
cache.set(param, fn(param).catch(function (err) { | ||
cache.delete(param); | ||
throw err; | ||
})); | ||
} | ||
return cache.get(param).then(function (result) { return done(null, result); }, done); | ||
}; | ||
wrapped.clear = function () { return cache.clear(); }; | ||
return wrapped; | ||
const DEFAULT_EXTS = ['.mjs', '.js', '.json', '.node']; | ||
const readFileAsync = file => new Promise((fulfil, reject) => fs.readFile(file, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
const statAsync = file => new Promise((fulfil, reject) => fs.stat(file, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
const cache = fn => { | ||
const cache = new Map(); | ||
const wrapped = (param, done) => { | ||
if (cache.has(param) === false) { | ||
cache.set(param, fn(param).catch(err => { | ||
cache.delete(param); | ||
throw err; | ||
})); | ||
} | ||
return cache.get(param).then(result => done(null, result), done); | ||
}; | ||
wrapped.clear = () => cache.clear(); | ||
return wrapped; | ||
}; | ||
var ignoreENOENT = function (err) { | ||
if (err.code === 'ENOENT') { return false; } | ||
throw err; | ||
const ignoreENOENT = err => { | ||
if (err.code === 'ENOENT') return false; | ||
throw err; | ||
}; | ||
var readFileCached = cache(readFileAsync); | ||
var isDirCached = cache(function (file) { return statAsync(file).then(function (stat) { return stat.isDirectory(); }, ignoreENOENT); }); | ||
var isFileCached = cache(function (file) { return statAsync(file).then(function (stat) { return stat.isFile(); }, ignoreENOENT); }); | ||
function getMainFields (options) { | ||
var mainFields; | ||
if (options.mainFields) { | ||
if ('module' in options || 'main' in options || 'jsnext' in options) { | ||
throw new Error("node-resolve: do not use deprecated 'module', 'main', 'jsnext' options with 'mainFields'"); | ||
} | ||
mainFields = options.mainFields; | ||
} else { | ||
mainFields = []; | ||
[['module', 'module', true], ['jsnext', 'jsnext:main', false], ['main', 'main', true]].forEach(function (ref) { | ||
var option = ref[0]; | ||
var field = ref[1]; | ||
var defaultIncluded = ref[2]; | ||
const readFileCached = cache(readFileAsync); | ||
const isDirCached = cache(file => statAsync(file).then(stat => stat.isDirectory(), ignoreENOENT)); | ||
const isFileCached = cache(file => statAsync(file).then(stat => stat.isFile(), ignoreENOENT)); | ||
if (option in options) { | ||
// eslint-disable-next-line no-console | ||
console.warn(("node-resolve: setting options." + option + " is deprecated, please override options.mainFields instead")); | ||
if (options[option]) { | ||
mainFields.push(field); | ||
} | ||
} else if (defaultIncluded) { | ||
mainFields.push(field); | ||
} | ||
}); | ||
} | ||
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 getMainFields(options) { | ||
let mainFields; | ||
if (options.mainFields) { | ||
if ('module' in options || 'main' in options || 'jsnext' in options) { | ||
throw new Error(`node-resolve: do not use deprecated 'module', 'main', 'jsnext' options with 'mainFields'`); | ||
} | ||
mainFields = options.mainFields; | ||
} else { | ||
mainFields = []; | ||
[['module', 'module', true], ['jsnext', 'jsnext:main', false], ['main', 'main', true]].forEach(([option, field, defaultIncluded]) => { | ||
if (option in options) { | ||
// eslint-disable-next-line no-console | ||
console.warn(`node-resolve: setting options.${option} is deprecated, please override options.mainFields instead`); | ||
if (options[option]) { | ||
mainFields.push(field); | ||
} | ||
} else if (defaultIncluded) { | ||
mainFields.push(field); | ||
} | ||
}); | ||
} | ||
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; | ||
} | ||
var resolveIdAsync = function (file, opts) { return new Promise(function (fulfil, reject) { return resolveId(file, opts, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; | ||
const alwaysNull = () => null; | ||
function nodeResolve ( options ) { | ||
if ( options === void 0 ) options = {}; | ||
const resolveIdAsync = (file, opts) => new Promise((fulfil, reject) => resolveId(file, opts, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
var mainFields = getMainFields(options); | ||
var useBrowserOverrides = mainFields.indexOf('browser') !== -1; | ||
var dedupe = options.dedupe || []; | ||
var isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; | ||
var preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; | ||
var customResolveOptions = options.customResolveOptions || {}; | ||
var jail = options.jail; | ||
var only = Array.isArray(options.only) | ||
? options.only.map(function (o) { return o instanceof RegExp | ||
? o | ||
: new RegExp('^' + String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&') + '$'); } | ||
) | ||
: null; | ||
var browserMapCache = {}; | ||
function nodeResolve(options = {}) { | ||
const mainFields = getMainFields(options); | ||
const useBrowserOverrides = mainFields.indexOf('browser') !== -1; | ||
const dedupe = options.dedupe || []; | ||
const isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; | ||
const preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; | ||
const customResolveOptions = options.customResolveOptions || {}; | ||
const jail = options.jail; | ||
const only = Array.isArray(options.only) ? options.only.map(o => o instanceof RegExp ? o : new RegExp('^' + String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&') + '$')) : null; | ||
const browserMapCache = {}; | ||
if ( options.skip ) { | ||
throw new Error( 'options.skip is no longer supported — you should use the main Rollup `external` option instead' ); | ||
} | ||
if (options.skip) { | ||
throw new Error('options.skip is no longer supported — you should use the main Rollup `external` option instead'); | ||
} | ||
var preserveSymlinks; | ||
const extensions = options.extensions || DEFAULT_EXTS; | ||
const packageInfoCache = new Map(); | ||
return { | ||
name: 'node-resolve', | ||
function getCachedPackageInfo(pkg, pkgPath) { | ||
if (packageInfoCache.has(pkgPath)) { | ||
return packageInfoCache.get(pkgPath); | ||
} | ||
options: function options ( options$1 ) { | ||
preserveSymlinks = options$1.preserveSymlinks; | ||
}, | ||
const pkgRoot = path.dirname(pkgPath); | ||
let overriddenMain = false; | ||
generateBundle: function generateBundle () { | ||
readFileCached.clear(); | ||
isFileCached.clear(); | ||
isDirCached.clear(); | ||
}, | ||
for (let i = 0; i < mainFields.length; i++) { | ||
const field = mainFields[i]; | ||
resolveId: function resolveId ( importee, importer ) { | ||
var this$1 = this; | ||
if (typeof pkg[field] === 'string') { | ||
pkg['main'] = pkg[field]; | ||
overriddenMain = true; | ||
break; | ||
} | ||
} | ||
if ( /\0/.test( importee ) ) { return null; } // ignore IDs with null character, these belong to other plugins | ||
const packageInfo = { | ||
cachedPkg: pkg, | ||
hasModuleSideEffects: alwaysNull, | ||
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]; | ||
var basedir = importer ? path.dirname( importer ) : process.cwd(); | ||
if (resolved && resolved[0] === '.') { | ||
resolved = path.resolve(pkgRoot, resolved); | ||
} | ||
if (dedupe.indexOf(importee) !== -1) { | ||
importee = path.join(process.cwd(), 'node_modules', importee); | ||
} | ||
browser[key] = resolved; | ||
// https://github.com/defunctzombie/package-browser-field-spec | ||
if (useBrowserOverrides && browserMapCache[importer]) { | ||
var resolvedImportee = path.resolve( basedir, importee ); | ||
var browser = browserMapCache[importer]; | ||
if (browser[importee] === false || browser[resolvedImportee] === false) { | ||
return ES6_BROWSER_EMPTY; | ||
} | ||
if (browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']) { | ||
importee = browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']; | ||
} | ||
} | ||
if (key[0] === '.') { | ||
const absoluteKey = path.resolve(pkgRoot, key); | ||
browser[absoluteKey] = resolved; | ||
var parts = importee.split( /[/\\]/ ); | ||
var id = parts.shift(); | ||
if (!path.extname(key)) { | ||
extensions.reduce((browser, ext) => { | ||
browser[absoluteKey + ext] = browser[key]; | ||
return browser; | ||
}, browser); | ||
} | ||
} | ||
if ( id[0] === '@' && parts.length ) { | ||
// scoped packages | ||
id += "/" + (parts.shift()); | ||
} else if ( id[0] === '.' ) { | ||
// an import relative to the parent dir of the importer | ||
id = path.resolve( basedir, importee ); | ||
} | ||
return browser; | ||
}, {}) | ||
}; | ||
const packageSideEffects = pkg['sideEffects']; | ||
if (only && !only.some(function (pattern) { return pattern.test(id); })) { return null; } | ||
if (typeof packageSideEffects === 'boolean') { | ||
packageInfo.hasModuleSideEffects = () => packageSideEffects; | ||
} else if (Array.isArray(packageSideEffects)) { | ||
const filter = rollupPluginutils.createFilter(packageSideEffects, null, { | ||
resolve: pkgRoot | ||
}); | ||
var disregardResult = false; | ||
var packageBrowserField = false; | ||
var extensions = options.extensions || DEFAULT_EXTS; | ||
packageInfo.hasModuleSideEffects = id => !filter(id); | ||
} | ||
var resolveOptions = { | ||
basedir: basedir, | ||
packageFilter: function packageFilter ( pkg, pkgPath ) { | ||
var pkgRoot = path.dirname( pkgPath ); | ||
if (useBrowserOverrides && typeof pkg[ 'browser' ] === 'object') { | ||
packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce(function (browser, key) { | ||
var resolved = pkg[ 'browser' ][ key ]; | ||
if (resolved && resolved[0] === '.') { | ||
resolved = path.resolve( pkgRoot, pkg[ 'browser' ][ key ] ); | ||
} | ||
browser[ key ] = resolved; | ||
if ( key[0] === '.' ) { | ||
var absoluteKey = path.resolve( pkgRoot, key ); | ||
browser[ absoluteKey ] = resolved; | ||
if ( !path.extname(key) ) { | ||
extensions.reduce( function ( browser, ext ) { | ||
browser[ absoluteKey + ext ] = browser[ key ]; | ||
return browser; | ||
}, browser ); | ||
} | ||
} | ||
return browser; | ||
}, {}); | ||
} | ||
packageInfoCache.set(pkgPath, packageInfo); | ||
return packageInfo; | ||
} | ||
var overriddenMain = false; | ||
for ( var i = 0; i < mainFields.length; i++ ) { | ||
var field = mainFields[i]; | ||
if ( typeof pkg[ field ] === 'string' ) { | ||
pkg[ 'main' ] = pkg[ field ]; | ||
overriddenMain = true; | ||
break; | ||
} | ||
} | ||
if ( overriddenMain === false && mainFields.indexOf( 'main' ) === -1 ) { | ||
disregardResult = true; | ||
} | ||
return pkg; | ||
}, | ||
readFile: readFileCached, | ||
isFile: isFileCached, | ||
isDirectory: isDirCached, | ||
extensions: extensions | ||
}; | ||
let preserveSymlinks; | ||
return { | ||
name: 'node-resolve', | ||
if (preserveSymlinks !== undefined) { | ||
resolveOptions.preserveSymlinks = preserveSymlinks; | ||
} | ||
options(options) { | ||
preserveSymlinks = options.preserveSymlinks; | ||
return resolveIdAsync( | ||
importee, | ||
Object.assign( resolveOptions, customResolveOptions ) | ||
) | ||
.then(function (resolved) { | ||
if ( resolved && useBrowserOverrides && packageBrowserField ) { | ||
if ( packageBrowserField.hasOwnProperty(resolved) ) { | ||
if (!packageBrowserField[resolved]) { | ||
browserMapCache[resolved] = packageBrowserField; | ||
return ES6_BROWSER_EMPTY; | ||
} | ||
resolved = packageBrowserField[ resolved ]; | ||
} | ||
browserMapCache[resolved] = packageBrowserField; | ||
} | ||
const _this$meta$rollupVers = this.meta.rollupVersion.split('.').map(Number), | ||
_this$meta$rollupVers2 = _slicedToArray(_this$meta$rollupVers, 2), | ||
major = _this$meta$rollupVers2[0], | ||
minor = _this$meta$rollupVers2[1]; | ||
if ( !disregardResult ) { | ||
if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { | ||
resolved = fs.realpathSync( resolved ); | ||
} | ||
const minVersion = peerDependencies.rollup.slice(2); | ||
if ( ~builtins.indexOf( resolved ) ) { | ||
return null; | ||
} else if ( ~builtins.indexOf( importee ) && preferBuiltins ) { | ||
if ( !isPreferBuiltinsSet ) { | ||
this$1.warn( | ||
"preferring built-in module '" + importee + "' over local alternative " + | ||
"at '" + resolved + "', pass 'preferBuiltins: false' to disable this " + | ||
"behavior or 'preferBuiltins: true' to disable this warning" | ||
); | ||
} | ||
return null; | ||
} else if ( jail && resolved.indexOf( path.normalize( jail.trim( path.sep ) ) ) !== 0 ) { | ||
return null; | ||
} | ||
} | ||
const _minVersion$split$map = minVersion.split('.').map(Number), | ||
_minVersion$split$map2 = _slicedToArray(_minVersion$split$map, 2), | ||
minMajor = _minVersion$split$map2[0], | ||
minMinor = _minVersion$split$map2[1]; | ||
if ( resolved && options.modulesOnly ) { | ||
return readFileAsync( resolved, 'utf-8').then(function (code) { return isModule( code ) ? resolved : null; }); | ||
} else { | ||
return resolved; | ||
} | ||
}) | ||
.catch(function () { return null; }); | ||
} | ||
}; | ||
if (major < minMajor || major === minMajor && minor < minMinor) { | ||
this.error(`Insufficient Rollup version: "rollup-plugin-node-resolve" requires at least rollup@${minVersion} but found rollup@${this.meta.rollupVersion}.`); | ||
} | ||
}, | ||
generateBundle() { | ||
readFileCached.clear(); | ||
isFileCached.clear(); | ||
isDirCached.clear(); | ||
}, | ||
resolveId(importee, importer) { | ||
if (/\0/.test(importee)) return null; // ignore IDs with null character, these belong to other plugins | ||
const basedir = importer ? path.dirname(importer) : process.cwd(); | ||
if (dedupe.indexOf(importee) !== -1) { | ||
importee = path.join(process.cwd(), 'node_modules', importee); | ||
} // https://github.com/defunctzombie/package-browser-field-spec | ||
if (useBrowserOverrides && browserMapCache[importer]) { | ||
const resolvedImportee = path.resolve(basedir, importee); | ||
const browser = browserMapCache[importer]; | ||
if (browser[importee] === false || browser[resolvedImportee] === false) { | ||
return ES6_BROWSER_EMPTY; | ||
} | ||
if (browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']) { | ||
importee = browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']; | ||
} | ||
} | ||
const parts = importee.split(/[/\\]/); | ||
let id = parts.shift(); | ||
if (id[0] === '@' && parts.length) { | ||
// scoped packages | ||
id += `/${parts.shift()}`; | ||
} else if (id[0] === '.') { | ||
// an import relative to the parent dir of the importer | ||
id = path.resolve(basedir, importee); | ||
} | ||
if (only && !only.some(pattern => pattern.test(id))) return null; | ||
let hasModuleSideEffects = alwaysNull; | ||
let hasPackageEntry = true; | ||
let packageBrowserField = false; | ||
const resolveOptions = { | ||
basedir, | ||
packageFilter(pkg, pkgPath) { | ||
let cachedPkg; | ||
var _getCachedPackageInfo = getCachedPackageInfo(pkg, pkgPath); | ||
cachedPkg = _getCachedPackageInfo.cachedPkg; | ||
hasModuleSideEffects = _getCachedPackageInfo.hasModuleSideEffects; | ||
hasPackageEntry = _getCachedPackageInfo.hasPackageEntry; | ||
packageBrowserField = _getCachedPackageInfo.packageBrowserField; | ||
return cachedPkg; | ||
}, | ||
readFile: readFileCached, | ||
isFile: isFileCached, | ||
isDirectory: isDirCached, | ||
extensions: extensions | ||
}; | ||
if (preserveSymlinks !== undefined) { | ||
resolveOptions.preserveSymlinks = preserveSymlinks; | ||
} | ||
return resolveIdAsync(importee, Object.assign(resolveOptions, customResolveOptions)).then(resolved => { | ||
if (resolved && packageBrowserField) { | ||
if (packageBrowserField.hasOwnProperty(resolved)) { | ||
if (!packageBrowserField[resolved]) { | ||
browserMapCache[resolved] = packageBrowserField; | ||
return ES6_BROWSER_EMPTY; | ||
} | ||
resolved = packageBrowserField[resolved]; | ||
} | ||
browserMapCache[resolved] = packageBrowserField; | ||
} | ||
if (hasPackageEntry) { | ||
if (!preserveSymlinks && resolved && fs.existsSync(resolved)) { | ||
resolved = fs.realpathSync(resolved); | ||
} | ||
if (builtins.has(resolved)) { | ||
return null; | ||
} else if (builtins.has(importee) && preferBuiltins) { | ||
if (!isPreferBuiltinsSet) { | ||
this.warn(`preferring built-in module '${importee}' over local alternative ` + `at '${resolved}', pass 'preferBuiltins: false' to disable this ` + `behavior or 'preferBuiltins: true' to disable this warning`); | ||
} | ||
return null; | ||
} else if (jail && resolved.indexOf(path.normalize(jail.trim(path.sep))) !== 0) { | ||
return null; | ||
} | ||
} | ||
if (resolved && options.modulesOnly) { | ||
return readFileAsync(resolved, 'utf-8').then(code => isModule(code) ? { | ||
id: resolved, | ||
moduleSideEffects: hasModuleSideEffects(resolved) | ||
} : null); | ||
} else { | ||
return { | ||
id: resolved, | ||
moduleSideEffects: hasModuleSideEffects(resolved) | ||
}; | ||
} | ||
}).catch(() => null); | ||
} | ||
}; | ||
} | ||
module.exports = nodeResolve; |
import { dirname, join, resolve, normalize, sep, extname } from 'path'; | ||
import builtins from 'builtin-modules'; | ||
import builtinList from 'builtin-modules'; | ||
import resolveId from 'resolve'; | ||
import isModule from 'is-module'; | ||
import fs from 'fs'; | ||
import { createFilter } from 'rollup-pluginutils'; | ||
var ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' ); | ||
// It is important that .mjs occur before .js so that Rollup will interpret npm modules | ||
function _slicedToArray(arr, i) { | ||
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); | ||
} | ||
function _arrayWithHoles(arr) { | ||
if (Array.isArray(arr)) return arr; | ||
} | ||
function _iterableToArrayLimit(arr, i) { | ||
var _arr = []; | ||
var _n = true; | ||
var _d = false; | ||
var _e = undefined; | ||
try { | ||
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { | ||
_arr.push(_s.value); | ||
if (i && _arr.length === i) break; | ||
} | ||
} catch (err) { | ||
_d = true; | ||
_e = err; | ||
} finally { | ||
try { | ||
if (!_n && _i["return"] != null) _i["return"](); | ||
} finally { | ||
if (_d) throw _e; | ||
} | ||
} | ||
return _arr; | ||
} | ||
function _nonIterableRest() { | ||
throw new TypeError("Invalid attempt to destructure non-iterable instance"); | ||
} | ||
var peerDependencies = { | ||
rollup: ">=1.11.0" | ||
}; | ||
const builtins = builtinList.reduce((set, id) => set.add(id), new Set()); | ||
const ES6_BROWSER_EMPTY = resolve(__dirname, '../src/empty.js'); // It is important that .mjs occur before .js so that Rollup will interpret npm modules | ||
// which deploy both ESM .mjs and CommonJS .js files as ESM. | ||
var DEFAULT_EXTS = [ '.mjs', '.js', '.json', '.node' ]; | ||
var readFileAsync = function (file) { return new Promise(function (fulfil, reject) { return fs.readFile(file, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; | ||
var statAsync = function (file) { return new Promise(function (fulfil, reject) { return fs.stat(file, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; | ||
var cache = function (fn) { | ||
var cache = new Map(); | ||
var wrapped = function (param, done) { | ||
if (cache.has(param) === false) { | ||
cache.set(param, fn(param).catch(function (err) { | ||
cache.delete(param); | ||
throw err; | ||
})); | ||
} | ||
return cache.get(param).then(function (result) { return done(null, result); }, done); | ||
}; | ||
wrapped.clear = function () { return cache.clear(); }; | ||
return wrapped; | ||
const DEFAULT_EXTS = ['.mjs', '.js', '.json', '.node']; | ||
const readFileAsync = file => new Promise((fulfil, reject) => fs.readFile(file, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
const statAsync = file => new Promise((fulfil, reject) => fs.stat(file, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
const cache = fn => { | ||
const cache = new Map(); | ||
const wrapped = (param, done) => { | ||
if (cache.has(param) === false) { | ||
cache.set(param, fn(param).catch(err => { | ||
cache.delete(param); | ||
throw err; | ||
})); | ||
} | ||
return cache.get(param).then(result => done(null, result), done); | ||
}; | ||
wrapped.clear = () => cache.clear(); | ||
return wrapped; | ||
}; | ||
var ignoreENOENT = function (err) { | ||
if (err.code === 'ENOENT') { return false; } | ||
throw err; | ||
const ignoreENOENT = err => { | ||
if (err.code === 'ENOENT') return false; | ||
throw err; | ||
}; | ||
var readFileCached = cache(readFileAsync); | ||
var isDirCached = cache(function (file) { return statAsync(file).then(function (stat) { return stat.isDirectory(); }, ignoreENOENT); }); | ||
var isFileCached = cache(function (file) { return statAsync(file).then(function (stat) { return stat.isFile(); }, ignoreENOENT); }); | ||
function getMainFields (options) { | ||
var mainFields; | ||
if (options.mainFields) { | ||
if ('module' in options || 'main' in options || 'jsnext' in options) { | ||
throw new Error("node-resolve: do not use deprecated 'module', 'main', 'jsnext' options with 'mainFields'"); | ||
} | ||
mainFields = options.mainFields; | ||
} else { | ||
mainFields = []; | ||
[['module', 'module', true], ['jsnext', 'jsnext:main', false], ['main', 'main', true]].forEach(function (ref) { | ||
var option = ref[0]; | ||
var field = ref[1]; | ||
var defaultIncluded = ref[2]; | ||
const readFileCached = cache(readFileAsync); | ||
const isDirCached = cache(file => statAsync(file).then(stat => stat.isDirectory(), ignoreENOENT)); | ||
const isFileCached = cache(file => statAsync(file).then(stat => stat.isFile(), ignoreENOENT)); | ||
if (option in options) { | ||
// eslint-disable-next-line no-console | ||
console.warn(("node-resolve: setting options." + option + " is deprecated, please override options.mainFields instead")); | ||
if (options[option]) { | ||
mainFields.push(field); | ||
} | ||
} else if (defaultIncluded) { | ||
mainFields.push(field); | ||
} | ||
}); | ||
} | ||
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 getMainFields(options) { | ||
let mainFields; | ||
if (options.mainFields) { | ||
if ('module' in options || 'main' in options || 'jsnext' in options) { | ||
throw new Error(`node-resolve: do not use deprecated 'module', 'main', 'jsnext' options with 'mainFields'`); | ||
} | ||
mainFields = options.mainFields; | ||
} else { | ||
mainFields = []; | ||
[['module', 'module', true], ['jsnext', 'jsnext:main', false], ['main', 'main', true]].forEach(([option, field, defaultIncluded]) => { | ||
if (option in options) { | ||
// eslint-disable-next-line no-console | ||
console.warn(`node-resolve: setting options.${option} is deprecated, please override options.mainFields instead`); | ||
if (options[option]) { | ||
mainFields.push(field); | ||
} | ||
} else if (defaultIncluded) { | ||
mainFields.push(field); | ||
} | ||
}); | ||
} | ||
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; | ||
} | ||
var resolveIdAsync = function (file, opts) { return new Promise(function (fulfil, reject) { return resolveId(file, opts, function (err, contents) { return err ? reject(err) : fulfil(contents); }); }); }; | ||
const alwaysNull = () => null; | ||
function nodeResolve ( options ) { | ||
if ( options === void 0 ) options = {}; | ||
const resolveIdAsync = (file, opts) => new Promise((fulfil, reject) => resolveId(file, opts, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
var mainFields = getMainFields(options); | ||
var useBrowserOverrides = mainFields.indexOf('browser') !== -1; | ||
var dedupe = options.dedupe || []; | ||
var isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; | ||
var preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; | ||
var customResolveOptions = options.customResolveOptions || {}; | ||
var jail = options.jail; | ||
var only = Array.isArray(options.only) | ||
? options.only.map(function (o) { return o instanceof RegExp | ||
? o | ||
: new RegExp('^' + String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&') + '$'); } | ||
) | ||
: null; | ||
var browserMapCache = {}; | ||
function nodeResolve(options = {}) { | ||
const mainFields = getMainFields(options); | ||
const useBrowserOverrides = mainFields.indexOf('browser') !== -1; | ||
const dedupe = options.dedupe || []; | ||
const isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; | ||
const preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; | ||
const customResolveOptions = options.customResolveOptions || {}; | ||
const jail = options.jail; | ||
const only = Array.isArray(options.only) ? options.only.map(o => o instanceof RegExp ? o : new RegExp('^' + String(o).replace(/[\\^$*+?.()|[\]{}]/g, '\\$&') + '$')) : null; | ||
const browserMapCache = {}; | ||
if ( options.skip ) { | ||
throw new Error( 'options.skip is no longer supported — you should use the main Rollup `external` option instead' ); | ||
} | ||
if (options.skip) { | ||
throw new Error('options.skip is no longer supported — you should use the main Rollup `external` option instead'); | ||
} | ||
var preserveSymlinks; | ||
const extensions = options.extensions || DEFAULT_EXTS; | ||
const packageInfoCache = new Map(); | ||
return { | ||
name: 'node-resolve', | ||
function getCachedPackageInfo(pkg, pkgPath) { | ||
if (packageInfoCache.has(pkgPath)) { | ||
return packageInfoCache.get(pkgPath); | ||
} | ||
options: function options ( options$1 ) { | ||
preserveSymlinks = options$1.preserveSymlinks; | ||
}, | ||
const pkgRoot = dirname(pkgPath); | ||
let overriddenMain = false; | ||
generateBundle: function generateBundle () { | ||
readFileCached.clear(); | ||
isFileCached.clear(); | ||
isDirCached.clear(); | ||
}, | ||
for (let i = 0; i < mainFields.length; i++) { | ||
const field = mainFields[i]; | ||
resolveId: function resolveId ( importee, importer ) { | ||
var this$1 = this; | ||
if (typeof pkg[field] === 'string') { | ||
pkg['main'] = pkg[field]; | ||
overriddenMain = true; | ||
break; | ||
} | ||
} | ||
if ( /\0/.test( importee ) ) { return null; } // ignore IDs with null character, these belong to other plugins | ||
const packageInfo = { | ||
cachedPkg: pkg, | ||
hasModuleSideEffects: alwaysNull, | ||
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]; | ||
var basedir = importer ? dirname( importer ) : process.cwd(); | ||
if (resolved && resolved[0] === '.') { | ||
resolved = resolve(pkgRoot, resolved); | ||
} | ||
if (dedupe.indexOf(importee) !== -1) { | ||
importee = join(process.cwd(), 'node_modules', importee); | ||
} | ||
browser[key] = resolved; | ||
// https://github.com/defunctzombie/package-browser-field-spec | ||
if (useBrowserOverrides && browserMapCache[importer]) { | ||
var resolvedImportee = resolve( basedir, importee ); | ||
var browser = browserMapCache[importer]; | ||
if (browser[importee] === false || browser[resolvedImportee] === false) { | ||
return ES6_BROWSER_EMPTY; | ||
} | ||
if (browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']) { | ||
importee = browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']; | ||
} | ||
} | ||
if (key[0] === '.') { | ||
const absoluteKey = resolve(pkgRoot, key); | ||
browser[absoluteKey] = resolved; | ||
var parts = importee.split( /[/\\]/ ); | ||
var id = parts.shift(); | ||
if (!extname(key)) { | ||
extensions.reduce((browser, ext) => { | ||
browser[absoluteKey + ext] = browser[key]; | ||
return browser; | ||
}, browser); | ||
} | ||
} | ||
if ( id[0] === '@' && parts.length ) { | ||
// scoped packages | ||
id += "/" + (parts.shift()); | ||
} else if ( id[0] === '.' ) { | ||
// an import relative to the parent dir of the importer | ||
id = resolve( basedir, importee ); | ||
} | ||
return browser; | ||
}, {}) | ||
}; | ||
const packageSideEffects = pkg['sideEffects']; | ||
if (only && !only.some(function (pattern) { return pattern.test(id); })) { return null; } | ||
if (typeof packageSideEffects === 'boolean') { | ||
packageInfo.hasModuleSideEffects = () => packageSideEffects; | ||
} else if (Array.isArray(packageSideEffects)) { | ||
const filter = createFilter(packageSideEffects, null, { | ||
resolve: pkgRoot | ||
}); | ||
var disregardResult = false; | ||
var packageBrowserField = false; | ||
var extensions = options.extensions || DEFAULT_EXTS; | ||
packageInfo.hasModuleSideEffects = id => !filter(id); | ||
} | ||
var resolveOptions = { | ||
basedir: basedir, | ||
packageFilter: function packageFilter ( pkg, pkgPath ) { | ||
var pkgRoot = dirname( pkgPath ); | ||
if (useBrowserOverrides && typeof pkg[ 'browser' ] === 'object') { | ||
packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce(function (browser, key) { | ||
var resolved = pkg[ 'browser' ][ key ]; | ||
if (resolved && resolved[0] === '.') { | ||
resolved = resolve( pkgRoot, pkg[ 'browser' ][ key ] ); | ||
} | ||
browser[ key ] = resolved; | ||
if ( key[0] === '.' ) { | ||
var absoluteKey = resolve( pkgRoot, key ); | ||
browser[ absoluteKey ] = resolved; | ||
if ( !extname(key) ) { | ||
extensions.reduce( function ( browser, ext ) { | ||
browser[ absoluteKey + ext ] = browser[ key ]; | ||
return browser; | ||
}, browser ); | ||
} | ||
} | ||
return browser; | ||
}, {}); | ||
} | ||
packageInfoCache.set(pkgPath, packageInfo); | ||
return packageInfo; | ||
} | ||
var overriddenMain = false; | ||
for ( var i = 0; i < mainFields.length; i++ ) { | ||
var field = mainFields[i]; | ||
if ( typeof pkg[ field ] === 'string' ) { | ||
pkg[ 'main' ] = pkg[ field ]; | ||
overriddenMain = true; | ||
break; | ||
} | ||
} | ||
if ( overriddenMain === false && mainFields.indexOf( 'main' ) === -1 ) { | ||
disregardResult = true; | ||
} | ||
return pkg; | ||
}, | ||
readFile: readFileCached, | ||
isFile: isFileCached, | ||
isDirectory: isDirCached, | ||
extensions: extensions | ||
}; | ||
let preserveSymlinks; | ||
return { | ||
name: 'node-resolve', | ||
if (preserveSymlinks !== undefined) { | ||
resolveOptions.preserveSymlinks = preserveSymlinks; | ||
} | ||
options(options) { | ||
preserveSymlinks = options.preserveSymlinks; | ||
return resolveIdAsync( | ||
importee, | ||
Object.assign( resolveOptions, customResolveOptions ) | ||
) | ||
.then(function (resolved) { | ||
if ( resolved && useBrowserOverrides && packageBrowserField ) { | ||
if ( packageBrowserField.hasOwnProperty(resolved) ) { | ||
if (!packageBrowserField[resolved]) { | ||
browserMapCache[resolved] = packageBrowserField; | ||
return ES6_BROWSER_EMPTY; | ||
} | ||
resolved = packageBrowserField[ resolved ]; | ||
} | ||
browserMapCache[resolved] = packageBrowserField; | ||
} | ||
const _this$meta$rollupVers = this.meta.rollupVersion.split('.').map(Number), | ||
_this$meta$rollupVers2 = _slicedToArray(_this$meta$rollupVers, 2), | ||
major = _this$meta$rollupVers2[0], | ||
minor = _this$meta$rollupVers2[1]; | ||
if ( !disregardResult ) { | ||
if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { | ||
resolved = fs.realpathSync( resolved ); | ||
} | ||
const minVersion = peerDependencies.rollup.slice(2); | ||
if ( ~builtins.indexOf( resolved ) ) { | ||
return null; | ||
} else if ( ~builtins.indexOf( importee ) && preferBuiltins ) { | ||
if ( !isPreferBuiltinsSet ) { | ||
this$1.warn( | ||
"preferring built-in module '" + importee + "' over local alternative " + | ||
"at '" + resolved + "', pass 'preferBuiltins: false' to disable this " + | ||
"behavior or 'preferBuiltins: true' to disable this warning" | ||
); | ||
} | ||
return null; | ||
} else if ( jail && resolved.indexOf( normalize( jail.trim( sep ) ) ) !== 0 ) { | ||
return null; | ||
} | ||
} | ||
const _minVersion$split$map = minVersion.split('.').map(Number), | ||
_minVersion$split$map2 = _slicedToArray(_minVersion$split$map, 2), | ||
minMajor = _minVersion$split$map2[0], | ||
minMinor = _minVersion$split$map2[1]; | ||
if ( resolved && options.modulesOnly ) { | ||
return readFileAsync( resolved, 'utf-8').then(function (code) { return isModule( code ) ? resolved : null; }); | ||
} else { | ||
return resolved; | ||
} | ||
}) | ||
.catch(function () { return null; }); | ||
} | ||
}; | ||
if (major < minMajor || major === minMajor && minor < minMinor) { | ||
this.error(`Insufficient Rollup version: "rollup-plugin-node-resolve" requires at least rollup@${minVersion} but found rollup@${this.meta.rollupVersion}.`); | ||
} | ||
}, | ||
generateBundle() { | ||
readFileCached.clear(); | ||
isFileCached.clear(); | ||
isDirCached.clear(); | ||
}, | ||
resolveId(importee, importer) { | ||
if (/\0/.test(importee)) return null; // ignore IDs with null character, these belong to other plugins | ||
const basedir = importer ? dirname(importer) : process.cwd(); | ||
if (dedupe.indexOf(importee) !== -1) { | ||
importee = join(process.cwd(), 'node_modules', importee); | ||
} // https://github.com/defunctzombie/package-browser-field-spec | ||
if (useBrowserOverrides && browserMapCache[importer]) { | ||
const resolvedImportee = resolve(basedir, importee); | ||
const browser = browserMapCache[importer]; | ||
if (browser[importee] === false || browser[resolvedImportee] === false) { | ||
return ES6_BROWSER_EMPTY; | ||
} | ||
if (browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']) { | ||
importee = browser[importee] || browser[resolvedImportee] || browser[resolvedImportee + '.js'] || browser[resolvedImportee + '.json']; | ||
} | ||
} | ||
const parts = importee.split(/[/\\]/); | ||
let id = parts.shift(); | ||
if (id[0] === '@' && parts.length) { | ||
// scoped packages | ||
id += `/${parts.shift()}`; | ||
} else if (id[0] === '.') { | ||
// an import relative to the parent dir of the importer | ||
id = resolve(basedir, importee); | ||
} | ||
if (only && !only.some(pattern => pattern.test(id))) return null; | ||
let hasModuleSideEffects = alwaysNull; | ||
let hasPackageEntry = true; | ||
let packageBrowserField = false; | ||
const resolveOptions = { | ||
basedir, | ||
packageFilter(pkg, pkgPath) { | ||
let cachedPkg; | ||
var _getCachedPackageInfo = getCachedPackageInfo(pkg, pkgPath); | ||
cachedPkg = _getCachedPackageInfo.cachedPkg; | ||
hasModuleSideEffects = _getCachedPackageInfo.hasModuleSideEffects; | ||
hasPackageEntry = _getCachedPackageInfo.hasPackageEntry; | ||
packageBrowserField = _getCachedPackageInfo.packageBrowserField; | ||
return cachedPkg; | ||
}, | ||
readFile: readFileCached, | ||
isFile: isFileCached, | ||
isDirectory: isDirCached, | ||
extensions: extensions | ||
}; | ||
if (preserveSymlinks !== undefined) { | ||
resolveOptions.preserveSymlinks = preserveSymlinks; | ||
} | ||
return resolveIdAsync(importee, Object.assign(resolveOptions, customResolveOptions)).then(resolved => { | ||
if (resolved && packageBrowserField) { | ||
if (packageBrowserField.hasOwnProperty(resolved)) { | ||
if (!packageBrowserField[resolved]) { | ||
browserMapCache[resolved] = packageBrowserField; | ||
return ES6_BROWSER_EMPTY; | ||
} | ||
resolved = packageBrowserField[resolved]; | ||
} | ||
browserMapCache[resolved] = packageBrowserField; | ||
} | ||
if (hasPackageEntry) { | ||
if (!preserveSymlinks && resolved && fs.existsSync(resolved)) { | ||
resolved = fs.realpathSync(resolved); | ||
} | ||
if (builtins.has(resolved)) { | ||
return null; | ||
} else if (builtins.has(importee) && preferBuiltins) { | ||
if (!isPreferBuiltinsSet) { | ||
this.warn(`preferring built-in module '${importee}' over local alternative ` + `at '${resolved}', pass 'preferBuiltins: false' to disable this ` + `behavior or 'preferBuiltins: true' to disable this warning`); | ||
} | ||
return null; | ||
} else if (jail && resolved.indexOf(normalize(jail.trim(sep))) !== 0) { | ||
return null; | ||
} | ||
} | ||
if (resolved && options.modulesOnly) { | ||
return readFileAsync(resolved, 'utf-8').then(code => isModule(code) ? { | ||
id: resolved, | ||
moduleSideEffects: hasModuleSideEffects(resolved) | ||
} : null); | ||
} else { | ||
return { | ||
id: resolved, | ||
moduleSideEffects: hasModuleSideEffects(resolved) | ||
}; | ||
} | ||
}).catch(() => null); | ||
} | ||
}; | ||
} | ||
export default nodeResolve; |
{ | ||
"name": "rollup-plugin-node-resolve", | ||
"description": "Bundle third-party dependencies in node_modules", | ||
"version": "4.2.4", | ||
"version": "5.0.0", | ||
"devDependencies": { | ||
"buble": "^0.19.7", | ||
"es5-ext": "^0.10.49", | ||
"@babel/core": "7.4.4", | ||
"@babel/preset-env": "^7.4.4", | ||
"@babel/register": "^7.4.4", | ||
"es5-ext": "^0.10.50", | ||
"eslint": "^5.16.0", | ||
"mocha": "^6.1.2", | ||
"rollup": "^1.9.3", | ||
"rollup-plugin-buble": "^0.19.6", | ||
"rollup-plugin-commonjs": "^9.3.4", | ||
"mocha": "^6.1.4", | ||
"rollup": "^1.12.0", | ||
"rollup-plugin-babel": "^4.3.2", | ||
"rollup-plugin-commonjs": "^10.0.0", | ||
"rollup-plugin-json": "^4.0.0", | ||
"string-capitalize": "^1.0.1", | ||
"typescript": "^3.4.3" | ||
"typescript": "^3.4.5" | ||
}, | ||
@@ -37,4 +40,8 @@ "main": "dist/rollup-plugin-node-resolve.cjs.js", | ||
"is-module": "^1.0.0", | ||
"resolve": "^1.10.0" | ||
"resolve": "^1.10.1", | ||
"rollup-pluginutils": "^2.7.0" | ||
}, | ||
"peerDependencies": { | ||
"rollup": ">=1.11.0" | ||
}, | ||
"repository": "rollup/rollup-plugin-node-resolve", | ||
@@ -41,0 +48,0 @@ "keywords": [ |
136
src/index.js
import {dirname, extname, join, normalize, resolve, sep} from 'path'; | ||
import builtins from 'builtin-modules'; | ||
import builtinList from 'builtin-modules'; | ||
import resolveId from 'resolve'; | ||
import isModule from 'is-module'; | ||
import fs from 'fs'; | ||
import {createFilter} from 'rollup-pluginutils'; | ||
import {peerDependencies} from '../package.json'; | ||
const builtins = builtinList.reduce((set, id) => set.add(id), new Set()); | ||
const ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' ); | ||
@@ -13,3 +17,5 @@ // It is important that .mjs occur before .js so that Rollup will interpret npm modules | ||
const readFileAsync = file => new Promise((fulfil, reject) => fs.readFile(file, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
const statAsync = file => new Promise((fulfil, reject) => fs.stat(file, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
const cache = fn => { | ||
@@ -29,2 +35,3 @@ const cache = new Map(); | ||
}; | ||
const ignoreENOENT = err => { | ||
@@ -34,4 +41,7 @@ if (err.code === 'ENOENT') return false; | ||
}; | ||
const readFileCached = cache(readFileAsync); | ||
const isDirCached = cache(file => statAsync(file).then(stat => stat.isDirectory(), ignoreENOENT)); | ||
const isFileCached = cache(file => statAsync(file).then(stat => stat.isFile(), ignoreENOENT)); | ||
@@ -69,2 +79,4 @@ | ||
const alwaysNull = () => null; | ||
const resolveIdAsync = (file, opts) => new Promise((fulfil, reject) => resolveId(file, opts, (err, contents) => err ? reject(err) : fulfil(contents))); | ||
@@ -92,2 +104,58 @@ | ||
const extensions = options.extensions || DEFAULT_EXTS; | ||
const packageInfoCache = new Map(); | ||
function getCachedPackageInfo (pkg, pkgPath) { | ||
if (packageInfoCache.has(pkgPath)) { | ||
return packageInfoCache.get(pkgPath); | ||
} | ||
const pkgRoot = dirname( pkgPath ); | ||
let overriddenMain = false; | ||
for ( let i = 0; i < mainFields.length; i++ ) { | ||
const field = mainFields[i]; | ||
if ( typeof pkg[ field ] === 'string' ) { | ||
pkg[ 'main' ] = pkg[ field ]; | ||
overriddenMain = true; | ||
break; | ||
} | ||
} | ||
const packageInfo = { | ||
cachedPkg: pkg, | ||
hasModuleSideEffects: alwaysNull, | ||
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 ); | ||
} | ||
browser[ key ] = resolved; | ||
if ( key[0] === '.' ) { | ||
const absoluteKey = resolve( pkgRoot, key ); | ||
browser[ absoluteKey ] = resolved; | ||
if ( !extname(key) ) { | ||
extensions.reduce( ( browser, ext ) => { | ||
browser[ absoluteKey + ext ] = browser[ key ]; | ||
return browser; | ||
}, browser ); | ||
} | ||
} | ||
return browser; | ||
}, {}) | ||
}; | ||
const packageSideEffects = pkg['sideEffects']; | ||
if (typeof packageSideEffects === 'boolean') { | ||
packageInfo.hasModuleSideEffects = () => packageSideEffects; | ||
} else if (Array.isArray(packageSideEffects)) { | ||
const filter = createFilter(packageSideEffects, null, {resolve: pkgRoot}); | ||
packageInfo.hasModuleSideEffects = id => !filter(id); | ||
} | ||
packageInfoCache.set(pkgPath, packageInfo); | ||
return packageInfo; | ||
} | ||
let preserveSymlinks; | ||
@@ -100,2 +168,12 @@ | ||
preserveSymlinks = options.preserveSymlinks; | ||
const [major, minor] = this.meta.rollupVersion.split('.').map(Number); | ||
const minVersion = peerDependencies.rollup.slice(2); | ||
const [minMajor, minMinor] = minVersion.split('.').map(Number); | ||
if (major < minMajor || (major === minMajor && minor < minMinor)) { | ||
this.error( | ||
`Insufficient Rollup version: "rollup-plugin-node-resolve" requires at least rollup@${minVersion} but found rollup@${ | ||
this.meta.rollupVersion | ||
}.` | ||
); | ||
} | ||
}, | ||
@@ -143,5 +221,5 @@ | ||
let disregardResult = false; | ||
let hasModuleSideEffects = alwaysNull; | ||
let hasPackageEntry = true; | ||
let packageBrowserField = false; | ||
const extensions = options.extensions || DEFAULT_EXTS; | ||
@@ -151,37 +229,6 @@ const resolveOptions = { | ||
packageFilter ( pkg, pkgPath ) { | ||
const pkgRoot = dirname( pkgPath ); | ||
if (useBrowserOverrides && typeof pkg[ 'browser' ] === 'object') { | ||
packageBrowserField = Object.keys(pkg[ 'browser' ]).reduce((browser, key) => { | ||
let resolved = pkg[ 'browser' ][ key ]; | ||
if (resolved && resolved[0] === '.') { | ||
resolved = resolve( pkgRoot, pkg[ 'browser' ][ key ] ); | ||
} | ||
browser[ key ] = resolved; | ||
if ( key[0] === '.' ) { | ||
const absoluteKey = resolve( pkgRoot, key ); | ||
browser[ absoluteKey ] = resolved; | ||
if ( !extname(key) ) { | ||
extensions.reduce( ( browser, ext ) => { | ||
browser[ absoluteKey + ext ] = browser[ key ]; | ||
return browser; | ||
}, browser ); | ||
} | ||
} | ||
return browser; | ||
}, {}); | ||
} | ||
let overriddenMain = false; | ||
for ( let i = 0; i < mainFields.length; i++ ) { | ||
const field = mainFields[i]; | ||
if ( typeof pkg[ field ] === 'string' ) { | ||
pkg[ 'main' ] = pkg[ field ]; | ||
overriddenMain = true; | ||
break; | ||
} | ||
} | ||
if ( overriddenMain === false && mainFields.indexOf( 'main' ) === -1 ) { | ||
disregardResult = true; | ||
} | ||
return pkg; | ||
let cachedPkg; | ||
({cachedPkg, hasModuleSideEffects, hasPackageEntry, packageBrowserField} = | ||
getCachedPackageInfo(pkg, pkgPath)); | ||
return cachedPkg; | ||
}, | ||
@@ -203,3 +250,3 @@ readFile: readFileCached, | ||
.then(resolved => { | ||
if ( resolved && useBrowserOverrides && packageBrowserField ) { | ||
if ( resolved && packageBrowserField ) { | ||
if ( packageBrowserField.hasOwnProperty(resolved) ) { | ||
@@ -215,3 +262,3 @@ if (!packageBrowserField[resolved]) { | ||
if ( !disregardResult ) { | ||
if ( hasPackageEntry ) { | ||
if ( !preserveSymlinks && resolved && fs.existsSync( resolved ) ) { | ||
@@ -221,5 +268,5 @@ resolved = fs.realpathSync( resolved ); | ||
if ( ~builtins.indexOf( resolved ) ) { | ||
if ( builtins.has( resolved ) ) { | ||
return null; | ||
} else if ( ~builtins.indexOf( importee ) && preferBuiltins ) { | ||
} else if ( builtins.has( importee ) && preferBuiltins ) { | ||
if ( !isPreferBuiltinsSet ) { | ||
@@ -239,5 +286,6 @@ this.warn( | ||
if ( resolved && options.modulesOnly ) { | ||
return readFileAsync( resolved, 'utf-8').then(code => isModule( code ) ? resolved : null); | ||
return readFileAsync( resolved, 'utf-8') | ||
.then(code => isModule( code ) ? {id: resolved, moduleSideEffects: hasModuleSideEffects(resolved)} : null); | ||
} else { | ||
return resolved; | ||
return {id: resolved, moduleSideEffects: hasModuleSideEffects(resolved)}; | ||
} | ||
@@ -244,0 +292,0 @@ }) |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
47447
886
6
12
+ Addedrollup-pluginutils@^2.7.0
+ Added@rollup/rollup-android-arm-eabi@4.22.4(transitive)
+ Added@rollup/rollup-android-arm64@4.22.4(transitive)
+ Added@rollup/rollup-darwin-arm64@4.22.4(transitive)
+ Added@rollup/rollup-darwin-x64@4.22.4(transitive)
+ Added@rollup/rollup-linux-arm-gnueabihf@4.22.4(transitive)
+ Added@rollup/rollup-linux-arm-musleabihf@4.22.4(transitive)
+ Added@rollup/rollup-linux-arm64-gnu@4.22.4(transitive)
+ Added@rollup/rollup-linux-arm64-musl@4.22.4(transitive)
+ Added@rollup/rollup-linux-powerpc64le-gnu@4.22.4(transitive)
+ Added@rollup/rollup-linux-riscv64-gnu@4.22.4(transitive)
+ Added@rollup/rollup-linux-s390x-gnu@4.22.4(transitive)
+ Added@rollup/rollup-linux-x64-gnu@4.22.4(transitive)
+ Added@rollup/rollup-linux-x64-musl@4.22.4(transitive)
+ Added@rollup/rollup-win32-arm64-msvc@4.22.4(transitive)
+ Added@rollup/rollup-win32-ia32-msvc@4.22.4(transitive)
+ Added@rollup/rollup-win32-x64-msvc@4.22.4(transitive)
+ Added@types/estree@1.0.5(transitive)
+ Added@types/node@22.7.0(transitive)
+ Addedestree-walker@0.6.1(transitive)
+ Addedfsevents@2.3.3(transitive)
+ Addedrollup@4.22.4(transitive)
+ Addedrollup-pluginutils@2.8.2(transitive)
- Removed@types/node@22.5.5(transitive)
Updatedresolve@^1.10.1