refactor(ssr): prefix ssr helpers

This commit is contained in:
Evan You
2020-02-06 12:07:25 -05:00
parent f3e70b3733
commit bc8f91d181
16 changed files with 256 additions and 136 deletions

View File

@@ -1,5 +1,5 @@
import { escapeHtml, toDisplayString } from '@vue/shared'
export function interpolate(value: unknown): string {
export function ssrInterpolate(value: unknown): string {
return escapeHtml(toDisplayString(value))
}

View File

@@ -14,7 +14,7 @@ import {
const shouldIgnoreProp = makeMap(`key,ref,innerHTML,textContent`)
export function renderAttrs(
export function ssrRenderAttrs(
props: Record<string, unknown>,
tag?: string
): string {
@@ -29,18 +29,18 @@ export function renderAttrs(
}
const value = props[key]
if (key === 'class') {
ret += ` class="${renderClass(value)}"`
ret += ` class="${ssrRenderClass(value)}"`
} else if (key === 'style') {
ret += ` style="${renderStyle(value)}"`
ret += ` style="${ssrRenderStyle(value)}"`
} else {
ret += renderDynamicAttr(key, value, tag)
ret += ssrRenderDynamicAttr(key, value, tag)
}
}
return ret
}
// render an attr with dynamic (unknown) key.
export function renderDynamicAttr(
export function ssrRenderDynamicAttr(
key: string,
value: unknown,
tag?: string
@@ -63,7 +63,7 @@ export function renderDynamicAttr(
// Render a v-bind attr with static key. The key is pre-processed at compile
// time and we only need to check and escape value.
export function renderAttr(key: string, value: unknown): string {
export function ssrRenderAttr(key: string, value: unknown): string {
if (!isRenderableValue(value)) {
return ``
}
@@ -78,11 +78,11 @@ function isRenderableValue(value: unknown): boolean {
return type === 'string' || type === 'number' || type === 'boolean'
}
export function renderClass(raw: unknown): string {
export function ssrRenderClass(raw: unknown): string {
return escapeHtml(normalizeClass(raw))
}
export function renderStyle(raw: unknown): string {
export function ssrRenderStyle(raw: unknown): string {
if (!raw) {
return ''
}

View File

@@ -1,6 +1,6 @@
import { isArray, isString, isObject } from '@vue/shared'
export function renderList(
export function ssrRenderList(
source: unknown,
renderItem: (value: unknown, key: string | number, index?: number) => void
) {

View File

@@ -9,7 +9,7 @@ export type SSRSlot = (
parentComponent: ComponentInternalInstance | null
) => void
export function renderSlot(
export function ssrRenderSlot(
slots: Slots | SSRSlots,
slotName: string,
slotProps: Props,

View File

@@ -1,42 +1,45 @@
import { looseEqual as _looseEqual, looseIndexOf } from '@vue/shared'
import { renderAttr } from './renderAttrs'
import { looseEqual, looseIndexOf } from '@vue/shared'
import { ssrRenderAttr } from './ssrRenderAttrs'
export const looseEqual = _looseEqual as (a: unknown, b: unknown) => boolean
export const ssrLooseEqual = looseEqual as (a: unknown, b: unknown) => boolean
export function looseContain(arr: unknown[], value: unknown): boolean {
export function ssrLooseContain(arr: unknown[], value: unknown): boolean {
return looseIndexOf(arr, value) > -1
}
// for <input :type="type" v-model="model" value="value">
export function renderDynamicModel(
export function ssrRenderDynamicModel(
type: unknown,
model: unknown,
value: unknown
) {
switch (type) {
case 'radio':
return _looseEqual(model, value) ? ' checked' : ''
return looseEqual(model, value) ? ' checked' : ''
case 'checkbox':
return (Array.isArray(model)
? looseContain(model, value)
? ssrLooseContain(model, value)
: model)
? ' checked'
: ''
default:
// text types
return renderAttr('value', model)
return ssrRenderAttr('value', model)
}
}
// for <input v-bind="obj" v-model="model">
export function getDynamicModelProps(existingProps: any = {}, model: unknown) {
export function ssrGetDynamicModelProps(
existingProps: any = {},
model: unknown
) {
const { type, value } = existingProps
switch (type) {
case 'radio':
return _looseEqual(model, value) ? { checked: true } : null
return looseEqual(model, value) ? { checked: true } : null
case 'checkbox':
return (Array.isArray(model)
? looseContain(model, value)
? ssrLooseContain(model, value)
: model)
? { checked: true }
: null

View File

@@ -2,22 +2,22 @@
export { renderToString } from './renderToString'
// internal runtime helpers
export { renderComponent as _renderComponent } from './renderToString'
export { renderSlot as _renderSlot } from './helpers/renderSlot'
export { renderComponent as _ssrRenderComponent } from './renderToString'
export { ssrRenderSlot as _ssrRenderSlot } from './helpers/ssrRenderSlot'
export {
renderClass as _renderClass,
renderStyle as _renderStyle,
renderAttrs as _renderAttrs,
renderAttr as _renderAttr,
renderDynamicAttr as _renderDynamicAttr
} from './helpers/renderAttrs'
export { interpolate as _interpolate } from './helpers/interpolate'
export { renderList as _renderList } from './helpers/renderList'
ssrRenderClass as _ssrRenderClass,
ssrRenderStyle as _ssrRenderStyle,
ssrRenderAttrs as _ssrRenderAttrs,
ssrRenderAttr as _ssrRenderAttr,
ssrRenderDynamicAttr as _ssrRenderDynamicAttr
} from './helpers/ssrRenderAttrs'
export { ssrInterpolate as _ssrInterpolate } from './helpers/ssrInterpolate'
export { ssrRenderList as _ssrRenderList } from './helpers/ssrRenderList'
// v-model helpers
export {
looseEqual as _looseEqual,
looseContain as _looseContain,
renderDynamicModel as _renderDynamicModel,
getDynamicModelProps as _getDynamicModelProps
} from './helpers/vModelHelpers'
ssrLooseEqual as _ssrLooseEqual,
ssrLooseContain as _ssrLooseContain,
ssrRenderDynamicModel as _ssrRenderDynamicModel,
ssrGetDynamicModelProps as _ssrGetDynamicModelProps
} from './helpers/ssrVModelHelpers'

View File

@@ -21,8 +21,8 @@ import {
isVoidTag,
escapeHtml
} from '@vue/shared'
import { renderAttrs } from './helpers/renderAttrs'
import { SSRSlots } from './helpers/renderSlot'
import { ssrRenderAttrs } from './helpers/ssrRenderAttrs'
import { SSRSlots } from './helpers/ssrRenderSlot'
const {
isVNode,
@@ -217,7 +217,7 @@ function renderElement(
// TODO directives
if (props !== null) {
openTag += renderAttrs(props, tag)
openTag += ssrRenderAttrs(props, tag)
}
if (scopeId !== null) {