From a3111eb9ca1136edd6da9fcad6d007352ea24ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Tue, 7 Jun 2022 10:33:59 +0200 Subject: [PATCH] [FIX] t-out: allow expressions evaluating as number --- src/runtime/template_helpers.ts | 37 ++++++++++++------- .../compiler/__snapshots__/t_out.test.ts.snap | 15 ++++++++ tests/compiler/t_out.test.ts | 5 +++ 3 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/runtime/template_helpers.ts b/src/runtime/template_helpers.ts index 15c71006..c7ec6661 100644 --- a/src/runtime/template_helpers.ts +++ b/src/runtime/template_helpers.ts @@ -132,19 +132,30 @@ export function safeOutput(value: any): ReturnType { } let safeKey; let block; - if (value instanceof Markup) { - safeKey = `string_safe`; - block = html(value as string); - } else if (value instanceof LazyValue) { - safeKey = `lazy_value`; - block = value.evaluate(); - } else if (value instanceof String || typeof value === "string") { - safeKey = "string_unsafe"; - block = text(value); - } else { - // Assuming it is a block - safeKey = "block_safe"; - block = value; + switch (typeof value) { + case "object": + if (value instanceof Markup) { + safeKey = `string_safe`; + block = html(value as string); + } else if (value instanceof LazyValue) { + safeKey = `lazy_value`; + block = value.evaluate(); + } else if (value instanceof String) { + safeKey = "string_unsafe"; + block = text(value); + } else { + // Assuming it is a block + safeKey = "block_safe"; + block = value; + } + break; + case "string": + safeKey = "string_unsafe"; + block = text(value); + break; + default: + safeKey = "string_unsafe"; + block = text(String(value)); } return toggler(safeKey, block); } diff --git a/tests/compiler/__snapshots__/t_out.test.ts.snap b/tests/compiler/__snapshots__/t_out.test.ts.snap index ab210781..28589921 100644 --- a/tests/compiler/__snapshots__/t_out.test.ts.snap +++ b/tests/compiler/__snapshots__/t_out.test.ts.snap @@ -79,6 +79,21 @@ exports[`t-out not escaping 1`] = ` }" `; +exports[`t-out number literal 1`] = ` +"function anonymous(app, bdom, helpers +) { + let { text, createBlock, list, multi, html, toggler, component, comment } = bdom; + let { safeOutput } = helpers; + + let block1 = createBlock(\`\`); + + return function template(ctx, node, key = \\"\\") { + const b2 = safeOutput(1); + return block1([], [b2]); + } +}" +`; + exports[`t-out t-out 0 1`] = ` "function anonymous(app, bdom, helpers ) { diff --git a/tests/compiler/t_out.test.ts b/tests/compiler/t_out.test.ts index 37c54bfa..ad0e086c 100644 --- a/tests/compiler/t_out.test.ts +++ b/tests/compiler/t_out.test.ts @@ -27,6 +27,11 @@ describe("t-out", () => { expect(renderToString(template)).toBe("ok"); }); + test("number literal", () => { + const template = ``; + expect(renderToString(template)).toBe("1"); + }); + test("literal, no outside html element", () => { const template = ``; expect(renderToString(template)).toBe("ok");