diff --git a/src/utils/media.test.ts b/src/utils/media.test.ts index e88e97da..39abed23 100644 --- a/src/utils/media.test.ts +++ b/src/utils/media.test.ts @@ -7,6 +7,10 @@ Deno.test('getUrlMediaType', () => { assertEquals(getUrlMediaType('https://example.com/index.html'), 'text/html'); assertEquals(getUrlMediaType('https://example.com/yolo'), undefined); assertEquals(getUrlMediaType('https://example.com/'), undefined); + assertEquals( + getUrlMediaType('https://gitlab.com/soapbox-pub/nostrify/-/blob/main/packages/policies/WoTPolicy.ts'), + 'application/typescript', + ); }); Deno.test('isPermittedMediaType', () => { diff --git a/src/utils/media.ts b/src/utils/media.ts index 9c0ea9e3..82c9832d 100644 --- a/src/utils/media.ts +++ b/src/utils/media.ts @@ -1,4 +1,4 @@ -import { typeByExtension } from '@std/media-types'; +import { typeByExtension as _typeByExtension } from '@std/media-types'; /** Get media type of the filename in the URL by its extension, if any. */ export function getUrlMediaType(url: string): string | undefined { @@ -22,3 +22,13 @@ export function isPermittedMediaType(mediaType: string, permitted: string[]): bo const [baseType, _subType] = mediaType.split('/'); return permitted.includes(baseType); } + +/** Custom type-by-extension with overrides. */ +function typeByExtension(ext: string): string | undefined { + switch (ext) { + case 'ts': + return 'application/typescript'; + default: + return _typeByExtension(ext); + } +}