rsnext/packages/next/taskfile-typescript.js
Joe Haddad 18a9c7e371
Improve linting rules to catch more errors (#9374)
* Update `packages/`

* Update examples

* Update tests

* Update bench

* Update top level files

* Fix build

* trigger
2019-11-10 19:24:53 -08:00

65 lines
1.7 KiB
JavaScript

try {
const ts = require('typescript')
const extname = require('path').extname
// previously next-server/tsconfig.json
const config = {
compilerOptions: {
strict: true,
module: 'esnext',
target: 'ES2017',
esModuleInterop: true,
moduleResolution: 'node',
jsx: 'react',
},
exclude: ['./dist/**', './*.d.ts', './constants.d.ts'],
}
module.exports = function(task) {
// eslint-disable-next-line require-yield
task.plugin('typescript', { every: true }, function*(file, options) {
const opts = {
fileName: file.base,
compilerOptions: {
...config.compilerOptions,
...options,
},
}
const ext = extname(file.base)
// Include declaration files as they are
if (file.base.endsWith('.d.ts')) return
// For example files without an extension don't have to be rewritten
if (ext) {
// Replace `.ts` with `.js`
const extRegex = new RegExp(ext.replace('.', '\\.') + '$', 'i')
file.base = file.base.replace(extRegex, '.js')
}
// compile output
const result = ts.transpileModule(file.data.toString(), opts)
if (opts.compilerOptions.sourceMap && result.sourceMapText) {
// add sourcemap to `files` array
this._.files.push({
dir: file.dir,
base: `${file.base}.map`,
data: Buffer.from(JSON.stringify(result.sourceMapText), 'utf8'),
})
}
// update file's data
file.data = Buffer.from(
result.outputText.replace(
/process\.env\.__NEXT_VERSION/g,
`"${require('./package.json').version}"`
),
'utf8'
)
})
}
} catch (err) {
console.error(err)
}