Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 24x 15x 15x 15x | import { dataUrlRegExpBuilder } from '../regexp'
import { LiteralUnion } from '../types'
import { parseUrlQueryString } from './parseUrlQueryString'
const regExp = dataUrlRegExpBuilder.build({
exact: true,
})
export interface ParseDataUrlResult {
mimeType: string
parameters: Record<
LiteralUnion<'name' | 'charset' | 'base64', string>,
string
>
content: string
base64: boolean
}
/**
* 解析 Data URL。
*
* @param dataUrl 要解析的 Data URL
* @returns 返回结果
*/
export function parseDataUrl(dataUrl: string): ParseDataUrlResult {
const [
,
mimeType = 'text/plain;charset=US-ASCII',
,
,
extraParameters = '',
content = '',
] = dataUrl.match(regExp) || []
const parameters = parseUrlQueryString(
`${mimeType}${extraParameters}`.replace(/^[^;]*;?/, ''),
{
partSeparator: ';',
},
)
return {
mimeType: decodeURIComponent(mimeType),
parameters: parameters,
content: decodeURIComponent(content),
base64: parameters.base64 != null,
}
}
|