/* global process, __dirname */ const path = require('path') const PROD_EXT = '.prod' function fixImportSource ({ node: { source } }, { filename }) { if (shouldIgnoreImport(source)) { return } let resolvedShort = '' try { const paths = [ filename && path.dirname(filename), __dirname, process.cwd(), ].filter(p => !!p) const resolved = require.resolve(source.value, { paths }) resolvedShort = '@interactjs/' + resolved.replace(/.*\/@interactjs\//, '') source.value = resolvedShort.replace(/(\.js)?$/, PROD_EXT) } catch (e) {} } function babelPluginInteractjsProd () { if (process.env.NODE_ENV === 'development') { // eslint-disable-next-line no-console console.warn('[@interactjs/dev-tools] You\'re using the production plugin in the development environment. You might lose out on some helpful hints!') } return { visitor: { ImportDeclaration: fixImportSource, ExportNamedDeclaration: fixImportSource, ExportAllDeclaration: fixImportSource, ExportDefaultSpecifier: fixImportSource, }, } } function shouldIgnoreImport (source) { return !source || // only change @interactjs scoped imports !source.value.startsWith('@interactjs/') || // ignore imports of prod files source.value.endsWith(PROD_EXT) || source.value.endsWith(PROD_EXT + '.js') } module.exports = babelPluginInteractjsProd Object.assign(module.exports, { default: babelPluginInteractjsProd, fixImportSource, })