From 992aa1736135de22e96a86de9c100d14c0747b51 Mon Sep 17 00:00:00 2001 From: Jason Aden Date: Thu, 16 Mar 2017 12:55:15 -0700 Subject: [PATCH] build: add source maps into NPM distribution (#15159) Previous to 2.x there were some source maps distrubted, but they didn't go all the way back to the TypeScript sources and they weren't available for all JavaScript distrubted to NPM. With this change source maps will be available for FESM distributions as well as UMD and will go all the way back to TypeScript sources. Fixes #15184 --- build.sh | 55 +++++++++++++----- npm-shrinkwrap.clean.json | 72 +++++++++++------------- npm-shrinkwrap.json | 104 +++++++++++++++-------------------- package.json | 1 + scripts/build/map_sources.js | 13 +++++ 5 files changed, 132 insertions(+), 113 deletions(-) create mode 100644 scripts/build/map_sources.js diff --git a/build.sh b/build.sh index 4511e40fe1..6835e07164 100755 --- a/build.sh +++ b/build.sh @@ -115,7 +115,8 @@ downlevelES2015() { cp ${file} ${ts_file} echo "====== $TSC ${ts_file} --target es5 --module es2015 --noLib" - ($TSC ${ts_file} --target es5 --module es2015 --noLib) > /dev/null 2>&1 || true + ($TSC ${ts_file} --target es5 --module es2015 --noLib --sourceMap) > /dev/null 2>&1 || true + mapSources "${BASH_REMATCH[1]}${2:-".es5.js"}" rm -f ${ts_file} fi done @@ -131,30 +132,37 @@ downlevelES2015() { # Rollup index files recursively, ignoring blacklisted directories # Arguments: # param1 - Base source folder -# param2 - Source folder being rolled up ( -# param2 - Naming suffix to apply. Must end in ".ts" (defaults to .es5.ts) +# param2 - Destination directory +# param3 - Config file # Returns: # None ####################################### rollupIndex() { # Iterate over the files in this directory, rolling up each into ${2} directory - regex=".+/(.+)/index.js" + local regex=".+/(.+)/index.js" if [[ "${1}/index.js" =~ $regex ]]; then in_file="${1}/index.js" out_file="${2}/${BASH_REMATCH[1]}.js" echo "====== $ROLLUP -i ${in_file} -o ${out_file}" - $ROLLUP -i ${in_file} -o ${out_file} + + if [[ -f "${3}" ]]; then + $ROLLUP -i ${in_file} -o ${out_file} -c ${3} --sourcemap + else + $ROLLUP -i ${in_file} -o ${out_file} --sourcemap + fi cat ${LICENSE_BANNER} > ${out_file}.tmp cat ${out_file} >> ${out_file}.tmp mv ${out_file}.tmp ${out_file} + mapSources "${out_file}" + # Recurse for sub directories for DIR in ${1}/* ; do isIgnoredDirectory ${DIR} && continue # NOTE: We need to re-run this regex and use the new match as Bash doesn't have closures if [[ "${1}/index.js" =~ $regex ]]; then - rollupIndex ${DIR} ${2}/${BASH_REMATCH[1]} + rollupIndex ${DIR} ${2}/${BASH_REMATCH[1]} "$(dirname $3)/${BASH_REMATCH[1]}/rollup.config.js" fi done fi @@ -165,16 +173,21 @@ rollupIndex() { # Recursively runs rollup on any entry point that has a "rollup.config.js" file # Arguments: # param1 - Base source folder containing rollup.config.js -# param2 - Package name # Returns: # None ####################################### runRollup() { - if [[ "${1}/rollup.config.js" =~ $regex ]]; then + local regex="dest: ['\"](.+)['\"],*" + if [[ -f "${1}/rollup.config.js" ]]; then cd ${1} echo "====== $ROLLUP -c ${1}/rollup.config.js" - $ROLLUP -c rollup.config.js + $ROLLUP -c rollup.config.js --sourcemap + + local dest_line=$(cat "${1}/rollup.config.js" | grep 'dest:') + if [[ ${dest_line} =~ $regex ]]; then + mapSources "${BASH_REMATCH[1]}" + fi # Recurse for sub directories for DIR in ${1}/* ; do @@ -193,7 +206,7 @@ runRollup() { ####################################### addBanners() { for file in ${1}/*; do - if [[ -f ${file} ]]; then + if [[ -f ${file} && "${file##*.}" != "map" ]]; then cat ${LICENSE_BANNER} > ${file}.tmp cat ${file} >> ${file}.tmp mv ${file}.tmp ${file} @@ -216,8 +229,10 @@ minify() { for file in "${files[@]}"; do echo "${file}" base_file=$( basename "${file}" ) - if [[ "${base_file}" =~ $regex ]]; then - $UGLIFYJS -c --screw-ie8 --comments -o ${1}/${BASH_REMATCH[1]}.min.js ${file} + if [[ "${base_file}" =~ $regex && "${base_file##*.}" != "map" ]]; then + local out_file=$(dirname "${file}")/${BASH_REMATCH[1]}.min.js + $UGLIFYJS -c --screw-ie8 --comments -o ${out_file} --source-map ${out_file}.map --source-map-include-sources ${file} + mapSources "${out_file}" fi done } @@ -288,6 +303,19 @@ addNgcPackageJson() { done } +####################################### +# This is read by NGC to be able to find the flat module index. +# Arguments: +# param1 - JavaScript file on which to re-map sources +# Returns: +# None +####################################### +mapSources() { + if [[ -f "${1}.map" ]]; then + $MAP_SOURCES -f "${1}" + fi +} + VERSION="${VERSION_PREFIX}${VERSION_SUFFIX}" ROUTER_VERSION="${ROUTER_VERSION_PREFIX}${VERSION_SUFFIX}" echo "====== BUILDING: Version ${VERSION} (Router ${ROUTER_VERSION})" @@ -296,6 +324,7 @@ N=" " TSC=`pwd`/node_modules/.bin/tsc NGC="node --max-old-space-size=3000 dist/tools/@angular/tsc-wrapped/src/main" +MAP_SOURCES="node `pwd`/scripts/build/map_sources.js " UGLIFYJS=`pwd`/node_modules/.bin/uglifyjs TSCONFIG=./tools/tsconfig.json ROLLUP=`pwd`/node_modules/.bin/rollup @@ -411,7 +440,7 @@ do ( cd ${SRC_DIR} echo "====== Rollup ${PACKAGE}" - rollupIndex ${OUT_DIR} ${MODULES_DIR} + rollupIndex ${OUT_DIR} ${MODULES_DIR} ${ROOT_DIR} echo "====== Downleveling ES2015 to ESM/ES5" downlevelES2015 ${MODULES_DIR} diff --git a/npm-shrinkwrap.clean.json b/npm-shrinkwrap.clean.json index bf1a0202e2..b36162f51c 100644 --- a/npm-shrinkwrap.clean.json +++ b/npm-shrinkwrap.clean.json @@ -2591,6 +2591,10 @@ "version": "0.17.9", "dev": true }, + "es6-promise": { + "version": "3.3.1", + "dev": true + }, "es6-symbol": { "version": "3.0.2", "dev": true @@ -5569,47 +5573,7 @@ }, "rollup": { "version": "0.26.3", - "dev": true, - "dependencies": { - "ansi-regex": { - "version": "2.0.0", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "dev": true - }, - "source-map": { - "version": "0.1.32", - "dev": true, - "dependencies": { - "amdefine": { - "version": "1.0.1", - "dev": true - } - } - }, - "source-map-support": { - "version": "0.4.0", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "dev": true - } - } + "dev": true }, "rollup-plugin-commonjs": { "version": "5.0.5", @@ -5640,6 +5604,24 @@ "rxjs": { "version": "5.0.1" }, + "sander": { + "version": "0.5.1", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.1", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "dev": true + }, + "rimraf": { + "version": "2.6.1", + "dev": true + } + } + }, "sauce-connect-launcher": { "version": "0.13.0", "dev": true, @@ -5848,6 +5830,10 @@ } } }, + "sorcery": { + "version": "0.10.0", + "dev": true + }, "source-list-map": { "version": "0.1.5", "dev": true @@ -5872,6 +5858,10 @@ } } }, + "sourcemap-codec": { + "version": "1.3.0", + "dev": true + }, "sparkles": { "version": "1.0.0", "dev": true diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index 3d9a85b5e0..b4c4a22d6d 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -3745,6 +3745,12 @@ "resolved": "https://registry.npmjs.org/es6-module-loader/-/es6-module-loader-0.17.9.tgz", "dev": true }, + "es6-promise": { + "version": "3.3.1", + "from": "es6-promise@>=3.1.2 <4.0.0", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "dev": true + }, "es6-symbol": { "version": "3.0.2", "from": "es6-symbol@>=3.0.2 <3.1.0", @@ -8145,65 +8151,7 @@ "version": "0.26.3", "from": "rollup@0.26.3", "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.26.3.tgz", - "dev": true, - "dependencies": { - "ansi-regex": { - "version": "2.0.0", - "from": "ansi-regex@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "from": "ansi-styles@>=2.2.1 <3.0.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "from": "chalk@>=1.1.1 <2.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "dev": true - }, - "has-ansi": { - "version": "2.0.0", - "from": "has-ansi@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "dev": true - }, - "source-map": { - "version": "0.1.32", - "from": "source-map@0.1.32", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.32.tgz", - "dev": true, - "dependencies": { - "amdefine": { - "version": "1.0.1", - "from": "amdefine@>=0.0.4", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "dev": true - } - } - }, - "source-map-support": { - "version": "0.4.0", - "from": "source-map-support@>=0.4.0 <0.5.0", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.0.tgz", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "from": "strip-ansi@>=3.0.0 <4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "dev": true - }, - "supports-color": { - "version": "2.0.0", - "from": "supports-color@>=2.0.0 <3.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "dev": true - } - } + "dev": true }, "rollup-plugin-commonjs": { "version": "5.0.5", @@ -8248,6 +8196,32 @@ "from": "rxjs@5.0.1", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.0.1.tgz" }, + "sander": { + "version": "0.5.1", + "from": "sander@>=0.5.0 <0.6.0", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "dev": true, + "dependencies": { + "glob": { + "version": "7.1.1", + "from": "glob@>=7.0.5 <8.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", + "dev": true + }, + "graceful-fs": { + "version": "4.1.11", + "from": "graceful-fs@>=4.1.3 <5.0.0", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "dev": true + }, + "rimraf": { + "version": "2.6.1", + "from": "rimraf@>=2.5.2 <3.0.0", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz", + "dev": true + } + } + }, "sauce-connect-launcher": { "version": "0.13.0", "from": "sauce-connect-launcher@>=0.13.0 <0.14.0", @@ -8550,6 +8524,12 @@ } } }, + "sorcery": { + "version": "0.10.0", + "from": "sorcery@latest", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", + "dev": true + }, "source-list-map": { "version": "0.1.5", "from": "source-list-map@>=0.1.0 <0.2.0", @@ -8584,6 +8564,12 @@ } } }, + "sourcemap-codec": { + "version": "1.3.0", + "from": "sourcemap-codec@>=1.3.0 <2.0.0", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.3.0.tgz", + "dev": true + }, "sparkles": { "version": "1.0.0", "from": "sparkles@>=1.0.0 <2.0.0", diff --git a/package.json b/package.json index ac36567e74..0a119e2036 100644 --- a/package.json +++ b/package.json @@ -85,6 +85,7 @@ "rollup-plugin-commonjs": "^5.0.5", "selenium-webdriver": "^2.53.3", "semver": "^5.1.0", + "sorcery": "^0.10.0", "source-map": "^0.5.6", "source-map-support": "^0.4.2", "systemjs": "0.18.10", diff --git a/scripts/build/map_sources.js b/scripts/build/map_sources.js new file mode 100644 index 0000000000..993c414754 --- /dev/null +++ b/scripts/build/map_sources.js @@ -0,0 +1,13 @@ + +var path = require('path'); +var sorcery = require('sorcery'); +var yargs = require('yargs'); + +var argv = require('yargs') + .alias('f', 'file') + .argv; + + +sorcery.load(argv.file).then(function(chain) { + chain.write(); +});