Skip to content

Commit 8ee57f7

Browse files
authored
feat: transform Options as Component with vue-class-component (#1)
1 parent 2967fac commit 8ee57f7

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ Legend of annotations:
137137
- 🔴 [RFC21: Scoped slot API for `router-link`](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0021-router-link-scoped-slot.md)
138138
- 🔴 [RFC28: Change active and exact-active behavior for `router-link`](https://github.com/vuejs/rfcs/blob/master/active-rfcs/0028-router-active-link.md)
139139
- 🔴 [`vue-class-component` 7.x to 8](https://github.com/vuejs/vue-class-component/issues/406)
140-
- `import { Component } from 'vue-class-component'` -> `import { Options as Component } from 'vue-class-component'`
140+
- 🟢 `import { Component } from 'vue-class-component'` -> `import { Options as Component } from 'vue-class-component'`
141141
- `import Vue from 'vue'` -> `import { Vue } from 'vue-class-component'` (Need to avoid name collision if there's any reference to `Vue` besides `extends Vue`)
142142
- `Component.registerHooks` -> `Vue.registerHooks`
143143

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { defineInlineTest } from 'jscodeshift/src/testUtils'
2+
const transform = require('../vue-class-component-v8')
3+
4+
defineInlineTest(
5+
transform,
6+
{},
7+
`import { Component } from 'vue-class-component'`,
8+
`import { Options as Component } from 'vue-class-component'`,
9+
'correctly transform import Component form vue-class-component'
10+
)
11+
12+
defineInlineTest(
13+
transform,
14+
{},
15+
`import { Component, Props } from 'vue-class-component'`,
16+
`import { Options as Component, Props } from 'vue-class-component'`,
17+
'correctly transform import Component form vue-class-component w/ multiple import'
18+
)

transformations/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ type JSTransformationModule = {
88
const transformationMap: {
99
[name: string]: JSTransformationModule
1010
} = {
11+
'vue-class-component-v8': require('./vue-class-component-v8'),
1112
'new-global-api': require('./new-global-api'),
1213
'vue-router-v4': require('./vue-router-v4'),
1314
'vuex-v4': require('./vuex-v4'),
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import wrap from '../src/wrap-ast-transformation'
2+
import type { ASTTransformation } from '../src/wrap-ast-transformation'
3+
4+
// import { Component } from 'vue-class-component' ->
5+
// import { Options as Component } from 'vue-class-component'
6+
export const transformAST: ASTTransformation = (context) => {
7+
const { j, root } = context
8+
9+
const vueClassComponentImportDecls = root.find(j.ImportDeclaration, {
10+
source: {
11+
value: 'vue-class-component'
12+
}
13+
})
14+
15+
const ComponentImportSpec = vueClassComponentImportDecls.find(j.ImportSpecifier, {
16+
imported: {
17+
name: 'Component'
18+
}
19+
})
20+
21+
ComponentImportSpec.replaceWith(({ node }) => {
22+
return j.importSpecifier(j.identifier('Options'), j.identifier('Component'))
23+
})
24+
}
25+
26+
export default wrap(transformAST)
27+
export const parser = 'babylon'

0 commit comments

Comments
 (0)