attached sourcemap: use regex

pull/5854/head
Milan Hauth 6 years ago
parent a5ae6b3b7e
commit dcaeb768e4

@ -293,22 +293,23 @@ export function apply_preprocessor_sourcemap(filename: string, svelte_map: Sourc
// parse attached sourcemap in processed.code
export function parse_attached_sourcemap(processed: Processed, tag_name: 'script' | 'style'): void {
const magic_prefix = '# sourceMappingURL=data:application/json;';
const cut_index = processed.code.lastIndexOf('\n');
const last_line = processed.code.slice(cut_index);
const line_start = last_line.slice(1, 3); // last_line[0] == '\n'
if ((line_start != '/*' && (tag_name == 'script' && line_start != '//')) ||
magic_prefix != last_line.slice(3, 3 + magic_prefix.length)
) return; // attachment not found
if (processed.map) {
throw 'not implemented. '+
'found sourcemap in both processed.code and processed.map. '+
'please pass only one sourcemap.\n'+
'processed.code:\n'+
processed.code.slice(0, 100)+' [....]'; // help to find preprocessor
}
processed.code = processed.code.slice(0, cut_index); // remove last line
const slice_to = (line_start == '/*') ? -2 : undefined;
const b64map = last_line.slice(last_line.indexOf('base64,')+7, slice_to).trim();
processed.map = b64dec(b64map);
const r_in = '[#@]\\s*sourceMappingURL\\s*=\\s*data:' +
'(?:application|text)/json;(?:charset[:=]\\S+?;)?base64,(\\S*)';
const regex = (tag_name == 'script')
? new RegExp('(?://'+r_in+')|(?:/\\*'+r_in+'\\s*\\*/)$')
: new RegExp('/\\*'+r_in+'\\s*\\*/$');
processed.code = processed.code.replace(regex, (_, match1, match2) => {
if (processed.map) {
throw 'not implemented. '+
'found sourcemap in both processed.code and processed.map. '+
'please pass only one sourcemap.\n'+
'processed.code:\n'+
processed.code.slice(0, 100)+' [....]'; // help to find preprocessor
}
const map64 = (tag_name == 'script')
? (match1 || match2)
: match1;
processed.map = b64dec(map64);
return ''; // remove from processed.code
});
}

Loading…
Cancel
Save