Skip to content
/ vue-cli Public

Commit b7f83b4

Browse files
authoredNov 26, 2019
fix: support parser option for codemods, and enable ts parsing by default (#4883)
fixes #4861
1 parent ef2cbae commit b7f83b4

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed
 

‎packages/@vue/cli/__tests__/Generator.spec.js

+18
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ new Vue({
2323
}).$mount('#app')
2424
`.trim())
2525
fs.writeFileSync(path.resolve(templateDir, 'empty-entry.js'), `;`)
26+
fs.writeFileSync(path.resolve(templateDir, 'main.ts'), `const a: string = 'hello';`)
2627
fs.writeFileSync(path.resolve(templateDir, 'hello.vue'), `
2728
<template>
2829
<p>Hello, {{ msg }}</p>
@@ -530,6 +531,23 @@ test('api: injectImports to empty file', async () => {
530531
expect(fs.readFileSync('/main.js', 'utf-8')).toMatch(/import foo from 'foo'\r?\nimport bar from 'bar'/)
531532
})
532533

534+
test('api: injectImports to typescript file', async () => {
535+
const generator = new Generator('/', { plugins: [
536+
{
537+
id: 'test',
538+
apply: api => {
539+
api.injectImports('main.ts', `import foo from 'foo'`)
540+
api.render({
541+
'main.ts': path.join(templateDir, 'main.ts')
542+
})
543+
}
544+
}
545+
] })
546+
547+
await generator.generate()
548+
expect(fs.readFileSync('/main.ts', 'utf-8')).toMatch(/import foo from 'foo'/)
549+
})
550+
533551
test('api: addEntryDuplicateImport', async () => {
534552
const generator = new Generator('/', { plugins: [
535553
{
+27-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
1-
const jscodeshift = require('jscodeshift')
21
const adapt = require('vue-jscodeshift-adapter')
2+
let jscodeshift = require('jscodeshift')
33

4-
module.exports = function runCodemod (transform, fileInfo, options) {
5-
return adapt(transform)(fileInfo, { jscodeshift }, options || {})
4+
module.exports = function runCodemod (transformModule, fileInfo, options = {}) {
5+
const transform = typeof transformModule.default === 'function'
6+
? transformModule.default
7+
: transformModule
8+
9+
let parser = transformModule.parser || options.parser
10+
if (!parser) {
11+
if (fileInfo.path.endsWith(('.ts'))) {
12+
parser = 'ts'
13+
} else if (fileInfo.path.endsWith('.tsx')) {
14+
parser = 'tsx'
15+
}
16+
}
17+
18+
if (parser) {
19+
jscodeshift = jscodeshift.withParser(parser)
20+
}
21+
22+
const api = {
23+
jscodeshift,
24+
j: jscodeshift,
25+
stats: () => {},
26+
report: () => {}
27+
}
28+
29+
return adapt(transform)(fileInfo, api, options)
630
}

0 commit comments

Comments
 (0)
Please sign in to comment.