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
|
||||
|
||||
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`] = `
|
||||
"import { createVNode as _createVNode, openBlock as _openBlock, createBlock as _createBlock } from \\"vue\\"
|
||||
import _imports_0 from '@svg/file.svg'
|
||||
|
@ -94,4 +94,36 @@ describe('compiler sfc: transform asset url', () => {
|
||||
// should not remove it
|
||||
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] !== '@' &&
|
||||
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-
|
||||
// only version provided by rollup-plugin-node-builtins.
|
||||
attr.value.content = (path.posix || path).join(
|
||||
options.base,
|
||||
url.path + (url.hash || '')
|
||||
)
|
||||
attr.value.content =
|
||||
host +
|
||||
(path.posix || path).join(basePath, url.path + (url.hash || ''))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
@ -35,5 +35,5 @@ export function parseUrl(url: string): UrlWithStringQuery {
|
||||
function parseUriParts(urlString: string): UrlWithStringQuery {
|
||||
// A TypeError is thrown if urlString is not a string
|
||||
// @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