exports.configure = function(registry) {
  var registryConfig = globalConfig.config.registries[registry] || {},
      RegistryClass;

  if (!registryConfig.handler)
    throw 'Registry %' + registry + '% not found.';

  var handler = registryConfig.handler;
  delete registryConfig.handler;

  try {
    RegistryClass = registryRequireContext.require(handler);
  }
  catch(e) {
    throw 'Registry handler `' + handler + '` not installed.';
  }

  registryConfig.name = registry;
  registryConfig.strictSSL = globalConfig.config.strictSSL;

  return Promise.resolve(RegistryClass.configure && RegistryClass.configure(registryConfig, ui) || registryConfig)
  .then(function(_config) {
    delete _config.name;
    delete _config.strictSSL;
    _config.handler = handler;
    globalConfig.config.registries[registry] = _config;
  })
  .then(function() {
    globalConfig.save();
  });
};
Beispiel #2
0
exports.requireRelative = function (requestedPath) {
  var rootPath = process.cwd();
  if (requestedPath[0] !== '.') {
    requestedPath = './' + requestedPath;
  }

  var rootName = path.join(rootPath, '@root');
  var root = new Module(rootName);
  root.filename = rootName;
  root.paths = Module._nodeModulePaths(rootPath);
  return root.require(requestedPath);
};
function getModules() {
  try {
    // avoid importing a local copy of eslint, try to find a peer dependency
    var eslintLoc = Module._resolveFilename("eslint", module.parent);
  } catch (err) {
    try {
      // avoids breaking in jest where module.parent is undefined
      eslintLoc = require.resolve("eslint");
    } catch (err) {
      throw new ReferenceError("couldn't resolve eslint");
    }
  }

  // get modules relative to what eslint will load
  var eslintMod = new Module(eslintLoc);
  eslintMod.filename = eslintLoc;
  eslintMod.paths = Module._nodeModulePaths(path.dirname(eslintLoc));

  try {
    var escope = eslintMod.require("eslint-scope");
    var Definition = eslintMod.require("eslint-scope/lib/definition")
      .Definition;
    var referencer = eslintMod.require("eslint-scope/lib/referencer");
  } catch (err) {
    escope = eslintMod.require("escope");
    Definition = eslintMod.require("escope/lib/definition").Definition;
    referencer = eslintMod.require("escope/lib/referencer");
  }

  var estraverse = eslintMod.require("estraverse");

  if (referencer.__esModule) referencer = referencer.default;

  return {
    Definition,
    escope,
    estraverse,
    referencer,
  };
}
Beispiel #4
0
 function require(path) {
   return module.require(path);
 }
import RegisterLoader from '../core/register-loader.js';

// sync require SystemJS in this scope
import Module from 'module';
import { fileUrlToPath } from '../core/common.js';

var base = fileUrlToPath(__moduleName);
var parentModuleContext = new Module(base);
parentModuleContext.paths = Module._nodeModulePaths(base);
var curSystem = global.System;
var SystemJS = parentModuleContext.require('systemjs');
global.System = curSystem;

