fork of hey-api/openapi-ts because I need some additional things
1import type { IR } from '@hey-api/shared';
2
3import type { PydanticMeta, PydanticResult } from './types';
4
5/**
6 * Creates default metadata from a schema.
7 */
8export function defaultMeta(schema: IR.SchemaObject): PydanticMeta {
9 return {
10 default: schema.default,
11 hasForwardReference: false,
12 nullable: false,
13 readonly: schema.accessScope === 'read',
14 };
15}
16
17/**
18 * Composes metadata from child results.
19 *
20 * @param children - Results from walking child schemas
21 * @param overrides - Explicit overrides (e.g., from parent schema)
22 */
23export function composeMeta(
24 children: ReadonlyArray<PydanticResult>,
25 overrides?: Partial<PydanticMeta>,
26): PydanticMeta {
27 return {
28 default: overrides?.default,
29 hasForwardReference:
30 overrides?.hasForwardReference ?? children.some((c) => c.meta.hasForwardReference),
31 nullable: overrides?.nullable ?? children.some((c) => c.meta.nullable),
32 readonly: overrides?.readonly ?? children.some((c) => c.meta.readonly),
33 };
34}
35
36/**
37 * Merges parent schema metadata with composed child metadata.
38 *
39 * @param parent - The parent schema
40 * @param children - Results from walking child schemas
41 */
42export function inheritMeta(
43 parent: IR.SchemaObject,
44 children: ReadonlyArray<PydanticResult>,
45): PydanticMeta {
46 return composeMeta(children, {
47 default: parent.default,
48 nullable: false,
49 readonly: parent.accessScope === 'read',
50 });
51}