From: zisasign Date: Mon, 15 Nov 2021 02:37:50 +0000 (+0800) Subject: fix(compiler-sfc): externalRE support automatic http/https prefix url pattern (#4922) X-Git-Tag: v3.2.22~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=574070f43f804fd855f4ee319936ec770a56cef0;p=thirdparty%2Fvuejs%2Fcore.git fix(compiler-sfc): externalRE support automatic http/https prefix url pattern (#4922) fix #4920 --- diff --git a/packages/compiler-sfc/__tests__/__snapshots__/templateTransformAssetUrl.spec.ts.snap b/packages/compiler-sfc/__tests__/__snapshots__/templateTransformAssetUrl.spec.ts.snap index 753f3f9a52..37545d772d 100644 --- a/packages/compiler-sfc/__tests__/__snapshots__/templateTransformAssetUrl.spec.ts.snap +++ b/packages/compiler-sfc/__tests__/__snapshots__/templateTransformAssetUrl.spec.ts.snap @@ -67,6 +67,7 @@ export function render(_ctx, _cache) { _createElementVNode(\\"img\\", { src: _imports_1 }), _createElementVNode(\\"img\\", { src: _imports_1 }), _createElementVNode(\\"img\\", { src: \\"http://example.com/fixtures/logo.png\\" }), + _createElementVNode(\\"img\\", { src: \\"//example.com/fixtures/logo.png\\" }), _createElementVNode(\\"img\\", { src: \\"/fixtures/logo.png\\" }), _createElementVNode(\\"img\\", { src: \\"data:image/png;base64,i\\" }) ], 64 /* STABLE_FRAGMENT */)) @@ -99,7 +100,8 @@ export function render(_ctx, _cache) { return (_openBlock(), _createElementBlock(_Fragment, null, [ _createElementVNode(\\"img\\", { src: _imports_0 }), _createElementVNode(\\"img\\", { src: _imports_1 }), - _createElementVNode(\\"img\\", { src: \\"https://foo.bar/baz.png\\" }) + _createElementVNode(\\"img\\", { src: \\"https://foo.bar/baz.png\\" }), + _createElementVNode(\\"img\\", { src: \\"//foo.bar/baz.png\\" }) ], 64 /* STABLE_FRAGMENT */)) }" `; diff --git a/packages/compiler-sfc/__tests__/templateTransformAssetUrl.spec.ts b/packages/compiler-sfc/__tests__/templateTransformAssetUrl.spec.ts index d07b922668..18e2cb5e98 100644 --- a/packages/compiler-sfc/__tests__/templateTransformAssetUrl.spec.ts +++ b/packages/compiler-sfc/__tests__/templateTransformAssetUrl.spec.ts @@ -29,6 +29,7 @@ describe('compiler sfc: transform asset url', () => { + `) @@ -76,7 +77,8 @@ describe('compiler sfc: transform asset url', () => { const { code } = compileWithAssetUrls( `` + `` + - ``, + `` + + ``, { includeAbsolute: true } diff --git a/packages/compiler-sfc/__tests__/templateUtils.spec.ts b/packages/compiler-sfc/__tests__/templateUtils.spec.ts index 95bf619be5..a509657332 100644 --- a/packages/compiler-sfc/__tests__/templateUtils.spec.ts +++ b/packages/compiler-sfc/__tests__/templateUtils.spec.ts @@ -36,6 +36,12 @@ describe('compiler sfc:templateUtils isExternalUrl', () => { const result = isExternalUrl(url) expect(result).toBe(true) }) + + test('should return true when String starts with //', () => { + const url = '//vuejs.org/' + const result = isExternalUrl(url) + expect(result).toBe(true) + }) }) describe('compiler sfc:templateUtils isDataUrl', () => { diff --git a/packages/compiler-sfc/src/templateUtils.ts b/packages/compiler-sfc/src/templateUtils.ts index b1befd927e..3f4cb8f6ca 100644 --- a/packages/compiler-sfc/src/templateUtils.ts +++ b/packages/compiler-sfc/src/templateUtils.ts @@ -6,7 +6,7 @@ export function isRelativeUrl(url: string): boolean { return firstChar === '.' || firstChar === '~' || firstChar === '@' } -const externalRE = /^https?:\/\// +const externalRE = /^(https?:)?\/\// export function isExternalUrl(url: string): boolean { return externalRE.test(url) }