(value: unknown, definitions?: JsonObject, seen = new Set<string>())
| 119 | } |
| 120 | |
| 121 | function inlineLocalReferences(value: unknown, definitions?: JsonObject, seen = new Set<string>()): unknown { |
| 122 | if (Array.isArray(value)) return value.map((item) => inlineLocalReferences(item, definitions, seen)) |
| 123 | if (!isRecord(value)) return value |
| 124 | |
| 125 | const localDefinitions = definitions ?? (isRecord(value.$defs) ? value.$defs : undefined) |
| 126 | if (typeof value.$ref === "string" && localDefinitions) { |
| 127 | const name = value.$ref.match(/^#\/\$defs\/(.+)$/)?.[1] ?? value.$ref.match(/^#\/definitions\/(.+)$/)?.[1] |
| 128 | if (name && !seen.has(name)) { |
| 129 | const target = localDefinitions[name] |
| 130 | if (target) { |
| 131 | const { $ref: _, ...rest } = value |
| 132 | return inlineLocalReferences( |
| 133 | { ...(isRecord(target) ? target : {}), ...rest }, |
| 134 | localDefinitions, |
| 135 | new Set(seen).add(name), |
| 136 | ) |
| 137 | } |
| 138 | } |
| 139 | } |
| 140 | |
| 141 | return Object.fromEntries( |
| 142 | Object.entries(value).map(([key, item]) => [key, inlineLocalReferences(item, localDefinitions, seen)]), |
| 143 | ) |
| 144 | } |
| 145 | |
| 146 | function dropDefinitionsIfResolved(value: unknown): unknown { |
| 147 | if (!isRecord(value) || hasLocalReference(value)) return value |
no test coverage detected