refactor(ssr): move escapeHtml to shared

This commit is contained in:
Evan You
2020-02-02 22:08:20 -05:00
parent 327670a034
commit d1eed36452
10 changed files with 37 additions and 24 deletions

View File

@@ -4,4 +4,13 @@ export { renderToString } from './renderToString'
// internal
export { renderComponent, renderSlot } from './renderToString'
export { renderClass, renderStyle, renderProps } from './renderProps'
export { escapeHtml, interpolate } from './ssrUtils'
// utils
import { escapeHtml as _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 {
return escapeHtml(toDisplayString(value))
}

View File

@@ -1,4 +1,4 @@
import { escapeHtml } from './ssrUtils'
import { escapeHtml } from '@vue/shared'
import {
normalizeClass,
normalizeStyle,

View File

@@ -22,7 +22,7 @@ import {
isVoidTag
} from '@vue/shared'
import { renderProps } from './renderProps'
import { escapeHtml } from './ssrUtils'
import { escapeHtml } from '@vue/shared'
const {
isVNode,

View File

@@ -1,51 +0,0 @@
import { toDisplayString } from '@vue/shared'
const escapeRE = /["'&<>]/
export function escapeHtml(string: unknown) {
const str = '' + string
const match = escapeRE.exec(str)
if (!match) {
return str
}
let html = ''
let escaped: string
let index: number
let lastIndex = 0
for (index = match.index; index < str.length; index++) {
switch (str.charCodeAt(index)) {
case 34: // "
escaped = '&quot;'
break
case 38: // &
escaped = '&amp;'
break
case 39: // '
escaped = '&#39;'
break
case 60: // <
escaped = '&lt;'
break
case 62: // >
escaped = '&gt;'
break
default:
continue
}
if (lastIndex !== index) {
html += str.substring(lastIndex, index)
}
lastIndex = index + 1
html += escaped
}
return lastIndex !== index ? html + str.substring(lastIndex, index) : html
}
export function interpolate(value: unknown) {
return escapeHtml(toDisplayString(value))
}