You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.3 KiB
59 lines
1.3 KiB
const path = require('path'); |
|
|
|
const extension = require('./lib/extension'); |
|
const normalize = require('./lib/normalize'); |
|
const register = require('./lib/register'); |
|
|
|
exports.prepare = function (extensions, filepath, cwd, nothrow) { |
|
var option, attempt; |
|
var attempts = []; |
|
var err; |
|
var onlyErrors = false; |
|
var ext = extension(filepath); |
|
if (Object.keys(require.extensions).indexOf(ext) !== -1) { |
|
return true; |
|
} |
|
var config = normalize(extensions[ext]); |
|
if (!config) { |
|
if (nothrow) { |
|
return; |
|
} else { |
|
throw new Error('No module loader found for "'+ext+'".'); |
|
} |
|
} |
|
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; |
|
} else { |
|
onlyErrors = true; |
|
} |
|
} |
|
if (onlyErrors) { |
|
err = new Error('Unable to use specified module loaders for "'+ext+'".'); |
|
err.failures = attempts; |
|
if (nothrow) { |
|
return err; |
|
} else { |
|
throw err; |
|
} |
|
} |
|
return attempts; |
|
};
|
|
|