diff --git a/src/index.ts b/src/index.ts index f9a2b66..e7e30bc 100644 --- a/src/index.ts +++ b/src/index.ts @@ -31,6 +31,7 @@ const getMeta = ($: cheerio.Root, metaName: string) => { const parseUrl = (url?: string, baseUrl?: string) => { if (!url) return undefined; if (!baseUrl || url.startsWith('http')) return url; + if (url.startsWith('//')) return `https:${url}`; return `${baseUrl}${url}`; }; @@ -92,7 +93,7 @@ const getLinkPreview = async (url: string, options?: ILinkPreviewerOptions) => { : ('error' as 'error'), }; - const response = await fetch(fetchUrl, fetchOptions).catch(e => { + const response = await fetch(fetchUrl, fetchOptions).catch((e) => { if (e.name === 'AbortError') { throw new Error('Request timeout'); } diff --git a/test/index.test.ts b/test/index.test.ts index fea3247..b7869a1 100644 --- a/test/index.test.ts +++ b/test/index.test.ts @@ -3,7 +3,7 @@ import getLinkPreview, { ILinkPreviewInfo } from '../src'; const youtubeSample: ILinkPreviewInfo = { description: 'How much do we know about the impact of technologies we use everyday? How much the web industry is responsible for carbon emissions? Can we define an ethic d...', - favicon: 'https://www.youtube.com/s/desktop/ce262d3b/img/favicon.ico', + favicon: 'https://www.youtube.com/s/desktop/1422277c/img/favicon.ico', image: 'https://i.ytimg.com/vi/feH26j3rBz8/maxresdefault.jpg', imageHeight: 720, imageWidth: 1280, @@ -35,6 +35,30 @@ const rawmaterialSample: ILinkPreviewInfo = { videos: [], }; +const wikipediaSample: ILinkPreviewInfo = { + description: undefined, + favicon: 'https://en.wikipedia.org/static/favicon/wikipedia.ico', + image: + 'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Plone_5.2.png/1200px-Plone_5.2.png', + imageHeight: 1423, + imageWidth: 1200, + images: [ + 'https://upload.wikimedia.org/wikipedia/commons/thumb/d/df/Plone-logo.svg/121px-Plone-logo.svg.png', + 'https://upload.wikimedia.org/wikipedia/commons/thumb/e/e2/Plone_5.2.png/300px-Plone_5.2.png', + 'https://upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png', + 'https://upload.wikimedia.org/wikipedia/commons/thumb/3/31/Free_and_open-source_software_logo_%282009%29.svg/28px-Free_and_open-source_software_logo_%282009%29.svg.png', + 'https://upload.wikimedia.org/wikipedia/en/thumb/4/4a/Commons-logo.svg/30px-Commons-logo.svg.png', + 'https://upload.wikimedia.org/wikipedia/en/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png', + 'https://en.wikipedia.org/static/images/footer/wikimedia-button.png', + 'https://en.wikipedia.org/static/images/footer/poweredby_mediawiki_88x31.png', + ], + mediaType: 'website', + siteName: undefined, + title: 'Plone (software) - Wikipedia', + video: undefined, + videos: [], +}; + it('gets correct info for RawMaterial website', async () => { const info = await getLinkPreview('https://rawmaterial.it/en'); expect(info).toEqual(rawmaterialSample); @@ -46,3 +70,10 @@ it('gets correct info for YouTube video link', async () => { ); expect(info).toEqual(youtubeSample); }); + +it('gets correct info for Wikipedia url', async () => { + const info = await getLinkPreview( + 'https://en.wikipedia.org/wiki/Plone_(software)' + ); + expect(info).toEqual(wikipediaSample); +});