From 099adef74553b43d4cfd74c7dc169ea480e4855b Mon Sep 17 00:00:00 2001 From: Jason Aden Date: Tue, 3 Apr 2018 11:22:02 -0700 Subject: [PATCH] fix(sourcemaps): fix mappings for source maps so they will work Fixes #3479 --- .make-compat-package.js | 21 +++------- .make-packages.js | 58 ++++++++++++++++++++++++-- tsconfig/compat/tsconfig.base.json | 1 + tsconfig/tsconfig.base.json | 1 + tsconfig/tsconfig.legacy-reexport.json | 1 + 5 files changed, 64 insertions(+), 18 deletions(-) diff --git a/.make-compat-package.js b/.make-compat-package.js index ae7b6e28162..213755c7b1e 100644 --- a/.make-compat-package.js +++ b/.make-compat-package.js @@ -6,6 +6,8 @@ let mkdirp = require('mkdirp'); let path = require('path'); let klawSync = require('klaw-sync'); let licenseTool = require('./tools/add-license-to-file'); +let {copySources, createImportTargets, cleanSourceMapRoot} = require('./.make-packages'); + let addLicenseToFile = licenseTool.addLicenseToFile; let addLicenseTextToFile = licenseTool.addLicenseTextToFile; @@ -19,6 +21,7 @@ const CJS_PKG = PKG_ROOT + ''; const ESM5_PKG = PKG_ROOT + '_esm5/'; const ESM2015_PKG = PKG_ROOT + '_esm2015/'; const UMD_PKG = PKG_ROOT + 'bundles/'; +const SRC_ROOT_PKG = PKG_ROOT + 'src/'; const TYPE_PKG = PKG_ROOT; // License info for minified files @@ -32,22 +35,10 @@ mkdirp.sync(PKG_ROOT); // Copy over the sources fs.copySync(TYPE_ROOT, TYPE_PKG); copySources(CJS_ROOT, CJS_PKG); +cleanSourceMapRoot(CJS_PKG, SRC_ROOT_PKG); copySources(ESM5_ROOT, ESM5_PKG, true); +cleanSourceMapRoot(ESM5_PKG, SRC_ROOT_PKG); copySources(ESM2015_ROOT, ESM2015_PKG, true); +cleanSourceMapRoot(ESM2015_PKG, SRC_ROOT_PKG); fs.copySync('compat/package.json', PKG_ROOT + '/package.json'); - -function copySources(rootDir, packageDir, ignoreMissing) { - // If we are ignoring missing directories, early return when source doesn't exist - if (!fs.existsSync(rootDir)) { - if (ignoreMissing) { - return; - } else { - throw "Source root dir does not exist!"; - } - } - // Copy over the CommonJS files - fs.copySync(rootDir, packageDir); - fs.copySync('./LICENSE.txt', packageDir + 'LICENSE.txt'); - fs.copySync('./compat/README.md', packageDir + 'README.md'); -} diff --git a/.make-packages.js b/.make-packages.js index c22641f14f1..a6f0038be0a 100644 --- a/.make-packages.js +++ b/.make-packages.js @@ -22,13 +22,15 @@ const CJS_ROOT = ROOT + 'cjs/'; const ESM5_ROOT = ROOT + 'esm5/'; const ESM2015_ROOT = ROOT + 'esm2015/'; const UMD_ROOT = ROOT + 'global/'; -const LEGACY_REEXPORT_ROOT = ROOT + "legacy-reexport/" +const ESM5_FOR_ROLLUP_ROOT = ROOT + 'esm5_for_rollup/'; +const LEGACY_REEXPORT_ROOT = ROOT + 'legacy-reexport/'; const TYPE_ROOT = ROOT + 'typings/'; const PKG_ROOT = ROOT + 'package/'; const CJS_PKG = PKG_ROOT + ''; const ESM5_PKG = PKG_ROOT + '_esm5/'; const ESM2015_PKG = PKG_ROOT + '_esm2015/'; const UMD_PKG = PKG_ROOT + 'bundles/'; +const SRC_ROOT_PKG = PKG_ROOT + 'src/'; const TYPE_PKG = PKG_ROOT; // License info for minified files @@ -106,13 +108,21 @@ createImportTargets(importTargets, "_esm2015/", ESM2015_PKG); mkdirp.sync(PKG_ROOT); // Copy over the sources -copySources('src/', PKG_ROOT + 'src/'); +copySources('src/', SRC_ROOT_PKG); +// Copy legacy-reexport sources +copySources('legacy-reexport/', SRC_ROOT_PKG); + copySources(CJS_ROOT, CJS_PKG); -fs.copySync(TYPE_ROOT, TYPE_PKG); fs.copySync(LEGACY_REEXPORT_ROOT, CJS_PKG, {overwrite: false, errorOnExist: true}); +// Clean up the source maps for CJS sources +cleanSourceMapRoot(PKG_ROOT, SRC_ROOT_PKG); +fs.copySync(TYPE_ROOT, TYPE_PKG); + copySources(ESM5_ROOT, ESM5_PKG, true); +cleanSourceMapRoot(ESM5_PKG, SRC_ROOT_PKG); copySources(ESM2015_ROOT, ESM2015_PKG, true); +cleanSourceMapRoot(ESM2015_PKG, SRC_ROOT_PKG); // Copy over tsconfig.json for bazel build support fs.copySync('./tsconfig.base.json', PKG_ROOT + 'src/tsconfig.json'); @@ -127,11 +137,30 @@ fs.copySync('src/internal-compatibility/package.json', PKG_ROOT + '/internal-com if (fs.existsSync(UMD_ROOT)) { fs.copySync(UMD_ROOT, UMD_PKG); + // Clean up source map paths so they can be re-mapped + klawSync(UMD_PKG, {filter: (item) => item.path.endsWith('.js.map')}) + .map(f => f.path) + .forEach(fName => { + const sourceMap = fs.readJsonSync(fName); + sourceMap.sources = sourceMap.sources.map(s => { + const nm = 'node_modules/'; + const rr = path.resolve(ESM5_FOR_ROLLUP_ROOT); + if (s.includes(nm)) { + return s.substring(s.indexOf(nm) + nm.length); + } else if (s.includes(rr)) { + return s.substring(s.indexOf(rr) + rr.length); + } + return s; + }); + fs.writeJsonSync(fName, sourceMap); + }); + // Add licenses to tops of bundles addLicenseToFile('LICENSE.txt', UMD_PKG + 'rxjs.umd.js'); addLicenseTextToFile(license, UMD_PKG + 'rxjs.umd.min.js'); addLicenseToFile('LICENSE.txt', UMD_PKG + 'rxjs.umd.js'); addLicenseTextToFile(license, UMD_PKG + 'rxjs.umd.min.js'); + cleanSourceMapRoot(UMD_PKG, PKG_ROOT); } // remove umd.js/umd.d.ts files that are only needed for creation of the umd bundle @@ -143,6 +172,23 @@ fs.removeSync(ESM2015_PKG + '/internal/umd.js'); fs.removeSync(ESM2015_PKG + '/internal/umd.js.map'); fs.removeSync(TYPE_PKG + '/internal/umd.d.ts'); +function cleanSourceMapRoot(mapRoot, sourcesRoot) { + klawSync(mapRoot, {filter: (item) => item.path.endsWith('.js.map')}) + .map(f => f.path) + .forEach(fName => { + const sourceMap = fs.readJsonSync(fName); + + // Get relative path from map file to source file + sourceMap.sources = sourceMap.sources.map(s => { + const sRel = path.relative(path.parse(fName).dir, path.resolve(path.join(sourcesRoot, s))); + return sRel; + }); + delete sourceMap.sourceRoot; + + fs.writeJsonSync(fName, sourceMap); + }); +} + function copySources(rootDir, packageDir, ignoreMissing) { // If we are ignoring missing directories, early return when source doesn't exist if (!fs.existsSync(rootDir)) { @@ -179,3 +225,9 @@ module.exports = function() { fs.outputFileSync(targetDirectory + 'path-mapping.js', outputData); } + +module.exports = { + copySources, + createImportTargets, + cleanSourceMapRoot +} \ No newline at end of file diff --git a/tsconfig/compat/tsconfig.base.json b/tsconfig/compat/tsconfig.base.json index 98485257820..1429a5fe2bc 100644 --- a/tsconfig/compat/tsconfig.base.json +++ b/tsconfig/compat/tsconfig.base.json @@ -3,6 +3,7 @@ "compilerOptions": { "noEmit": false, "baseUrl": "../../compat", + "sourceRoot": "../../compat", "paths": { "rxjs": ["../src/index"], "rxjs/*": ["../src/*"], diff --git a/tsconfig/tsconfig.base.json b/tsconfig/tsconfig.base.json index 68446a7fc2b..7747cd85a9a 100644 --- a/tsconfig/tsconfig.base.json +++ b/tsconfig/tsconfig.base.json @@ -3,6 +3,7 @@ "compilerOptions": { "noEmit": false, "baseUrl": "../src", + "sourceRoot": "../src", "paths": { "rxjs": ["./"], "rxjs/*": ["./*"] diff --git a/tsconfig/tsconfig.legacy-reexport.json b/tsconfig/tsconfig.legacy-reexport.json index ed561b08a75..65b180f7cb2 100644 --- a/tsconfig/tsconfig.legacy-reexport.json +++ b/tsconfig/tsconfig.legacy-reexport.json @@ -8,6 +8,7 @@ "outDir": "../dist/legacy-reexport", "rootDir": "../legacy-reexport", "baseUrl": "../legacy-reexport", + "sourceRoot": "../legacy-reexport", "paths": { "rxjs": ["../dist/typings/index"], "rxjs/*": ["../dist/typings/*"],