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(); +});