node-ejs-renderer/node_modules/interpret/index.js

543 lines
12 KiB
JavaScript
Raw Normal View History

2024-06-09 13:55:01 -04:00
var path = require('path');
// We only register on the final extension (like `.js`) due to https://github.com/joyent/node/blob/v0.12.0/lib/module.js#L353
// However, we use these matchers to apply the transform only if the full extension matches
function endsInJsx(filename) {
return filename.endsWith('.jsx');
}
function endsInTs(filename) {
return filename.endsWith('.ts');
}
function endsInTsx(filename) {
return filename.endsWith('.tsx');
}
function endsInBabelJs(filename) {
return filename.endsWith('.babel.js');
}
function endsInBabelJsx(filename) {
return filename.endsWith('.babel.jsx');
}
function endsInBabelTs(filename) {
return filename.endsWith('.babel.ts');
}
function endsInBabelTsx(filename) {
return filename.endsWith('.babel.tsx');
}
function endsInEsbuildJs(filename) {
return filename.endsWith('.esbuild.js');
}
function endsInEsbuildJsx(filename) {
return filename.endsWith('.esbuild.jsx');
}
function endsInEsbuildTs(filename) {
return filename.endsWith('.esbuild.ts');
}
function endsInEsbuildTsx(filename) {
return filename.endsWith('.esbuild.tsx');
}
function endsInSucraseJs(filename) {
return filename.endsWith('.sucrase.js');
}
function endsInSucraseJsx(filename) {
return filename.endsWith('.sucrase.jsx');
}
function endsInSucraseTs(filename) {
return filename.endsWith('.sucrase.ts');
}
function endsInSucraseTsx(filename) {
return filename.endsWith('.sucrase.tsx');
}
function endsInSwcJs(filename) {
return filename.endsWith('.swc.js');
}
function endsInSwcJsx(filename) {
return filename.endsWith('.swc.jsx');
}
function endsInSwcTs(filename) {
return filename.endsWith('.swc.ts');
}
function endsInSwcTsx(filename) {
return filename.endsWith('.swc.tsx');
}
var cjsStub = path.join(__dirname, 'cjs-stub');
var mjsStub = path.join(__dirname, 'mjs-stub');
function isNodeModules(file) {
return path.relative(process.cwd(), file).includes('node_modules');
}
var extensions = {
'.babel.js': {
module: '@babel/register',
register: function (hook, config) {
config = config || {
rootMode: 'upward-optional',
overrides: [{ only: [endsInBabelJs], presets: ['@babel/preset-env'] }],
};
hook(Object.assign({}, config, { extensions: '.js' }));
},
},
'.babel.jsx': {
module: '@babel/register',
register: function (hook, config) {
config = config || {
rootMode: 'upward-optional',
overrides: [
{
only: [endsInBabelJsx],
presets: ['@babel/preset-env', '@babel/preset-react'],
},
],
};
hook(Object.assign({}, config, { extensions: '.jsx' }));
},
},
'.babel.ts': [
{
module: '@babel/register',
register: function (hook, config) {
config = config || {
rootMode: 'upward-optional',
overrides: [
{
only: [endsInBabelTs],
presets: ['@babel/preset-env', '@babel/preset-typescript'],
},
],
};
hook(Object.assign({}, config, { extensions: '.ts' }));
},
},
],
'.babel.tsx': {
module: '@babel/register',
register: function (hook, config) {
config = config || {
rootMode: 'upward-optional',
overrides: [
{
only: [endsInBabelTsx],
presets: [
'@babel/preset-env',
'@babel/preset-react',
[
'@babel/preset-typescript',
{
isTSX: true,
allExtensions: true,
},
],
],
},
],
};
hook(Object.assign({}, config, { extensions: '.tsx' }));
},
},
'.cjs': cjsStub,
'.coffee': 'coffeescript/register',
'.coffee.md': 'coffeescript/register',
'.esbuild.js': {
module: 'esbuild-register/dist/node',
register: function (mod, config) {
config = config || {
target: 'node' + process.version.slice(1),
hookMatcher: endsInEsbuildJs,
};
mod.register(Object.assign({}, config, { extensions: ['.js'] }));
},
},
'.esbuild.jsx': {
module: 'esbuild-register/dist/node',
register: function (mod, config) {
config = config || {
target: 'node' + process.version.slice(1),
hookMatcher: endsInEsbuildJsx,
};
mod.register(Object.assign({}, config, { extensions: ['.jsx'] }));
},
},
'.esbuild.ts': {
module: 'esbuild-register/dist/node',
register: function (mod, config) {
config = config || {
target: 'node' + process.version.slice(1),
hookMatcher: endsInEsbuildTs,
};
mod.register(Object.assign({}, config, { extensions: ['.ts'] }));
},
},
'.esbuild.tsx': {
module: 'esbuild-register/dist/node',
register: function (mod, config) {
config = config || {
target: 'node' + process.version.slice(1),
hookMatcher: endsInEsbuildTsx,
};
mod.register(Object.assign({}, config, { extensions: ['.tsx'] }));
},
},
'.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 (.esm.js -> .js)
var esmLoader = hook(module);
require.extensions['.js'] = esmLoader('module')._extensions['.js'];
},
},
'.js': null,
'.json': null,
'.json5': 'json5/lib/register',
'.jsx': [
{
module: '@babel/register',
register: function (hook, config) {
config = config || {
rootMode: 'upward-optional',
overrides: [
{
only: [endsInJsx],
presets: ['@babel/preset-env', '@babel/preset-react'],
},
],
};
hook(Object.assign({}, config, { extensions: '.jsx' }));
},
},
'sucrase/register/jsx',
],
'.litcoffee': 'coffeescript/register',
// The mdx loader hooks both `.md` and `.mdx` when it is imported
// but we only install the hook if `.mdx` is the first file
'.mdx': '@mdx-js/register',
'.mjs': mjsStub,
'.node': null,
'.sucrase.js': {
module: 'sucrase/dist/register',
register: function (hook, config) {
config = config || {
matcher: endsInSucraseJs,
};
hook.registerJS(config);
},
},
'.sucrase.jsx': {
module: 'sucrase/dist/register',
register: function (hook, config) {
config = config || {
matcher: endsInSucraseJsx,
};
hook.registerJSX(config);
},
},
'.sucrase.ts': {
module: 'sucrase/dist/register',
register: function (hook, config) {
config = config || {
matcher: endsInSucraseTs,
};
hook.registerTS(config);
},
},
'.sucrase.tsx': {
module: 'sucrase/dist/register',
register: function (hook, config) {
config = config || {
matcher: endsInSucraseTsx,
};
hook.registerTSX(config);
},
},
'.swc.js': {
module: '@swc/register',
register: function (hook, config) {
config = config || {
only: [endsInSwcJs],
ignore: [isNodeModules],
jsc: {
parser: {
syntax: 'ecmascript',
},
},
module: {
type: 'commonjs',
},
};
hook(
Object.assign({}, config, {
extensions: '.js',
})
);
},
},
'.swc.jsx': {
module: '@swc/register',
register: function (hook, config) {
config = config || {
only: [endsInSwcJsx],
ignore: [isNodeModules],
jsc: {
parser: {
syntax: 'ecmascript',
jsx: true,
},
},
module: {
type: 'commonjs',
},
};
hook(
Object.assign({}, config, {
extensions: '.jsx',
})
);
},
},
'.swc.ts': {
module: '@swc/register',
register: function (hook, config) {
config = config || {
only: [endsInSwcTs],
ignore: [isNodeModules],
jsc: {
parser: {
syntax: 'typescript',
},
},
module: {
type: 'commonjs',
},
};
hook(
Object.assign({}, config, {
extensions: '.ts',
})
);
},
},
'.swc.tsx': {
module: '@swc/register',
register: function (hook, config) {
config = config || {
only: [endsInSwcTsx],
ignore: [isNodeModules],
jsc: {
parser: {
syntax: 'typescript',
tsx: true,
},
},
module: {
type: 'commonjs',
},
};
hook(
Object.assign({}, config, {
extensions: '.tsx',
})
);
},
},
'.toml': {
module: 'toml-require',
register: function (hook, config) {
hook.install(config);
},
},
'.ts': [
'ts-node/register',
'sucrase/register/ts',
{
module: '@babel/register',
register: function (hook, config) {
config = config || {
rootMode: 'upward-optional',
overrides: [
{
only: [endsInTs],
presets: ['@babel/preset-env', '@babel/preset-typescript'],
},
],
};
hook(
Object.assign({}, config, {
extensions: '.ts',
})
);
},
},
{
module: 'esbuild-register/dist/node',
register: function (mod, config) {
config = config || {
target: 'node' + process.version.slice(1),
hookMatcher: endsInTs,
};
mod.register(
Object.assign({}, config, {
extensions: ['.ts'],
})
);
},
},
{
module: '@swc/register',
register: function (hook, config) {
config = config || {
only: [endsInTs],
ignore: [isNodeModules],
jsc: {
parser: {
syntax: 'typescript',
},
},
module: {
type: 'commonjs',
},
};
hook(
Object.assign({}, config, {
extensions: '.ts',
})
);
},
},
],
'.cts': ['ts-node/register'],
'.tsx': [
'ts-node/register',
'sucrase/register/tsx',
{
module: '@babel/register',
register: function (hook, config) {
config = config || {
rootMode: 'upward-optional',
overrides: [
{
only: [endsInTsx],
presets: [
'@babel/preset-env',
'@babel/preset-react',
[
'@babel/preset-typescript',
{
isTSX: true,
allExtensions: true,
},
],
],
},
],
};
hook(
Object.assign({}, config, {
extensions: '.tsx',
})
);
},
},
{
module: 'esbuild-register/dist/node',
register: function (mod, config) {
config = config || {
target: 'node' + process.version.slice(1),
hookMatcher: endsInTsx,
};
mod.register(
Object.assign({}, config, {
extensions: ['.tsx'],
})
);
},
},
{
module: '@swc/register',
register: function (hook, config) {
config = config || {
only: [endsInTsx],
ignore: [isNodeModules],
jsc: {
parser: {
syntax: 'typescript',
tsx: true,
},
},
module: {
type: 'commonjs',
},
};
hook(
Object.assign({}, config, {
extensions: '.tsx',
})
);
},
},
],
'.yaml': 'yaml-hook/register',
'.yml': 'yaml-hook/register',
};
var jsVariantExtensions = [
'.js',
'.babel.js',
'.babel.jsx',
'.babel.ts',
'.babel.tsx',
'.esbuild.js',
'.esbuild.jsx',
'.esbuild.ts',
'.esbuild.tsx',
'.cjs',
'.coffee',
'.coffee.md',
'.esm.js',
'.jsx',
'.litcoffee',
'.mdx',
'.mjs',
'.sucrase.js',
'.sucrase.jsx',
'.sucrase.ts',
'.sucrase.tsx',
'.swc.js',
'.swc.jsx',
'.swc.ts',
'.swc.tsx',
'.ts',
'.tsx',
];
module.exports = {
extensions: extensions,
jsVariants: jsVariantExtensions.reduce(function (result, ext) {
result[ext] = extensions[ext];
return result;
}, {}),
};