| 655 | ): RegisteredResourceTemplate; |
| 656 | |
| 657 | resource(name: string, uriOrTemplate: string | ResourceTemplate, ...rest: unknown[]): RegisteredResource | RegisteredResourceTemplate { |
| 658 | let metadata: ResourceMetadata | undefined; |
| 659 | if (typeof rest[0] === 'object') { |
| 660 | metadata = rest.shift() as ResourceMetadata; |
| 661 | } |
| 662 | |
| 663 | const readCallback = rest[0] as ReadResourceCallback | ReadResourceTemplateCallback; |
| 664 | |
| 665 | if (typeof uriOrTemplate === 'string') { |
| 666 | if (this._registeredResources[uriOrTemplate]) { |
| 667 | throw new Error(`Resource ${uriOrTemplate} is already registered`); |
| 668 | } |
| 669 | |
| 670 | const registeredResource = this._createRegisteredResource( |
| 671 | name, |
| 672 | undefined, |
| 673 | uriOrTemplate, |
| 674 | metadata, |
| 675 | readCallback as ReadResourceCallback |
| 676 | ); |
| 677 | |
| 678 | this.setResourceRequestHandlers(); |
| 679 | this.sendResourceListChanged(); |
| 680 | return registeredResource; |
| 681 | } else { |
| 682 | if (this._registeredResourceTemplates[name]) { |
| 683 | throw new Error(`Resource template ${name} is already registered`); |
| 684 | } |
| 685 | |
| 686 | const registeredResourceTemplate = this._createRegisteredResourceTemplate( |
| 687 | name, |
| 688 | undefined, |
| 689 | uriOrTemplate, |
| 690 | metadata, |
| 691 | readCallback as ReadResourceTemplateCallback |
| 692 | ); |
| 693 | |
| 694 | this.setResourceRequestHandlers(); |
| 695 | this.sendResourceListChanged(); |
| 696 | return registeredResourceTemplate; |
| 697 | } |
| 698 | } |
| 699 | |
| 700 | /** |
| 701 | * Registers a resource with a config object and callback. |