diff --git a/assets/babel-plugin.js b/assets/babel-plugin.js index 3b1632534c..e11162bf8e 100644 --- a/assets/babel-plugin.js +++ b/assets/babel-plugin.js @@ -1,22 +1,27 @@ const path = require('path'); - // A lame copy-paste from src/index.ts function getWebDependencyName(dep) { return dep.replace(/\.js$/, ''); } -function rewriteBareModuleImport(imp, addMissingJsExtensions) { - const extname = addMissingJsExtensions && '.js'; - if (imp.startsWith('/') || imp.startsWith('.')|| imp.startsWith('\\')) { - if (extname && !path.extname(imp)) imp += extname; - return imp; +function rewriteImport(imp, shouldAddMissingExtension) { + const isSourceImport = imp.startsWith('/') || imp.startsWith('.')|| imp.startsWith('\\'); + if (!isSourceImport) { + return `/web_modules/${getWebDependencyName(imp)}.js`; + } + if (shouldAddMissingExtension && !path.extname(imp)) { + return imp + '.js'; } - return `/web_modules/${getWebDependencyName(imp)}.js`; + return imp; } -module.exports = function pikaWebBabelTransform({types: t}, options) { - const addMissingJsExtensions = options.addMissingJsExtensions; - const rewriteBareModuleName = options.rewriteBareModuleName || rewriteBareModuleImport; +/** + * BABEL OPTIONS: + * extensionsOptional - Adds any missing JS extensions to local/relative imports. Support for these + * partial imports is missing in the browser and being phased out of Node.js, but + * this can be a useful option for migrating an old project to @pika/web. + */ +module.exports = function pikaWebBabelTransform({types: t}, {extensionsOptional}) { return { visitor: { CallExpression(path, {file, opts}) { @@ -32,7 +37,7 @@ module.exports = function pikaWebBabelTransform({types: t}, options) { source.replaceWith( - t.stringLiteral(rewriteBareModuleName(source.node.value, addMissingJsExtensions)), + t.stringLiteral(rewriteImport(source.node.value, extensionsOptional)), ); }, 'ImportDeclaration|ExportNamedDeclaration|ExportAllDeclaration'(path, {file, opts}) { @@ -44,7 +49,7 @@ module.exports = function pikaWebBabelTransform({types: t}, options) { } source.replaceWith( - t.stringLiteral(rewriteBareModuleName(source.node.value, addMissingJsExtensions)), + t.stringLiteral(rewriteImport(source.node.value, extensionsOptional)), ); }, },