60 lines
1.6 KiB
JavaScript
60 lines
1.6 KiB
JavaScript
/* 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 })
|
|
const resolvedWithoutScopePath = resolved.replace(/.*[\\/]@interactjs[\\/]/, '')
|
|
|
|
resolvedShort = path
|
|
.join('@interactjs', resolvedWithoutScopePath)
|
|
// windows path to posix
|
|
.replace(/\\/g, '/')
|
|
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,
|
|
})
|