(schemaPath?: string, sessionEventsSchema?: JSONSchema7)
| 2535 | } |
| 2536 | |
| 2537 | export async function generateRpc(schemaPath?: string, sessionEventsSchema?: JSONSchema7): Promise<void> { |
| 2538 | console.log("C#: generating RPC types..."); |
| 2539 | const resolvedPath = schemaPath ?? (await getApiSchemaPath()); |
| 2540 | let schema = fixNullableRequiredRefsInApiSchema(cloneSchemaForCodegen((await loadSchemaJson(resolvedPath)) as ApiSchema)); |
| 2541 | if (sessionEventsSchema) { |
| 2542 | const sharedDefinitions = findSharedSchemaDefinitions( |
| 2543 | schema as unknown as Record<string, unknown>, |
| 2544 | sessionEventsSchema as unknown as Record<string, unknown> |
| 2545 | ); |
| 2546 | const reachableDefinitions = collectReachableDefinitionNames(sessionEventsSchema as unknown as Record<string, unknown>); |
| 2547 | for (const name of [...sharedDefinitions]) { |
| 2548 | if (!reachableDefinitions.has(name)) { |
| 2549 | sharedDefinitions.delete(name); |
| 2550 | } |
| 2551 | } |
| 2552 | schema = rewriteSharedDefinitionReferences(schema, sharedDefinitions, "session-events.schema.json"); |
| 2553 | } |
| 2554 | const externalJsonSerializableRefs = new Map<string, Set<string>>(); |
| 2555 | const externalValueTypes = new Set<string>(); |
| 2556 | if (sessionEventsSchema) { |
| 2557 | const sessionEventsCode = generateSessionEventsCode(sessionEventsSchema); |
| 2558 | const externalRefs = collectExternalSchemaRefNames(schema); |
| 2559 | const sessionEventRefs = externalRefs.get("session-events.schema.json"); |
| 2560 | if (sessionEventRefs && sessionEventRefs.size > 0) { |
| 2561 | const reachableDefinitions = collectReachableDefinitionNames( |
| 2562 | sessionEventsSchema as unknown as Record<string, unknown>, |
| 2563 | sessionEventRefs |
| 2564 | ); |
| 2565 | const emittedDefinitions = new Set<string>(); |
| 2566 | for (const name of reachableDefinitions) { |
| 2567 | const typeName = typeToClassName(name); |
| 2568 | const declarationPattern = new RegExp(`\\bpublic\\s+(?:(?:sealed|abstract|partial|readonly)\\s+)*(?:class|struct)\\s+${typeName}\\b`); |
| 2569 | if (declarationPattern.test(sessionEventsCode)) { |
| 2570 | emittedDefinitions.add(name); |
| 2571 | } |
| 2572 | const valueTypeDeclarationPattern = new RegExp(`\\bpublic\\s+(?:(?:readonly)\\s+)?struct\\s+${typeName}\\b`); |
| 2573 | if (valueTypeDeclarationPattern.test(sessionEventsCode)) { |
| 2574 | externalValueTypes.add(name); |
| 2575 | } |
| 2576 | } |
| 2577 | externalJsonSerializableRefs.set( |
| 2578 | "session-events.schema.json", |
| 2579 | emittedDefinitions |
| 2580 | ); |
| 2581 | } |
| 2582 | } |
| 2583 | const code = generateRpcCode(schema, externalJsonSerializableRefs, externalValueTypes); |
| 2584 | const outPath = await writeGeneratedFile("dotnet/src/Generated/Rpc.cs", code); |
| 2585 | console.log(` ✓ ${outPath}`); |
| 2586 | await formatCSharpFile(outPath); |
| 2587 | } |
| 2588 | |
| 2589 | // ══════════════════════════════════════════════════════════════════════════════ |
| 2590 | // MAIN |
no test coverage detected
searching dependent graphs…