From d2bf0e8fd6cd3cdc8477f62b7197ec8fecc31bfa Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 11:29:39 -0600 Subject: [PATCH 01/19] update gradle to version 3.4 --- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 53324 -> 54208 bytes gradle/wrapper/gradle-wrapper.properties | 4 ++-- gradlew | 22 +++++++++++++++------- gradlew.bat | 6 ------ 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/build.gradle b/build.gradle index 4835fbc9..0039feb0 100644 --- a/build.gradle +++ b/build.gradle @@ -2,5 +2,5 @@ // gradle wrapper task wrapper(type: Wrapper) { - gradleVersion = '3.0' + gradleVersion = '3.4' } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 3baa851b28c65f87dd36a6748e1a85cf360c1301..236b8a2704dffa1ffe8ada30c19226d68fe511ba 100644 GIT binary patch delta 21799 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 S8gVG|1v@Jj9C(#*>;C{k4ZhI; diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ec3424ad..60a28fa0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Aug 18 13:47:05 CDT 2016 +#Fri Mar 10 11:29:15 CST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.0-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-3.4-bin.zip diff --git a/gradlew b/gradlew index 27309d92..4453ccea 100755 --- a/gradlew +++ b/gradlew @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh ############################################################################## ## @@ -154,11 +154,19 @@ if $cygwin ; then esac fi -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") +# Escape application args +save ( ) { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " } -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" +APP_ARGS=$(save "$@") -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong +if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then + cd "$(dirname "$0")" +fi + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat index f6d5974e..e95643d6 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -49,7 +49,6 @@ goto fail @rem Get command-line arguments, handling Windows variants if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -60,11 +59,6 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ :execute @rem Setup the command line From 80a49598daede8b426eb16c4f020a629e3c3d7ed Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 11:35:24 -0600 Subject: [PATCH 02/19] upgrade backend dependencies --- backend/build.gradle | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/backend/build.gradle b/backend/build.gradle index 31a6fd78..0ac75a2a 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { // spring - classpath('org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE') + classpath('org.springframework.boot:spring-boot-gradle-plugin:1.5.2.RELEASE') classpath('org.springframework:springloaded:1.2.6.RELEASE') } } @@ -14,7 +14,7 @@ buildscript { apply plugin: 'java' apply plugin: 'eclipse' apply plugin: 'idea' -apply plugin: 'spring-boot' +apply plugin: 'org.springframework.boot' repositories { mavenCentral() @@ -36,7 +36,7 @@ idea { jar { baseName = 'spring-boot-angular2' - version = '1.0.3' + version = '1.0.4' } sourceCompatibility = 1.8 @@ -48,15 +48,15 @@ configurations { dependencies { // spring - compile('org.springframework.boot:spring-boot-starter-web') + compile('org.springframework.boot:spring-boot-starter-web:1.5.2.RELEASE') // google gson - compile('com.google.code.gson:gson:2.7') + compile('com.google.code.gson:gson:2.8.0') // spring dev tools - dev('org.springframework.boot:spring-boot-devtools') + dev('org.springframework.boot:spring-boot-devtools:1.5.2.RELASE') // testing - testCompile('org.springframework.boot:spring-boot-starter-test') + testCompile('org.springframework.boot:spring-boot-starter-test:1.5.2.RELASE') } // run spring boot app From 8246beda5740b9db2bdac4c646abbad410965df9 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 11:36:14 -0600 Subject: [PATCH 03/19] upgrade frontend dependencies --- frontend/package.json | 116 +++++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 3d1e3db0..7b9e1aeb 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -35,78 +35,78 @@ "coverage": "http-server -c-1 -o -p 9875 ./coverage" }, "dependencies": { - "@angular/common": "2.1.0", - "@angular/compiler": "2.1.0", - "@angular/core": "2.1.0", - "@angular/forms": "2.1.0", - "@angular/http": "2.1.0", - "@angular/platform-browser": "2.1.0", - "@angular/platform-browser-dynamic": "2.1.0", - "@angular/platform-server": "2.1.0", - "@angular/router": "3.1.0", + "@angular/common": "2.4.9", + "@angular/compiler": "2.4.9", + "@angular/core": "2.4.9", + "@angular/forms": "2.4.9", + "@angular/http": "2.4.9", + "@angular/platform-browser": "2.4.9", + "@angular/platform-browser-dynamic": "2.4.9", + "@angular/platform-server": "2.4.9", + "@angular/router": "3.4.9", "bootstrap": "4.0.0-alpha.4", "core-js": "^2.4.1", - "font-awesome": "^4.6.3", + "font-awesome": "^4.7.0", "jquery": "^3.1.1", - "lodash": "^4.16.4", - "moment": "^2.15.1", - "ng2-bootstrap": "^1.1.14", - "rxjs": "5.0.0-rc.1", - "tether": "^1.3.7", - "zone.js": "^0.6.25" + "lodash": "^4.17.4", + "moment": "^2.17.1", + "ng2-bootstrap": "^1.4.0", + "rxjs": "5.2.0", + "tether": "^1.4.0", + "zone.js": "^0.7.8" }, "devDependencies": { - "@types/jasmine": "^2.5.35", - "@types/jquery": "^2.0.33", - "@types/lodash": "4.14.37", - "@types/node": "^6.0.45", - "@types/source-map": "^0.1.28", - "@types/webpack": "^1.12.35", + "@types/jasmine": "^2.5.44", + "@types/jquery": "^2.0.40", + "@types/lodash": "4.14.55", + "@types/node": "^7.0.8", + "@types/source-map": "^0.5.0", + "@types/webpack": "^2.2.11", "angular2-hmr": "~0.8.1", - "angular2-template-loader": "^0.5.0", - "autoprefixer": "^6.5.1", - "awesome-typescript-loader": "2.2.4", - "bootstrap-loader": "2.0.0-beta.12", - "codelyzer": "^1.0.0-beta.2", - "copy-webpack-plugin": "^3.0.1", - "css-loader": "^0.25.0", - "exports-loader": "^0.6.3", - "extract-text-webpack-plugin": "^2.0.0-beta.3", - "file-loader": "^0.9.0", - "font-awesome-sass-loader": "^1.0.2", - "html-loader": "^0.4.4", - "html-webpack-plugin": "^2.22.0", + "angular2-template-loader": "^0.6.2", + "autoprefixer": "^6.7.6", + "awesome-typescript-loader": "3.1.2", + "bootstrap-loader": "2.0.0-beta.22", + "codelyzer": "^3.0.0-beta.3", + "copy-webpack-plugin": "^4.0.1", + "css-loader": "^0.27.1", + "exports-loader": "^0.6.4", + "extract-text-webpack-plugin": "^2.1.0", + "file-loader": "^0.10.1", + "font-awesome-sass-loader": "^1.0.3", + "html-loader": "^0.4.5", + "html-webpack-plugin": "^2.28.0", "http-server": "^0.9.0", - "imports-loader": "^0.6.5", - "istanbul-instrumenter-loader": "^1.0.0", + "imports-loader": "^0.7.1", + "istanbul-instrumenter-loader": "^2.0.0", "jasmine-core": "^2.5.2", "json-loader": "^0.5.4", - "karma": "^1.3.0", + "karma": "^1.5.0", "karma-chrome-launcher": "^2.0.0", "karma-coverage": "^1.1.1", - "karma-jasmine": "^1.0.2", - "karma-mocha-reporter": "^2.2.0", + "karma-jasmine": "^1.1.0", + "karma-mocha-reporter": "^2.2.2", "karma-sourcemap-loader": "^0.3.7", - "karma-webpack": "^1.8.0", - "node-sass": "^3.10.1", - "postcss-loader": "^1.0.0", + "karma-webpack": "^2.0.2", + "node-sass": "^4.5.0", + "postcss-loader": "^1.3.3", "raw-loader": "^0.5.1", - "remap-istanbul": "^0.7.0", - "resolve": "^1.1.7", - "resolve-url-loader": "^1.6.0", - "rimraf": "^2.5.4", - "sass-loader": "^4.0.2", - "source-map-loader": "^0.1.5", - "style-loader": "^0.13.1", + "remap-istanbul": "^0.9.1", + "resolve": "^1.3.2", + "resolve-url-loader": "^2.0.2", + "rimraf": "^2.6.1", + "sass-loader": "^6.0.3", + "source-map-loader": "^0.2.0", + "style-loader": "^0.13.2", "to-string-loader": "^1.1.5", "ts-helpers": "^1.1.2", - "ts-node": "^1.6.0", - "tslint": "^3.15.1", - "tslint-loader": "^2.1.5", - "typescript": "2.0.3", - "url-loader": "^0.5.7", - "webpack": "2.1.0-beta.22", - "webpack-dev-server": "^2.1.0-beta.9", - "webpack-merge": "^0.14.1" + "ts-node": "^2.1.0", + "tslint": "^4.5.1", + "tslint-loader": "^3.4.3", + "typescript": "2.2.1", + "url-loader": "^0.5.8", + "webpack": "2.2.1", + "webpack-dev-server": "^2.4.1", + "webpack-merge": "^4.0.0" } } \ No newline at end of file From 52a2080e7321aedd7203a6bc253117f7deab53f8 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 15:11:43 -0600 Subject: [PATCH 04/19] update webpack config for webpack 2 --- frontend/config/helpers.js | 1 + frontend/config/karma.conf.js | 3 +- frontend/config/spec-bundle.js | 1 + frontend/config/webpack.common.js | 86 +++++++++++++++---------------- frontend/config/webpack.dev.js | 15 ++++-- frontend/config/webpack.prod.js | 3 +- frontend/config/webpack.test.js | 3 +- frontend/package.json | 3 +- 8 files changed, 64 insertions(+), 51 deletions(-) diff --git a/frontend/config/helpers.js b/frontend/config/helpers.js index 351156cb..37df1a22 100644 --- a/frontend/config/helpers.js +++ b/frontend/config/helpers.js @@ -1,3 +1,4 @@ +/* helpers.js */ var path = require('path'); var _root = path.resolve(__dirname, '..'); diff --git a/frontend/config/karma.conf.js b/frontend/config/karma.conf.js index 9d4c4504..7ce21103 100644 --- a/frontend/config/karma.conf.js +++ b/frontend/config/karma.conf.js @@ -1,3 +1,4 @@ +/* karma.conf.js */ /** * @author: @AngularClass */ @@ -103,4 +104,4 @@ module.exports = function(config) { } config.set(configuration); -}; \ No newline at end of file +}; diff --git a/frontend/config/spec-bundle.js b/frontend/config/spec-bundle.js index 3a6d9e18..a78bbc1e 100644 --- a/frontend/config/spec-bundle.js +++ b/frontend/config/spec-bundle.js @@ -1,3 +1,4 @@ +/* spec-bundle.js */ /** * @author: @AngularClass */ diff --git a/frontend/config/webpack.common.js b/frontend/config/webpack.common.js index 03b999fe..e2f9c6ee 100644 --- a/frontend/config/webpack.common.js +++ b/frontend/config/webpack.common.js @@ -1,3 +1,4 @@ +/* webpack.common.js */ const webpack = require('webpack'); const CopyWebpackPlugin = require('copy-webpack-plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); @@ -15,76 +16,75 @@ module.exports = { resolve: { modules: [helpers.root('src'), "node_modules"], descriptionFiles: ['package.json'], - extensions: ['', '.js', '.ts', '.css', '.scss', '.json', '.html'] + extensions: ['.js', '.ts', '.css', '.scss', '.json', '.html'] }, module: { - preLoaders: [ + rules: [ { test: /\.js$/, - loader: 'source-map-loader', + use: ['source-map-loader'], + enforce: 'pre', exclude: [helpers.root('node_modules')] - } - ], - - loaders: [ + }, { test: /\.ts$/, - loaders: ['awesome-typescript-loader', 'angular2-template-loader'], + use: ['awesome-typescript-loader', 'angular2-template-loader'], exclude: [/\.(spec|e2e)\.ts$/] }, - { test: /\.html$/, - loader: 'raw-loader', + use: ['raw-loader'], exclude: [helpers.root('src/index.html')] }, - { test: /\.css$/, - loader: 'raw-loader!style-loader!css-loader!postcss-loader' + use: [ + 'style-loader', + 'css-loader?importLoaders=1', + 'postcss-loader' + ] }, - { test: /initial\.scss$/, - loader: ExtractTextPlugin.extract({ fallbackLoader: 'style-loader', loader: 'css-loader!sass-loader'}) + use: ['stye-loader', 'css-loader', 'sass-loader'] }, - { test: /\.scss$/, - loaders: ['raw-loader', 'sass-loader'], + use: ['raw-loader', 'sass-loader'], exclude: [helpers.root('node_modules')] }, - - { - test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, - loader: "url-loader?limit=10000&mimetype=application/font-woff" + { + test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, + use: ['url-loader?limit=10000&mimetype=application/font-woff'] }, - { - test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, - loader: "file-loader" + test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, + use: ['file-loader'] }, - { test: /\.json$/, - loader: 'json-loader' + use: ['json-loader'] }, - { test: /bootstrap\/dist\/js\/umd\//, - loader: 'imports?jQuery=jquery' + use: ['imports-loader?jQuery=jquery'] } - ] + ], }, - postcss: [autoprefixer], - plugins: [ + new webpack.LoaderOptionsPlugin({ + options: { + postcss: [autoprefixer], + } + }), + new webpack.ContextReplacementPlugin( /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, __dirname ), + new ExtractTextPlugin({ filename: 'css/[name].css', disable: false, allChunks: true @@ -111,23 +111,23 @@ module.exports = { "window.moment": "moment", 'Tether': 'tether', 'window.Tether': 'tether', - Tooltip: "exports?Tooltip!bootstrap/js/dist/tooltip", - Alert: "exports?Alert!bootstrap/js/dist/alert", - Button: "exports?Button!bootstrap/js/dist/button", - Carousel: "exports?Carousel!bootstrap/js/dist/carousel", - Collapse: "exports?Collapse!bootstrap/js/dist/collapse", - Dropdown: "exports?Dropdown!bootstrap/js/dist/dropdown", - Modal: "exports?Modal!bootstrap/js/dist/modal", - Popover: "exports?Popover!bootstrap/js/dist/popover", - Scrollspy: "exports?Scrollspy!bootstrap/js/dist/scrollspy", - Tab: "exports?Tab!bootstrap/js/dist/tab", - Util: "exports?Util!bootstrap/js/dist/util" + Tooltip: "exports-loader?Tooltip!bootstrap/js/dist/tooltip", + Alert: "exports-loader?Alert!bootstrap/js/dist/alert", + Button: "exports-loader?Button!bootstrap/js/dist/button", + Carousel: "exports-loader?Carousel!bootstrap/js/dist/carousel", + Collapse: "exports-loader?Collapse!bootstrap/js/dist/collapse", + Dropdown: "exports-loader?Dropdown!bootstrap/js/dist/dropdown", + Modal: "exports-loader?Modal!bootstrap/js/dist/modal", + Popover: "exports-loader?Popover!bootstrap/js/dist/popover", + Scrollspy: "exports-loader?Scrollspy!bootstrap/js/dist/scrollspy", + Tab: "exports-loader?Tab!bootstrap/js/dist/tab", + Util: "exports-loader?Util!bootstrap/js/dist/util" }) ], node: { - global: 'window', - crypto: 'empty', + global: true, + crypto: false, module: false, clearImmediate: false, setImmediate: false diff --git a/frontend/config/webpack.dev.js b/frontend/config/webpack.dev.js index 38ef027b..aa86a457 100644 --- a/frontend/config/webpack.dev.js +++ b/frontend/config/webpack.dev.js @@ -1,3 +1,5 @@ +/* webpack.dev.js */ +const webpack = require('webpack'); const webpackMerge = require('webpack-merge'); const DefinePlugin = require('webpack/lib/DefinePlugin'); const commonConfig = require('./webpack.common.js'); @@ -13,8 +15,6 @@ const METADATA = webpackMerge(commonConfig.metadata, { }); module.exports = webpackMerge(commonConfig, { - metadata: METADATA, - debug: true, devtool: 'cheap-module-eval-source-map', output: { @@ -36,6 +36,13 @@ module.exports = webpackMerge(commonConfig, { 'HMR': METADATA.HMR } }), + + new webpack.LoaderOptionsPlugin({ + debug: true, + options: { + metadata: METADATA, + } + }), ], devServer: { @@ -50,8 +57,8 @@ module.exports = webpackMerge(commonConfig, { }, node: { - global: 'window', - crypto: 'empty', + global: true, + crypto: false, process: true, module: false, clearImmediate: false, diff --git a/frontend/config/webpack.prod.js b/frontend/config/webpack.prod.js index 5890b33d..b05e54f3 100644 --- a/frontend/config/webpack.prod.js +++ b/frontend/config/webpack.prod.js @@ -1,3 +1,4 @@ +/* webpack.prod.js */ const webpack = require('webpack'); const webpackMerge = require('webpack-merge'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); @@ -31,4 +32,4 @@ module.exports = webpackMerge(commonConfig, { } }) ] -}); \ No newline at end of file +}); diff --git a/frontend/config/webpack.test.js b/frontend/config/webpack.test.js index 7455a6e0..c3594310 100644 --- a/frontend/config/webpack.test.js +++ b/frontend/config/webpack.test.js @@ -1,3 +1,4 @@ +/* webpack.test.js */ /** * @author: @AngularClass */ @@ -230,4 +231,4 @@ module.exports = { setImmediate: false } -}; \ No newline at end of file +}; diff --git a/frontend/package.json b/frontend/package.json index 7b9e1aeb..44627c85 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -89,6 +89,7 @@ "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^2.0.2", "node-sass": "^4.5.0", + "postcss": "^5.2.16", "postcss-loader": "^1.3.3", "raw-loader": "^0.5.1", "remap-istanbul": "^0.9.1", @@ -109,4 +110,4 @@ "webpack-dev-server": "^2.4.1", "webpack-merge": "^4.0.0" } -} \ No newline at end of file +} From 4766591b5a467ff2fc6fb9437dce962524f39e7a Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 15:15:55 -0600 Subject: [PATCH 05/19] fix backend dependency version --- backend/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/build.gradle b/backend/build.gradle index 0ac75a2a..fae4806a 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -53,10 +53,10 @@ dependencies { compile('com.google.code.gson:gson:2.8.0') // spring dev tools - dev('org.springframework.boot:spring-boot-devtools:1.5.2.RELASE') + dev('org.springframework.boot:spring-boot-devtools:1.5.2.RELEASE') // testing - testCompile('org.springframework.boot:spring-boot-starter-test:1.5.2.RELASE') + testCompile('org.springframework.boot:spring-boot-starter-test:1.5.2.RELEASE') } // run spring boot app From 70f818a03d269bc89416763b992da0eb7e535e5b Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 15:23:41 -0600 Subject: [PATCH 06/19] remove unused property from webpack-dev-server config --- frontend/config/webpack.dev.js | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/config/webpack.dev.js b/frontend/config/webpack.dev.js index aa86a457..a3d48fd2 100644 --- a/frontend/config/webpack.dev.js +++ b/frontend/config/webpack.dev.js @@ -53,7 +53,6 @@ module.exports = webpackMerge(commonConfig, { aggregateTimeout: 300, poll: 1000 }, - outputPath: helpers.root('dist') }, node: { From 2226346473463bc126b4f3eb51b425712dd500d4 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 15:47:24 -0600 Subject: [PATCH 07/19] update front test for webpack 2 --- frontend/config/webpack.test.js | 206 ++++++-------------------------- 1 file changed, 36 insertions(+), 170 deletions(-) diff --git a/frontend/config/webpack.test.js b/frontend/config/webpack.test.js index c3594310..d17a77a1 100644 --- a/frontend/config/webpack.test.js +++ b/frontend/config/webpack.test.js @@ -1,196 +1,72 @@ /* webpack.test.js */ -/** - * @author: @AngularClass - */ - +const webpack = require('webpack'); const helpers = require('./helpers'); - -/** - * Webpack Plugins - */ const ProvidePlugin = require('webpack/lib/ProvidePlugin'); const DefinePlugin = require('webpack/lib/DefinePlugin'); - -/** - * Webpack Constants - */ const ENV = process.env.ENV = process.env.NODE_ENV = 'test'; -/** - * Webpack configuration - * - * See: http://webpack.github.io/docs/configuration.html#cli - */ module.exports = { - - /** - * Source map for Karma from the help of karma-sourcemap-loader & karma-webpack - * - * Do not change, leave as is or it wont work. - * See: https://github.com/webpack/karma-webpack#source-maps - */ devtool: 'inline-source-map', - /** - * Options affecting the resolving of modules. - * - * See: http://webpack.github.io/docs/configuration.html#resolve - */ resolve: { - - /** - * An array of extensions that should be used to resolve modules. - * - * See: http://webpack.github.io/docs/configuration.html#resolve-extensions - */ - extensions: ['', '.ts', '.js'], - - /** - * Make sure root is src - */ - root: helpers.root('src'), - + extensions: ['.ts', '.js'], + modules: [helpers.root('src'), 'node_modules'] }, - /** - * Options affecting the normal modules. - * - * See: http://webpack.github.io/docs/configuration.html#module - */ module: { - - /** - * An array of applied pre and post loaders. - * - * See: http://webpack.github.io/docs/configuration.html#module-preloaders-module-postloaders - */ - preLoaders: [ - - /** - * Tslint loader support for *.ts files - * - * See: https://github.com/wbuchwalter/tslint-loader - */ + rules: [ { test: /\.ts$/, loader: 'tslint-loader', + enforce: 'pre', exclude: [helpers.root('node_modules')] }, - - /** - * Source map loader support for *.js files - * Extracts SourceMaps for source files that as added as sourceMappingURL comment. - * - * See: https://github.com/webpack/source-map-loader - */ { test: /\.js$/, loader: 'source-map-loader', + enforce: 'pre', exclude: [ - // these packages have problems with their sourcemaps - helpers.root('node_modules/rxjs'), - helpers.root('node_modules/@angular') - ]} - - ], - - /** - * An array of automatically applied loaders. - * - * IMPORTANT: The loaders here are resolved relative to the resource which they are applied to. - * This means they are not resolved relative to the configuration file. - * - * See: http://webpack.github.io/docs/configuration.html#module-loaders - */ - loaders: [ - - /** - * Typescript loader support for .ts and Angular 2 async routes via .async.ts - * - * See: https://github.com/s-panferov/awesome-typescript-loader - */ + helpers.root('node_modules/rxjs'), + helpers.root('node_modules/@angular') + ] + }, { test: /\.ts$/, loader: 'awesome-typescript-loader', query: { compilerOptions: { - - // Remove TypeScript helpers to be injected - // below by DefinePlugin removeComments: true - } }, exclude: [/\.e2e\.ts$/] }, - - /** - * Json loader support for *.json files. - * - * See: https://github.com/webpack/json-loader - */ - { test: /\.json$/, loader: 'json-loader', exclude: [helpers.root('src/index.html')] }, - - /** - * Raw loader support for *.css files - * Returns file content as string - * - * See: https://github.com/webpack/raw-loader - */ - { test: /\.css$/, loaders: ['to-string-loader', 'css-loader'], exclude: [helpers.root('src/index.html')] }, - - /** - * Raw loader support for *.html - * Returns file content as string - * - * See: https://github.com/webpack/raw-loader - */ - { test: /\.html$/, loader: 'raw-loader', exclude: [helpers.root('src/index.html')] } - - ], - - /** - * An array of applied pre and post loaders. - * - * See: http://webpack.github.io/docs/configuration.html#module-preloaders-module-postloaders - */ - postLoaders: [ - - /** - * Instruments JS files with Istanbul for subsequent code coverage reporting. - * Instrument only testing sources. - * - * See: https://github.com/deepsweet/istanbul-instrumenter-loader - */ + { + test: /\.json$/, + loader: 'json-loader', + exclude: [helpers.root('src/index.html')] + }, + { + test: /\.css$/, loaders: ['to-string-loader', 'css-loader'], + exclude: [helpers.root('src/index.html')] + }, + { + test: /\.html$/, + loader: 'raw-loader', + exclude: [helpers.root('src/index.html')] + }, { test: /\.(js|ts)$/, loader: 'istanbul-instrumenter-loader', include: helpers.root('src'), + enforce: 'post', exclude: [ /\.(e2e|spec)\.ts$/, /node_modules/ ] } - ] }, - /** - * Add additional plugins to the compiler. - * - * See: http://webpack.github.io/docs/configuration.html#plugins - */ plugins: [ - - /** - * Plugin: DefinePlugin - * Description: Define free variables. - * Useful for having development builds with debug logging or adding global constants. - * - * Environment helpers - * - * See: https://webpack.github.io/docs/list-of-plugins.html#defineplugin - */ - // NOTE: when adding more properties make sure you include them in custom-typings.d.ts new DefinePlugin({ 'ENV': JSON.stringify(ENV), 'HMR': false, @@ -201,31 +77,21 @@ module.exports = { } }), - + new webpack.LoaderOptionsPlugin({ + options: { + tslint: { + emitErrors: false, + failOnHint: false, + resourcePath: 'src' + } + } + }) ], - /** - * Static analysis linter for TypeScript advanced options configuration - * Description: An extensible linter for the TypeScript language. - * - * See: https://github.com/wbuchwalter/tslint-loader - */ - tslint: { - emitErrors: false, - failOnHint: false, - resourcePath: 'src' - }, - - /** - * Include polyfills or mocks for various node stuff - * Description: Node configuration - * - * See: https://webpack.github.io/docs/configuration.html#node - */ node: { - global: 'window', + global: true, process: false, - crypto: 'empty', + crypto: false, module: false, clearImmediate: false, setImmediate: false From 168490ad8a2574acaaac05c0d0e5388477b535a5 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 16:08:43 -0600 Subject: [PATCH 08/19] update tslint.json --- frontend/tslint.json | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/frontend/tslint.json b/frontend/tslint.json index 260fbb53..9373d14e 100644 --- a/frontend/tslint.json +++ b/frontend/tslint.json @@ -37,7 +37,6 @@ "curly": false, "forin": true, "label-position": true, - "label-undefined": true, "no-arg": true, "no-bitwise": true, "no-conditional-assignment": true, @@ -51,7 +50,6 @@ ], "no-construct": true, "no-debugger": true, - "no-duplicate-key": true, "no-duplicate-variable": true, "no-empty": false, "no-eval": true, @@ -59,9 +57,7 @@ "no-shadowed-variable": true, "no-string-literal": false, "no-switch-case-fall-through": true, - "no-unreachable": true, "no-unused-expression": true, - "no-unused-variable": false, "no-use-before-declare": true, "no-var-keyword": true, "radix": true, @@ -70,11 +66,6 @@ true, "allow-null-check" ], - "use-strict": [ - true, - "check-module" - ], - "eofline": true, "indent": [ true, @@ -82,7 +73,7 @@ ], "max-line-length": [ true, - 100 + 120 ], "no-require-imports": false, "no-trailing-whitespace": true, @@ -104,9 +95,8 @@ "interface-name": false, "jsdoc-format": true, "no-consecutive-blank-lines": false, - "no-constructor-vars": false, "one-line": [ - true, + false, "check-open-brace", "check-catch", "check-else", @@ -132,7 +122,6 @@ "check-operator", "check-separator", "check-type" - ], - "import-destructuring-spacing": true + ] } -} \ No newline at end of file +} From f03a979a3cc0ca812167d00ca1fab3a86783ee41 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 17:01:17 -0600 Subject: [PATCH 09/19] update karma and coverage for webpack 2 --- frontend/config/karma.conf.js | 88 +++++++-------------------------- frontend/config/webpack.test.js | 28 ++++++++--- frontend/package.json | 1 + 3 files changed, 41 insertions(+), 76 deletions(-) diff --git a/frontend/config/karma.conf.js b/frontend/config/karma.conf.js index 7ce21103..d9074382 100644 --- a/frontend/config/karma.conf.js +++ b/frontend/config/karma.conf.js @@ -1,106 +1,56 @@ /* karma.conf.js */ -/** - * @author: @AngularClass - */ -var path = require('path'); +const path = require('path'); +const testWebpackConfig = require('./webpack.test.js'); module.exports = function(config) { - var testWebpackConfig = require('./webpack.test.js'); - var configuration = { - - // base path that will be used to resolve all patterns (e.g. files, exclude) basePath: '', - - /* - * Frameworks to use - * - * available frameworks: https://npmjs.org/browse/keyword/karma-adapter - */ frameworks: ['jasmine'], - - // list of files to exclude exclude: [ ], + client: { captureConsole: false }, + files: [{pattern: './spec-bundle.js', watched: false}], + preprocessors: { + './spec-bundle.js': ['coverage', 'webpack', 'sourcemap'] + }, - /* - * list of files / patterns to load in the browser - * - * we are building the test environment in ./spec-bundle.js - */ - files: [ { pattern: './spec-bundle.js', watched: false } ], - - /* - * preprocess matching files before serving them to the browser - * available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor - */ - preprocessors: { './spec-bundle.js': ['coverage', 'webpack', 'sourcemap'] }, - - // Webpack Config at ./webpack.test.js webpack: testWebpackConfig, coverageReporter: { - dir : '../coverage/', - reporters: [ - { type: 'text-summary' }, - { type: 'json' }, - { type: 'html' } - ] + type: 'in-memory' }, - // Webpack please don't spam the console when running in karma! - webpackServer: { noInfo: true }, + remapCoverageReporter: { + 'text-summary': null, + json: './coverage/coverage.json', + html: './coverage/html' + }, - /* - * test results reporter to use - * - * possible values: 'dots', 'progress' - * available reporters: https://npmjs.org/browse/keyword/karma-reporter - */ - reporters: [ 'mocha', 'coverage' ], + webpackServer: { noInfo: true }, - // web server port - port: 9876, + reporters: ['mocha', 'coverage', 'remap-coverage'], - // enable / disable colors in the output (reporters and logs) colors: true, - /* - * level of logging - * possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG - */ - logLevel: config.LOG_INFO, - - // do not fail on empty test suite - //failOnEmptyTestSuite: false, + logLevel: config.LOG_WARN, - // enable / disable watching file and executing tests whenever any file changes autoWatch: false, - /* - * start these browsers - * available browser launchers: https://npmjs.org/browse/keyword/karma-launcher - */ browsers: [ - 'Chromium' + 'Chrome' ], customLaunchers: { Chrome_travis_ci: { - base: 'Chromium', - chromeDataDir: path.resolve(__dirname, '.chrome'), + base: 'Chrome', flags: ['--no-sandbox'] } }, - /* - * Continuous Integration mode - * if true, Karma captures browsers, runs the tests and exits - */ singleRun: true }; if(process.env.TRAVIS){ - configuration.browsers = ['Chrome_travis_ci']; + configuration.browsers = ['ChromeTravisCi']; } config.set(configuration); diff --git a/frontend/config/webpack.test.js b/frontend/config/webpack.test.js index d17a77a1..8bb6b2c9 100644 --- a/frontend/config/webpack.test.js +++ b/frontend/config/webpack.test.js @@ -32,12 +32,19 @@ module.exports = { }, { test: /\.ts$/, - loader: 'awesome-typescript-loader', - query: { - compilerOptions: { - removeComments: true - } - }, + use: [ + { + loader: 'awesome-typescript-loader', + query: { + sourceMap: false, + inlineSourceMap: true, + compilerOptions: { + removeComments: true + } + }, + }, + 'angular2-template-loader' + ], exclude: [/\.e2e\.ts$/] }, { @@ -45,6 +52,11 @@ module.exports = { loader: 'json-loader', exclude: [helpers.root('src/index.html')] }, + { + test: /\.scss$/, + use: ['raw-loader', 'sass-loader'], + exclude: [helpers.root('node_modules')] + }, { test: /\.css$/, loaders: ['to-string-loader', 'css-loader'], exclude: [helpers.root('src/index.html')] @@ -55,7 +67,8 @@ module.exports = { exclude: [helpers.root('src/index.html')] }, { - test: /\.(js|ts)$/, loader: 'istanbul-instrumenter-loader', + test: /\.(js|ts)$/, + loader: 'istanbul-instrumenter-loader', include: helpers.root('src'), enforce: 'post', exclude: [ @@ -79,6 +92,7 @@ module.exports = { new webpack.LoaderOptionsPlugin({ options: { + debug: false, tslint: { emitErrors: false, failOnHint: false, diff --git a/frontend/package.json b/frontend/package.json index 44627c85..9c955413 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -86,6 +86,7 @@ "karma-coverage": "^1.1.1", "karma-jasmine": "^1.1.0", "karma-mocha-reporter": "^2.2.2", + "karma-remap-coverage": "^0.1.4", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^2.0.2", "node-sass": "^4.5.0", From bfb1ea2ae1179f10583dc4a57aebb9e799758310 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 17:11:24 -0600 Subject: [PATCH 10/19] update ng2-bootstrap --- frontend/src/app/app.module.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index 4159f5e8..6af82e5f 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -3,8 +3,7 @@ import { LocationStrategy, HashLocationStrategy, APP_BASE_HREF } from '@angular/ import { BrowserModule } from '@angular/platform-browser'; import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { HttpModule } from '@angular/http'; -import { AlertModule, DatepickerModule } from 'ng2-bootstrap/ng2-bootstrap'; - +import { AlertModule, DatepickerModule } from 'ng2-bootstrap'; import { routing, appRouterProviders } from './app.routing'; import { AppComponent } from './app.component'; import { HelloComponent } from './hello/hello.component'; @@ -20,8 +19,8 @@ import { HomeComponent } from './home/home.component'; FormsModule, ReactiveFormsModule, HttpModule, - AlertModule, - DatepickerModule, + AlertModule.forRoot(), + DatepickerModule.forRoot(), routing], schemas: [CUSTOM_ELEMENTS_SCHEMA], providers: [ From 1f8ee82c6cdec27b8dbd8a097c7e951f77eac05a Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 19:21:47 -0600 Subject: [PATCH 11/19] add postcss fix for bootstrap-loader --- .bithoundrc | 0 .gitignore | 0 .travis.yml | 0 CHANGELOG.md | 0 LICENSE | 0 README.md | 0 backend/build.gradle | 0 .../abnd/SpringBootAngular2Application.java | 0 .../src/main/java/io/abnd/model/Message.java | 0 .../java/io/abnd/rest/TestController.java | 0 .../io/abnd/service/impl/TestServiceImpl.java | 0 .../io/abnd/service/intf/TestService.java | 0 .../src/main/resources/application.properties | 0 .../SpringBootAngular2ApplicationTests.java | 0 build.gradle | 0 frontend/.bootstraprc | 0 frontend/build.gradle | 0 frontend/config/helpers.js | 0 frontend/config/karma.conf.js | 0 frontend/config/spec-bundle.js | 0 frontend/config/webpack.common.js | 0 frontend/config/webpack.dev.js | 0 frontend/config/webpack.prod.js | 0 frontend/config/webpack.test.js | 0 frontend/package.json | 1 + frontend/scripts/fixBootstrapLoader.js | 29 ++++++++++++++++++ frontend/src/app/app.module.ts | 0 frontend/src/app/app.routing.ts | 0 frontend/src/app/app.spec.ts | 0 .../src/app/calendar/calendar.component.html | 0 .../src/app/calendar/calendar.component.ts | 0 frontend/src/app/calendar/calendar.scss | 0 frontend/src/app/hello/hello.component.html | 0 frontend/src/app/hello/hello.component.ts | 0 frontend/src/app/hello/hello.scss | 0 frontend/src/app/hello/hello.service.ts | 0 frontend/src/app/home/home.component.html | 0 frontend/src/app/home/home.component.ts | 0 frontend/src/app/home/home.scss | 0 frontend/src/assets/css/loading.css | 0 frontend/src/assets/img/app_logo.png | Bin frontend/src/assets/img/favicon.ico | Bin frontend/src/custom-typings.d.ts | 0 frontend/src/polyfills.ts | 0 frontend/src/vendor.ts | 0 frontend/tslint.json | 0 frontend/webpack.config.js | 0 gradle/wrapper/gradle-wrapper.jar | Bin gradle/wrapper/gradle-wrapper.properties | 0 gradlew.bat | 0 settings.gradle | 0 51 files changed, 30 insertions(+) mode change 100644 => 100755 .bithoundrc mode change 100644 => 100755 .gitignore mode change 100644 => 100755 .travis.yml mode change 100644 => 100755 CHANGELOG.md mode change 100644 => 100755 LICENSE mode change 100644 => 100755 README.md mode change 100644 => 100755 backend/build.gradle mode change 100644 => 100755 backend/src/main/java/io/abnd/SpringBootAngular2Application.java mode change 100644 => 100755 backend/src/main/java/io/abnd/model/Message.java mode change 100644 => 100755 backend/src/main/java/io/abnd/rest/TestController.java mode change 100644 => 100755 backend/src/main/java/io/abnd/service/impl/TestServiceImpl.java mode change 100644 => 100755 backend/src/main/java/io/abnd/service/intf/TestService.java mode change 100644 => 100755 backend/src/main/resources/application.properties mode change 100644 => 100755 backend/src/test/java/io/abnd/SpringBootAngular2ApplicationTests.java mode change 100644 => 100755 build.gradle mode change 100644 => 100755 frontend/.bootstraprc mode change 100644 => 100755 frontend/build.gradle mode change 100644 => 100755 frontend/config/helpers.js mode change 100644 => 100755 frontend/config/karma.conf.js mode change 100644 => 100755 frontend/config/spec-bundle.js mode change 100644 => 100755 frontend/config/webpack.common.js mode change 100644 => 100755 frontend/config/webpack.dev.js mode change 100644 => 100755 frontend/config/webpack.prod.js mode change 100644 => 100755 frontend/config/webpack.test.js mode change 100644 => 100755 frontend/package.json create mode 100644 frontend/scripts/fixBootstrapLoader.js mode change 100644 => 100755 frontend/src/app/app.module.ts mode change 100644 => 100755 frontend/src/app/app.routing.ts mode change 100644 => 100755 frontend/src/app/app.spec.ts mode change 100644 => 100755 frontend/src/app/calendar/calendar.component.html mode change 100644 => 100755 frontend/src/app/calendar/calendar.component.ts mode change 100644 => 100755 frontend/src/app/calendar/calendar.scss mode change 100644 => 100755 frontend/src/app/hello/hello.component.html mode change 100644 => 100755 frontend/src/app/hello/hello.component.ts mode change 100644 => 100755 frontend/src/app/hello/hello.scss mode change 100644 => 100755 frontend/src/app/hello/hello.service.ts mode change 100644 => 100755 frontend/src/app/home/home.component.html mode change 100644 => 100755 frontend/src/app/home/home.component.ts mode change 100644 => 100755 frontend/src/app/home/home.scss mode change 100644 => 100755 frontend/src/assets/css/loading.css mode change 100644 => 100755 frontend/src/assets/img/app_logo.png mode change 100644 => 100755 frontend/src/assets/img/favicon.ico mode change 100644 => 100755 frontend/src/custom-typings.d.ts mode change 100644 => 100755 frontend/src/polyfills.ts mode change 100644 => 100755 frontend/src/vendor.ts mode change 100644 => 100755 frontend/tslint.json mode change 100644 => 100755 frontend/webpack.config.js mode change 100644 => 100755 gradle/wrapper/gradle-wrapper.jar mode change 100644 => 100755 gradle/wrapper/gradle-wrapper.properties mode change 100644 => 100755 gradlew.bat mode change 100644 => 100755 settings.gradle diff --git a/.bithoundrc b/.bithoundrc old mode 100644 new mode 100755 diff --git a/.gitignore b/.gitignore old mode 100644 new mode 100755 diff --git a/.travis.yml b/.travis.yml old mode 100644 new mode 100755 diff --git a/CHANGELOG.md b/CHANGELOG.md old mode 100644 new mode 100755 diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 diff --git a/backend/build.gradle b/backend/build.gradle old mode 100644 new mode 100755 diff --git a/backend/src/main/java/io/abnd/SpringBootAngular2Application.java b/backend/src/main/java/io/abnd/SpringBootAngular2Application.java old mode 100644 new mode 100755 diff --git a/backend/src/main/java/io/abnd/model/Message.java b/backend/src/main/java/io/abnd/model/Message.java old mode 100644 new mode 100755 diff --git a/backend/src/main/java/io/abnd/rest/TestController.java b/backend/src/main/java/io/abnd/rest/TestController.java old mode 100644 new mode 100755 diff --git a/backend/src/main/java/io/abnd/service/impl/TestServiceImpl.java b/backend/src/main/java/io/abnd/service/impl/TestServiceImpl.java old mode 100644 new mode 100755 diff --git a/backend/src/main/java/io/abnd/service/intf/TestService.java b/backend/src/main/java/io/abnd/service/intf/TestService.java old mode 100644 new mode 100755 diff --git a/backend/src/main/resources/application.properties b/backend/src/main/resources/application.properties old mode 100644 new mode 100755 diff --git a/backend/src/test/java/io/abnd/SpringBootAngular2ApplicationTests.java b/backend/src/test/java/io/abnd/SpringBootAngular2ApplicationTests.java old mode 100644 new mode 100755 diff --git a/build.gradle b/build.gradle old mode 100644 new mode 100755 diff --git a/frontend/.bootstraprc b/frontend/.bootstraprc old mode 100644 new mode 100755 diff --git a/frontend/build.gradle b/frontend/build.gradle old mode 100644 new mode 100755 diff --git a/frontend/config/helpers.js b/frontend/config/helpers.js old mode 100644 new mode 100755 diff --git a/frontend/config/karma.conf.js b/frontend/config/karma.conf.js old mode 100644 new mode 100755 diff --git a/frontend/config/spec-bundle.js b/frontend/config/spec-bundle.js old mode 100644 new mode 100755 diff --git a/frontend/config/webpack.common.js b/frontend/config/webpack.common.js old mode 100644 new mode 100755 diff --git a/frontend/config/webpack.dev.js b/frontend/config/webpack.dev.js old mode 100644 new mode 100755 diff --git a/frontend/config/webpack.prod.js b/frontend/config/webpack.prod.js old mode 100644 new mode 100755 diff --git a/frontend/config/webpack.test.js b/frontend/config/webpack.test.js old mode 100644 new mode 100755 diff --git a/frontend/package.json b/frontend/package.json old mode 100644 new mode 100755 index 9c955413..907e7de1 --- a/frontend/package.json +++ b/frontend/package.json @@ -5,6 +5,7 @@ "version": "1.0.3", "license": "MIT", "scripts": { + "postinstall": "node scripts/fixBootstrapLoader.js", "rimraf": "rimraf", "webpack": "webpack", "webpack-dev-server": "webpack-dev-server", diff --git a/frontend/scripts/fixBootstrapLoader.js b/frontend/scripts/fixBootstrapLoader.js new file mode 100644 index 00000000..b822266b --- /dev/null +++ b/frontend/scripts/fixBootstrapLoader.js @@ -0,0 +1,29 @@ +/* fixBootstrapLoader.js */ +const fs = require('fs'); + +/** + * + * the use of postcss requires a postcss.config.js file + * be present, even if it is just an empty module export. + * + */ + +// create post css config +function createPostCssConfig() { + let file = 'node_modules/bootstrap-loader/postcss.config.js'; + let content = 'module.exports = {};\n'; + let fw = fs.createWriteStream(file); + + // log when finished + fw.on('finish', function() { + console.log('postcss bootstrap-loader fix applied'); + console.log(' -postcss.config.js has been created\n'); + }); + + // write and end + fw.write(content); + fw.end(); +} + +// run function +createPostCssConfig(); diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts old mode 100644 new mode 100755 diff --git a/frontend/src/app/app.routing.ts b/frontend/src/app/app.routing.ts old mode 100644 new mode 100755 diff --git a/frontend/src/app/app.spec.ts b/frontend/src/app/app.spec.ts old mode 100644 new mode 100755 diff --git a/frontend/src/app/calendar/calendar.component.html b/frontend/src/app/calendar/calendar.component.html old mode 100644 new mode 100755 diff --git a/frontend/src/app/calendar/calendar.component.ts b/frontend/src/app/calendar/calendar.component.ts old mode 100644 new mode 100755 diff --git a/frontend/src/app/calendar/calendar.scss b/frontend/src/app/calendar/calendar.scss old mode 100644 new mode 100755 diff --git a/frontend/src/app/hello/hello.component.html b/frontend/src/app/hello/hello.component.html old mode 100644 new mode 100755 diff --git a/frontend/src/app/hello/hello.component.ts b/frontend/src/app/hello/hello.component.ts old mode 100644 new mode 100755 diff --git a/frontend/src/app/hello/hello.scss b/frontend/src/app/hello/hello.scss old mode 100644 new mode 100755 diff --git a/frontend/src/app/hello/hello.service.ts b/frontend/src/app/hello/hello.service.ts old mode 100644 new mode 100755 diff --git a/frontend/src/app/home/home.component.html b/frontend/src/app/home/home.component.html old mode 100644 new mode 100755 diff --git a/frontend/src/app/home/home.component.ts b/frontend/src/app/home/home.component.ts old mode 100644 new mode 100755 diff --git a/frontend/src/app/home/home.scss b/frontend/src/app/home/home.scss old mode 100644 new mode 100755 diff --git a/frontend/src/assets/css/loading.css b/frontend/src/assets/css/loading.css old mode 100644 new mode 100755 diff --git a/frontend/src/assets/img/app_logo.png b/frontend/src/assets/img/app_logo.png old mode 100644 new mode 100755 diff --git a/frontend/src/assets/img/favicon.ico b/frontend/src/assets/img/favicon.ico old mode 100644 new mode 100755 diff --git a/frontend/src/custom-typings.d.ts b/frontend/src/custom-typings.d.ts old mode 100644 new mode 100755 diff --git a/frontend/src/polyfills.ts b/frontend/src/polyfills.ts old mode 100644 new mode 100755 diff --git a/frontend/src/vendor.ts b/frontend/src/vendor.ts old mode 100644 new mode 100755 diff --git a/frontend/tslint.json b/frontend/tslint.json old mode 100644 new mode 100755 diff --git a/frontend/webpack.config.js b/frontend/webpack.config.js old mode 100644 new mode 100755 diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar old mode 100644 new mode 100755 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties old mode 100644 new mode 100755 diff --git a/gradlew.bat b/gradlew.bat old mode 100644 new mode 100755 diff --git a/settings.gradle b/settings.gradle old mode 100644 new mode 100755 From 1864bdb650dcc51aad374c9f2266dfcdcf87cad9 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 19:47:38 -0600 Subject: [PATCH 12/19] fix travisci chrome browser config --- frontend/config/karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/config/karma.conf.js b/frontend/config/karma.conf.js index d9074382..8a953333 100755 --- a/frontend/config/karma.conf.js +++ b/frontend/config/karma.conf.js @@ -50,7 +50,7 @@ module.exports = function(config) { }; if(process.env.TRAVIS){ - configuration.browsers = ['ChromeTravisCi']; + configuration.browsers = ['Chrome_travis_ci']; } config.set(configuration); From 52ef3546f70520a6538559f48e3fd30fc6d9e668 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 19:56:28 -0600 Subject: [PATCH 13/19] incrememnt project minor version --- backend/build.gradle | 2 +- frontend/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/build.gradle b/backend/build.gradle index fae4806a..a07deeae 100755 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -36,7 +36,7 @@ idea { jar { baseName = 'spring-boot-angular2' - version = '1.0.4' + version = '1.1.0' } sourceCompatibility = 1.8 diff --git a/frontend/package.json b/frontend/package.json index 907e7de1..26c9410e 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,7 +2,7 @@ "name": "spring-boot-angular2", "description": "Spring Boot backend, Angular2 frontend with Webpack, Typescript, Sass, Bootstrap4, Karma, Jasmine", "private": true, - "version": "1.0.3", + "version": "1.1.0", "license": "MIT", "scripts": { "postinstall": "node scripts/fixBootstrapLoader.js", From 58dda80458bb32fd90a347038e4edde5a99c66a4 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 20:47:35 -0600 Subject: [PATCH 14/19] use new @angularclass/hmr --- frontend/package.json | 5 ++- frontend/scripts/fixBootstrapLoader.js | 0 frontend/src/app/environment.ts | 60 ++++++++++++++++++++++++++ frontend/src/main.ts | 24 ++++------- frontend/src/vendor.ts | 2 +- vendor.ts | 21 +++++++++ 6 files changed, 93 insertions(+), 19 deletions(-) mode change 100644 => 100755 frontend/scripts/fixBootstrapLoader.js create mode 100755 frontend/src/app/environment.ts create mode 100755 vendor.ts diff --git a/frontend/package.json b/frontend/package.json index 26c9410e..5a1f8704 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,7 +2,7 @@ "name": "spring-boot-angular2", "description": "Spring Boot backend, Angular2 frontend with Webpack, Typescript, Sass, Bootstrap4, Karma, Jasmine", "private": true, - "version": "1.1.0", + "version": "1.0.3", "license": "MIT", "scripts": { "postinstall": "node scripts/fixBootstrapLoader.js", @@ -63,7 +63,8 @@ "@types/node": "^7.0.8", "@types/source-map": "^0.5.0", "@types/webpack": "^2.2.11", - "angular2-hmr": "~0.8.1", + "@angularclass/hmr": "^1.2.2", + "@angularclass/hmr-loader": "^3.0.1", "angular2-template-loader": "^0.6.2", "autoprefixer": "^6.7.6", "awesome-typescript-loader": "3.1.2", diff --git a/frontend/scripts/fixBootstrapLoader.js b/frontend/scripts/fixBootstrapLoader.js old mode 100644 new mode 100755 diff --git a/frontend/src/app/environment.ts b/frontend/src/app/environment.ts new file mode 100755 index 00000000..a5ae0596 --- /dev/null +++ b/frontend/src/app/environment.ts @@ -0,0 +1,60 @@ +// Angular 2 +import { + enableDebugTools, + disableDebugTools +} from '@angular/platform-browser'; +import { + ApplicationRef, + enableProdMode +} from '@angular/core'; +// Environment Providers +let PROVIDERS: any[] = [ + // common env directives +]; + +// Angular debug tools in the dev console +// https://github.com/angular/angular/blob/86405345b781a9dc2438c0fbe3e9409245647019/TOOLS_JS.md +let _decorateModuleRef = (value: T): T => { return value; }; + +if ('production' === ENV) { + enableProdMode(); + + // Production + _decorateModuleRef = (modRef: any) => { + disableDebugTools(); + + return modRef; + }; + + PROVIDERS = [ + ...PROVIDERS, + // custom providers in production + ]; + +} else { + + _decorateModuleRef = (modRef: any) => { + const appRef = modRef.injector.get(ApplicationRef); + const cmpRef = appRef.components[0]; + + let _ng = ( window).ng; + enableDebugTools(cmpRef); + ( window).ng.probe = _ng.probe; + ( window).ng.coreTokens = _ng.coreTokens; + return modRef; + }; + + // Development + PROVIDERS = [ + ...PROVIDERS, + // custom providers in development + ]; + +} + +export const decorateModuleRef = _decorateModuleRef; + +export const ENV_PROVIDERS = [ + ...PROVIDERS +]; + diff --git a/frontend/src/main.ts b/frontend/src/main.ts index d3ef9aed..c67865de 100755 --- a/frontend/src/main.ts +++ b/frontend/src/main.ts @@ -1,21 +1,13 @@ import {platformBrowserDynamic} from '@angular/platform-browser-dynamic'; - +import { bootloader } from '@angularclass/hmr'; +import { decorateModuleRef } from './app/environment'; import {AppModule} from './app/app.module'; -export function main(initialHmrState?: any): Promise { - return platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); +export function main(): Promise { + return platformBrowserDynamic() + .bootstrapModule(AppModule) + .then(decorateModuleRef) + .catch((err) => console.error(err)); } -/* - * Hot Module Reload - * experimental version by @gdi2290 - */ -if ( ENV === 'development' && HMR === true) { - // activate hot module reload - let ngHmr = require('angular2-hmr'); - ngHmr.hotModuleReplacement(main, module); -} else { - // bootstrap when document is ready - document.addEventListener('DOMContentLoaded', () => main()); -} +bootloader(main); diff --git a/frontend/src/vendor.ts b/frontend/src/vendor.ts index 0a3a4f67..28116fb3 100755 --- a/frontend/src/vendor.ts +++ b/frontend/src/vendor.ts @@ -17,5 +17,5 @@ if (ENV === 'production') { // prod } else { // dev - require('angular2-hmr'); + require('@angularclass/hmr'); } diff --git a/vendor.ts b/vendor.ts new file mode 100755 index 00000000..28116fb3 --- /dev/null +++ b/vendor.ts @@ -0,0 +1,21 @@ +// angular2 +import '@angular/platform-browser'; +import '@angular/platform-browser-dynamic'; +import '@angular/core'; +import '@angular/common'; +import '@angular/forms'; +import '@angular/http'; +import '@angular/router'; + +import 'rxjs'; +import 'jquery'; +import 'bootstrap-loader'; +import 'font-awesome-sass-loader'; +import 'lodash'; + +if (ENV === 'production') { + // prod +} else { + // dev + require('@angularclass/hmr'); +} From c932fc57818f262090189e63ea5bddbba47aefbe Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 21:03:39 -0600 Subject: [PATCH 15/19] update changelog --- CHANGELOG.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a9ac04a..cf3ae128 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,18 @@ all notable changes to this project will be documented in this file. items under contributors: please follow the recommendations outlined at [keepachangelog.com](http://keepachangelog.com/). please use the existing headings and styling as a guide, and add a link for the version diff at the bottom of the file. also, please update the `unreleased` link to compare to the latest release version. ## [unreleased] +## [1.1.0] - 2017-03-10 +#### project updated to v1.1.0 +- [v1.1.0](https://github.com/borysn/spring-boot-angular2/releases/tag/1.1.0) released +- package upgrades & updates + - [x] upgrade angular to v2.4.9 + - [x] upgrade webpack to v2 & update config + - [x] remove deprecated angular-hmr, replace with @angularclass/hmr + - [x] upgrade front/backend dependencies + - [x] add postcss fix for bootstrap-loader + - [x] upgrade gradle wrapper to v3.4 + - [x] update tslint.json + ## [1.0.3] - 2016-09-15 #### project updated to v1.0.3 - [v1.0.3](https://github.com/borysn/spring-boot-angular2/releases/tag/1.0.3) released @@ -47,4 +59,4 @@ contributors: please follow the recommendations outlined at [keepachangelog.com] [1.0.3]: https://github.com/borysn/spring-boot-angular2/compare/1.0.2...1.0.3 [1.0.2]: https://github.com/borysn/spring-boot-angular2/compare/1.0.1...1.0.2 [1.0.1]: https://github.com/borysn/spring-boot-angular2/compare/1.0.0...1.0.1 -[1.0.0]: https://github.com/borysn/spring-boot-angular2/compare/0.1.0...1.0.0 \ No newline at end of file +[1.0.0]: https://github.com/borysn/spring-boot-angular2/compare/0.1.0...1.0.0 From cca6d0bee5ffb705948351d2a3fc7a5384b53d1e Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 21:05:37 -0600 Subject: [PATCH 16/19] update changelog --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cf3ae128..5e671875 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,7 +55,8 @@ contributors: please follow the recommendations outlined at [keepachangelog.com] - [v0.1.0](https://github.com/borysn/spring-boot-angular2/releases/tag/0.1.0) released - creatd a [new branch](https://github.com/borysn/spring-boot-angular2/tree/old-version) for the old version just'n'case anyone wanted that code base. -[Unreleased]: https://github.com/borysn/spring-boot-angular2/compare/1.0.3...master +[Unreleased]: https://github.com/borysn/spring-boot-angular2/compare/1.1.0...master +[1.1.0]: https://github.com/borysn/sprint-boot-angular2/compare/1.0.3...1.1.0 [1.0.3]: https://github.com/borysn/spring-boot-angular2/compare/1.0.2...1.0.3 [1.0.2]: https://github.com/borysn/spring-boot-angular2/compare/1.0.1...1.0.2 [1.0.1]: https://github.com/borysn/spring-boot-angular2/compare/1.0.0...1.0.1 From ef33af560d69f2e02c2294873be703750f4bc182 Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 21:06:55 -0600 Subject: [PATCH 17/19] update changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e671875..64d495e1 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,7 +56,7 @@ contributors: please follow the recommendations outlined at [keepachangelog.com] - creatd a [new branch](https://github.com/borysn/spring-boot-angular2/tree/old-version) for the old version just'n'case anyone wanted that code base. [Unreleased]: https://github.com/borysn/spring-boot-angular2/compare/1.1.0...master -[1.1.0]: https://github.com/borysn/sprint-boot-angular2/compare/1.0.3...1.1.0 +[1.1.0]: https://github.com/borysn/spring-boot-angular2/compare/1.0.3...1.1.0 [1.0.3]: https://github.com/borysn/spring-boot-angular2/compare/1.0.2...1.0.3 [1.0.2]: https://github.com/borysn/spring-boot-angular2/compare/1.0.1...1.0.2 [1.0.1]: https://github.com/borysn/spring-boot-angular2/compare/1.0.0...1.0.1 From e463ed511d2b085a4e3e6a38fc1a03a134ce210d Mon Sep 17 00:00:00 2001 From: borysn Date: Fri, 10 Mar 2017 22:04:47 -0600 Subject: [PATCH 18/19] add bithound overall score to README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2c59794a..6e4b53fd 100755 --- a/README.md +++ b/README.md @@ -1,5 +1,6 @@ [![build status](https://travis-ci.org/borysn/spring-boot-angular2.svg?branch=master)](https://travis-ci.org/borysn/spring-boot-angular2) [![gitter](https://badges.gitter.im/borysn/spring-boot-angular2.svg)](https://gitter.im/borysn/spring-boot-angular2?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) +[![bitHound Overall Score](https://www.bithound.io/github/borysn/spring-boot-angular2/badges/score.svg)](https://www.bithound.io/github/borysn/spring-boot-angular2) [![bithound dependencies](https://www.bithound.io/github/borysn/spring-boot-angular2/badges/dependencies.svg)](https://www.bithound.io/github/borysn/spring-boot-angular2/master/dependencies/npm) [![bitHound Dev Dependencies](https://www.bithound.io/github/borysn/spring-boot-angular2/badges/devDependencies.svg)](https://www.bithound.io/github/borysn/spring-boot-angular2/master/dependencies/npm) [![bitHound Code](https://www.bithound.io/github/borysn/spring-boot-angular2/badges/code.svg)](https://www.bithound.io/github/borysn/spring-boot-angular2) From 819fc7b3aa45f5a48c14c814481407d8bb2332b8 Mon Sep 17 00:00:00 2001 From: borysn Date: Tue, 14 Mar 2017 17:46:19 -0500 Subject: [PATCH 19/19] remove unecessary file --- vendor.ts | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100755 vendor.ts diff --git a/vendor.ts b/vendor.ts deleted file mode 100755 index 28116fb3..00000000 --- a/vendor.ts +++ /dev/null @@ -1,21 +0,0 @@ -// angular2 -import '@angular/platform-browser'; -import '@angular/platform-browser-dynamic'; -import '@angular/core'; -import '@angular/common'; -import '@angular/forms'; -import '@angular/http'; -import '@angular/router'; - -import 'rxjs'; -import 'jquery'; -import 'bootstrap-loader'; -import 'font-awesome-sass-loader'; -import 'lodash'; - -if (ENV === 'production') { - // prod -} else { - // dev - require('@angularclass/hmr'); -}