| 184 | } |
| 185 | |
| 186 | private resolvePointer(document: unknown, pointer: string): unknown { |
| 187 | if (!pointer) { |
| 188 | return document; |
| 189 | } |
| 190 | |
| 191 | if (!pointer.startsWith("/")) { |
| 192 | return document; |
| 193 | } |
| 194 | |
| 195 | const parts = pointer |
| 196 | .slice(1) |
| 197 | .split("/") |
| 198 | .map((part) => part.replace(/~1/g, "/").replace(/~0/g, "~")); |
| 199 | |
| 200 | let current: unknown = document; |
| 201 | for (const part of parts) { |
| 202 | if (!current || typeof current !== "object" || !(part in (current as Record<string, unknown>))) { |
| 203 | return undefined; |
| 204 | } |
| 205 | current = (current as Record<string, unknown>)[part]; |
| 206 | } |
| 207 | |
| 208 | return current; |
| 209 | } |
| 210 | |
| 211 | private isYamlSource(source: string): boolean { |
| 212 | const lower = source.toLowerCase().split("?")[0]; |