function declareBundle(loader) {
  loader.register('_e.js', ['_c.js'], function (_export, _context) {
    "use strict";

    var e;
    return {
      setters: [function (_cJs) {
        var _exportObj = {};
        _exportObj.c = _cJs.c;

        _export(_exportObj);
      }],
      execute: function () {
        _export('e', e = 'e');

        _export('e', e);
      }
    };
Beispiel #6
0
 requireFunc = function(request) {
     return newModule.require(request);
 };
exports.load = function(registry) {
  if (registryClasses[registry])
    return registryClasses[registry];

  try {
    // ensure the tmpDir exists
    var tmpDir = path.resolve(HOME, '.jspm', registry + '-cache');
    if (!fs.existsSync(tmpDir))
      fs.mkdirSync(tmpDir);

    var options = dextend({
      timeouts: {
        lookup: 60,
        download: 300,
        process: 120
      },
      tmpDir: tmpDir,
      apiVersion: '2.0'
    }, globalConfig.config.registries[registry] || {});

    options.name = registry;
    if (globalConfig.config.strictSSL === false || globalConfig.config.strictSSL == 'false')
      options.strictSSL = false;

    if (!options.handler)
      throw 'Registry %' + registry + '% not found.';

    var RegistryClass = registryRequireContext.require(options.handler);
    var registryPackageJSON = registryRequireContext.require(options.handler + '/package.json');
    var versionString = registryPackageJSON.name + '@' + registryPackageJSON.version.split('.').splice(0, 2).join('.');
    options.versionString = versionString;

    var registryInstance = registryClasses[registry] = new RegistryClass(options, ui);
    registryInstance.constructor = RegistryClass;

    var timeoutLookup = options.timeouts.lookup * 1000;
    var timeoutDownload = options.timeouts.download * 1000;
    var timeoutProcess = options.timeouts.process * 1000;

    registryInstance.versionString = registryInstance.versionString || versionString;

    var maxRetries = globalConfig.config.maxRetries || 3;

    if (registryInstance.build) {
      ui.log('warn', 'Registry handler %' + options.handler + '% provides a `build` hook, which has been deprecated for `processPackage`.');
      registryInstance.processPackage = function(packageConfig, packageName, packageDir) {
        return this.build(packageConfig, packageDir);
      };
    }

    // patch the calls to apply timeout and retry logic
    registryHooks.forEach(function(hook) {
      if (!registryInstance[hook])
        return;

      var runHook = registryInstance[hook];
      registryInstance[hook] = function() {
        var self = this;
        var args = arguments;
        var retries = 0;
        var timeout;
        if (hook == 'download')
          timeout = timeoutDownload;
        else if (hook == 'processPackage')
          timeout = timeoutProcess;
        else
          timeout = timeoutLookup;

        return new Promise(function(resolve, reject) {

          function tryHook() {
            var active = true;

            var timer = setTimeout(function() {
              active = false;
              checkRetry();
            }, timeout);

            // in case registry is being reconfigured, chain on a promise
            // which delivers the registry to use, when it is ready
            (self.reconfigPromise_ || Promise.resolve(self))
            .then(function(endpoint) {
              self = endpoint;
              return runHook.apply(self, args);
            })
            .then(function(result) {
              clearTimeout(timer);
              if (active)
                resolve(result);
            }, function(err) {
              clearTimeout(timer);
              if (!active)
                return;
              active = false;
              return checkConfigure(err) || checkRetry(err);
            });
          }

          /* When err.config is set, that indicates config credentials are somehow the cause.
           * Call the configure hook and reinstantiate the registry with new config */
          function checkConfigure(err) {
            if (err && err.config && !self.triedConfig) {
              // Place promise chain on existing instance, to block subsequent hooks.
              // Also print warning for only for first such error, if multiple in a batch
              if (!self.reconfigPromise_) {
                ui.log('warn', err.message);

                self.reconfigPromise_ = exports.configure(registry)
                .then(function() {
                  // replace registered instance
                  delete registryClasses[registry];
                  var instance = exports.load(registry);
                  instance.triedConfig = true;
                  return instance;
                });
              }

              tryHook();
              return true;
            }
          }

          function checkRetry(err) {
            // don't retry process or processPackageConfig
            if (hook === 'processPackage' || hook === 'processPackageConfig')
              retries = maxRetries;

            retries++;
            var retriable = !err || err.retriable;
            var retry = retriable && retries <= maxRetries;

            var msg = (err ? 'Error' : 'Timed out') + ' on ' + hook +
               (typeof args[0] === 'string' ? ' for `' + registry + ':' + args[0] + '`' : '') +
               (retry ? ', retrying (' + retries + ').' : '') +

               (!err ? '\nTo increase the timeout run %jspm config registries.' + registry + '.timeouts.' + (hook == 'download' || hook == 'build' ? hook : 'lookup') + ' ' + timeout / 1000 * 2 + '%' : '') +
               (err ? '\n' + (!err.hideStack && err.stack || err) : '');
            if (retry) {
              ui.log('warn', msg);
              return tryHook();
            }
            else {
              return reject(msg);
            }
          }
          tryHook();
        });
      };
    });

    return registryInstance;
  }
  catch(e) {
    ui.log('err', !e.hideStack && e.stack || e);
    throw 'Unable to load registry %' + registry + '%';
  }
};