fix(compiler-sfc): support transforming asset urls with full base url. (#2477)
This commit is contained in:
parent
3867bb4c14
commit
db786b1afe
@ -1,5 +1,37 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||||
|
|
||||||
|
exports[`compiler sfc: transform asset url should allow for full base URLs, with paths 1`] = `
|
||||||
|
"import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
|
||||||
|
|
||||||
|
export function render(_ctx, _cache) {
|
||||||
|
return (_openBlock(), _createBlock(\\"img\\", { src: \\"http://localhost:3000/src/logo.png\\" }))
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`compiler sfc: transform asset url should allow for full base URLs, without paths 1`] = `
|
||||||
|
"import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
|
||||||
|
|
||||||
|
export function render(_ctx, _cache) {
|
||||||
|
return (_openBlock(), _createBlock(\\"img\\", { src: \\"http://localhost:3000/logo.png\\" }))
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`compiler sfc: transform asset url should allow for full base URLs, without port 1`] = `
|
||||||
|
"import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
|
||||||
|
|
||||||
|
export function render(_ctx, _cache) {
|
||||||
|
return (_openBlock(), _createBlock(\\"img\\", { src: \\"http://localhost/logo.png\\" }))
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`compiler sfc: transform asset url should allow for full base URLs, without protocol 1`] = `
|
||||||
|
"import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
|
||||||
|
|
||||||
|
export function render(_ctx, _cache) {
|
||||||
|
return (_openBlock(), _createBlock(\\"img\\", { src: \\"//localhost/logo.png\\" }))
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`compiler sfc: transform asset url support uri fragment 1`] = `
|
exports[`compiler sfc: transform asset url support uri fragment 1`] = `
|
||||||
"import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
|
"import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
|
||||||
import _imports_0 from '@svg/file.svg'
|
import _imports_0 from '@svg/file.svg'
|
||||||
|
@ -94,4 +94,36 @@ describe('compiler sfc: transform asset url', () => {
|
|||||||
// should not remove it
|
// should not remove it
|
||||||
expect(code).toMatch(`"xlink:href": "#myCircle"`)
|
expect(code).toMatch(`"xlink:href": "#myCircle"`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('should allow for full base URLs, with paths', () => {
|
||||||
|
const { code } = compileWithAssetUrls(`<img src="./logo.png" />`, {
|
||||||
|
base: 'http://localhost:3000/src/'
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(code).toMatchSnapshot()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('should allow for full base URLs, without paths', () => {
|
||||||
|
const { code } = compileWithAssetUrls(`<img src="./logo.png" />`, {
|
||||||
|
base: 'http://localhost:3000'
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(code).toMatchSnapshot()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('should allow for full base URLs, without port', () => {
|
||||||
|
const { code } = compileWithAssetUrls(`<img src="./logo.png" />`, {
|
||||||
|
base: 'http://localhost'
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(code).toMatchSnapshot()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('should allow for full base URLs, without protocol', () => {
|
||||||
|
const { code } = compileWithAssetUrls(`<img src="./logo.png" />`, {
|
||||||
|
base: '//localhost'
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(code).toMatchSnapshot()
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
@ -121,12 +121,17 @@ export const transformAssetUrl: NodeTransform = (
|
|||||||
attr.value.content[0] !== '@' &&
|
attr.value.content[0] !== '@' &&
|
||||||
isRelativeUrl(attr.value.content)
|
isRelativeUrl(attr.value.content)
|
||||||
) {
|
) {
|
||||||
|
// Allow for full hostnames provided in options.base
|
||||||
|
const base = parseUrl(options.base)
|
||||||
|
const protocol = base.protocol || ''
|
||||||
|
const host = base.host ? protocol + '//' + base.host : ''
|
||||||
|
const basePath = base.path || '/'
|
||||||
|
|
||||||
// when packaged in the browser, path will be using the posix-
|
// when packaged in the browser, path will be using the posix-
|
||||||
// only version provided by rollup-plugin-node-builtins.
|
// only version provided by rollup-plugin-node-builtins.
|
||||||
attr.value.content = (path.posix || path).join(
|
attr.value.content =
|
||||||
options.base,
|
host +
|
||||||
url.path + (url.hash || '')
|
(path.posix || path).join(basePath, url.path + (url.hash || ''))
|
||||||
)
|
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -35,5 +35,5 @@ export function parseUrl(url: string): UrlWithStringQuery {
|
|||||||
function parseUriParts(urlString: string): UrlWithStringQuery {
|
function parseUriParts(urlString: string): UrlWithStringQuery {
|
||||||
// A TypeError is thrown if urlString is not a string
|
// A TypeError is thrown if urlString is not a string
|
||||||
// @see https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost
|
// @see https://nodejs.org/api/url.html#url_url_parse_urlstring_parsequerystring_slashesdenotehost
|
||||||
return uriParse(isString(urlString) ? urlString : '')
|
return uriParse(isString(urlString) ? urlString : '', false, true)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user