).toBe(` foo="false"`) // non boolean should render `false` as is
})
+ test('ingore non-renderable values', () => {
+ expect(
+ renderAttrs({
+ foo: {},
+ bar: [],
+ baz: () => {}
+ })
+ ).toBe(``)
+ })
+
test('props to attrs', () => {
expect(
renderAttrs({
value: unknown,
tag?: string
): string {
- if (value == null) {
+ if (!isRenderableValue(value)) {
return ``
}
const attrKey =
// 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 {
- if (value == null) {
+ if (!isRenderableValue(value)) {
return ``
}
return ` ${key}="${escapeHtml(value)}"`
}
+function isRenderableValue(value: unknown): boolean {
+ if (value == null) {
+ return false
+ }
+ const type = typeof value
+ return type === 'string' || type === 'number' || type === 'boolean'
+}
+
export function renderClass(raw: unknown): string {
return escapeHtml(normalizeClass(raw))
}