From 8b1ab674136cd4d4672b0c26cc9be008236a9efa Mon Sep 17 00:00:00 2001 From: "Mr.Hope" Date: Tue, 16 Apr 2024 18:54:47 +0800 Subject: [PATCH] fix(shared): check link with protocol correctly (#1542) --- packages/shared/src/utils/isLinkWithProtocol.ts | 2 +- packages/shared/tests/isLinkWithProtocol.spec.ts | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/shared/src/utils/isLinkWithProtocol.ts b/packages/shared/src/utils/isLinkWithProtocol.ts index e6f66e9741..d6f404c165 100644 --- a/packages/shared/src/utils/isLinkWithProtocol.ts +++ b/packages/shared/src/utils/isLinkWithProtocol.ts @@ -2,4 +2,4 @@ * Determine a link has protocol or not */ export const isLinkWithProtocol = (link: string): boolean => - /^[a-z][a-z0-9+.-]*:/.test(link) + /^[a-z][a-z0-9+.-]*:/.test(link) || link.startsWith('//') diff --git a/packages/shared/tests/isLinkWithProtocol.spec.ts b/packages/shared/tests/isLinkWithProtocol.spec.ts index da2abf977a..a8563351c6 100644 --- a/packages/shared/tests/isLinkWithProtocol.spec.ts +++ b/packages/shared/tests/isLinkWithProtocol.spec.ts @@ -2,16 +2,25 @@ import { expect, it } from 'vitest' import { isLinkWithProtocol } from '../src/index.js' const testCases: [string, ReturnType][] = [ + // with protocol ['ftp://foobar.com', true], ['ms-windows-store://home', true], ['mailto:foobar', true], ['tel:foobar', true], ['https://foobar.com', true], ['http://foobar.com', true], + ['//foobar.com', true], + + // hostname ['foobar.com', false], + + // pathname ['/foo/bar', false], + + // relative path ['../foo/bar', false], - ['//foobar.com', false], + ['./foo/bar', false], + ['foo/bar', false], ] testCases.forEach(([source, expected]) => {