Skip to content

Commit 7feda2e

Browse files
authored
Merge branch 'main' into feature-ref-update
2 parents 5c86b2a + e42fecb commit 7feda2e

File tree

9 files changed

+287
-37
lines changed

9 files changed

+287
-37
lines changed

Diff for: packages/compiler-vapor/src/transform.ts

+2-9
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525
type VaporDirectiveNode,
2626
} from './ir'
2727
import { isConstantExpression } from './utils'
28-
import { newDynamic } from './transforms/utils'
28+
import { newBlock, newDynamic } from './transforms/utils'
2929

3030
export type NodeTransform = (
3131
node: RootNode | TemplateChildNode,
@@ -211,14 +211,7 @@ export function transform(
211211
source: node.source,
212212
template: [],
213213
component: new Set(),
214-
block: {
215-
type: IRNodeTypes.BLOCK,
216-
node,
217-
dynamic: newDynamic(),
218-
effect: [],
219-
operation: [],
220-
returns: [],
221-
},
214+
block: newBlock(node),
222215
}
223216

224217
const context = new TransformContext(ir, node, options)

Diff for: packages/compiler-vapor/src/transforms/utils.ts

+15-1
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,27 @@ import {
99
createSimpleExpression,
1010
} from '@vue/compiler-dom'
1111
import { extend } from '@vue/shared'
12-
import { DynamicFlag, type IRDynamicInfo } from '../ir'
12+
import {
13+
type BlockIRNode,
14+
DynamicFlag,
15+
type IRDynamicInfo,
16+
IRNodeTypes,
17+
} from '../ir'
1318

1419
export const newDynamic = (): IRDynamicInfo => ({
1520
flags: DynamicFlag.REFERENCED,
1621
children: [],
1722
})
1823

24+
export const newBlock = (node: BlockIRNode['node']): BlockIRNode => ({
25+
type: IRNodeTypes.BLOCK,
26+
node,
27+
dynamic: newDynamic(),
28+
effect: [],
29+
operation: [],
30+
returns: [],
31+
})
32+
1933
export function wrapTemplate(node: ElementNode, dirs: string[]): TemplateNode {
2034
if (node.tagType === ElementTypes.TEMPLATE) {
2135
return node

Diff for: packages/compiler-vapor/src/transforms/vFor.ts

+2-9
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
type VaporDirectiveNode,
1616
} from '../ir'
1717
import { findProp, propToExpression } from '../utils'
18-
import { newDynamic, wrapTemplate } from './utils'
18+
import { newBlock, wrapTemplate } from './utils'
1919

2020
export const transformVFor = createStructuralDirectiveTransform(
2121
'for',
@@ -48,14 +48,7 @@ export function processFor(
4848
context.node = node = wrapTemplate(node, ['for'])
4949
context.dynamic.flags |= DynamicFlag.NON_TEMPLATE | DynamicFlag.INSERT
5050
const id = context.reference()
51-
const render: BlockIRNode = {
52-
type: IRNodeTypes.BLOCK,
53-
node,
54-
dynamic: newDynamic(),
55-
effect: [],
56-
operation: [],
57-
returns: [],
58-
}
51+
const render: BlockIRNode = newBlock(node)
5952
const exitBlock = context.enterBlock(render, true)
6053
context.reference()
6154

Diff for: packages/compiler-vapor/src/transforms/vIf.ts

+2-10
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import {
1515
type VaporDirectiveNode,
1616
} from '../ir'
1717
import { extend } from '@vue/shared'
18-
import { newDynamic, wrapTemplate } from './utils'
18+
import { newBlock, wrapTemplate } from './utils'
1919
import { getSiblingIf } from './transformComment'
2020

2121
export const transformVIf = createStructuralDirectiveTransform(
@@ -114,15 +114,7 @@ export function createIfBranch(
114114
): [BlockIRNode, () => void] {
115115
context.node = node = wrapTemplate(node, ['if', 'else-if', 'else'])
116116

117-
const branch: BlockIRNode = {
118-
type: IRNodeTypes.BLOCK,
119-
node,
120-
dynamic: newDynamic(),
121-
effect: [],
122-
operation: [],
123-
returns: [],
124-
}
125-
117+
const branch: BlockIRNode = newBlock(node)
126118
const exitBlock = context.enterBlock(branch)
127119
context.reference()
128120
return [branch, exitBlock]

Diff for: packages/runtime-vapor/__tests__/renderEffect.spec.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ describe('renderEffect', () => {
180180
}).rejects.toThrow('error in beforeUpdate')
181181

182182
expect(
183-
'[Vue warn] Unhandled error during execution of beforeUpdate hook',
183+
'[Vue warn]: Unhandled error during execution of beforeUpdate hook',
184184
).toHaveBeenWarned()
185185
})
186186

@@ -210,7 +210,7 @@ describe('renderEffect', () => {
210210
}).rejects.toThrow('error in updated')
211211

212212
expect(
213-
'[Vue warn] Unhandled error during execution of updated',
213+
'[Vue warn]: Unhandled error during execution of updated',
214214
).toHaveBeenWarned()
215215
})
216216

Diff for: packages/runtime-vapor/src/component.ts

+39-5
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,10 @@ import type { Data } from '@vue/shared'
3131
export type Component = FunctionalComponent | ObjectComponent
3232

3333
export type SetupFn = (props: any, ctx: SetupContext) => Block | Data | void
34-
export type FunctionalComponent = SetupFn & Omit<ObjectComponent, 'setup'>
34+
export type FunctionalComponent = SetupFn &
35+
Omit<ObjectComponent, 'setup'> & {
36+
displayName?: string
37+
}
3538

3639
export type SetupContext<E = EmitsOptions> = E extends any
3740
? {
@@ -96,15 +99,46 @@ export function createSetupContext(
9699
}
97100
}
98101

99-
export interface ObjectComponent {
100-
props?: ComponentPropsOptions
102+
export interface ObjectComponent extends ComponentInternalOptions {
103+
setup?: SetupFn
101104
inheritAttrs?: boolean
105+
props?: ComponentPropsOptions
102106
emits?: EmitsOptions
103-
setup?: SetupFn
104107
render?(ctx: any): Block
108+
109+
name?: string
105110
vapor?: boolean
106111
}
107112

113+
// Note: can't mark this whole interface internal because some public interfaces
114+
// extend it.
115+
export interface ComponentInternalOptions {
116+
/**
117+
* @internal
118+
*/
119+
__scopeId?: string
120+
/**
121+
* @internal
122+
*/
123+
__cssModules?: Data
124+
/**
125+
* @internal
126+
*/
127+
__hmrId?: string
128+
/**
129+
* Compat build only, for bailing out of certain compatibility behavior
130+
*/
131+
__isBuiltIn?: boolean
132+
/**
133+
* This one should be exposed so that devtools can make use of it
134+
*/
135+
__file?: string
136+
/**
137+
* name inferred from filename
138+
*/
139+
__name?: string
140+
}
141+
108142
type LifecycleHook<TFn = Function> = TFn[] | null
109143

110144
export const componentKey = Symbol(__DEV__ ? `componentKey` : ``)
@@ -121,7 +155,7 @@ export interface ComponentInternalInstance {
121155

122156
provides: Data
123157
scope: EffectScope
124-
component: FunctionalComponent | ObjectComponent
158+
component: Component
125159
comps: Set<ComponentInternalInstance>
126160
dirs: Map<Node, DirectiveBinding[]>
127161

Diff for: packages/runtime-vapor/src/index.ts

+4
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ export {
4141
getCurrentWatcher,
4242
} from '@vue/reactivity'
4343

44+
import { NOOP } from '@vue/shared'
45+
import { warn as _warn } from './warning'
46+
export const warn = (__DEV__ ? _warn : NOOP) as typeof _warn
47+
4448
export { nextTick } from './scheduler'
4549
export {
4650
getCurrentInstance,

0 commit comments

Comments
 (0)