const ensureRequire = require('../ensure-require')
|
const compileBabel = require('./babel-compiler')
|
const loadBabelConfig = require('../load-babel-config.js')
|
const { loadTypescriptConfig } = require('../load-typescript-config')
|
|
module.exports = function compileTypescript (scriptContent, vueJestConfig, filePath) {
|
ensureRequire('typescript', ['typescript'])
|
const typescript = require('typescript')
|
const tsConfig = loadTypescriptConfig(vueJestConfig)
|
|
const res = typescript.transpileModule(scriptContent, tsConfig)
|
const inputSourceMap = (res.sourceMapText !== undefined)
|
? JSON.parse(res.sourceMapText)
|
: false // inputSourceMap must be a boolean, object, or undefined as per babel requirements
|
|
// handle ES modules in TS source code in case user uses non commonjs module
|
// output and there is no .babelrc.
|
let inlineBabelConfig
|
if (tsConfig.compilerOptions.module !== 'commonjs' && !loadBabelConfig(vueJestConfig, filePath)) {
|
inlineBabelConfig = {
|
plugins: [
|
require('babel-plugin-transform-es2015-modules-commonjs')
|
]
|
}
|
}
|
|
return compileBabel(res.outputText, inputSourceMap, inlineBabelConfig, vueJestConfig)
|
}
|