import MagicString from 'magic-string' ; let indent_size = 4 ; let comment_multi = true ; function get_processor ( tag_name , search , replace ) { return { [ tag_name ] : ( { content , filename } ) => { let code = content . slice ( ) ; const ms = new MagicString ( code ) ; const idx = ms . original . indexOf ( search ) ; if ( idx == - 1 ) throw new Error ( 'search not found in src' ) ; ms . overwrite ( idx , idx + search . length , replace , { storeName : true } ) ; const indent = Array . from ( { length : indent_size } ) . join ( ' ' ) ; ms . prependLeft ( idx , '\n' + indent ) ; const map_opts = { source : filename , hires : true , includeContent : false } ; const map = ms . generateMap ( map_opts ) ; const attach_line = ( tag_name == 'style' || comment_multi ) ? `\n/*# sourceMappingURL=${ map . toUrl ( ) } */` : `\n//# sourceMappingURL=${ map . toUrl ( ) }` ; code = ms . toString ( ) + attach_line ; indent_size += 2 ; if ( tag_name == 'script' ) comment_multi = ! comment_multi ; return { code } ; } } ; } export default { preprocess : [ get_processor ( 'script' , 'replace_me_script' , 'done_replace_script_1' ) , get_processor ( 'script' , 'done_replace_script_1' , 'done_replace_script_2' ) , get_processor ( 'style' , '.replace_me_style' , '.done_replace_style_1' ) , get_processor ( 'style' , '.done_replace_style_1' , '.done_replace_style_2' ) ] } ;