Socket
Socket
Sign inDemoInstall

rollup-plugin-node-resolve

Package Overview
Dependencies
Maintainers
4
Versions
34
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rollup-plugin-node-resolve - npm Package Compare versions

Comparing version 4.2.4 to 5.0.0

10

CHANGELOG.md
# 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 @@

518

dist/rollup-plugin-node-resolve.cjs.js

@@ -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": [

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 @@ })

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc