@vue/server-renderer
Advanced tools
Comparing version 3.0.0-alpha.10 to 3.0.0-alpha.11
@@ -81,2 +81,26 @@ 'use strict'; | ||
function ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) { | ||
parentPush('<!--teleport start-->'); | ||
let teleportContent; | ||
if (disabled) { | ||
contentRenderFn(parentPush); | ||
teleportContent = `<!---->`; | ||
} | ||
else { | ||
const { getBuffer, push } = createBuffer(); | ||
contentRenderFn(push); | ||
push(`<!---->`); // teleport end anchor | ||
teleportContent = getBuffer(); | ||
} | ||
const context = parentComponent.appContext.provides[vue.ssrContextKey]; | ||
const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {}); | ||
if (teleportBuffers[target]) { | ||
teleportBuffers[target].push(teleportContent); | ||
} | ||
else { | ||
teleportBuffers[target] = [teleportContent]; | ||
} | ||
parentPush('<!--teleport end-->'); | ||
} | ||
const { isVNode, createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, normalizeSuspenseChildren } = vue.ssrUtils; | ||
@@ -134,3 +158,3 @@ function createBuffer() { | ||
const buffer = await renderComponentVNode(vnode); | ||
await resolvePortals(context); | ||
await resolveTeleports(context); | ||
return unrollBuffer(buffer); | ||
@@ -142,3 +166,3 @@ } | ||
function renderComponentVNode(vnode, parentComponent = null) { | ||
const instance = createComponentInstance(vnode, parentComponent); | ||
const instance = createComponentInstance(vnode, parentComponent, null); | ||
const res = setupComponent(instance, null /* parentSuspense (no need to track for SSR) */, true /* isSSR */); | ||
@@ -224,4 +248,4 @@ if (shared.isPromise(res)) { | ||
} | ||
else if (shapeFlag & 64 /* PORTAL */) { | ||
renderPortalVNode(vnode, parentComponent); | ||
else if (shapeFlag & 64 /* TELEPORT */) { | ||
renderTeleportVNode(push, vnode, parentComponent); | ||
} | ||
@@ -301,25 +325,24 @@ else if (shapeFlag & 128 /* SUSPENSE */) { | ||
} | ||
function renderPortalVNode(vnode, parentComponent) { | ||
const target = vnode.props && vnode.props.target; | ||
function renderTeleportVNode(push, vnode, parentComponent) { | ||
const target = vnode.props && vnode.props.to; | ||
const disabled = vnode.props && vnode.props.disabled; | ||
if (!target) { | ||
vue.warn(`[@vue/server-renderer] Portal is missing target prop.`); | ||
vue.warn(`[@vue/server-renderer] Teleport is missing target prop.`); | ||
return []; | ||
} | ||
if (!shared.isString(target)) { | ||
vue.warn(`[@vue/server-renderer] Portal target must be a query selector string.`); | ||
vue.warn(`[@vue/server-renderer] Teleport target must be a query selector string.`); | ||
return []; | ||
} | ||
const { getBuffer, push } = createBuffer(); | ||
renderVNodeChildren(push, vnode.children, parentComponent); | ||
const context = parentComponent.appContext.provides[vue.ssrContextKey]; | ||
const portalBuffers = context.__portalBuffers || (context.__portalBuffers = {}); | ||
portalBuffers[target] = getBuffer(); | ||
ssrRenderTeleport(push, push => { | ||
renderVNodeChildren(push, vnode.children, parentComponent); | ||
}, target, disabled || disabled === '', parentComponent); | ||
} | ||
async function resolvePortals(context) { | ||
if (context.__portalBuffers) { | ||
context.portals = context.portals || {}; | ||
for (const key in context.__portalBuffers) { | ||
async function resolveTeleports(context) { | ||
if (context.__teleportBuffers) { | ||
context.teleports = context.teleports || {}; | ||
for (const key in context.__teleportBuffers) { | ||
// note: it's OK to await sequentially here because the Promises were | ||
// created eagerly in parallel. | ||
context.portals[key] = unrollBuffer(await context.__portalBuffers[key]); | ||
context.teleports[key] = unrollBuffer(await Promise.all(context.__teleportBuffers[key])); | ||
} | ||
@@ -382,10 +405,2 @@ } | ||
function ssrRenderPortal(contentRenderFn, target, parentComponent) { | ||
const { getBuffer, push } = createBuffer(); | ||
contentRenderFn(push); | ||
const context = parentComponent.appContext.provides[vue.ssrContextKey]; | ||
const portalBuffers = context.__portalBuffers || (context.__portalBuffers = {}); | ||
portalBuffers[target] = getBuffer(); | ||
} | ||
async function ssrRenderSuspense(push, { default: renderContent }) { | ||
@@ -452,5 +467,5 @@ if (renderContent) { | ||
exports.ssrRenderList = ssrRenderList; | ||
exports.ssrRenderPortal = ssrRenderPortal; | ||
exports.ssrRenderSlot = ssrRenderSlot; | ||
exports.ssrRenderStyle = ssrRenderStyle; | ||
exports.ssrRenderSuspense = ssrRenderSuspense; | ||
exports.ssrRenderTeleport = ssrRenderTeleport; |
@@ -81,2 +81,26 @@ 'use strict'; | ||
function ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) { | ||
parentPush('<!--teleport start-->'); | ||
let teleportContent; | ||
if (disabled) { | ||
contentRenderFn(parentPush); | ||
teleportContent = `<!---->`; | ||
} | ||
else { | ||
const { getBuffer, push } = createBuffer(); | ||
contentRenderFn(push); | ||
push(`<!---->`); // teleport end anchor | ||
teleportContent = getBuffer(); | ||
} | ||
const context = parentComponent.appContext.provides[vue.ssrContextKey]; | ||
const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {}); | ||
if (teleportBuffers[target]) { | ||
teleportBuffers[target].push(teleportContent); | ||
} | ||
else { | ||
teleportBuffers[target] = [teleportContent]; | ||
} | ||
parentPush('<!--teleport end-->'); | ||
} | ||
const { isVNode, createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, normalizeSuspenseChildren } = vue.ssrUtils; | ||
@@ -134,3 +158,3 @@ function createBuffer() { | ||
const buffer = await renderComponentVNode(vnode); | ||
await resolvePortals(context); | ||
await resolveTeleports(context); | ||
return unrollBuffer(buffer); | ||
@@ -142,3 +166,3 @@ } | ||
function renderComponentVNode(vnode, parentComponent = null) { | ||
const instance = createComponentInstance(vnode, parentComponent); | ||
const instance = createComponentInstance(vnode, parentComponent, null); | ||
const res = setupComponent(instance, null /* parentSuspense (no need to track for SSR) */, true /* isSSR */); | ||
@@ -221,4 +245,4 @@ if (shared.isPromise(res)) { | ||
} | ||
else if (shapeFlag & 64 /* PORTAL */) { | ||
renderPortalVNode(vnode, parentComponent); | ||
else if (shapeFlag & 64 /* TELEPORT */) { | ||
renderTeleportVNode(push, vnode, parentComponent); | ||
} | ||
@@ -298,25 +322,24 @@ else if (shapeFlag & 128 /* SUSPENSE */) { | ||
} | ||
function renderPortalVNode(vnode, parentComponent) { | ||
const target = vnode.props && vnode.props.target; | ||
function renderTeleportVNode(push, vnode, parentComponent) { | ||
const target = vnode.props && vnode.props.to; | ||
const disabled = vnode.props && vnode.props.disabled; | ||
if (!target) { | ||
vue.warn(`[@vue/server-renderer] Portal is missing target prop.`); | ||
vue.warn(`[@vue/server-renderer] Teleport is missing target prop.`); | ||
return []; | ||
} | ||
if (!shared.isString(target)) { | ||
vue.warn(`[@vue/server-renderer] Portal target must be a query selector string.`); | ||
vue.warn(`[@vue/server-renderer] Teleport target must be a query selector string.`); | ||
return []; | ||
} | ||
const { getBuffer, push } = createBuffer(); | ||
renderVNodeChildren(push, vnode.children, parentComponent); | ||
const context = parentComponent.appContext.provides[vue.ssrContextKey]; | ||
const portalBuffers = context.__portalBuffers || (context.__portalBuffers = {}); | ||
portalBuffers[target] = getBuffer(); | ||
ssrRenderTeleport(push, push => { | ||
renderVNodeChildren(push, vnode.children, parentComponent); | ||
}, target, disabled || disabled === '', parentComponent); | ||
} | ||
async function resolvePortals(context) { | ||
if (context.__portalBuffers) { | ||
context.portals = context.portals || {}; | ||
for (const key in context.__portalBuffers) { | ||
async function resolveTeleports(context) { | ||
if (context.__teleportBuffers) { | ||
context.teleports = context.teleports || {}; | ||
for (const key in context.__teleportBuffers) { | ||
// note: it's OK to await sequentially here because the Promises were | ||
// created eagerly in parallel. | ||
context.portals[key] = unrollBuffer(await context.__portalBuffers[key]); | ||
context.teleports[key] = unrollBuffer(await Promise.all(context.__teleportBuffers[key])); | ||
} | ||
@@ -379,10 +402,2 @@ } | ||
function ssrRenderPortal(contentRenderFn, target, parentComponent) { | ||
const { getBuffer, push } = createBuffer(); | ||
contentRenderFn(push); | ||
const context = parentComponent.appContext.provides[vue.ssrContextKey]; | ||
const portalBuffers = context.__portalBuffers || (context.__portalBuffers = {}); | ||
portalBuffers[target] = getBuffer(); | ||
} | ||
async function ssrRenderSuspense(push, { default: renderContent }) { | ||
@@ -449,5 +464,5 @@ if (renderContent) { | ||
exports.ssrRenderList = ssrRenderList; | ||
exports.ssrRenderPortal = ssrRenderPortal; | ||
exports.ssrRenderSlot = ssrRenderSlot; | ||
exports.ssrRenderStyle = ssrRenderStyle; | ||
exports.ssrRenderSuspense = ssrRenderSuspense; | ||
exports.ssrRenderTeleport = ssrRenderTeleport; |
@@ -15,2 +15,4 @@ import { App } from 'vue'; | ||
declare type SSRBuffer = SSRBufferItem[]; | ||
declare type SSRBufferItem = string | ResolvedSSRBuffer | Promise<ResolvedSSRBuffer>; | ||
@@ -20,4 +22,4 @@ | ||
[key: string]: any; | ||
portals?: Record<string, string>; | ||
__portalBuffers?: Record<string, ResolvedSSRBuffer | Promise<ResolvedSSRBuffer>>; | ||
teleports?: Record<string, string>; | ||
__teleportBuffers?: Record<string, SSRBuffer>; | ||
}; | ||
@@ -53,4 +55,2 @@ | ||
export declare function ssrRenderPortal(contentRenderFn: (push: PushFn) => void, target: string, parentComponent: ComponentInternalInstance): void; | ||
export declare function ssrRenderSlot(slots: Slots | SSRSlots, slotName: string, slotProps: Props, fallbackRenderFn: (() => void) | null, push: PushFn, parentComponent: ComponentInternalInstance): void; | ||
@@ -62,2 +62,4 @@ | ||
export declare function ssrRenderTeleport(parentPush: PushFn, contentRenderFn: (push: PushFn) => void, target: string, disabled: boolean, parentComponent: ComponentInternalInstance): void; | ||
declare type SSRSlot = (props: Props, push: PushFn, parentComponent: ComponentInternalInstance | null, scopeId: string | null) => void; | ||
@@ -64,0 +66,0 @@ |
{ | ||
"name": "@vue/server-renderer", | ||
"version": "3.0.0-alpha.10", | ||
"version": "3.0.0-alpha.11", | ||
"description": "@vue/server-renderer", | ||
@@ -30,8 +30,8 @@ "main": "index.js", | ||
"peerDependencies": { | ||
"vue": "3.0.0-alpha.10" | ||
"vue": "3.0.0-alpha.11" | ||
}, | ||
"dependencies": { | ||
"@vue/shared": "3.0.0-alpha.10", | ||
"@vue/compiler-ssr": "3.0.0-alpha.10" | ||
"@vue/shared": "3.0.0-alpha.11", | ||
"@vue/compiler-ssr": "3.0.0-alpha.11" | ||
} | ||
} |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
37882
949
+ Added@vue/compiler-core@3.0.0-alpha.11(transitive)
+ Added@vue/compiler-dom@3.0.0-alpha.11(transitive)
+ Added@vue/compiler-ssr@3.0.0-alpha.11(transitive)
+ Added@vue/reactivity@3.0.0-alpha.11(transitive)
+ Added@vue/runtime-core@3.0.0-alpha.11(transitive)
+ Added@vue/runtime-dom@3.0.0-alpha.11(transitive)
+ Added@vue/shared@3.0.0-alpha.11(transitive)
+ Addedvue@3.0.0-alpha.11(transitive)
- Removed@vue/compiler-core@3.0.0-alpha.10(transitive)
- Removed@vue/compiler-dom@3.0.0-alpha.10(transitive)
- Removed@vue/compiler-ssr@3.0.0-alpha.10(transitive)
- Removed@vue/reactivity@3.0.0-alpha.10(transitive)
- Removed@vue/runtime-core@3.0.0-alpha.10(transitive)
- Removed@vue/runtime-dom@3.0.0-alpha.10(transitive)
- Removed@vue/shared@3.0.0-alpha.10(transitive)
- Removedvue@3.0.0-alpha.10(transitive)
Updated@vue/shared@3.0.0-alpha.11