mirror of
https://github.com/vuejs/vue-cli.git
synced 2026-01-15 03:40:48 -06:00
fix: support parser option for codemods, and enable ts parsing by default (#4883)
fixes #4861
This commit is contained in:
@@ -23,6 +23,7 @@ new Vue({
|
||||
}).$mount('#app')
|
||||
`.trim())
|
||||
fs.writeFileSync(path.resolve(templateDir, 'empty-entry.js'), `;`)
|
||||
fs.writeFileSync(path.resolve(templateDir, 'main.ts'), `const a: string = 'hello';`)
|
||||
fs.writeFileSync(path.resolve(templateDir, 'hello.vue'), `
|
||||
<template>
|
||||
<p>Hello, {{ msg }}</p>
|
||||
@@ -530,6 +531,23 @@ test('api: injectImports to empty file', async () => {
|
||||
expect(fs.readFileSync('/main.js', 'utf-8')).toMatch(/import foo from 'foo'\r?\nimport bar from 'bar'/)
|
||||
})
|
||||
|
||||
test('api: injectImports to typescript file', async () => {
|
||||
const generator = new Generator('/', { plugins: [
|
||||
{
|
||||
id: 'test',
|
||||
apply: api => {
|
||||
api.injectImports('main.ts', `import foo from 'foo'`)
|
||||
api.render({
|
||||
'main.ts': path.join(templateDir, 'main.ts')
|
||||
})
|
||||
}
|
||||
}
|
||||
] })
|
||||
|
||||
await generator.generate()
|
||||
expect(fs.readFileSync('/main.ts', 'utf-8')).toMatch(/import foo from 'foo'/)
|
||||
})
|
||||
|
||||
test('api: addEntryDuplicateImport', async () => {
|
||||
const generator = new Generator('/', { plugins: [
|
||||
{
|
||||
|
||||
@@ -1,6 +1,30 @@
|
||||
const jscodeshift = require('jscodeshift')
|
||||
const adapt = require('vue-jscodeshift-adapter')
|
||||
let jscodeshift = require('jscodeshift')
|
||||
|
||||
module.exports = function runCodemod (transform, fileInfo, options) {
|
||||
return adapt(transform)(fileInfo, { jscodeshift }, options || {})
|
||||
module.exports = function runCodemod (transformModule, fileInfo, options = {}) {
|
||||
const transform = typeof transformModule.default === 'function'
|
||||
? transformModule.default
|
||||
: transformModule
|
||||
|
||||
let parser = transformModule.parser || options.parser
|
||||
if (!parser) {
|
||||
if (fileInfo.path.endsWith(('.ts'))) {
|
||||
parser = 'ts'
|
||||
} else if (fileInfo.path.endsWith('.tsx')) {
|
||||
parser = 'tsx'
|
||||
}
|
||||
}
|
||||
|
||||
if (parser) {
|
||||
jscodeshift = jscodeshift.withParser(parser)
|
||||
}
|
||||
|
||||
const api = {
|
||||
jscodeshift,
|
||||
j: jscodeshift,
|
||||
stats: () => {},
|
||||
report: () => {}
|
||||
}
|
||||
|
||||
return adapt(transform)(fileInfo, api, options)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user