123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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;
- };
|