(obj, toPick, nodes)
| 553 | |
| 554 | // Exactly the same as `omit()` above except for `keys.has(key)` instead of `!keys.has(key)`. |
| 555 | function pick(obj, toPick, nodes) { |
| 556 | obj = resolveValue(obj, nodes); |
| 557 | |
| 558 | if (obj.type === 'interface' || obj.type === 'object') { |
| 559 | let keys = new Set(); |
| 560 | if (toPick.type === 'string' && toPick.value) { |
| 561 | keys.add(toPick.value); |
| 562 | } else if (toPick.type === 'union') { |
| 563 | for (let e of toPick.elements) { |
| 564 | if (e.type === 'string' && e.value) { |
| 565 | keys.add(e.value); |
| 566 | } |
| 567 | } |
| 568 | } |
| 569 | |
| 570 | if (keys.size === 0) { |
| 571 | return obj; |
| 572 | } |
| 573 | |
| 574 | let properties = {}; |
| 575 | for (let key in obj.properties) { |
| 576 | if (keys.has(key)) { |
| 577 | properties[key] = obj.properties[key]; |
| 578 | } |
| 579 | } |
| 580 | |
| 581 | return { |
| 582 | ...obj, |
| 583 | properties |
| 584 | }; |
| 585 | } |
| 586 | |
| 587 | return obj; |
| 588 | } |
| 589 | |
| 590 | function resolveValue(obj, nodes) { |
| 591 | if (obj.type === 'link') { |
no test coverage detected