Files
scriptc/tests/corpus/3058-optional-array-chain-join.ts
Chris TateandHagege Ruben 0ad3fc7d43 fix: lower array callbacks inside optional chains (#474)
- Narrow guarded array receivers while preparing callback signatures.
- Cover filter, map, and join chains against Node in native builds.

Fixes #472

Co-authored-by: Hagege Ruben <20857346+HagegeR@users.noreply.github.com>
2026-09-26 15:27:21 -05:00

35 lines
1.2 KiB
TypeScript

// @dynamic
type Block = { type: "text"; text: string } | { type: "image"; url: string };
type Message = { role: string; content: Block[] };
let separators = 0;
function separator(): string {
separators++;
return "|";
}
function render(messages: Message[]): string {
const lastAssistant = messages.findLast((message) => message.role === "assistant");
return lastAssistant?.content
.filter((block) => block.type === "text")
.map((block) => block.text)
.join(separator()) ?? "<none>";
}
console.log(render([
{ role: "assistant", content: [{ type: "text", text: "old" }] },
{ role: "user", content: [{ type: "text", text: "ignored" }] },
{ role: "assistant", content: [
{ type: "text", text: "first" },
{ type: "image", url: "skip" },
{ type: "text", text: "second" },
] },
]), separators);
console.log(render([{ role: "user", content: [{ type: "text", text: "ignored" }] }]), separators);
function maybeLabels(present: boolean): string[] | undefined {
return present ? ["ALPHA", "BETA"] : undefined;
}
console.log(maybeLabels(true)?.map((label) => label.toLowerCase()).join(",") ?? "<none>");
console.log(maybeLabels(false)?.map((label) => label.toLowerCase()).join(",") ?? "<none>");