| var path = require('path'); |
| |
| var endsInBabelJs = /\.babel\.[jt]s(x)$/; |
| |
| var mjsStub = path.join(__dirname, 'mjs-stub'); |
| |
| function ignoreNonBabelAndNodeModules(file) { |
| return !endsInBabelJs.test(file) && |
| path.relative(process.cwd(), file).split(path.sep).indexOf('node_modules') >= 0; |
| } |
| |
| var extensions = { |
| '.babel.js': [ |
| { |
| module: '@babel/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.js', |
| rootMode: 'upward-optional', |
| ignore: [ignoreNonBabelAndNodeModules], |
| }); |
| }, |
| }, |
| { |
| module: 'babel-register', |
| register: function(hook) { |
| hook({ |
| extensions: '.js', |
| ignore: ignoreNonBabelAndNodeModules, |
| }); |
| }, |
| }, |
| { |
| module: 'babel-core/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.js', |
| ignore: ignoreNonBabelAndNodeModules, |
| }); |
| }, |
| }, |
| { |
| module: 'babel/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.js', |
| ignore: ignoreNonBabelAndNodeModules, |
| }); |
| }, |
| }, |
| ], |
| '.babel.ts': [ |
| { |
| module: '@babel/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.ts', |
| rootMode: 'upward-optional', |
| ignore: [ignoreNonBabelAndNodeModules], |
| }); |
| }, |
| }, |
| ], |
| '.buble.js': 'buble/register', |
| '.cirru': 'cirru-script/lib/register', |
| '.cjsx': 'node-cjsx/register', |
| '.co': 'coco', |
| '.coffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], |
| '.coffee.md': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], |
| '.csv': 'require-csv', |
| '.eg': 'earlgrey/register', |
| '.esm.js': { |
| module: 'esm', |
| register: function(hook) { |
| // register on .js extension due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353 |
| // which only captures the final extension (.babel.js -> .js) |
| var esmLoader = hook(module); |
| require.extensions['.js'] = esmLoader('module')._extensions['.js']; |
| }, |
| }, |
| '.iced': ['iced-coffee-script/register', 'iced-coffee-script'], |
| '.iced.md': 'iced-coffee-script/register', |
| '.ini': 'require-ini', |
| '.js': null, |
| '.json': null, |
| '.json5': ['json5/lib/register', 'json5/lib/require'], |
| '.jsx': [ |
| { |
| module: '@babel/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.jsx', |
| rootMode: 'upward-optional', |
| ignore: [ignoreNonBabelAndNodeModules], |
| }); |
| }, |
| }, |
| { |
| module: 'babel-register', |
| register: function(hook) { |
| hook({ |
| extensions: '.jsx', |
| ignore: ignoreNonBabelAndNodeModules, |
| }); |
| }, |
| }, |
| { |
| module: 'babel-core/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.jsx', |
| ignore: ignoreNonBabelAndNodeModules, |
| }); |
| }, |
| }, |
| { |
| module: 'babel/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.jsx', |
| ignore: ignoreNonBabelAndNodeModules, |
| }); |
| }, |
| }, |
| { |
| module: 'node-jsx', |
| register: function(hook) { |
| hook.install({ extension: '.jsx', harmony: true }); |
| }, |
| }, |
| ], |
| '.litcoffee': ['coffeescript/register', 'coffee-script/register', 'coffeescript', 'coffee-script'], |
| '.liticed': 'iced-coffee-script/register', |
| '.ls': ['livescript', 'LiveScript'], |
| '.mjs': mjsStub, |
| '.node': null, |
| '.toml': { |
| module: 'toml-require', |
| register: function(hook) { |
| hook.install(); |
| }, |
| }, |
| '.ts': [ |
| 'ts-node/register', |
| 'typescript-node/register', |
| 'typescript-register', |
| 'typescript-require', |
| 'sucrase/register/ts', |
| { |
| module: '@babel/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.ts', |
| rootMode: 'upward-optional', |
| ignore: [ignoreNonBabelAndNodeModules], |
| }); |
| }, |
| }, |
| ], |
| '.tsx': [ |
| 'ts-node/register', |
| 'typescript-node/register', |
| 'sucrase/register', |
| { |
| module: '@babel/register', |
| register: function(hook) { |
| hook({ |
| extensions: '.tsx', |
| rootMode: 'upward-optional', |
| ignore: [ignoreNonBabelAndNodeModules], |
| }); |
| }, |
| }, |
| ], |
| '.wisp': 'wisp/engine/node', |
| '.xml': 'require-xml', |
| '.yaml': 'require-yaml', |
| '.yml': 'require-yaml', |
| }; |
| |
| var jsVariantExtensions = [ |
| '.js', |
| '.babel.js', |
| '.babel.ts', |
| '.buble.js', |
| '.cirru', |
| '.cjsx', |
| '.co', |
| '.coffee', |
| '.coffee.md', |
| '.eg', |
| '.esm.js', |
| '.iced', |
| '.iced.md', |
| '.jsx', |
| '.litcoffee', |
| '.liticed', |
| '.ls', |
| '.mjs', |
| '.ts', |
| '.tsx', |
| '.wisp', |
| ]; |
| |
| module.exports = { |
| extensions: extensions, |
| jsVariants: jsVariantExtensions.reduce(function(result, ext) { |
| result[ext] = extensions[ext]; |
| return result; |
| }, {}), |
| }; |