(value: unknown)
| 836 | } |
| 837 | |
| 838 | function decodeContentBlock(value: unknown): ClientCapabilityContentBlock { |
| 839 | const record = requireRecord(value, 'Client Capability content block'); |
| 840 | switch (record.type) { |
| 841 | case 'text': |
| 842 | assertExactKeys(record, 'Client Capability text block', ['type', 'text']); |
| 843 | return { |
| 844 | type: 'text', |
| 845 | text: requireBoundedString(record.text, 'text', CLIENT_CAPABILITY_MAX_RESULT_BYTES), |
| 846 | }; |
| 847 | case 'image': |
| 848 | case 'audio': |
| 849 | assertExactKeys(record, `Client Capability ${record.type} block`, [ |
| 850 | 'type', |
| 851 | 'data', |
| 852 | 'mimeType', |
| 853 | ]); |
| 854 | const data = requireBoundedString(record.data, 'data', CLIENT_CAPABILITY_MAX_RESULT_BYTES); |
| 855 | if (!isCanonicalBase64(data)) { |
| 856 | throw invalidProtocolFrame(`Invalid Client Capability ${record.type} data`); |
| 857 | } |
| 858 | return { |
| 859 | type: record.type, |
| 860 | data, |
| 861 | mimeType: |
| 862 | record.type === 'image' |
| 863 | ? requireImageMimeType(record.mimeType) |
| 864 | : requireString(record.mimeType, 'mimeType', 256), |
| 865 | }; |
| 866 | case 'resource': |
| 867 | assertOptionalExactKeys( |
| 868 | record, |
| 869 | 'Client Capability resource block', |
| 870 | ['type', 'uri'], |
| 871 | ['mimeType', 'text', 'blob'], |
| 872 | ); |
| 873 | return { |
| 874 | type: 'resource', |
| 875 | uri: requireString(record.uri, 'uri', 4_096), |
| 876 | ...(record.mimeType === undefined |
| 877 | ? {} |
| 878 | : { mimeType: requireString(record.mimeType, 'mimeType', 256) }), |
| 879 | ...(record.text === undefined |
| 880 | ? {} |
| 881 | : { |
| 882 | text: requireBoundedString(record.text, 'text', CLIENT_CAPABILITY_MAX_RESULT_BYTES), |
| 883 | }), |
| 884 | ...(record.blob === undefined |
| 885 | ? {} |
| 886 | : { |
| 887 | blob: requireCanonicalBase64(record.blob, 'blob', CLIENT_CAPABILITY_MAX_RESULT_BYTES), |
| 888 | }), |
| 889 | }; |
| 890 | case 'resource_link': |
| 891 | assertOptionalExactKeys( |
| 892 | record, |
| 893 | 'Client Capability resource link block', |
| 894 | ['type', 'uri'], |
| 895 | ['name', 'description', 'mimeType'], |
nothing calls this directly
no test coverage detected