Skip to content

Commit 141c8af

Browse files
committed
refactor: migrate to vue/core's vapor branch
1 parent daab455 commit 141c8af

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+24955
-1139
lines changed

.changeset/honest-drinks-scream.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
'@vue-jsx-vapor/compiler': minor
3+
'unplugin-vue-jsx-vapor': minor
4+
'@vue-jsx-vapor/babel': minor
5+
---
6+
7+
migrate to vue/core's vapor branch

packages/babel/src/index.ts

+3-5
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,8 @@ export default (): {
4141
JSXElement | JSXFragment
4242
> = (path) => {
4343
if (
44-
(path.parent?.type !== 'JSXExpressionContainer' &&
45-
!isJSXElement(path.parent) &&
46-
!isConditionalExpression(path.parentPath)) ||
47-
path.parentPath.parent?.type === 'JSXAttribute'
44+
!isJSXElement(path.parent) &&
45+
!isConditionalExpression(path.parentPath)
4846
) {
4947
state.roots.push({
5048
node: path.node,
@@ -90,7 +88,7 @@ export default (): {
9088
const importResult = Array.from(importSet)
9189
.map((i) => `${i} as _${i}`)
9290
.join(', ')
93-
statements.unshift(`import { ${importResult} } from 'vue/vapor';\n`)
91+
statements.unshift(`import { ${importResult} } from 'vue';\n`)
9492
}
9593

9694
path.node.body.unshift(

packages/babel/src/transform.ts

+6-17
Original file line numberDiff line numberDiff line change
@@ -10,38 +10,27 @@ export const transformJSX: VisitNodeFunction<
1010
Options,
1111
JSXElement | JSXFragment
1212
> = (path, state) => {
13-
if (
14-
!(
15-
path.parent?.type !== 'JSXExpressionContainer' &&
16-
!isJSXElement(path.parent)
17-
)
18-
) {
19-
return
20-
}
13+
if (isJSXElement(path.parent)) return
2114

2215
const root = state.roots.shift()
2316
if (!root) return
17+
2418
const isTS = state.filename?.endsWith('tsx')
25-
let { code, vaporHelpers, preamble, map } = compile(root.node, {
26-
mode: 'module',
27-
inline: true,
19+
let { code, helpers, preamble, map } = compile(root.node, {
2820
isTS,
2921
filename: state.filename,
3022
sourceMap: true,
3123
source: ' '.repeat(root.node.start || 0) + root.source,
3224
...state?.compile,
3325
})
3426

35-
vaporHelpers.forEach((helper) => state.importSet.add(helper))
27+
helpers.forEach((helper) => state.importSet.add(helper))
3628

3729
preamble = preamble.replaceAll(
3830
/(?<=const )t(?=(\d))/g,
3931
`_t${state.preambleIndex}`,
4032
)
41-
code = code
42-
.replaceAll(/(?<== )t(?=\d)/g, `_t${state.preambleIndex}`)
43-
.replaceAll('_ctx: any', '')
44-
.replaceAll('$event: any', '$event')
33+
code = code.replaceAll(/(?<== )t(?=\d)/g, `_t${state.preambleIndex}`)
4534
state.preambleIndex++
4635

4736
for (const [, key, value] of preamble.matchAll(
@@ -59,7 +48,7 @@ export const transformJSX: VisitNodeFunction<
5948
events.split(', ').forEach((event) => state.delegateEventSet.add(event))
6049
}
6150

62-
const ast = parse(code, {
51+
const ast = parse(`(() => {${code}})()`, {
6352
sourceFilename: state.filename,
6453
plugins: isTS ? ['jsx', 'typescript'] : ['jsx'],
6554
})

packages/babel/test/transform.spec.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,26 @@ describe('transform', () => {
1313
},
1414
)!
1515
expect(code).toMatchInlineSnapshot(`
16-
"import { delegate as _delegate, delegateEvents as _delegateEvents, template as _template, createIf as _createIf } from 'vue/vapor';
16+
"import { delegateEvents as _delegateEvents, template as _template, createIf as _createIf } from 'vue';
1717
import { setText as _setText } from 'unplugin-vue-jsx-vapor/helper.js';
18-
const _t00 = _template("<div></div>");
18+
const _t00 = _template("<div></div>", true);
1919
const _t10 = _template("<div>Hello</div>");
2020
const _t11 = _template("<div>World</div>");
2121
_delegateEvents("click", "dblclick");
2222
const a = (() => {
2323
const n0 = _t00();
2424
_setText(n0, () => Hello);
25-
_delegate(n0, "click", () => onClick);
25+
n0.$evtclick = e => onClick(e);
2626
return n0;
2727
})();
2828
const b = (() => {
2929
const n0 = _createIf(() => foo, () => {
3030
const n2 = _t10();
31-
_delegate(n2, "click", () => onClick);
31+
n2.$evtclick = e => onClick(e);
3232
return n2;
3333
}, () => {
3434
const n4 = _t11();
35-
_delegate(n4, "dblclick", () => onDblclick);
35+
n4.$evtdblclick = e => onDblclick(e);
3636
return n4;
3737
});
3838
return n0;

packages/compiler/package.json

-3
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,8 @@
5757
"dependencies": {
5858
"@babel/parser": "catalog:",
5959
"@babel/types": "catalog:",
60-
"@vue-macros/common": "^1.10.4",
61-
"@vue/compiler-core": "catalog:",
6260
"@vue/compiler-dom": "catalog:",
6361
"@vue/compiler-vapor": "catalog:",
64-
"@vue/runtime-vapor": "catalog:",
6562
"@vue/shared": "catalog:"
6663
}
6764
}

packages/compiler/src/compile.ts

+12-25
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,9 @@
1-
import {
2-
type CompilerOptions as BaseCompilerOptions,
3-
ErrorCodes,
4-
createCompilerError,
5-
defaultOnError,
6-
} from '@vue/compiler-dom'
71
import { extend, isString } from '@vue/shared'
2+
import { parse } from '@babel/parser'
83
import {
94
type VaporCodegenResult as BaseVaporCodegenResult,
105
generate,
11-
} from '@vue/compiler-vapor'
12-
import { parse } from '@babel/parser'
6+
} from './patched/compiler-vapor.js'
137
import {
148
type DirectiveTransform,
159
type NodeTransform,
@@ -19,21 +13,24 @@ import {
1913
import { transformElement } from './transforms/transformElement'
2014
import { transformChildren } from './transforms/transformChildren'
2115
import { transformTemplateRef } from './transforms/transformTemplateRef'
22-
import {
23-
type HackOptions,
24-
IRNodeTypes,
25-
type RootIRNode,
26-
type RootNode,
27-
} from './ir'
2816
import { transformText } from './transforms/transformText'
2917
import { transformVBind } from './transforms/vBind'
3018
import { transformVOn } from './transforms/vOn'
3119
import { transformVSlot } from './transforms/vSlot'
3220
import { transformVModel } from './transforms/vModel'
3321
import { transformVShow } from './transforms/vShow'
3422
import { transformVHtml } from './transforms/vHtml'
23+
import {
24+
type HackOptions,
25+
IRNodeTypes,
26+
type RootIRNode,
27+
type RootNode,
28+
} from './ir'
29+
import type { CompilerOptions as BaseCompilerOptions } from '@vue/compiler-dom'
3530
import type { Expression, JSXElement, JSXFragment } from '@babel/types'
3631

32+
export { generate }
33+
3734
export interface VaporCodegenResult
3835
extends Omit<BaseVaporCodegenResult, 'ast'> {
3936
ast: RootIRNode
@@ -44,14 +41,8 @@ export function compile(
4441
source: string | JSXElement | JSXFragment,
4542
options: CompilerOptions = {},
4643
): VaporCodegenResult {
47-
const onError = options.onError || defaultOnError
48-
const isModuleMode = options.mode === 'module'
49-
50-
if (options.scopeId && !isModuleMode) {
51-
onError(createCompilerError(ErrorCodes.X_SCOPE_ID_NOT_SUPPORTED))
52-
}
53-
5444
const resolvedOptions = extend({}, options, {
45+
inline: true,
5546
prefixIdentifiers: false,
5647
expressionPlugins: options.expressionPlugins || ['jsx'],
5748
})
@@ -89,10 +80,6 @@ export function compile(
8980
type: IRNodeTypes.ROOT,
9081
children,
9182
source: isString(source) ? source : options.source || '',
92-
components: [],
93-
directives: [],
94-
helpers: new Set(),
95-
temps: 0,
9683
}
9784
const [nodeTransforms, directiveTransforms] = getBaseTransformPreset()
9885

0 commit comments

Comments
 (0)