Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 0 additions & 94 deletions nodejs/src/generated/session-events.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

51 changes: 51 additions & 0 deletions nodejs/test/session-event-codegen.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,59 @@ import { generateSessionEventsCode as generateCSharpSessionEventsCode } from "..
import { generateGoSessionEventsCode } from "../../scripts/codegen/go.ts";
import { generatePythonSessionEventsCode } from "../../scripts/codegen/python.ts";
import { generateSessionEventsCode as generateRustSessionEventsCode } from "../../scripts/codegen/rust.ts";
import { generateTypeScriptSessionEventsCode } from "../../scripts/codegen/typescript.ts";

describe("session event codegen", () => {
it("excludes internal event wrappers from the public TypeScript union", async () => {
const schema: JSONSchema7 = {
definitions: {
SessionEvent: {
anyOf: [
{ $ref: "#/definitions/PublicEvent" },
{ $ref: "#/definitions/InternalEvent" },
],
},
PublicEvent: {
type: "object",
required: ["type", "data"],
properties: {
type: { const: "session.public" },
data: { $ref: "#/definitions/PublicData" },
},
},
PublicData: {
type: "object",
required: ["message"],
properties: {
message: { type: "string" },
},
},
InternalEvent: {
type: "object",
visibility: "internal",
required: ["type", "data"],
properties: {
type: { const: "session.internal" },
data: { $ref: "#/definitions/InternalData" },
},
},
InternalData: {
type: "object",
required: ["attempt"],
properties: {
attempt: { type: "number" },
},
},
},
};

const code = await generateTypeScriptSessionEventsCode(schema);

expect(code).toContain("export interface PublicEvent");
expect(code).not.toContain("InternalEvent");
expect(code).not.toContain("InternalData");
});

it("maps special schema formats to the expected Python types", () => {
const schema: JSONSchema7 = {
definitions: {
Expand Down
17 changes: 11 additions & 6 deletions scripts/codegen/typescript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -338,11 +338,7 @@ export function normalizeSchemaForTypeScript(schema: JSONSchema7): JSONSchema7 {

// ── Session Events ──────────────────────────────────────────────────────────

async function generateSessionEvents(schemaPath?: string): Promise<void> {
console.log("TypeScript: generating session-events...");

const resolvedPath = schemaPath ?? (await getSessionEventsSchemaPath());
const schema = (await loadSchemaJson(resolvedPath)) as JSONSchema7;
export async function generateTypeScriptSessionEventsCode(schema: JSONSchema7): Promise<string> {
const processed = propagateInternalVisibility(postProcessSchema(schema));
const definitionCollections = collectDefinitionCollections(processed as Record<string, unknown>);
const sessionEvent =
Expand All @@ -355,7 +351,7 @@ async function generateSessionEvents(schemaPath?: string): Promise<void> {
const resolvedVariant = resolveSchema(variantSchema, definitionCollections) ?? variantSchema;
const dataSchema = resolvedVariant.properties?.data as JSONSchema7 | undefined;
const resolvedData = dataSchema ? resolveSchema(dataSchema, definitionCollections) ?? dataSchema : undefined;
if (!isSchemaInternal(resolvedData)) {
if (!isSchemaInternal(resolvedVariant) && !isSchemaInternal(resolvedData)) {
return true;
}

Expand Down Expand Up @@ -415,6 +411,15 @@ async function generateSessionEvents(schemaPath?: string): Promise<void> {
`$1/** @internal */\n$2`
);
}
return annotatedTs;
}

async function generateSessionEvents(schemaPath?: string): Promise<void> {
console.log("TypeScript: generating session-events...");

const resolvedPath = schemaPath ?? (await getSessionEventsSchemaPath());
const schema = (await loadSchemaJson(resolvedPath)) as JSONSchema7;
const annotatedTs = await generateTypeScriptSessionEventsCode(schema);
const outPath = await writeGeneratedFile("nodejs/src/generated/session-events.ts", annotatedTs);
console.log(` ✓ ${outPath}`);
}
Expand Down