(schema: ApiSchema)
| 519 | * fix schema defects before any per-language codegen runs. |
| 520 | */ |
| 521 | export function fixNullableRequiredRefsInApiSchema(schema: ApiSchema): ApiSchema { |
| 522 | function walkApiNode(node: Record<string, unknown> | undefined): Record<string, unknown> | undefined { |
| 523 | if (!node) return undefined; |
| 524 | const result: Record<string, unknown> = {}; |
| 525 | for (const [key, value] of Object.entries(node)) { |
| 526 | if (isRpcMethod(value)) { |
| 527 | const method = value as RpcMethod; |
| 528 | result[key] = { |
| 529 | ...method, |
| 530 | params: method.params ? normalizeNullableRequiredRefs(method.params) : method.params, |
| 531 | result: method.result ? normalizeNullableRequiredRefs(method.result) : method.result, |
| 532 | }; |
| 533 | } else if (typeof value === "object" && value !== null) { |
| 534 | result[key] = walkApiNode(value as Record<string, unknown>); |
| 535 | } else { |
| 536 | result[key] = value; |
| 537 | } |
| 538 | } |
| 539 | return result; |
| 540 | } |
| 541 | |
| 542 | function normalizeDefs(defs: Record<string, JSONSchema7Definition> | undefined): Record<string, JSONSchema7Definition> | undefined { |
| 543 | if (!defs) return undefined; |
| 544 | return Object.fromEntries( |
| 545 | Object.entries(defs).map(([key, value]) => [ |
| 546 | key, |
| 547 | typeof value === "object" && value !== null ? normalizeNullableRequiredRefs(value as JSONSchema7) : value, |
| 548 | ]) |
| 549 | ); |
| 550 | } |
| 551 | |
| 552 | return { |
| 553 | ...schema, |
| 554 | definitions: normalizeDefs(schema.definitions), |
| 555 | $defs: normalizeDefs(schema.$defs), |
| 556 | server: walkApiNode(schema.server), |
| 557 | session: walkApiNode(schema.session), |
| 558 | clientSession: walkApiNode(schema.clientSession), |
| 559 | clientGlobal: walkApiNode(schema.clientGlobal), |
| 560 | }; |
| 561 | } |
| 562 | |
| 563 | /** Returns true when every leaf RPC method inside `node` is marked experimental. */ |
| 564 | export function isNodeFullyExperimental(node: Record<string, unknown>): boolean { |
no test coverage detected
searching dependent graphs…