refactor(ssr): move escapeHtml to shared
This commit is contained in:
@@ -1,15 +1,5 @@
|
||||
import { escapeHtml, interpolate } from '../src'
|
||||
|
||||
test('ssr: escapeHTML', () => {
|
||||
expect(escapeHtml(`foo`)).toBe(`foo`)
|
||||
expect(escapeHtml(true)).toBe(`true`)
|
||||
expect(escapeHtml(false)).toBe(`false`)
|
||||
expect(escapeHtml(`a && b`)).toBe(`a && b`)
|
||||
expect(escapeHtml(`"foo"`)).toBe(`"foo"`)
|
||||
expect(escapeHtml(`'bar'`)).toBe(`'bar'`)
|
||||
expect(escapeHtml(`<div>`)).toBe(`<div>`)
|
||||
})
|
||||
|
||||
test('ssr: interpolate', () => {
|
||||
expect(interpolate(0)).toBe(`0`)
|
||||
expect(interpolate(`foo`)).toBe(`foo`)
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { escapeHtml } from './ssrUtils'
|
||||
import { escapeHtml } from '@vue/shared'
|
||||
import {
|
||||
normalizeClass,
|
||||
normalizeStyle,
|
||||
|
||||
@@ -22,7 +22,7 @@ import {
|
||||
isVoidTag
|
||||
} from '@vue/shared'
|
||||
import { renderProps } from './renderProps'
|
||||
import { escapeHtml } from './ssrUtils'
|
||||
import { escapeHtml } from '@vue/shared'
|
||||
|
||||
const {
|
||||
isVNode,
|
||||
|
||||
@@ -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 = '"'
|
||||
break
|
||||
case 38: // &
|
||||
escaped = '&'
|
||||
break
|
||||
case 39: // '
|
||||
escaped = '''
|
||||
break
|
||||
case 60: // <
|
||||
escaped = '<'
|
||||
break
|
||||
case 62: // >
|
||||
escaped = '>'
|
||||
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))
|
||||
}
|
||||
Reference in New Issue
Block a user