release: WRNexusJS 0.8.0
Quality / quality (ubuntu-latest) (push) Failing after 12m19s
Quality / quality (windows-latest) (push) Canceled after 0s

This commit is contained in:
2026-08-04 12:19:09 +05:30
parent 4cebacadfe
commit 72e4d3eceb
108 changed files with 2276 additions and 532 deletions
@@ -149,3 +149,63 @@ test("extracts v0.6 optional props, declared union options, and outputs", () =>
],
);
});
test("accepts unresolved dynamic expressions for typed component props", () => {
const featureCard = parseComponentMetadata(`component FeatureCard {
props {
external: boolean = false
disabled: boolean = false
showArrow: boolean = true
}
view { <article></article> }
}`);
const source = `component FeatureGrid {
props { items: unknown[] = [] }
view {
{#each items as item}
<FeatureCard
external='{item.external || false}'
disabled='{item.disabled || false}'
showArrow='{item.showArrow !== false}'
/>
{/each}
}
}`;
assert.equal(attributeValueType("{item.external || false}"), "unknown");
assert.equal(attributeValueType("{item.showArrow !== false}"), "boolean");
assert.deepEqual(validateComponentTags(source, new Map([["FeatureCard", featureCard]])), []);
});
test("continues to reject invalid literal boolean props", () => {
const target = parseComponentMetadata(`component Toggle {
props { enabled: boolean = false }
view { <button></button> }
}`);
const diagnostics = validateComponentTags(
`<Toggle enabled="definitely" />`,
new Map([["Toggle", target]]),
);
assert.deepEqual(
diagnostics.map(({ code }) => code),
["wrn-component-prop-type"],
);
});
test("accepts unresolved dynamic expressions for declared string options", () => {
const target = parseComponentMetadata(`component FeatureCard {
props { target: "_blank" | "_self" = "_self" }
view { <article></article> }
}`);
const dynamic = `<FeatureCard target='{item.target || ""}' />`;
assert.deepEqual(validateComponentTags(dynamic, new Map([["FeatureCard", target]])), []);
const invalidLiteral = validateComponentTags(
`<FeatureCard target="popup" />`,
new Map([["FeatureCard", target]]),
);
assert.deepEqual(
invalidLiteral.map(({ code }) => code),
["wrn-component-prop-option"],
);
});