12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- var path = require('path');
- var extension = require('./lib/extension');
- var normalize = require('./lib/normalize');
- var register = require('./lib/register');
- exports.prepare = function(extensions, filepath, cwd, nothrow) {
- var config, usedExtension, err, option, attempt, error;
- var attempts = [];
- var onlyErrors = true;
- var exts = extension(filepath);
- if (exts) {
- exts.some(function(ext) {
- usedExtension = ext;
- config = normalize(extensions[ext]);
- return !!config;
- });
- }
- if (Object.keys(require.extensions).indexOf(usedExtension) !== -1) {
- return true;
- }
- if (!config) {
- if (nothrow) {
- return;
- }
- throw new Error('No module loader found for "' + usedExtension + '".');
- }
- if (!cwd) {
- cwd = path.dirname(path.resolve(filepath));
- }
- if (!Array.isArray(config)) {
- config = [config];
- }
- for (var i in config) {
- option = config[i];
- attempt = register(cwd, option.module, option.register);
- error = (attempt instanceof Error) ? attempt : null;
- if (error) {
- attempt = null;
- }
- attempts.push({
- moduleName: option.module,
- module: attempt,
- error: error,
- });
- if (!error) {
- onlyErrors = false;
- break;
- }
- }
- if (onlyErrors) {
- err = new Error('Unable to use specified module loaders for "' + usedExtension + '".');
- err.failures = attempts;
- if (nothrow) {
- return err;
- }
- throw err;
- }
- return attempts;
- };
|