rollup-plugin-node-resolve
Advanced tools
Comparing version 2.0.0 to 2.1.0
# rollup-plugin-node-resolve changelog | ||
## 2.1.0 | ||
* Add `jail` option ([#53](https://github.com/rollup/rollup-plugin-node-resolve/pull/53)) | ||
* Add `customResolveOptions` option ([#79](https://github.com/rollup/rollup-plugin-node-resolve/pull/79)) | ||
* Support symlinked packages ([#82](https://github.com/rollup/rollup-plugin-node-resolve/pull/82)) | ||
## 2.0.0 | ||
@@ -4,0 +10,0 @@ |
@@ -9,2 +9,3 @@ 'use strict'; | ||
var browserResolve = _interopDefault(require('browser-resolve')); | ||
var fs = _interopDefault(require('fs')); | ||
@@ -21,3 +22,3 @@ var COMMONJS_BROWSER_EMPTY = _nodeResolve.sync( 'browser-resolve/empty.js', __dirname ); | ||
function nodeResolve ( options ) { | ||
options = options || {}; | ||
if ( options === void 0 ) options = {}; | ||
@@ -30,2 +31,4 @@ var skip = options.skip || []; | ||
var preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; | ||
var customResolveOptions = options.customResolveOptions || {}; | ||
var jail = options.jail || '/'; | ||
@@ -39,6 +42,6 @@ var onwarn = options.onwarn || CONSOLE_WARN; | ||
resolveId: function resolveId$1 ( importee, importer ) { | ||
if ( /\0/.test( importee ) ) return null; // ignore IDs with null character, these belong to other plugins | ||
if ( /\0/.test( importee ) ) { return null; } // ignore IDs with null character, these belong to other plugins | ||
// disregard entry module | ||
if ( !importer ) return null; | ||
if ( !importer ) { return null; } | ||
@@ -56,3 +59,3 @@ var parts = importee.split( /[\/\\]/ ); | ||
if ( skip !== true && ~skip.indexOf( id ) ) return null; | ||
if ( skip !== true && ~skip.indexOf( id ) ) { return null; } | ||
@@ -62,8 +65,8 @@ return new Promise( function ( accept, reject ) { | ||
importee, | ||
{ | ||
Object.assign({ | ||
basedir: path.dirname( importer ), | ||
packageFilter: function packageFilter ( pkg ) { | ||
if ( !useJsnext && !useMain && !useModule ) { | ||
if ( skip === true ) accept( false ); | ||
else reject( Error( ("To import from a package in node_modules (" + importee + "), either options.jsnext, options.module or options.main must be true") ) ); | ||
if ( skip === true ) { accept( false ); } | ||
else { reject( Error( ("To import from a package in node_modules (" + importee + "), either options.jsnext, options.module or options.main must be true") ) ); } | ||
} else if ( useModule && pkg[ 'module' ] ) { | ||
@@ -74,4 +77,4 @@ pkg[ 'main' ] = pkg[ 'module' ]; | ||
} else if ( ( useJsnext || useModule ) && !useMain ) { | ||
if ( skip === true ) accept( false ); | ||
else reject( Error( ("Package " + importee + " (imported by " + importer + ") does not have a module or jsnext:main field. You should either allow legacy modules with options.main, or skip it with options.skip = ['" + importee + "'])") ) ); | ||
if ( skip === true ) { accept( false ); } | ||
else { reject( Error( ("Package " + importee + " (imported by " + importer + ") does not have a module or jsnext:main field. You should either allow legacy modules with options.main, or skip it with options.skip = ['" + importee + "'])") ) ); } | ||
} | ||
@@ -81,7 +84,11 @@ return pkg; | ||
extensions: options.extensions | ||
}, | ||
}, customResolveOptions ), | ||
function ( err, resolved ) { | ||
if ( resolved && fs.existsSync( resolved ) ) { | ||
resolved = fs.realpathSync( resolved ); | ||
} | ||
if ( err ) { | ||
if ( skip === true ) accept( false ); | ||
else reject( Error( ("Could not resolve '" + importee + "' from " + (path.normalize( importer ))) ) ); | ||
if ( skip === true ) { accept( false ); } | ||
else { reject( Error( ("Could not resolve '" + importee + "' from " + (path.normalize( importer ))) ) ); } | ||
} else { | ||
@@ -101,2 +108,4 @@ if ( resolved === COMMONJS_BROWSER_EMPTY ) { | ||
accept( null ); | ||
} else if (resolved.indexOf(path.normalize(jail.trim(path.sep))) !== 0) { | ||
accept( null ); | ||
} else { | ||
@@ -113,2 +122,2 @@ accept( resolved ); | ||
module.exports = nodeResolve; | ||
module.exports = nodeResolve; |
@@ -1,2 +0,2 @@ | ||
import { resolve, normalize, dirname } from 'path'; | ||
import { resolve, dirname } from 'path'; | ||
import builtins from 'builtin-modules'; | ||
@@ -6,17 +6,14 @@ import _nodeResolve from 'resolve'; | ||
var COMMONJS_BROWSER_EMPTY = _nodeResolve.sync( 'browser-resolve/empty.js', __dirname ); | ||
var ES6_BROWSER_EMPTY = resolve( __dirname, '../src/empty.js' ); | ||
var CONSOLE_WARN = function () { | ||
var args = [], len = arguments.length; | ||
while ( len-- ) args[ len ] = arguments[ len ]; | ||
var COMMONJS_BROWSER_EMPTY = _nodeResolve.sync('browser-resolve/empty.js', __dirname); | ||
var ES6_BROWSER_EMPTY = resolve(__dirname, '../src/empty.js'); | ||
var CONSOLE_WARN = function CONSOLE_WARN() { | ||
var _console; | ||
return console.warn.apply( console, args ); | ||
}; // eslint-disable-line no-console | ||
return (_console = console).warn.apply(_console, arguments); | ||
}; | ||
function nodeResolve ( options ) { | ||
function nodeResolve(options) { | ||
options = options || {}; | ||
var skip = options.skip || []; | ||
var useJsnext = options.jsnext === true; | ||
var useModule = options.module !== false; | ||
var useMain = options.main !== false; | ||
@@ -27,71 +24,55 @@ var isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false; | ||
var onwarn = options.onwarn || CONSOLE_WARN; | ||
var resolveId = options.browser ? browserResolve : _nodeResolve; | ||
var _resolveId = options.browser ? browserResolve : _nodeResolve; | ||
return { | ||
name: 'node-resolve', | ||
resolveId: function resolveId$1 ( importee, importer ) { | ||
if ( /\0/.test( importee ) ) return null; // ignore IDs with null character, these belong to other plugins | ||
// disregard entry module | ||
if ( !importer ) return null; | ||
var parts = importee.split( /[\/\\]/ ); | ||
resolveId: function resolveId(importee, importer) { | ||
var parts = importee.split(/[\/\\]/); | ||
var 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( importer, '..', importee ); | ||
// scoped packages | ||
if (id[0] === '@' && parts.length) { | ||
id += '/' + parts.shift(); | ||
} | ||
if ( skip !== true && ~skip.indexOf( id ) ) return null; | ||
if (skip !== true && ~skip.indexOf(id)) return null; | ||
return new Promise( function ( accept, reject ) { | ||
resolveId( | ||
importee, | ||
{ | ||
basedir: dirname( importer ), | ||
packageFilter: function packageFilter ( pkg ) { | ||
if ( !useJsnext && !useMain && !useModule ) { | ||
if ( skip === true ) accept( false ); | ||
else reject( Error( ("To import from a package in node_modules (" + importee + "), either options.jsnext, options.module or options.main must be true") ) ); | ||
} else if ( useModule && pkg[ 'module' ] ) { | ||
pkg[ 'main' ] = pkg[ 'module' ]; | ||
} else if ( useJsnext && pkg[ 'jsnext:main' ] ) { | ||
pkg[ 'main' ] = pkg[ 'jsnext:main' ]; | ||
} else if ( ( useJsnext || useModule ) && !useMain ) { | ||
if ( skip === true ) accept( false ); | ||
else reject( Error( ("Package " + importee + " (imported by " + importer + ") does not have a module or jsnext:main field. You should either allow legacy modules with options.main, or skip it with options.skip = ['" + importee + "'])") ) ); | ||
// disregard entry module | ||
if (!importer) return null; | ||
return new Promise(function (accept, reject) { | ||
_resolveId(importee, { | ||
basedir: dirname(importer), | ||
packageFilter: function packageFilter(pkg) { | ||
if (options.jsnext) { | ||
var main = pkg['jsnext:main']; | ||
if (main) { | ||
pkg['main'] = main; | ||
} else if (!useMain) { | ||
if (skip === true) accept(false);else reject(Error('Package ' + importee + ' (imported by ' + importer + ') does not have a jsnext:main field. You should either allow legacy modules with options.main, or skip it with options.skip = [\'' + importee + '\'])')); | ||
} | ||
return pkg; | ||
}, | ||
extensions: options.extensions | ||
} else if (!useMain) { | ||
if (skip === true) accept(false);else reject(Error('To import from a package in node_modules (' + importee + '), either options.jsnext or options.main must be true')); | ||
} | ||
return pkg; | ||
}, | ||
function ( err, resolved ) { | ||
if ( err ) { | ||
if ( skip === true ) accept( false ); | ||
else reject( Error( ("Could not resolve '" + importee + "' from " + (normalize( importer ))) ) ); | ||
extensions: options.extensions | ||
}, function (err, resolved) { | ||
if (err) { | ||
if (skip === true) accept(false);else reject(err); | ||
} else { | ||
if (resolved === COMMONJS_BROWSER_EMPTY) { | ||
accept(ES6_BROWSER_EMPTY); | ||
} else if (~builtins.indexOf(resolved)) { | ||
accept(null); | ||
} else if (~builtins.indexOf(importee) && preferBuiltins) { | ||
if (!isPreferBuiltinsSet) { | ||
onwarn('preferring built-in module \'' + importee + '\' over local alternative ' + ('at \'' + resolved + '\', pass \'preferBuiltins: false\' to disable this ') + 'behavior or \'preferBuiltins: true\' to disable this warning'); | ||
} | ||
accept(null); | ||
} else { | ||
if ( resolved === COMMONJS_BROWSER_EMPTY ) { | ||
accept( ES6_BROWSER_EMPTY ); | ||
} else if ( ~builtins.indexOf( resolved ) ) { | ||
accept( null ); | ||
} else if ( ~builtins.indexOf( importee ) && preferBuiltins ) { | ||
if ( !isPreferBuiltinsSet ) { | ||
onwarn( | ||
"preferring built-in module '" + importee + "' over local alternative " + | ||
"at '" + resolved + "', pass 'preferBuiltins: false' to disable this " + | ||
"behavior or 'preferBuiltins: true' to disable this warning" | ||
); | ||
} | ||
accept( null ); | ||
} else { | ||
accept( resolved ); | ||
} | ||
accept(resolved); | ||
} | ||
} | ||
); | ||
}); | ||
}); | ||
@@ -98,0 +79,0 @@ } |
{ | ||
"name": "rollup-plugin-node-resolve", | ||
"description": "Bundle third-party dependencies in node_modules", | ||
"version": "2.0.0", | ||
"version": "2.1.0", | ||
"devDependencies": { | ||
"buble": "^0.10.6", | ||
"buble": "^0.15.2", | ||
"es5-ext": "^0.10.11", | ||
"eslint": "^2.11.1", | ||
"mocha": "^2.3.3", | ||
"rollup": "^0.27.1", | ||
"rollup-plugin-buble": "^0.10.0", | ||
"rollup-plugin-commonjs": "^2.0.0", | ||
"eslint": "^3.18.0", | ||
"mocha": "^3.0.2", | ||
"rollup": "^0.41.6", | ||
"rollup-plugin-buble": "^0.15.0", | ||
"rollup-plugin-commonjs": "^8.0.2", | ||
"string-capitalize": "^1.0.1", | ||
@@ -17,3 +17,4 @@ "vlq": "^0.2.1" | ||
"main": "dist/rollup-plugin-node-resolve.cjs.js", | ||
"jsnext:main": "dist/rollup-plugin-node-resolve.es6.js", | ||
"module": "dist/rollup-plugin-node-resolve.es.js", | ||
"jsnext:main": "dist/rollup-plugin-node-resolve.es.js", | ||
"scripts": { | ||
@@ -23,8 +24,8 @@ "pretest": "rollup -c", | ||
"posttest": "eslint src test/*.js", | ||
"prepublish": "npm test" | ||
"prepublish": "npm test", | ||
"lint": "eslint src" | ||
}, | ||
"files": [ | ||
"src", | ||
"dist", | ||
"README.md" | ||
"dist" | ||
], | ||
@@ -36,6 +37,3 @@ "dependencies": { | ||
}, | ||
"repository": { | ||
"type": "git", | ||
"url": "git+https://github.com/rollup/rollup-plugin-node-resolve.git" | ||
}, | ||
"repository": "rollup/rollup-plugin-node-resolve", | ||
"keywords": [ | ||
@@ -42,0 +40,0 @@ "rollup", |
@@ -23,2 +23,5 @@ # rollup-plugin-node-resolve | ||
nodeResolve({ | ||
// use "module" field for ES6 module if possible | ||
module: true, // Default: true | ||
// use "jsnext:main" if possible | ||
@@ -35,3 +38,3 @@ // – see https://github.com/rollup/rollup/wiki/jsnext:main | ||
// want to include, add it to 'skip'. Local and relative imports | ||
// can be skipped by giving the full filepath. E.g., | ||
// can be skipped by giving the full filepath. E.g., | ||
// `path.resolve('src/relative-dependency.js')` | ||
@@ -52,3 +55,7 @@ skip: [ 'some-big-dependency' ], // Default: [] | ||
preferBuiltins: false // Default: true | ||
// Lock the module search in this path (like a chroot). Module defined | ||
// outside this path will be mark has external | ||
jail: '/my/jail/path' // Default: '/' | ||
}) | ||
@@ -67,6 +74,6 @@ ] | ||
] | ||
}).then(bundle => bundle.write({ | ||
dest: 'bundle.js', | ||
}).then(bundle => bundle.write({ | ||
dest: 'bundle.js', | ||
moduleName: 'MyModule', | ||
format: 'iife' | ||
format: 'iife' | ||
})).catch(err => console.log(err.stack)); | ||
@@ -73,0 +80,0 @@ ``` |
export default {}; |
@@ -1,5 +0,6 @@ | ||
import { dirname, resolve, normalize } from 'path'; | ||
import { dirname, resolve, normalize, sep } from 'path'; | ||
import builtins from 'builtin-modules'; | ||
import _nodeResolve from 'resolve'; | ||
import browserResolve from 'browser-resolve'; | ||
import fs from 'fs'; | ||
@@ -10,5 +11,3 @@ const COMMONJS_BROWSER_EMPTY = _nodeResolve.sync( 'browser-resolve/empty.js', __dirname ); | ||
export default function nodeResolve ( options ) { | ||
options = options || {}; | ||
export default function nodeResolve ( options = {} ) { | ||
const skip = options.skip || []; | ||
@@ -20,2 +19,4 @@ const useJsnext = options.jsnext === true; | ||
const preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true; | ||
const customResolveOptions = options.customResolveOptions || {}; | ||
const jail = options.jail || '/'; | ||
@@ -50,3 +51,3 @@ const onwarn = options.onwarn || CONSOLE_WARN; | ||
importee, | ||
{ | ||
Object.assign({ | ||
basedir: dirname( importer ), | ||
@@ -68,4 +69,8 @@ packageFilter ( pkg ) { | ||
extensions: options.extensions | ||
}, | ||
}, customResolveOptions ), | ||
( err, resolved ) => { | ||
if ( resolved && fs.existsSync( resolved ) ) { | ||
resolved = fs.realpathSync( resolved ); | ||
} | ||
if ( err ) { | ||
@@ -88,2 +93,4 @@ if ( skip === true ) accept( false ); | ||
accept( null ); | ||
} else if (resolved.indexOf(normalize(jail.trim(sep))) !== 0) { | ||
accept( null ); | ||
} else { | ||
@@ -90,0 +97,0 @@ accept( resolved ); |
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
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
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
24690
10
458
82
4
1