| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 | var natives = process.binding('natives')var module = require('module')var normalRequire = requireexports.source = srcexports.require = reqvar vm = require('vm')// fallback for 0.x supportvar runInThisContext, ContextifyScript, Script/*istanbul ignore next*/try {  ContextifyScript = process.binding('contextify').ContextifyScript;  /*istanbul ignore next*/  if (process.version.split('.')[0].length > 2) {  // v10.0.0 and above    runInThisContext = vm.runInThisContext;  } else {    runInThisContext = function runInThisContext(code, options) {      var script = new ContextifyScript(code, options);      return script.runInThisContext();    }  }} catch (er) {  Script = process.binding('evals').NodeScript;  runInThisContext = Script.runInThisContext;}var wrap = [  '(function (internalBinding) {' +    ' return function (exports, require, module, __filename, __dirname) { ',  '\n  };\n});'];// Basically the same functionality as node's (buried deep)// NativeModule class, but without caching, or internal/ blocking,// or a class, since that's not really necessary.  I assume that if// you're loading something with this module, it's because you WANT// a separate copy.  However, to preserve semantics, any require()// calls made throughout the internal module load IS cached.function req (id, whitelist) {  var cache = Object.create(null)  if (Array.isArray(whitelist)) {    // a whitelist of things to pull from the "actual" native modules    whitelist.forEach(function (id) {      cache[id] = {        loading: false,        loaded: true,        filename: id + '.js',        exports: require(id)      }    })  }  return req_(id, cache)}function req_ (id, cache) {  // Buffer is special, because it's a type rather than a "normal"  // class, and many things depend on `Buffer.isBuffer` working.  if (id === 'buffer') {    return require('buffer')  }  // native_module isn't actually a natives binding.  // weird, right?  if (id === 'native_module') {    return {      getSource: src,      wrap: function (script) {        return wrap[0] + script + wrap[1]      },      wrapper: wrap,      _cache: cache,      _source: natives,      nonInternalExists: function (id) {        return id.indexOf('internal/') !== 0;      }    }  }  var source = src(id)  if (!source) {    return undefined  }  source = wrap[0] + source + wrap[1]  var internalBinding = function(name) {    if (name === 'types') {      return process.binding('util');    } else {      try {        return process.binding(name);      } catch (e) {}      return {};    }  }  var cachingRequire = function require (id) {    if (cache[id]) {      return cache[id].exports    }    if (id === 'internal/bootstrap/loaders' || id === 'internal/process') {      // Provide just enough to keep `graceful-fs@3` working and tests passing.      // For now.      return {        internalBinding: internalBinding,        NativeModule: {          _source: process.binding('natives'),          nonInternalExists: function(id) {            return !id.startsWith('internal/');          }        }      };    }    return req_(id, cache)  }  var nm = {    exports: {},    loading: true,    loaded: false,    filename: id + '.js'  }  cache[id] = nm  var fn  var setV8Flags = false  try {    require('v8').setFlagsFromString('--allow_natives_syntax')    setV8Flags = true  } catch (e) {}  try {    /* istanbul ignore else */    if (ContextifyScript) {      fn = runInThisContext(source, {        filename: nm.filename,        lineOffset: 0,        displayErrors: true      });    } else {      fn = runInThisContext(source, nm.filename, true);    }    fn(internalBinding)(nm.exports, cachingRequire, nm, nm.filename, '<no dirname available>')    nm.loaded = true  } finally {    nm.loading = false    /*istanbul ignore next*/    if (setV8Flags) {      // Ref: https://github.com/nodejs/node/blob/591a24b819d53a555463b1cbf9290a6d8bcc1bcb/lib/internal/bootstrap_node.js#L429-L434      var re = /^--allow[-_]natives[-_]syntax$/      if (!process.execArgv.some(function (s) { return re.test(s) }))        require('v8').setFlagsFromString('--noallow_natives_syntax')    }  }  return nm.exports}function src (id) {  return natives[id]}
 |