fix(compiler): avoid deferred helper name collisions
This commit is contained in:
@@ -270,8 +270,8 @@ function functionEntry(
|
|||||||
.join("\n");
|
.join("\n");
|
||||||
const commitBinding = stateNames.length
|
const commitBinding = stateNames.length
|
||||||
? `const __wrnexusCommit = () => { ${copyBack} };
|
? `const __wrnexusCommit = () => { ${copyBack} };
|
||||||
${!parameterNames.has("commit") && !declaredLocals.has("commit") ? "const commit = __wrnexusCommit;" : ""}
|
${!parameterNames.has("commit") && !declaredLocals.has("commit") && !functionAliases.includes("commit") ? "const commit = __wrnexusCommit;" : ""}
|
||||||
${!parameterNames.has("setTimeout") && !declaredLocals.has("setTimeout") ? `const setTimeout = (callback, delay, ...args) => globalThis.setTimeout(() => {
|
${!parameterNames.has("setTimeout") && !declaredLocals.has("setTimeout") && !functionAliases.includes("setTimeout") ? `const setTimeout = (callback, delay, ...args) => globalThis.setTimeout(() => {
|
||||||
try { return callback(...args); } finally { __wrnexusCommit(); }
|
try { return callback(...args); } finally { __wrnexusCommit(); }
|
||||||
}, delay);` : ""}`
|
}, delay);` : ""}`
|
||||||
: "";
|
: "";
|
||||||
|
|||||||
@@ -184,3 +184,19 @@ test("deferred timer state writes commit after the client function returns", asy
|
|||||||
expect(state.value).toBe(2);
|
expect(state.value).toBe(2);
|
||||||
expect(rendered).toBe("2");
|
expect(rendered).toBe("2");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("the deferred commit helper does not shadow an authored commit function", () => {
|
||||||
|
const targets = generateTargets(
|
||||||
|
parse(`component AuthoredCommit {
|
||||||
|
state { value: number = 0 }
|
||||||
|
functions {
|
||||||
|
client function commit(): void { value = 1 }
|
||||||
|
client function save(): void { commit() }
|
||||||
|
}
|
||||||
|
view { <button @click='save()'>{value}</button> }
|
||||||
|
}`),
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(() => new Function(targets.browser.replace(/^export\s+/gm, ""))).not.toThrow();
|
||||||
|
expect(targets.browser).not.toContain("const commit = __wrnexusCommit");
|
||||||
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user