Skip to content

Commit 842467b

Browse files
authored
feat: use ts-jest for TypeScript config resolution (#139)
BREAKING CHANGE: removes tsConfig options
1 parent 9888245 commit 842467b

30 files changed

+1980
-1296
lines changed

.babelrc

+1-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
{
2-
"env": {
3-
"test": {
4-
"presets": ["env"]
5-
}
6-
}
2+
"presets": ["@babel/env"]
73
}

lib/cache.js

-5
This file was deleted.

lib/compilers/coffee-compiler.js

+7-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
const ensureRequire = require('../ensure-require.js')
2-
const throwError = require('../throw-error')
3-
const loadBabelConfig = require('../load-babel-config.js')
2+
const throwError = require('../utils').throwError
3+
const getBabelOptions = require('../utils').getBabelOptions
44

5-
module.exports = function(raw, config, filePath) {
5+
module.exports = function(src, filename, config) {
66
ensureRequire('coffee', ['coffeescript'])
77
const coffee = require('coffeescript')
8+
const babelOptions = getBabelOptions(filename)
89
let compiled
910
try {
10-
compiled = coffee.compile(raw, {
11+
compiled = coffee.compile(src, {
12+
filename,
1113
bare: true,
1214
sourceMap: true,
13-
transpile: loadBabelConfig(config, filePath)
15+
transpile: babelOptions
1416
})
1517
} catch (err) {
1618
throwError(err)

lib/compilers/helpers/local-resolve-helper.js

-15
This file was deleted.

lib/compilers/helpers/module-name-mapper-helper.js

+15-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,18 @@
1-
const localResolve = require('./local-resolve-helper')
1+
const path = require('path')
2+
3+
/**
4+
* Resolves the path to the file locally.
5+
*
6+
* @param {String} to - the name of the file to resolve to
7+
* @param {String} localPath - the local path
8+
* @returns {String} path - path to the file to import
9+
*/
10+
function localResolve(to, localPath) {
11+
if (localPath.startsWith('/')) {
12+
return localPath
13+
}
14+
return path.join(path.dirname(to), localPath)
15+
}
216

317
/**
418
* Applies the moduleNameMapper substitution from the jest config

lib/compilers/sass-compiler.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const ensureRequire = require('../ensure-require')
2-
const getVueJestConfig = require('../get-vue-jest-config')
3-
const logger = require('../logger')
2+
const getVueJestConfig = require('../utils').getVueJestConfig
3+
const warn = require('../utils').warn
44

55
const applyModuleNameMapper = require('./helpers/module-name-mapper-helper')
66

@@ -35,10 +35,10 @@ module.exports = (content, filePath, jestConfig = {}) => {
3535
.css.toString()
3636
} catch (err) {
3737
if (!vueJestConfig.hideStyleWarn) {
38-
logger.warn(
38+
warn(
3939
`There was an error rendering the SASS in ${filePath}. SASS is fully supported by vue-jest. Still some features might throw errors. Webpack aliases are a common cause of errors. If you use Webpack aliases, please use jest's suggested way via moduleNameMapper which is supported.`
4040
)
41-
logger.warn(`Error while compiling styles: ${err}`)
41+
warn(`Error while compiling styles: ${err}`)
4242
}
4343
}
4444

lib/compilers/scss-compiler.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
const path = require('path')
22
const fs = require('fs')
33
const ensureRequire = require('../ensure-require')
4-
const getVueJestConfig = require('../get-vue-jest-config')
5-
const logger = require('../logger')
4+
const getVueJestConfig = require('../utils').getVueJestConfig
5+
const warn = require('../utils').warn
66

77
const applyModuleNameMapper = require('./helpers/module-name-mapper-helper')
88

@@ -45,10 +45,10 @@ module.exports = (content, filePath, jestConfig = {}) => {
4545
.css.toString()
4646
} catch (err) {
4747
if (!vueJestConfig.hideStyleWarn) {
48-
logger.warn(
48+
warn(
4949
`There was an error rendering the SCSS in ${filePath}. SCSS is fully supported by vue-jest. Still some features might throw errors. Webpack aliases are a common cause of errors. If you use Webpack aliases, please use jest's suggested way via moduleNameMapper which is supported.`
5050
)
51-
logger.warn(`Error while compiling styles: ${err}`)
51+
warn(`Error while compiling styles: ${err}`)
5252
}
5353
}
5454

lib/compilers/typescript-compiler.js

+17-16
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,35 @@
11
const ensureRequire = require('../ensure-require')
2-
const loadBabelConfig = require('../load-babel-config.js')
3-
const { loadTypescriptConfig } = require('../load-typescript-config')
42
const babelJest = require('babel-jest')
5-
const getVueJestConfig = require('../get-vue-jest-config')
3+
const getBabelOptions = require('../utils').getBabelOptions
4+
const getTsJestConfig = require('../utils').getTsJestConfig
5+
const stripInlineSourceMap = require('../utils').stripInlineSourceMap
66

77
module.exports = function compileTypescript(scriptContent, filePath, config) {
88
ensureRequire('typescript', ['typescript'])
9-
const vueJestConfig = getVueJestConfig(config)
109
const typescript = require('typescript')
11-
const tsConfig = loadTypescriptConfig(vueJestConfig)
1210

13-
const res = typescript.transpileModule(scriptContent, tsConfig)
11+
const { tsconfig } = getTsJestConfig(config)
12+
const babelOptions = getBabelOptions(filePath)
13+
14+
const res = typescript.transpileModule(scriptContent, tsconfig)
15+
16+
res.outputText = stripInlineSourceMap(res.outputText)
17+
1418
const inputSourceMap =
1519
res.sourceMapText !== undefined ? JSON.parse(res.sourceMapText) : ''
1620

1721
// handle ES modules in TS source code in case user uses non commonjs module
1822
// output and there is no .babelrc.
19-
let inlineBabelConfig = {}
20-
if (
21-
tsConfig.compilerOptions.module !== 'commonjs' &&
22-
!loadBabelConfig(vueJestConfig)
23-
) {
24-
inlineBabelConfig = {
25-
plugins: [require('babel-plugin-transform-es2015-modules-commonjs')]
23+
let inlineBabelOptions = {}
24+
if (tsconfig.compilerOptions.module !== 'commonjs' && !babelOptions) {
25+
inlineBabelOptions = {
26+
plugins: [require('@babel/plugin-transform-modules-commonjs')]
2627
}
2728
}
29+
2830
const transformer = babelJest.createTransformer(
29-
Object.assign(inlineBabelConfig, {
30-
inputSourceMap
31-
})
31+
Object.assign(inlineBabelOptions, { inputSourceMap })
3232
)
33+
3334
return transformer.process(res.outputText, filePath, config)
3435
}

lib/deprecate.js

-24
This file was deleted.

lib/ensure-require.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const throwError = require('./throw-error')
1+
const throwError = require('./utils').throwError
22

33
module.exports = function(name, deps) {
44
let i, len

lib/get-cache-key.js

-20
This file was deleted.

lib/get-vue-jest-config.js

-11
This file was deleted.

lib/load-babel-config.js

-64
This file was deleted.

lib/load-typescript-config.js

-77
This file was deleted.

lib/logger.js

-9
This file was deleted.

lib/process-style.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const getVueJestConfig = require('./get-vue-jest-config')
1+
const getVueJestConfig = require('./utils').getVueJestConfig
22
const cssExtract = require('extract-from-css')
33

44
module.exports = function processStyle(stylePart, filePath, jestConfig = {}) {

0 commit comments

Comments
 (0)