59 lines
1.5 KiB
JavaScript
59 lines
1.5 KiB
JavaScript
const through = require('through2')
|
|
const path = require('path')
|
|
|
|
const isJson = (code) => {
|
|
try {
|
|
JSON.parse(code)
|
|
} catch (e) {
|
|
return false
|
|
}
|
|
|
|
return true
|
|
}
|
|
|
|
// tsify doesn't have transpile-only option like ts-node or ts-loader.
|
|
// It means it should check types whenever spec file is changed
|
|
// and it slows down the test speed a lot.
|
|
// We skip this slow type-checking process by using transpileModule() api.
|
|
module.exports = function (fileName, opts) {
|
|
const ts = opts.typescript
|
|
const chunks = []
|
|
const ext = path.extname(fileName)
|
|
|
|
return through(
|
|
(buf, enc, next) => {
|
|
chunks.push(buf.toString())
|
|
next()
|
|
},
|
|
function (next) {
|
|
const text = chunks.join('')
|
|
|
|
if (isJson(text)) {
|
|
this.push(text)
|
|
} else {
|
|
this.push(
|
|
ts.transpileModule(text, {
|
|
// explicitly name the file here
|
|
// for sourcemaps
|
|
fileName,
|
|
compilerOptions: {
|
|
esModuleInterop: true,
|
|
// inline the source maps into the file
|
|
// https://github.com/cypress-io/cypress-browserify-preprocessor/issues/48
|
|
inlineSourceMap: true,
|
|
inlineSources: true,
|
|
jsx:
|
|
ext === '.tsx' || ext === '.jsx' || ext === '.js'
|
|
? 'react'
|
|
: undefined,
|
|
downlevelIteration: true,
|
|
},
|
|
}).outputText,
|
|
)
|
|
}
|
|
|
|
next()
|
|
},
|
|
)
|
|
}
|