diff --git a/src/Chunk.ts b/src/Chunk.ts index 6b27aa02389..9a8d0a53aab 100644 --- a/src/Chunk.ts +++ b/src/Chunk.ts @@ -1042,8 +1042,10 @@ export default class Chunk { if (options.sourcemap) { timeStart('sourcemap', 3); - let file = options.file ? options.sourcemapFile || options.file : this.id; - if (file) file = resolve(typeof process !== 'undefined' ? process.cwd() : '', file); + let file: string; + if (options.file) file = resolve(options.sourcemapFile || options.file); + else if (options.dir) file = resolve(options.dir, this.id); + else file = resolve(this.id); if ( this.graph.hasLoaders || diff --git a/src/rollup/index.ts b/src/rollup/index.ts index f14ddf73ca7..886a962424d 100644 --- a/src/rollup/index.ts +++ b/src/rollup/index.ts @@ -1,5 +1,5 @@ import { getTimings, initialiseTimers, timeEnd, timeStart } from '../utils/timers'; -import { basename } from '../utils/path'; +import { basename, resolve, dirname, relative } from '../utils/path'; import { writeFile } from '../utils/fs'; import { mapSequence } from '../utils/promise'; import error from '../utils/error'; @@ -169,6 +169,10 @@ export default function rollup( .then(addons => { chunk.generateInternalExports(outputOptions); chunk.preRender(outputOptions); + chunk.id = + typeof process !== 'undefined' + ? relative(process.cwd(), inputOptions.input) + : inputOptions.input; return chunk.render(outputOptions, addons); }) .then(rendered => { @@ -312,6 +316,12 @@ export default function rollup( }); } + if (outputOptions.sourcemapFile) + error({ + code: 'INVALID_OPTION', + message: '"sourcemapFile" is only supported for single-file builds.' + }); + timeStart('GENERATE', 1); const generated: { [chunkName: string]: OutputChunk } = {}; diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/amd/chunk-96447c02.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/amd/chunk-96447c02.js.map index fc502c0dd4f..b460caa57a3 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/amd/chunk-96447c02.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/amd/chunk-96447c02.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-96447c02.js","sources":["lib2.js","dep2.js"],"sourcesContent":["export function fn () {\n console.log('lib2 fn');\n}","import { fn as libfn } from './lib2.js';\n\nexport function fn () {\n libfn();\n console.log('dep2 fn');\n}"],"names":["fn","libfn"],"mappings":";;EAAO,SAAS,EAAE,IAAI;EACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB;;GAAC,DCAM,SAASA,IAAE,IAAI;EACtB,EAAEC,EAAK,EAAE,CAAC;EACV,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"chunk-96447c02.js","sources":["../../lib2.js","../../dep2.js"],"sourcesContent":["export function fn () {\n console.log('lib2 fn');\n}","import { fn as libfn } from './lib2.js';\n\nexport function fn () {\n libfn();\n console.log('dep2 fn');\n}"],"names":["fn","libfn"],"mappings":";;EAAO,SAAS,EAAE,IAAI;EACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB;;GAAC,DCAM,SAASA,IAAE,IAAI;EACtB,EAAEC,EAAK,EAAE,CAAC;EACV,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB;;;;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/amd/main1.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/amd/main1.js.map index 519685364a3..bb897b029b1 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/amd/main1.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/amd/main1.js.map @@ -1 +1 @@ -{"version":3,"file":"main1.js","sources":["dep1.js","main1.js"],"sourcesContent":["export function fn () {\n console.log('dep1 fn');\n}","import { fn } from './dep1.js';\nimport { fn as fn2 } from './dep2.js';\n\nexport default class Main1 {\n constructor () {\n fn();\n fn2();\n }\n}"],"names":["fn2"],"mappings":";;EAAO,SAAS,EAAE,IAAI;EACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB;;GAAC,DCCc,MAAM,KAAK,CAAC;EAC3B,EAAE,WAAW,CAAC,GAAG;EACjB,IAAI,EAAE,EAAE,CAAC;EACT,IAAIA,YAAG,EAAE,CAAC;EACV,GAAG;EACH;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"main1.js","sources":["../../dep1.js","../../main1.js"],"sourcesContent":["export function fn () {\n console.log('dep1 fn');\n}","import { fn } from './dep1.js';\nimport { fn as fn2 } from './dep2.js';\n\nexport default class Main1 {\n constructor () {\n fn();\n fn2();\n }\n}"],"names":["fn2"],"mappings":";;EAAO,SAAS,EAAE,IAAI;EACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB;;GAAC,DCCc,MAAM,KAAK,CAAC;EAC3B,EAAE,WAAW,CAAC,GAAG;EACjB,IAAI,EAAE,EAAE,CAAC;EACT,IAAIA,YAAG,EAAE,CAAC;EACV,GAAG;EACH;;;;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/amd/main2.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/amd/main2.js.map index 9ce23abe073..607acbbeec9 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/amd/main2.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/amd/main2.js.map @@ -1 +1 @@ -{"version":3,"file":"main2.js","sources":["lib1.js","dep3.js","main2.js"],"sourcesContent":["export function fn () {\n console.log('lib1 fn');\n}\n\nexport function treeshaked () {\n console.log('this is tree shaken!');\n}","import { fn as libfn, treeshaked } from './lib1.js';\n\nexport function fn () {\n libfn();\n console.log('dep3 fn');\n}\n\nexport default treeshaked;","import { fn } from './dep2.js';\nimport { fn as fn2, default as treeshaked } from './dep3.js';\n\nif (false) {\n treeshaked();\n}\n\nexport default class Main2 {\n constructor () {\n fn2();\n fn();\n }\n}"],"names":["fn","libfn","fn2"],"mappings":";;EAAO,SAAS,EAAE,IAAI;EACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB,CAAC;;ECAM,SAASA,IAAE,IAAI;EACtB,EAAEC,EAAK,EAAE,CAAC;EACV,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB,CAAC;;ECEc,MAAM,KAAK,CAAC;EAC3B,EAAE,WAAW,CAAC,GAAG;EACjB,IAAIC,IAAG,EAAE,CAAC;EACV,IAAIF,YAAE,EAAE,CAAC;EACT,GAAG;EACH;;;;;;;;"} \ No newline at end of file +{"version":3,"file":"main2.js","sources":["../../lib1.js","../../dep3.js","../../main2.js"],"sourcesContent":["export function fn () {\n console.log('lib1 fn');\n}\n\nexport function treeshaked () {\n console.log('this is tree shaken!');\n}","import { fn as libfn, treeshaked } from './lib1.js';\n\nexport function fn () {\n libfn();\n console.log('dep3 fn');\n}\n\nexport default treeshaked;","import { fn } from './dep2.js';\nimport { fn as fn2, default as treeshaked } from './dep3.js';\n\nif (false) {\n treeshaked();\n}\n\nexport default class Main2 {\n constructor () {\n fn2();\n fn();\n }\n}"],"names":["fn","libfn","fn2"],"mappings":";;EAAO,SAAS,EAAE,IAAI;EACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB,CAAC;;ECAM,SAASA,IAAE,IAAI;EACtB,EAAEC,EAAK,EAAE,CAAC;EACV,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;EACzB,CAAC;;ECEc,MAAM,KAAK,CAAC;EAC3B,EAAE,WAAW,CAAC,GAAG;EACjB,IAAIC,IAAG,EAAE,CAAC;EACV,IAAIF,YAAE,EAAE,CAAC;EACT,GAAG;EACH;;;;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/cjs/chunk-ca3a1cbb.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/cjs/chunk-ca3a1cbb.js.map index 3d96c62aade..cf4ef8558b9 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/cjs/chunk-ca3a1cbb.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/cjs/chunk-ca3a1cbb.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-ca3a1cbb.js","sources":["lib2.js","dep2.js"],"sourcesContent":["export function fn () {\n console.log('lib2 fn');\n}","import { fn as libfn } from './lib2.js';\n\nexport function fn () {\n libfn();\n console.log('dep2 fn');\n}"],"names":["fn","libfn"],"mappings":";;AAAO,SAAS,EAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;CACxB,DCAM,SAASA,IAAE,IAAI;EACpBC,EAAK,EAAE,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;;;"} \ No newline at end of file +{"version":3,"file":"chunk-ca3a1cbb.js","sources":["../../lib2.js","../../dep2.js"],"sourcesContent":["export function fn () {\n console.log('lib2 fn');\n}","import { fn as libfn } from './lib2.js';\n\nexport function fn () {\n libfn();\n console.log('dep2 fn');\n}"],"names":["fn","libfn"],"mappings":";;AAAO,SAAS,EAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;CACxB,DCAM,SAASA,IAAE,IAAI;EACpBC,EAAK,EAAE,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/cjs/main1.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/cjs/main1.js.map index 67b9f94087c..47f38d8ff91 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/cjs/main1.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/cjs/main1.js.map @@ -1 +1 @@ -{"version":3,"file":"main1.js","sources":["dep1.js","main1.js"],"sourcesContent":["export function fn () {\n console.log('dep1 fn');\n}","import { fn } from './dep1.js';\nimport { fn as fn2 } from './dep2.js';\n\nexport default class Main1 {\n constructor () {\n fn();\n fn2();\n }\n}"],"names":["fn2"],"mappings":";;;;AAAO,SAAS,EAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;CACxB,DCCc,MAAM,KAAK,CAAC;EACzB,WAAW,CAAC,GAAG;IACb,EAAE,EAAE,CAAC;IACLA,YAAG,EAAE,CAAC;GACP;;;;;"} \ No newline at end of file +{"version":3,"file":"main1.js","sources":["../../dep1.js","../../main1.js"],"sourcesContent":["export function fn () {\n console.log('dep1 fn');\n}","import { fn } from './dep1.js';\nimport { fn as fn2 } from './dep2.js';\n\nexport default class Main1 {\n constructor () {\n fn();\n fn2();\n }\n}"],"names":["fn2"],"mappings":";;;;AAAO,SAAS,EAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;CACxB,DCCc,MAAM,KAAK,CAAC;EACzB,WAAW,CAAC,GAAG;IACb,EAAE,EAAE,CAAC;IACLA,YAAG,EAAE,CAAC;GACP;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/cjs/main2.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/cjs/main2.js.map index 89a49558b75..e79021e3cd7 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/cjs/main2.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/cjs/main2.js.map @@ -1 +1 @@ -{"version":3,"file":"main2.js","sources":["lib1.js","dep3.js","main2.js"],"sourcesContent":["export function fn () {\n console.log('lib1 fn');\n}\n\nexport function treeshaked () {\n console.log('this is tree shaken!');\n}","import { fn as libfn, treeshaked } from './lib1.js';\n\nexport function fn () {\n libfn();\n console.log('dep3 fn');\n}\n\nexport default treeshaked;","import { fn } from './dep2.js';\nimport { fn as fn2, default as treeshaked } from './dep3.js';\n\nif (false) {\n treeshaked();\n}\n\nexport default class Main2 {\n constructor () {\n fn2();\n fn();\n }\n}"],"names":["fn","libfn","fn2"],"mappings":";;;;AAAO,SAAS,EAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CACxB;;ACAM,SAASA,IAAE,IAAI;EACpBC,EAAK,EAAE,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CACxB;;ACEc,MAAM,KAAK,CAAC;EACzB,WAAW,CAAC,GAAG;IACbC,IAAG,EAAE,CAAC;IACNF,YAAE,EAAE,CAAC;GACN;;;;;"} \ No newline at end of file +{"version":3,"file":"main2.js","sources":["../../lib1.js","../../dep3.js","../../main2.js"],"sourcesContent":["export function fn () {\n console.log('lib1 fn');\n}\n\nexport function treeshaked () {\n console.log('this is tree shaken!');\n}","import { fn as libfn, treeshaked } from './lib1.js';\n\nexport function fn () {\n libfn();\n console.log('dep3 fn');\n}\n\nexport default treeshaked;","import { fn } from './dep2.js';\nimport { fn as fn2, default as treeshaked } from './dep3.js';\n\nif (false) {\n treeshaked();\n}\n\nexport default class Main2 {\n constructor () {\n fn2();\n fn();\n }\n}"],"names":["fn","libfn","fn2"],"mappings":";;;;AAAO,SAAS,EAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CACxB;;ACAM,SAASA,IAAE,IAAI;EACpBC,EAAK,EAAE,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CACxB;;ACEc,MAAM,KAAK,CAAC;EACzB,WAAW,CAAC,GAAG;IACbC,IAAG,EAAE,CAAC;IACNF,YAAE,EAAE,CAAC;GACN;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/es/chunk-54f33655.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/es/chunk-54f33655.js.map index fcd03170895..7fc30d8c5f8 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/es/chunk-54f33655.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/es/chunk-54f33655.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-54f33655.js","sources":["lib2.js","dep2.js"],"sourcesContent":["export function fn () {\n console.log('lib2 fn');\n}","import { fn as libfn } from './lib2.js';\n\nexport function fn () {\n libfn();\n console.log('dep2 fn');\n}"],"names":["fn","libfn"],"mappings":"AAAO,SAAS,EAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;CACxB,DCAM,SAASA,IAAE,IAAI;EACpBC,EAAK,EAAE,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;;;"} \ No newline at end of file +{"version":3,"file":"chunk-54f33655.js","sources":["../../lib2.js","../../dep2.js"],"sourcesContent":["export function fn () {\n console.log('lib2 fn');\n}","import { fn as libfn } from './lib2.js';\n\nexport function fn () {\n libfn();\n console.log('dep2 fn');\n}"],"names":["fn","libfn"],"mappings":"AAAO,SAAS,EAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;CACxB,DCAM,SAASA,IAAE,IAAI;EACpBC,EAAK,EAAE,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/es/main1.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/es/main1.js.map index f9ac2a30b3a..09cdeda88c6 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/es/main1.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/es/main1.js.map @@ -1 +1 @@ -{"version":3,"file":"main1.js","sources":["dep1.js","main1.js"],"sourcesContent":["export function fn () {\n console.log('dep1 fn');\n}","import { fn } from './dep1.js';\nimport { fn as fn2 } from './dep2.js';\n\nexport default class Main1 {\n constructor () {\n fn();\n fn2();\n }\n}"],"names":["fn","fn2"],"mappings":";;AAAO,SAASA,IAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;CACxB,DCCc,MAAM,KAAK,CAAC;EACzB,WAAW,CAAC,GAAG;IACbA,IAAE,EAAE,CAAC;IACLC,EAAG,EAAE,CAAC;GACP;;;;;"} \ No newline at end of file +{"version":3,"file":"main1.js","sources":["../../dep1.js","../../main1.js"],"sourcesContent":["export function fn () {\n console.log('dep1 fn');\n}","import { fn } from './dep1.js';\nimport { fn as fn2 } from './dep2.js';\n\nexport default class Main1 {\n constructor () {\n fn();\n fn2();\n }\n}"],"names":["fn","fn2"],"mappings":";;AAAO,SAASA,IAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;;;CACxB,DCCc,MAAM,KAAK,CAAC;EACzB,WAAW,CAAC,GAAG;IACbA,IAAE,EAAE,CAAC;IACLC,EAAG,EAAE,CAAC;GACP;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/es/main2.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/es/main2.js.map index e7be8dfcfd4..2878e424e64 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/es/main2.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/es/main2.js.map @@ -1 +1 @@ -{"version":3,"file":"main2.js","sources":["lib1.js","dep3.js","main2.js"],"sourcesContent":["export function fn () {\n console.log('lib1 fn');\n}\n\nexport function treeshaked () {\n console.log('this is tree shaken!');\n}","import { fn as libfn, treeshaked } from './lib1.js';\n\nexport function fn () {\n libfn();\n console.log('dep3 fn');\n}\n\nexport default treeshaked;","import { fn } from './dep2.js';\nimport { fn as fn2, default as treeshaked } from './dep3.js';\n\nif (false) {\n treeshaked();\n}\n\nexport default class Main2 {\n constructor () {\n fn2();\n fn();\n }\n}"],"names":["fn","libfn","fn2"],"mappings":";;AAAO,SAASA,IAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CACxB;;ACAM,SAASA,IAAE,IAAI;EACpBC,IAAK,EAAE,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CACxB;;ACEc,MAAM,KAAK,CAAC;EACzB,WAAW,CAAC,GAAG;IACbC,IAAG,EAAE,CAAC;IACN,EAAE,EAAE,CAAC;GACN;;;;;"} \ No newline at end of file +{"version":3,"file":"main2.js","sources":["../../lib1.js","../../dep3.js","../../main2.js"],"sourcesContent":["export function fn () {\n console.log('lib1 fn');\n}\n\nexport function treeshaked () {\n console.log('this is tree shaken!');\n}","import { fn as libfn, treeshaked } from './lib1.js';\n\nexport function fn () {\n libfn();\n console.log('dep3 fn');\n}\n\nexport default treeshaked;","import { fn } from './dep2.js';\nimport { fn as fn2, default as treeshaked } from './dep3.js';\n\nif (false) {\n treeshaked();\n}\n\nexport default class Main2 {\n constructor () {\n fn2();\n fn();\n }\n}"],"names":["fn","libfn","fn2"],"mappings":";;AAAO,SAASA,IAAE,IAAI;EACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CACxB;;ACAM,SAASA,IAAE,IAAI;EACpBC,IAAK,EAAE,CAAC;EACR,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;CACxB;;ACEc,MAAM,KAAK,CAAC;EACzB,WAAW,CAAC,GAAG;IACbC,IAAG,EAAE,CAAC;IACN,EAAE,EAAE,CAAC;GACN;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/system/chunk-9a21be24.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/system/chunk-9a21be24.js.map index 57ac852d582..2bf431daa60 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/system/chunk-9a21be24.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/system/chunk-9a21be24.js.map @@ -1 +1 @@ -{"version":3,"file":"chunk-9a21be24.js","sources":["lib2.js","dep2.js"],"sourcesContent":["export function fn () {\n console.log('lib2 fn');\n}","import { fn as libfn } from './lib2.js';\n\nexport function fn () {\n libfn();\n console.log('dep2 fn');\n}"],"names":["fn","libfn"],"mappings":";;;;;;MAAO,SAAS,EAAE,IAAI;MACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB;;OAAC,DCAM,SAASA,IAAE,IAAI;MACtB,EAAEC,EAAK,EAAE,CAAC;MACV,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB;;;;;;"} \ No newline at end of file +{"version":3,"file":"chunk-9a21be24.js","sources":["../../lib2.js","../../dep2.js"],"sourcesContent":["export function fn () {\n console.log('lib2 fn');\n}","import { fn as libfn } from './lib2.js';\n\nexport function fn () {\n libfn();\n console.log('dep2 fn');\n}"],"names":["fn","libfn"],"mappings":";;;;;;MAAO,SAAS,EAAE,IAAI;MACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB;;OAAC,DCAM,SAASA,IAAE,IAAI;MACtB,EAAEC,EAAK,EAAE,CAAC;MACV,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB;;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/system/main1.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/system/main1.js.map index a5940bbd68c..01e3e947e98 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/system/main1.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/system/main1.js.map @@ -1 +1 @@ -{"version":3,"file":"main1.js","sources":["dep1.js","main1.js"],"sourcesContent":["export function fn () {\n console.log('dep1 fn');\n}","import { fn } from './dep1.js';\nimport { fn as fn2 } from './dep2.js';\n\nexport default class Main1 {\n constructor () {\n fn();\n fn2();\n }\n}"],"names":["fn","fn2"],"mappings":";;;;;;;;;MAAO,SAASA,IAAE,IAAI;MACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB;;OAAC,DCCc,MAAM,KAAK,CAAC;MAC3B,EAAE,WAAW,CAAC,GAAG;MACjB,IAAIA,IAAE,EAAE,CAAC;MACT,IAAIC,EAAG,EAAE,CAAC;MACV,GAAG;MACH;;;;;;"} \ No newline at end of file +{"version":3,"file":"main1.js","sources":["../../dep1.js","../../main1.js"],"sourcesContent":["export function fn () {\n console.log('dep1 fn');\n}","import { fn } from './dep1.js';\nimport { fn as fn2 } from './dep2.js';\n\nexport default class Main1 {\n constructor () {\n fn();\n fn2();\n }\n}"],"names":["fn","fn2"],"mappings":";;;;;;;;;MAAO,SAASA,IAAE,IAAI;MACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB;;OAAC,DCCc,MAAM,KAAK,CAAC;MAC3B,EAAE,WAAW,CAAC,GAAG;MACjB,IAAIA,IAAE,EAAE,CAAC;MACT,IAAIC,EAAG,EAAE,CAAC;MACV,GAAG;MACH;;;;;;"} \ No newline at end of file diff --git a/test/chunking-form/samples/chunking-source-maps/_expected/system/main2.js.map b/test/chunking-form/samples/chunking-source-maps/_expected/system/main2.js.map index 112fbe02502..294acd6bda4 100644 --- a/test/chunking-form/samples/chunking-source-maps/_expected/system/main2.js.map +++ b/test/chunking-form/samples/chunking-source-maps/_expected/system/main2.js.map @@ -1 +1 @@ -{"version":3,"file":"main2.js","sources":["lib1.js","dep3.js","main2.js"],"sourcesContent":["export function fn () {\n console.log('lib1 fn');\n}\n\nexport function treeshaked () {\n console.log('this is tree shaken!');\n}","import { fn as libfn, treeshaked } from './lib1.js';\n\nexport function fn () {\n libfn();\n console.log('dep3 fn');\n}\n\nexport default treeshaked;","import { fn } from './dep2.js';\nimport { fn as fn2, default as treeshaked } from './dep3.js';\n\nif (false) {\n treeshaked();\n}\n\nexport default class Main2 {\n constructor () {\n fn2();\n fn();\n }\n}"],"names":["fn","libfn","fn2"],"mappings":";;;;;;;;;MAAO,SAASA,IAAE,IAAI;MACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB,CAAC;;MCAM,SAASA,IAAE,IAAI;MACtB,EAAEC,IAAK,EAAE,CAAC;MACV,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB,CAAC;;MCEc,MAAM,KAAK,CAAC;MAC3B,EAAE,WAAW,CAAC,GAAG;MACjB,IAAIC,IAAG,EAAE,CAAC;MACV,IAAI,EAAE,EAAE,CAAC;MACT,GAAG;MACH;;;;;;"} \ No newline at end of file +{"version":3,"file":"main2.js","sources":["../../lib1.js","../../dep3.js","../../main2.js"],"sourcesContent":["export function fn () {\n console.log('lib1 fn');\n}\n\nexport function treeshaked () {\n console.log('this is tree shaken!');\n}","import { fn as libfn, treeshaked } from './lib1.js';\n\nexport function fn () {\n libfn();\n console.log('dep3 fn');\n}\n\nexport default treeshaked;","import { fn } from './dep2.js';\nimport { fn as fn2, default as treeshaked } from './dep3.js';\n\nif (false) {\n treeshaked();\n}\n\nexport default class Main2 {\n constructor () {\n fn2();\n fn();\n }\n}"],"names":["fn","libfn","fn2"],"mappings":";;;;;;;;;MAAO,SAASA,IAAE,IAAI;MACtB,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB,CAAC;;MCAM,SAASA,IAAE,IAAI;MACtB,EAAEC,IAAK,EAAE,CAAC;MACV,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;MACzB,CAAC;;MCEc,MAAM,KAAK,CAAC;MAC3B,EAAE,WAAW,CAAC,GAAG;MACjB,IAAIC,IAAG,EAAE,CAAC;MACV,IAAI,EAAE,EAAE,CAAC;MACT,GAAG;MACH;;;;;;"} \ No newline at end of file diff --git a/test/misc/index.js b/test/misc/index.js index d90370a04dc..a340ec60ac8 100644 --- a/test/misc/index.js +++ b/test/misc/index.js @@ -1,6 +1,9 @@ const assert = require('assert'); +const path = require('path'); const rollup = require('../../dist/rollup'); const { executeBundle, loader } = require('../utils.js'); +const { SourceMapConsumer } = require( 'source-map' ); +const { getLocator } = require( 'locate-character' ); describe('sanity checks', () => { it('exists', () => { @@ -158,6 +161,31 @@ describe('sanity checks', () => { }); }); +describe('in-memory sourcemaps', () => { + it( 'generates an in-memory sourcemap', async () => { + const bundle = await rollup.rollup({ + input: 'main', + plugins: [loader({ main: `console.log( 42 );` })], + }); + + const generated = await bundle.generate({ + format: 'cjs', + sourcemap: true, + sourcemapFile: path.resolve( 'bundle.js' ) + }); + + const smc = new SourceMapConsumer( generated.map ); + const locator = getLocator( generated.code, { offsetLine: 1 }); + + let generatedLoc = locator( '42' ); + let loc = smc.originalPositionFor( generatedLoc ); // 42 + assert.equal( loc.source, 'main' ); + assert.equal( loc.line, 1 ); + assert.equal( loc.column, 13 ); + }); + +}); + describe('deprecations', () => { it('warns on options.entry, but handles', () => { const warnings = [];