1 |
|
2 | import type {FileSystem} from '@parcel/fs';
|
3 | import path from 'path';
|
4 |
|
5 | const SOURCEMAP_RE = /(?:\/\*|\/\/)\s*[@#]\s*sourceMappingURL\s*=\s*([^\r\n*]+)(?:\s*\*\/)?/;
|
6 | const DATA_URL_RE = /^data:[^;]+(?:;charset=[^;]+)?;base64,(.*)/;
|
7 |
|
8 | export 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 | }
|