`;
exports[`compile > custom directive > component 1`] = `
-"import { resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, setInsertionState as _setInsertionState, createComponentWithFallback as _createComponentWithFallback, withVaporDirectives as _withVaporDirectives, createIf as _createIf, template as _template } from 'vue';
+"import { resolveComponent as _resolveComponent, resolveDirective as _resolveDirective, setInsertionState as _setInsertionState, createComponentWithFallback as _createComponentWithFallback, withVaporDirectives as _withVaporDirectives, insert as _insert, createIf as _createIf, template as _template } from 'vue';
const t0 = _template("<div></div>")
export function render(_ctx) {
_setInsertionState(n3)
const n2 = _createComponentWithFallback(_component_Bar)
_withVaporDirectives(n2, [[_directive_hello, void 0, void 0, { world: true }]])
+ _insert(n2, n3)
return n3
})
return n0
`;
exports[`compile > directives > v-pre > should not affect siblings after it 1`] = `
-"import { resolveComponent as _resolveComponent, setInsertionState as _setInsertionState, createComponentWithFallback as _createComponentWithFallback, child as _child, toDisplayString as _toDisplayString, setText as _setText, setProp as _setProp, renderEffect as _renderEffect, template as _template } from 'vue';
+"import { resolveComponent as _resolveComponent, setInsertionState as _setInsertionState, createComponentWithFallback as _createComponentWithFallback, child as _child, prepend as _prepend, toDisplayString as _toDisplayString, setText as _setText, setProp as _setProp, renderEffect as _renderEffect, template as _template } from 'vue';
const t0 = _template("<div :id=\\"foo\\"><Comp></Comp>{{ bar }}</div>")
const t1 = _template("<div> </div>")
_setInsertionState(n3, 0)
const n1 = _createComponentWithFallback(_component_Comp)
const n2 = _child(n3)
+ _prepend(n3, n1)
_renderEffect(() => {
_setText(n2, _toDisplayString(_ctx.bar))
_setProp(n3, "id", _ctx.foo)
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`compiler: children transform > anchor insertion in middle 1`] = `
-"import { child as _child, next as _next, setInsertionState as _setInsertionState, createIf as _createIf, template as _template } from 'vue';
+"import { child as _child, next as _next, setInsertionState as _setInsertionState, createIf as _createIf, insert as _insert, template as _template } from 'vue';
const t0 = _template("<div></div>")
const t1 = _template("<div><div></div><!><div></div></div>", true)
const n2 = t0()
return n2
}, null, true)
+ _insert(n0, n4, n3)
return n4
}"
`;
`;
exports[`compiler: v-for > nested v-for 1`] = `
-"import { setInsertionState as _setInsertionState, child as _child, toDisplayString as _toDisplayString, setText as _setText, renderEffect as _renderEffect, createFor as _createFor, template as _template } from 'vue';
+"import { setInsertionState as _setInsertionState, child as _child, toDisplayString as _toDisplayString, setText as _setText, renderEffect as _renderEffect, createFor as _createFor, insert as _insert, template as _template } from 'vue';
const t0 = _template("<span> </span>")
const t1 = _template("<div></div>", true)
_renderEffect(() => _setText(x4, _toDisplayString(_for_item1.value+_for_item0.value)))
return n4
}, null, 1)
+ _insert(n2, n5)
return n5
})
return n0
`;
exports[`compiler: v-once > on component 1`] = `
-"import { resolveComponent as _resolveComponent, setInsertionState as _setInsertionState, createComponentWithFallback as _createComponentWithFallback, template as _template } from 'vue';
+"import { resolveComponent as _resolveComponent, setInsertionState as _setInsertionState, createComponentWithFallback as _createComponentWithFallback, insert as _insert, template as _template } from 'vue';
const t0 = _template("<div></div>", true)
export function render(_ctx) {
const n1 = t0()
_setInsertionState(n1)
const n0 = _createComponentWithFallback(_component_Comp, { id: () => (_ctx.foo) }, null, null, true)
+ _insert(n0, n1)
return n1
}"
`;
): CodeFragment[] {
const [frag, push] = buildCodeFragment()
if (isBlockOperation(oper) && oper.parent) {
- push(...genInsertionstate(oper, context))
+ push(...genInsertionState(oper, context))
}
push(...genOperation(oper, context))
return frag
return frag
}
-function genInsertionstate(
+function genInsertionState(
operation: InsertionStateTypes,
context: CodegenContext,
): CodeFragment[] {
prevDynamics[0].flags -= DynamicFlag.NON_TEMPLATE
const anchor = (prevDynamics[0].anchor = context.increaseId())
registerInsertion(prevDynamics, context, anchor)
+ context.registerOperation({
+ type: IRNodeTypes.INSERT_NODE,
+ elements: prevDynamics.map(child => child.id!),
+ parent: context.reference(),
+ anchor,
+ })
} else {
registerInsertion(prevDynamics, context, -1 /* prepend */)
+ context.registerOperation({
+ type: IRNodeTypes.PREPEND_NODE,
+ elements: prevDynamics.map(child => child.id!),
+ parent: context.reference(),
+ })
}
prevDynamics = []
}
if (prevDynamics.length) {
registerInsertion(prevDynamics, context)
+ context.registerOperation({
+ type: IRNodeTypes.INSERT_NODE,
+ elements: prevDynamics.map(child => child.id!),
+ parent: context.reference(),
+ })
}
}
anchor?: number,
) {
for (const child of dynamics) {
- if (child.template != null) {
- // template node due to invalid nesting - generate actual insertion
- context.registerOperation({
- type: IRNodeTypes.INSERT_NODE,
- elements: dynamics.map(child => child.id!),
- parent: context.reference(),
- anchor,
- })
- } else if (child.operation && isBlockOperation(child.operation)) {
+ if (child.operation && isBlockOperation(child.operation)) {
// block types
child.operation.parent = context.reference()
child.operation.anchor = anchor
import { renderEffect } from './renderEffect'
import { VaporVForFlags } from '../../shared/src/vaporFlags'
import { isHydrating, locateHydrationNode } from './dom/hydration'
-import { insertionAnchor, insertionParent } from './insertionState'
class ForBlock extends VaporFragment {
scope: EffectScope | undefined
getKey?: (item: any, key: any, index?: number) => any,
flags = 0,
): VaporFragment => {
- const _insertionParent = insertionParent
- const _insertionAnchor = insertionAnchor
if (isHydrating) {
locateHydrationNode()
}
renderEffect(renderList)
}
- if (!isHydrating && _insertionParent) {
- insert(frag, _insertionParent, _insertionAnchor)
- }
-
return frag
}
-import { type Block, type BlockFn, DynamicFragment, insert } from './block'
+import { type Block, type BlockFn, DynamicFragment } from './block'
import { isHydrating, locateHydrationNode } from './dom/hydration'
-import { insertionAnchor, insertionParent } from './insertionState'
import { renderEffect } from './renderEffect'
export function createIf(
b2?: BlockFn,
once?: boolean,
): Block {
- const _insertionParent = insertionParent
- const _insertionAnchor = insertionAnchor
if (isHydrating) {
locateHydrationNode()
}
renderEffect(() => (frag as DynamicFragment).update(condition() ? b1 : b2))
}
- if (!isHydrating && _insertionParent) {
- insert(frag, _insertionParent, _insertionAnchor)
- }
-
return frag
}
} from './componentSlots'
import { hmrReload, hmrRerender } from './hmr'
import { isHydrating, locateHydrationNode } from './dom/hydration'
-import { insertionAnchor, insertionParent } from './insertionState'
export { currentInstance } from '@vue/runtime-dom'
currentInstance.appContext) ||
emptyContext,
): VaporComponentInstance {
- const _insertionParent = insertionParent
- const _insertionAnchor = insertionAnchor
if (isHydrating) {
locateHydrationNode()
}
// vdom interop enabled and component is not an explicit vapor component
if (appContext.vapor && !component.__vapor) {
- const frag = appContext.vapor.vdomMount(
- component as any,
- rawProps,
- rawSlots,
- )
- if (!isHydrating && _insertionParent) {
- insert(frag, _insertionParent, _insertionAnchor)
- }
- return frag
+ return appContext.vapor.vdomMount(component as any, rawProps, rawSlots)
}
if (
onScopeDispose(() => unmountComponent(instance), true)
- if (!isHydrating && _insertionParent) {
- insert(instance.block, _insertionParent, _insertionAnchor)
- }
-
return instance
}
import { EMPTY_OBJ, NO, hasOwn, isArray, isFunction } from '@vue/shared'
-import { type Block, type BlockFn, DynamicFragment, insert } from './block'
+import { type Block, type BlockFn, DynamicFragment } from './block'
import { rawPropsProxyHandlers } from './componentProps'
import { currentInstance, isRef } from '@vue/runtime-dom'
import type { LooseRawProps, VaporComponentInstance } from './component'
import { renderEffect } from './renderEffect'
-import { insertionAnchor, insertionParent } from './insertionState'
import { isHydrating, locateHydrationNode } from './dom/hydration'
export type RawSlots = Record<string, VaporSlot> & {
rawProps?: LooseRawProps | null,
fallback?: VaporSlot,
): Block {
- const _insertionParent = insertionParent
- const _insertionAnchor = insertionAnchor
if (isHydrating) {
locateHydrationNode()
}
}
}
- if (!isHydrating && _insertionParent) {
- insert(fragment, _insertionParent, _insertionAnchor)
- }
-
return fragment
}