(message: JSONRPCMessage)
| 320 | * @returns A new message with resolved $ref references, or the original message if no resolution is needed |
| 321 | */ |
| 322 | export function resolveRefsInMessage(message: JSONRPCMessage): JSONRPCMessage { |
| 323 | if (!isJSONRPCRequest(message) || !message.params?.requestedSchema) { |
| 324 | return message; |
| 325 | } |
| 326 | |
| 327 | const requestedSchema = message.params.requestedSchema as JsonSchemaType; |
| 328 | |
| 329 | if (!requestedSchema?.properties) { |
| 330 | return message; |
| 331 | } |
| 332 | |
| 333 | const resolvedMessage = { |
| 334 | ...message, |
| 335 | params: { |
| 336 | ...message.params, |
| 337 | requestedSchema: { |
| 338 | ...requestedSchema, |
| 339 | properties: Object.fromEntries( |
| 340 | Object.entries(requestedSchema.properties).map( |
| 341 | ([key, propSchema]) => { |
| 342 | const resolved = resolveRef(propSchema, requestedSchema); |
| 343 | const normalized = normalizeUnionType(resolved); |
| 344 | return [key, normalized]; |
| 345 | }, |
| 346 | ), |
| 347 | ), |
| 348 | }, |
| 349 | }, |
| 350 | }; |
| 351 | |
| 352 | return resolvedMessage; |
| 353 | } |
no test coverage detected