1+ import { encode } from '@jridgewell/sourcemap-codec' ;
12import { readFile } from 'fs/promises' ;
2- import MagicString from 'magic-string' ;
33import type { Plugin } from 'rollup' ;
44import { collectGmApi , getMetadata } from './util' ;
55
@@ -32,7 +32,7 @@ export default (transform?: (metadata: string) => string): Plugin => {
3232 * Use `renderChunk` instead of `banner` to preserve the metadata after minimization.
3333 * Note that this plugin must be put after `@rollup/plugin-terser`.
3434 */
35- async renderChunk ( code , chunk ) {
35+ async renderChunk ( code , chunk , options ) {
3636 const metadataFile =
3737 chunk . isEntry &&
3838 [ chunk . facadeModuleId , ...Object . keys ( chunk . modules ) ]
@@ -51,11 +51,27 @@ export default (transform?: (metadata: string) => string): Plugin => {
5151 }
5252 metadata = getMetadata ( metadata , grantSet ) ;
5353 if ( transform ) metadata = transform ( metadata ) ;
54- const s = new MagicString ( code ) ;
55- s . prepend ( `${ metadata } \n\n` ) ;
54+ let map = null ;
55+
56+ if ( options . sourcemap ) {
57+ const mappings = [
58+ ...Array . from ( metadata . split ( '\n' ) , ( ) => [ ] ) ,
59+ [ ] ,
60+ ...Array . from ( code . split ( '\n' ) , ( ) => [ [ 0 , 0 , 0 , 0 ] ] ) ,
61+ ] ;
62+ map = {
63+ version : 3 ,
64+ file : chunk . fileName ,
65+ sources : [ chunk . fileName ] ,
66+ sourcesContent : [ code ] ,
67+ names : [ ] ,
68+ mappings : encode ( mappings ) ,
69+ } ;
70+ }
71+
5672 return {
57- code : s . toString ( ) ,
58- map : s . generateMap ( { hires : 'boundary' } ) . toString ( ) ,
73+ code : ` ${ metadata } \n\n ${ code } ` ,
74+ map,
5975 } ;
6076 } ,
6177 } ;
0 commit comments