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 index 4a9ac04a..64d495e1 --- 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 @@ -43,8 +55,9 @@ 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/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 -[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 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 index 2c59794a..6e4b53fd --- 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) diff --git a/backend/build.gradle b/backend/build.gradle old mode 100644 new mode 100755 index 31a6fd78..a07deeae --- 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.1.0' } 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.RELEASE') // testing - testCompile('org.springframework.boot:spring-boot-starter-test') + testCompile('org.springframework.boot:spring-boot-starter-test:1.5.2.RELEASE') } // run spring boot app 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 index 4835fbc9..0039feb0 --- 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/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 index 351156cb..37df1a22 --- 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 old mode 100644 new mode 100755 index 9d4c4504..8a953333 --- a/frontend/config/karma.conf.js +++ b/frontend/config/karma.conf.js @@ -1,100 +1,51 @@ -/** - * @author: @AngularClass - */ -var path = require('path'); +/* karma.conf.js */ +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 }; @@ -103,4 +54,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 old mode 100644 new mode 100755 index 3a6d9e18..a78bbc1e --- 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 old mode 100644 new mode 100755 index 03b999fe..e2f9c6ee --- 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 old mode 100644 new mode 100755 index 38ef027b..a3d48fd2 --- 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: { @@ -46,12 +53,11 @@ module.exports = webpackMerge(commonConfig, { aggregateTimeout: 300, poll: 1000 }, - outputPath: helpers.root('dist') }, 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 old mode 100644 new mode 100755 index 5890b33d..b05e54f3 --- 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 old mode 100644 new mode 100755 index 7455a6e0..8bb6b2c9 --- a/frontend/config/webpack.test.js +++ b/frontend/config/webpack.test.js @@ -1,195 +1,85 @@ -/** - * @author: @AngularClass - */ - +/* webpack.test.js */ +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 - - } - }, + use: [ + { + loader: 'awesome-typescript-loader', + query: { + sourceMap: false, + inlineSourceMap: true, + compilerOptions: { + removeComments: true + } + }, + }, + 'angular2-template-loader' + ], 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: /\.(js|ts)$/, loader: 'istanbul-instrumenter-loader', + 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')] + }, + { + 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, @@ -200,34 +90,25 @@ module.exports = { } }), - + new webpack.LoaderOptionsPlugin({ + options: { + debug: false, + 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 } -}; \ No newline at end of file +}; diff --git a/frontend/package.json b/frontend/package.json old mode 100644 new mode 100755 index 3d1e3db0..5a1f8704 --- 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", @@ -35,78 +36,81 @@ "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", - "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", + "@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", + "@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", + "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-remap-coverage": "^0.1.4", "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": "^5.2.16", + "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 +} diff --git a/frontend/scripts/fixBootstrapLoader.js b/frontend/scripts/fixBootstrapLoader.js new file mode 100755 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 index 4159f5e8..6af82e5f --- 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: [ 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/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/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/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/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 index 0a3a4f67..28116fb3 --- 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/frontend/tslint.json b/frontend/tslint.json old mode 100644 new mode 100755 index 260fbb53..9373d14e --- 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 +} 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 index 3baa851b..236b8a27 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties old mode 100644 new mode 100755 index ec3424ad..60a28fa0 --- 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 old mode 100644 new mode 100755 index f6d5974e..e95643d6 --- 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 diff --git a/settings.gradle b/settings.gradle old mode 100644 new mode 100755