diff --git a/packages/babel-cli/package.json b/packages/babel-cli/package.json index c1c76b996797..4fb2fe1fbbd6 100644 --- a/packages/babel-cli/package.json +++ b/packages/babel-cli/package.json @@ -24,14 +24,13 @@ "compiler" ], "dependencies": { - "@jridgewell/trace-mapping": "^0.3.4", + "@jridgewell/trace-mapping": "^0.3.8", "commander": "^4.0.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.1.0", "glob": "^7.0.0", "make-dir": "condition:BABEL_8_BREAKING ? : ^2.1.0", - "slash": "condition:BABEL_8_BREAKING ? ^3.0.0 : ^2.0.0", - "source-map": "^0.5.0" + "slash": "condition:BABEL_8_BREAKING ? ^3.0.0 : ^2.0.0" }, "optionalDependencies": { "@nicolo-ribaudo/chokidar-2": "condition:BABEL_8_BREAKING ? : 2.1.8-no-fsevents.3", diff --git a/packages/babel-cli/src/babel/file.ts b/packages/babel-cli/src/babel/file.ts index ac80c9caba42..a5d6aca79556 100644 --- a/packages/babel-cli/src/babel/file.ts +++ b/packages/babel-cli/src/babel/file.ts @@ -1,6 +1,5 @@ import convertSourceMap from "convert-source-map"; -import { TraceMap, eachMapping } from "@jridgewell/trace-mapping"; -import sourceMap from "source-map"; +import { AnyMap, encodedMap } from "@jridgewell/trace-mapping"; import slash from "slash"; import path from "path"; import fs from "fs"; @@ -19,13 +18,7 @@ export default async function ({ babelOptions, }: CmdOptions): Promise { function buildResult(fileResults: Array): CompilationOutput { - const map = new sourceMap.SourceMapGenerator({ - file: - cliOptions.sourceMapTarget || - path.basename(cliOptions.outFile || "") || - "stdout", - sourceRoot: babelOptions.sourceRoot, - }); + const mapSections = []; let code = ""; let offset = 0; @@ -33,45 +26,35 @@ export default async function ({ for (const result of fileResults) { if (!result) continue; - code += result.code + "\n"; - - if (result.map) { - const consumer = new TraceMap(result.map); - - eachMapping(consumer, mapping => { - map.addMapping({ - generated: { - line: mapping.generatedLine + offset, - column: mapping.generatedColumn, - }, - source: mapping.source, - original: - mapping.source == null - ? null - : { - line: mapping.originalLine, - column: mapping.originalColumn, - }, - }); - }); - - const { resolvedSources, sourcesContent } = consumer; - sourcesContent?.forEach((content, i) => { - if (content === null) return; - map.setSourceContent(resolvedSources[i], content); - }); + mapSections.push({ + offset: { line: offset, column: 0 }, + map: result.map || emptyMap(), + }); - offset = code.split("\n").length - 1; - } + code += result.code + "\n"; + offset += countNewlines(result.code) + 1; } + const map = new AnyMap({ + version: 3, + file: + cliOptions.sourceMapTarget || + path.basename(cliOptions.outFile || "") || + "stdout", + sections: mapSections, + }); + // For some reason, the spec doesn't allow sourceRoot when constructing a + // sectioned sorucemap. But AllMap returns a regular sourcemap, we can + // freely add to with a sourceRoot. + map.sourceRoot = babelOptions.sourceRoot; + // add the inline sourcemap comment if we've either explicitly asked for inline source // maps, or we've requested them without any output file if ( babelOptions.sourceMaps === "inline" || (!cliOptions.outFile && babelOptions.sourceMaps) ) { - code += "\n" + convertSourceMap.fromObject(map).toComment(); + code += "\n" + convertSourceMap.fromObject(encodedMap(map)).toComment(); } return { @@ -79,6 +62,22 @@ export default async function ({ code: code, }; } + function countNewlines(code: string): number { + let count = 0; + let index = -1; + while ((index = code.indexOf("\n", index + 1)) !== -1) { + count++; + } + return count; + } + function emptyMap() { + return { + version: 3, + names: [], + sources: [], + mappings: [], + }; + } function output(fileResults: Array): void { const result = buildResult(fileResults); @@ -90,7 +89,7 @@ export default async function ({ if (babelOptions.sourceMaps && babelOptions.sourceMaps !== "inline") { const mapLoc = cliOptions.outFile + ".map"; result.code = util.addSourceMappingUrl(result.code, mapLoc); - fs.writeFileSync(mapLoc, JSON.stringify(result.map)); + fs.writeFileSync(mapLoc, JSON.stringify(encodedMap(result.map))); } fs.writeFileSync(cliOptions.outFile, result.code); diff --git a/packages/babel-cli/test/fixtures/babel/filename --out-file --source-maps inline/out-files/script2.js b/packages/babel-cli/test/fixtures/babel/filename --out-file --source-maps inline/out-files/script2.js index 884a7d713270..9e931cf42c64 100644 --- a/packages/babel-cli/test/fixtures/babel/filename --out-file --source-maps inline/out-files/script2.js +++ b/packages/babel-cli/test/fixtures/babel/filename --out-file --source-maps inline/out-files/script2.js @@ -4,4 +4,4 @@ arr.map(function (x) { return x * MULTIPLIER; }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNjcmlwdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLEdBQUcsQ0FBQyxHQUFKLENBQVEsVUFBQSxDQUFDO0FBQUEsU0FBSSxDQUFDLEdBQUcsVUFBUjtBQUFBLENBQVQiLCJmaWxlIjoic2NyaXB0Mi5qcyIsInNvdXJjZXNDb250ZW50IjpbImFyci5tYXAoeCA9PiB4ICogTVVMVElQTElFUik7Il19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0Mi5qcyIsIm5hbWVzIjpbImFyciIsIm1hcCIsIngiLCJNVUxUSVBMSUVSIl0sInNvdXJjZXMiOlsic2NyaXB0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImFyci5tYXAoeCA9PiB4ICogTVVMVElQTElFUik7Il0sIm1hcHBpbmdzIjoiOztBQUFBQSxHQUFHLENBQUNDLEdBQUosQ0FBUSxVQUFBQyxDQUFDO0FBQUEsU0FBSUEsQ0FBQyxHQUFHQyxVQUFSO0FBQUEsQ0FBVCJ9 diff --git a/packages/babel-cli/test/fixtures/babel/filename-sourcemap --out-file --source-maps inline/out-files/script2.js b/packages/babel-cli/test/fixtures/babel/filename-sourcemap --out-file --source-maps inline/out-files/script2.js index a80bc98be5c3..353e170820ea 100644 --- a/packages/babel-cli/test/fixtures/babel/filename-sourcemap --out-file --source-maps inline/out-files/script2.js +++ b/packages/babel-cli/test/fixtures/babel/filename-sourcemap --out-file --source-maps inline/out-files/script2.js @@ -4,4 +4,4 @@ arr.map(function (x) { return x * MULTIPLIER; }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm9yaWdpbmFsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFBQSxTQUFVLGNBQVY7QUFBQSIsImZpbGUiOiJzY3JpcHQyLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIGZvbyA9ICgpID0+IDQ7Il19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0Mi5qcyIsIm5hbWVzIjpbImFyciIsIngiXSwic291cmNlcyI6WyJvcmlnaW5hbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZm9vID0gKCkgPT4gNDsiXSwibWFwcGluZ3MiOiI7O0FBQUFBO0FBQUEsU0FBVUMsY0FBVjtBQUFBIn0= diff --git a/packages/babel-cli/test/fixtures/babel/filenames --out-file --source-maps inline/out-files/script3.js b/packages/babel-cli/test/fixtures/babel/filenames --out-file --source-maps inline/out-files/script3.js index 6fea3635b1f1..f6ef082a2de3 100644 --- a/packages/babel-cli/test/fixtures/babel/filenames --out-file --source-maps inline/out-files/script3.js +++ b/packages/babel-cli/test/fixtures/babel/filenames --out-file --source-maps inline/out-files/script3.js @@ -9,4 +9,4 @@ arr.map(function (x) { return x * MULTIPLIER; }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNjcmlwdC5qcyIsInNjcmlwdDIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxDQUFDO0FBQUEsU0FBTSxFQUFOO0FBQUEsQ0FBRDs7O0FDQUEsR0FBRyxDQUFDLEdBQUosQ0FBUSxVQUFBLENBQUM7QUFBQSxTQUFJLENBQUMsR0FBRyxVQUFSO0FBQUEsQ0FBVCIsImZpbGUiOiJzY3JpcHQzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiKCgpID0+IDQyKSIsImFyci5tYXAoeCA9PiB4ICogTVVMVElQTElFUik7Il19 +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NyaXB0My5qcyIsIm5hbWVzIjpbImFyciIsIm1hcCIsIngiLCJNVUxUSVBMSUVSIl0sInNvdXJjZXMiOlsic2NyaXB0LmpzIiwic2NyaXB0Mi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCkgPT4gNDIpIiwiYXJyLm1hcCh4ID0+IHggKiBNVUxUSVBMSUVSKTsiXSwibWFwcGluZ3MiOiI7O0FBQUEsQ0FBQztBQUFBLFNBQU0sRUFBTjtBQUFBLENBQUQ7OztBQ0FBQSxHQUFHLENBQUNDLEdBQUosQ0FBUSxVQUFBQyxDQUFDO0FBQUEsU0FBSUEsQ0FBQyxHQUFHQyxVQUFSO0FBQUEsQ0FBVCJ9 diff --git a/packages/babel-cli/test/fixtures/babel/filenames --out-file --source-maps/out-files/script3.js.map b/packages/babel-cli/test/fixtures/babel/filenames --out-file --source-maps/out-files/script3.js.map index b7f8aca1b9bc..aef8c507ba3c 100644 --- a/packages/babel-cli/test/fixtures/babel/filenames --out-file --source-maps/out-files/script3.js.map +++ b/packages/babel-cli/test/fixtures/babel/filenames --out-file --source-maps/out-files/script3.js.map @@ -1 +1 @@ -{"version":3,"sources":["script.js","script2.js"],"names":[],"mappings":";;AAAA,CAAC;AAAA,SAAM,EAAN;AAAA,CAAD,E,CAEA;;;ACFA,GAAG,CAAC,GAAJ,CAAQ,UAAA,CAAC;AAAA,SAAI,CAAC,GAAG,UAAR;AAAA,CAAT","file":"script3.js","sourcesContent":["(() => 42)\n\n// some comments","arr.map(x => x * MULTIPLIER);"]} +{"version":3,"file":"script3.js","names":["arr","map","x","MULTIPLIER"],"sources":["script.js","script2.js"],"sourcesContent":["(() => 42)\n\n// some comments","arr.map(x => x * MULTIPLIER);"],"mappings":";;AAAA,CAAC;AAAA,SAAM,EAAN;AAAA,CAAD,E,CAEA;;;ACFAA,GAAG,CAACC,GAAJ,CAAQ,UAAAC,CAAC;AAAA,SAAIA,CAAC,GAAGC,UAAR;AAAA,CAAT"} diff --git a/packages/babel-cli/test/fixtures/babel/stdin --out-file --source-maps/out-files/test.js.map b/packages/babel-cli/test/fixtures/babel/stdin --out-file --source-maps/out-files/test.js.map index 271bfcad10b2..6900e9668855 100644 --- a/packages/babel-cli/test/fixtures/babel/stdin --out-file --source-maps/out-files/test.js.map +++ b/packages/babel-cli/test/fixtures/babel/stdin --out-file --source-maps/out-files/test.js.map @@ -1 +1 @@ -{"version":3,"sources":["stdin"],"names":[],"mappings":";;AAAA,GAAG,CAAC,GAAJ,CAAQ,UAAA,CAAC;AAAA,SAAI,CAAC,GAAG,CAAR;AAAA,CAAT","file":"test.js","sourcesContent":["arr.map(x => x * x);"]} +{"version":3,"file":"test.js","names":["arr","map","x"],"sources":["stdin"],"sourcesContent":["arr.map(x => x * x);"],"mappings":";;AAAAA,GAAG,CAACC,GAAJ,CAAQ,UAAAC,CAAC;AAAA,SAAIA,CAAC,GAAGA,CAAR;AAAA,CAAT"} diff --git a/packages/babel-cli/test/fixtures/babel/stdin --source-maps inline/stdout.txt b/packages/babel-cli/test/fixtures/babel/stdin --source-maps inline/stdout.txt index 2408b7272e91..4f53425171cc 100644 --- a/packages/babel-cli/test/fixtures/babel/stdin --source-maps inline/stdout.txt +++ b/packages/babel-cli/test/fixtures/babel/stdin --source-maps inline/stdout.txt @@ -5,4 +5,4 @@ arr.map(function (x) { }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0ZGluIl0sIm5hbWVzIjpbImFyciIsIm1hcCIsIngiXSwibWFwcGluZ3MiOiI7O0FBQUFBLEdBQUcsQ0FBQ0MsR0FBSixDQUFRLFVBQUFDLENBQUM7QUFBQSxTQUFJQSxDQUFDLEdBQUdBLENBQVI7QUFBQSxDQUFUIiwic291cmNlc0NvbnRlbnQiOlsiYXJyLm1hcCh4ID0+IHggKiB4KTsiXX0= -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzdGRvdXQifQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Rkb3V0IiwibmFtZXMiOltdLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJtYXBwaW5ncyI6IiJ9 diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index 8ad36319b8be..95ed3c300935 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -67,7 +67,7 @@ "devDependencies": { "@babel/helper-transform-fixture-test-runner": "workspace:^", "@babel/plugin-transform-modules-commonjs": "workspace:^", - "@jridgewell/trace-mapping": "^0.3.4", + "@jridgewell/trace-mapping": "^0.3.8", "@types/convert-source-map": "^1.5.1", "@types/debug": "^4.1.0", "@types/resolve": "^1.3.2", diff --git a/packages/babel-generator/package.json b/packages/babel-generator/package.json index 85fbd588d22a..62fa7821b50d 100644 --- a/packages/babel-generator/package.json +++ b/packages/babel-generator/package.json @@ -26,7 +26,7 @@ "devDependencies": { "@babel/helper-fixtures": "workspace:^", "@babel/parser": "workspace:^", - "@jridgewell/trace-mapping": "^0.3.4", + "@jridgewell/trace-mapping": "^0.3.8", "@types/jsesc": "^2.5.0", "@types/source-map": "^0.5.0", "charcodes": "^0.2.0" diff --git a/packages/babel-helper-transform-fixture-test-runner/package.json b/packages/babel-helper-transform-fixture-test-runner/package.json index 10f8b4229748..73146437c442 100644 --- a/packages/babel-helper-transform-fixture-test-runner/package.json +++ b/packages/babel-helper-transform-fixture-test-runner/package.json @@ -19,7 +19,7 @@ "@babel/core": "workspace:^", "@babel/helper-check-duplicate-nodes": "workspace:^", "@babel/helper-fixtures": "workspace:^", - "@jridgewell/trace-mapping": "^0.3.4", + "@jridgewell/trace-mapping": "^0.3.8", "quick-lru": "5.1.0", "regenerator-runtime": "^0.13.7" }, diff --git a/yarn.lock b/yarn.lock index 083d5d575920..a895899e2ddf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -202,7 +202,7 @@ __metadata: dependencies: "@babel/core": "workspace:^" "@babel/helper-fixtures": "workspace:^" - "@jridgewell/trace-mapping": ^0.3.4 + "@jridgewell/trace-mapping": ^0.3.8 "@nicolo-ribaudo/chokidar-2": "condition:BABEL_8_BREAKING ? : 2.1.8-no-fsevents.3" chokidar: ^3.4.0 commander: ^4.0.1 @@ -212,7 +212,6 @@ __metadata: make-dir: "condition:BABEL_8_BREAKING ? : ^2.1.0" rimraf: ^3.0.0 slash: "condition:BABEL_8_BREAKING ? ^3.0.0 : ^2.0.0" - source-map: ^0.5.0 peerDependencies: "@babel/core": ^7.0.0-0 dependenciesMeta: @@ -335,7 +334,7 @@ __metadata: "@babel/template": "workspace:^" "@babel/traverse": "workspace:^" "@babel/types": "workspace:^" - "@jridgewell/trace-mapping": ^0.3.4 + "@jridgewell/trace-mapping": ^0.3.8 "@types/convert-source-map": ^1.5.1 "@types/debug": ^4.1.0 "@types/resolve": ^1.3.2 @@ -457,7 +456,7 @@ __metadata: "@babel/helper-fixtures": "workspace:^" "@babel/parser": "workspace:^" "@babel/types": "workspace:^" - "@jridgewell/trace-mapping": ^0.3.4 + "@jridgewell/trace-mapping": ^0.3.8 "@types/jsesc": ^2.5.0 "@types/source-map": ^0.5.0 charcodes: ^0.2.0 @@ -957,7 +956,7 @@ __metadata: "@babel/core": "workspace:^" "@babel/helper-check-duplicate-nodes": "workspace:^" "@babel/helper-fixtures": "workspace:^" - "@jridgewell/trace-mapping": ^0.3.4 + "@jridgewell/trace-mapping": ^0.3.8 "@types/jest": ^27.4.1 quick-lru: 5.1.0 regenerator-runtime: ^0.13.7 @@ -4085,13 +4084,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.4": - version: 0.3.4 - resolution: "@jridgewell/trace-mapping@npm:0.3.4" +"@jridgewell/trace-mapping@npm:^0.3.0, @jridgewell/trace-mapping@npm:^0.3.8": + version: 0.3.8 + resolution: "@jridgewell/trace-mapping@npm:0.3.8" dependencies: "@jridgewell/resolve-uri": ^3.0.3 "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: ab8bce84bbbc8c34f3ba8325ed926f8f2d3098983c10442a80c55764c4eb6e47d5b92d8ff20a0dd868c3e76a3535651fd8a0138182c290dbfc8396195685c37b + checksum: 4b46f28c785133773de521677983186dfe7ed80872bee57b73624527e345954139ea45dfb7551a5f04de1773dc9501b896554a8f1c9e1c44ab2146a3c66b6fda languageName: node linkType: hard