rollup-plugin-node-resolve.cjs.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. 'use strict';
  2. function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
  3. var path = require('path');
  4. var builtins = _interopDefault(require('builtin-modules'));
  5. var _nodeResolve = _interopDefault(require('resolve'));
  6. var browserResolve = _interopDefault(require('browser-resolve'));
  7. var isModule = _interopDefault(require('is-module'));
  8. var fs = _interopDefault(require('fs'));
  9. var COMMONJS_BROWSER_EMPTY = _nodeResolve.sync( 'browser-resolve/empty.js', __dirname );
  10. var ES6_BROWSER_EMPTY = path.resolve( __dirname, '../src/empty.js' );
  11. var CONSOLE_WARN = function () {
  12. var args = [], len = arguments.length;
  13. while ( len-- ) args[ len ] = arguments[ len ];
  14. return console.warn.apply( console, args );
  15. }; // eslint-disable-line no-console
  16. function nodeResolve ( options ) {
  17. if ( options === void 0 ) options = {};
  18. var useModule = options.module !== false;
  19. var useMain = options.main !== false;
  20. var useJsnext = options.jsnext === true;
  21. var isPreferBuiltinsSet = options.preferBuiltins === true || options.preferBuiltins === false;
  22. var preferBuiltins = isPreferBuiltinsSet ? options.preferBuiltins : true;
  23. var customResolveOptions = options.customResolveOptions || {};
  24. var jail = options.jail;
  25. var onwarn = options.onwarn || CONSOLE_WARN;
  26. var resolveId = options.browser ? browserResolve : _nodeResolve;
  27. if ( options.skip ) {
  28. throw new Error( 'options.skip is no longer supported — you should use the main Rollup `externals` option instead' );
  29. }
  30. if ( !useModule && !useMain && !useJsnext ) {
  31. throw new Error( "At least one of options.module, options.main or options.jsnext must be true" );
  32. }
  33. return {
  34. name: 'node-resolve',
  35. resolveId: function resolveId$1 ( importee, importer ) {
  36. if ( /\0/.test( importee ) ) { return null; } // ignore IDs with null character, these belong to other plugins
  37. // disregard entry module
  38. if ( !importer ) { return null; }
  39. var parts = importee.split( /[\/\\]/ );
  40. var id = parts.shift();
  41. if ( id[0] === '@' && parts.length ) {
  42. // scoped packages
  43. id += "/" + (parts.shift());
  44. } else if ( id[0] === '.' ) {
  45. // an import relative to the parent dir of the importer
  46. id = path.resolve( importer, '..', importee );
  47. }
  48. return new Promise( function ( fulfil, reject ) {
  49. var disregardResult = false;
  50. resolveId(
  51. importee,
  52. Object.assign({
  53. basedir: path.dirname( importer ),
  54. packageFilter: function packageFilter ( pkg ) {
  55. if ( useModule && pkg[ 'module' ] ) {
  56. pkg[ 'main' ] = pkg[ 'module' ];
  57. } else if ( useJsnext && pkg[ 'jsnext:main' ] ) {
  58. pkg[ 'main' ] = pkg[ 'jsnext:main' ];
  59. } else if ( ( useJsnext || useModule ) && !useMain ) {
  60. disregardResult = true;
  61. }
  62. return pkg;
  63. },
  64. extensions: options.extensions
  65. }, customResolveOptions ),
  66. function ( err, resolved ) {
  67. if ( !disregardResult && !err ) {
  68. if ( resolved && fs.existsSync( resolved ) ) {
  69. resolved = fs.realpathSync( resolved );
  70. }
  71. if ( resolved === COMMONJS_BROWSER_EMPTY ) {
  72. fulfil( ES6_BROWSER_EMPTY );
  73. } else if ( ~builtins.indexOf( resolved ) ) {
  74. fulfil( null );
  75. } else if ( ~builtins.indexOf( importee ) && preferBuiltins ) {
  76. if ( !isPreferBuiltinsSet ) {
  77. onwarn(
  78. "preferring built-in module '" + importee + "' over local alternative " +
  79. "at '" + resolved + "', pass 'preferBuiltins: false' to disable this " +
  80. "behavior or 'preferBuiltins: true' to disable this warning"
  81. );
  82. }
  83. fulfil( null );
  84. } else if ( jail && resolved.indexOf( path.normalize( jail.trim( path.sep ) ) ) !== 0 ) {
  85. fulfil( null );
  86. }
  87. }
  88. if ( resolved && options.modulesOnly ) {
  89. fs.readFile( resolved, 'utf-8', function ( err, code ) {
  90. if ( err ) {
  91. reject( err );
  92. } else {
  93. var valid = isModule( code );
  94. fulfil( valid ? resolved : null );
  95. }
  96. });
  97. } else {
  98. fulfil( resolved );
  99. }
  100. }
  101. );
  102. });
  103. }
  104. };
  105. }
  106. module.exports = nodeResolve;