diff --git a/src/runtime/template_set.ts b/src/runtime/template_set.ts index 4bcbe43e..e7d40403 100644 --- a/src/runtime/template_set.ts +++ b/src/runtime/template_set.ts @@ -66,6 +66,10 @@ export class TemplateSet { addTemplate(name: string, template: string | Element) { if (name in this.rawTemplates) { + // this check can be expensive, just silently ignore double definitions outside dev mode + if (!this.dev) { + return; + } const rawTemplate = this.rawTemplates[name]; const currentAsString = typeof rawTemplate === "string" diff --git a/tests/compiler/validation.test.ts b/tests/compiler/validation.test.ts index e90eaf9e..01ded356 100644 --- a/tests/compiler/validation.test.ts +++ b/tests/compiler/validation.test.ts @@ -11,8 +11,8 @@ describe("basic validation", () => { expect(() => context.getTemplate("invalidname")).toThrow("Missing template"); }); - test("cannot add a different template with the same name", () => { - const context = new TemplateSet(); + test("cannot add a different template with the same name in dev mode", () => { + const context = new TemplateSet({ dev: true }); context.addTemplate("test", ``); // Same template with the same name is fine expect(() => context.addTemplate("test", "")).not.toThrow(); @@ -20,6 +20,13 @@ describe("basic validation", () => { expect(() => context.addTemplate("test", "
")).toThrow("already defined"); }); + test("adding different template with same name outside dev mode silently ignores it", () => { + const context = new TemplateSet({ dev: false }); + context.addTemplate("test", ``); + expect(() => context.addTemplate("test", "
")).not.toThrow(); + expect(context.rawTemplates.test).toBe(""); + }); + test("invalid xml", () => { const template = "
"; expect(() => snapshotTemplate(template)).toThrow("Invalid XML in template");