From bd3d7fda94e88d5d5181abf14d527cf0aecfe2a3 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Thu, 3 Oct 2024 13:02:40 -0500 Subject: [PATCH] Treat .ts links in statuses as application/typescript Fixes https://gitlab.com/soapbox-pub/ditto/-/issues/241 --- src/utils/media.test.ts | 4 ++++ src/utils/media.ts | 12 +++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) 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); + } +}