wip(ssr): ssr helper codegen

This commit is contained in:
Evan You
2020-02-03 17:47:06 -05:00
parent d1d81cf1f9
commit b685805a26
18 changed files with 374 additions and 253 deletions

View File

@@ -1,15 +1,16 @@
import { escapeHtml, interpolate } from '../src'
import { _interpolate } from '../src'
import { escapeHtml } from '@vue/shared'
test('ssr: interpolate', () => {
expect(interpolate(0)).toBe(`0`)
expect(interpolate(`foo`)).toBe(`foo`)
expect(interpolate(`<div>`)).toBe(`&lt;div&gt;`)
expect(_interpolate(0)).toBe(`0`)
expect(_interpolate(`foo`)).toBe(`foo`)
expect(_interpolate(`<div>`)).toBe(`&lt;div&gt;`)
// should escape interpolated values
expect(interpolate([1, 2, 3])).toBe(
expect(_interpolate([1, 2, 3])).toBe(
escapeHtml(JSON.stringify([1, 2, 3], null, 2))
)
expect(
interpolate({
_interpolate({
foo: 1,
bar: `<div>`
})

View File

@@ -1,4 +1,4 @@
import { renderProps, renderClass, renderStyle } from '../src'
import { renderProps, renderClass, renderStyle } from '../src/renderProps'
describe('ssr: renderProps', () => {
test('ignore reserved props', () => {

View File

@@ -6,7 +6,12 @@ import {
resolveComponent,
ComponentOptions
} from 'vue'
import { renderToString, renderComponent, renderSlot, escapeHtml } from '../src'
import { escapeHtml } from '@vue/shared'
import {
renderToString,
renderComponent,
renderSlot
} from '../src/renderToString'
describe('ssr: renderToString', () => {
test('should apply app context', async () => {

View File

@@ -2,15 +2,19 @@
export { renderToString } from './renderToString'
// internal
export { renderComponent, renderSlot } from './renderToString'
export { renderClass, renderStyle, renderProps } from './renderProps'
export {
renderComponent as _renderComponent,
renderSlot as _renderSlot
} from './renderToString'
export {
renderClass as _renderClass,
renderStyle as _renderStyle,
renderProps as _renderProps
} from './renderProps'
// utils
import { escapeHtml as _escapeHtml, toDisplayString } from '@vue/shared'
import { escapeHtml, toDisplayString } from '@vue/shared'
// cast type to avoid dts dependency on @vue/shared (which is inlined)
export const escapeHtml = _escapeHtml as (raw: string) => string
export function interpolate(value: unknown): string {
export function _interpolate(value: unknown): string {
return escapeHtml(toDisplayString(value))
}