Skip to content

Commit e119cd3

Browse files
committed
perf: cache tsconf
1 parent 2e1f555 commit e119cd3

File tree

4 files changed

+45
-6
lines changed

4 files changed

+45
-6
lines changed

lib/compilers/typescript-compiler.js

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,45 @@
11
const ensureRequire = require('../ensure-require')
22
const compileBabel = require('./babel-compiler')
33
const tsconfig = require('tsconfig')
4+
const cache = require('../cache')
5+
const logger = require('../logger')
6+
7+
const defaultTypescriptConfig = {
8+
'compilerOptions': {
9+
'module': 'es2015',
10+
'moduleResolution': 'node',
11+
'allowSyntheticDefaultImports': true,
12+
'strict': true,
13+
'noEmit': true
14+
},
15+
'include': [
16+
'**/*.ts'
17+
]
18+
}
19+
20+
function getTypescriptConfig () {
21+
// const cachedConfig = cache.get('typescript-config')
22+
// if (cachedConfig) {
23+
// return cachedConfig
24+
// } else {
25+
const { config } = tsconfig.loadSync(process.cwd())
26+
27+
if (!config) {
28+
logger.info('no tsconfig.json found, defaulting to default typescript options')
29+
}
30+
31+
const typescriptConfig = config || defaultTypescriptConfig
32+
cache.set('typescript-config', typescriptConfig)
33+
return typescriptConfig
34+
// }
35+
}
436

537
module.exports = function compileTypescript (scriptContent) {
638
ensureRequire('typescript', ['typescript'])
739
const typescript = require('typescript')
8-
const file = tsconfig.loadSync(process.cwd())
40+
const tsConfig = getTypescriptConfig()
941

10-
const res = typescript.transpileModule(scriptContent, file.config)
42+
const res = typescript.transpileModule(scriptContent, tsConfig)
1143

1244
return compileBabel(res.outputText, res.sourceMapText)
1345
}

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
"release": "build/release.sh",
2121
"release:note": "node build/gen-release-note.js",
2222
"test": "npm run lint && ./test.sh",
23-
"unit": "jest test --no-cache --runInBand --coverage --coverageDirectory test/coverage"
23+
"unit": "./test.sh",
24+
"unit:run": "jest test --no-cache --runInBand --coverage --coverageDirectory test/coverage"
2425
},
2526
"author": "Edd Yerburgh",
2627
"license": "MIT",

test.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ cp package.json temp-dir/package.json
88
cp .babelrc temp-dir/.babelrc
99
cp tsconfig.json temp-dir/tsconfig.json
1010
cd temp-dir
11-
yarn unit
11+
yarn unit:run

test/TypeScript.spec.js

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
1+
import { shallow } from 'vue-test-utils'
2+
import { resolve } from 'path'
13
import TypeScript from './resources/TypeScript.vue'
24
import jestVue from '../jest-vue'
3-
import { resolve } from 'path'
45
import { readFileSync } from 'fs'
5-
import { shallow } from 'vue-test-utils'
6+
import cache from '../lib/cache'
7+
8+
beforeEach(() => {
9+
cache.flushAll()
10+
})
611

712
test('processes .vue files', () => {
813
shallow(TypeScript)
914
})
15+
1016
test.skip('generates inline sourcemap', () => {
1117
const expectedMap = '//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkJhc2ljLnZ1ZSJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSEE7QUFLQTtBQVBBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFGQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFIQTtBQWpCQSIsInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwiaGVsbG9cIj5cbiAgICAgICAgPGgxIDpjbGFzcz1cImhlYWRpbmdDbGFzc2VzXCI+e3sgbXNnIH19PC9oMT5cbiAgICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4gICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgICBuYW1lOiAnYmFzaWMnLFxuICAgICAgICBjb21wdXRlZDoge1xuICAgICAgICAgICAgaGVhZGluZ0NsYXNzZXM6IGZ1bmN0aW9uIGhlYWRpbmdDbGFzc2VzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlZDogdGhpcy5pc0NyYXp5LFxuICAgICAgICAgICAgICAgICAgICBibHVlOiAhdGhpcy5pc0NyYXp5LFxuICAgICAgICAgICAgICAgICAgICBzaGFkb3c6IHRoaXMuaXNDcmF6eSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbXNnOiAnV2VsY29tZSB0byBZb3VyIFZ1ZS5qcyBBcHAnLFxuICAgICAgICAgICAgICAgIGlzQ3Jhenk6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSxcbiAgICAgICAgbWV0aG9kczoge1xuICAgICAgICAgICAgdG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmF6eSA9ICF0aGlzLmlzQ3Jhenk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG48L3NjcmlwdD5cbiJdfQ=='
1218
const filePath = resolve(__dirname, './resources/TypeScript.vue')

0 commit comments

Comments
 (0)