UNPKG

783 BJavaScriptView Raw
1// @flow
2import type {FileSystem} from '@parcel/fs';
3import path from 'path';
4
5const SOURCEMAP_RE = /(?:\/\*|\/\/)\s*[@#]\s*sourceMappingURL\s*=\s*([^\r\n*]+)(?:\s*\*\/)?/;
6const DATA_URL_RE = /^data:[^;]+(?:;charset=[^;]+)?;base64,(.*)/;
7
8export default async function loadSourceMapUrl(
9 fs: FileSystem,
10 filename: string,
11 contents: string
12) {
13 let match = contents.match(SOURCEMAP_RE);
14 if (match) {
15 let url = match[1].trim();
16 let dataURLMatch = url.match(DATA_URL_RE);
17 filename = dataURLMatch ? filename : path.join(path.dirname(filename), url);
18
19 return {
20 url,
21 filename,
22 map: JSON.parse(
23 dataURLMatch
24 ? Buffer.from(dataURLMatch[1], 'base64').toString()
25 : await fs.readFile(filename, 'utf8')
26 )
27 };
28 }
29}