diff --git a/README.md b/README.md index 30c4a5bfda..c2fe1010cb 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ Angular Electron Dream Starter

-# Angular Electron Dream Starter with Webpack 2 +# Angular Electron Dream Starter with Webpack -> A starter kit for [Electron](https://electron.atom.io) and [Angular 4](https://angular.io) featuring [Webpack 2](https://webpack.js.org), [AoT](https://angular.io/docs/ts/latest/cookbook/aot-compiler.html) compile, [NGRX Store](https://github.com/ngrx/store), Electron unit tests, native E2E tests in [Spectron](http://electron.atom.io/spectron/), and a powerful development workflow with [Hot Module Replacement](https://webpack.github.io/docs/hot-module-replacement-with-webpack.html) and [Electron Connect](https://github.com/Quramy/electron-connect). +> A starter kit for [Electron](https://electron.atom.io) and [Angular 4](https://angular.io) featuring [Webpack 3](https://webpack.js.org), [AoT](https://angular.io/docs/ts/latest/cookbook/aot-compiler.html) compile, [@ngrx 4](https://github.com/ngrx/platform), Electron unit tests, native E2E tests in [Spectron](http://electron.atom.io/spectron/), and a powerful development workflow with [Hot Module Replacement](https://webpack.github.io/docs/hot-module-replacement-with-webpack.html) and [Electron Connect](https://github.com/Quramy/electron-connect). -Forked from [AngularClass/angular2-webpack-starter](https://github.com/AngularClass/angular2-webpack-starter). +Forked from [AngularClass/angular-starter](https://github.com/AngularClass/angular-starter). I designed this seed repo to demonstrate an ideal development workflow and the most powerful tools for developing desktop applications using Angular and Electron. `npm start` launches a powerful development workflow which uses Hot Module Replacement (HMR) for nearly instant updates inside the browser window, while also restarting your app automatically every time you update the code of the main process. diff --git a/config/webpack.dev.js b/config/webpack.dev.js index a38eb24f41..ba3a4b8142 100644 --- a/config/webpack.dev.js +++ b/config/webpack.dev.js @@ -167,7 +167,6 @@ module.exports = function (options) { '@angular/platform-browser-dynamic', '@angular/router', '@angularclass/hmr', - '@ngrx/core', '@ngrx/effects', '@ngrx/router-store', '@ngrx/store', diff --git a/config/webpack.prod.js b/config/webpack.prod.js index 6be8585b6b..112c20bc11 100644 --- a/config/webpack.prod.js +++ b/config/webpack.prod.js @@ -11,10 +11,12 @@ const commonConfig = require('./webpack.common.js'); // the settings that are co */ const DefinePlugin = require('webpack/lib/DefinePlugin'); const ExtractTextPlugin = require('extract-text-webpack-plugin'); +const HashedModuleIdsPlugin = require('webpack/lib/HashedModuleIdsPlugin'); const IgnorePlugin = require('webpack/lib/IgnorePlugin'); const LoaderOptionsPlugin = require('webpack/lib/LoaderOptionsPlugin'); const NormalModuleReplacementPlugin = require('webpack/lib/NormalModuleReplacementPlugin'); const ProvidePlugin = require('webpack/lib/ProvidePlugin'); +const ModuleConcatenationPlugin = require('webpack/lib/optimize/ModuleConcatenationPlugin'); const UglifyJsPlugin = require('webpack/lib/optimize/UglifyJsPlugin'); const OptimizeJsPlugin = require('optimize-js-plugin'); @@ -125,6 +127,28 @@ module.exports = function (env) { */ plugins: [ + /** + * Scope Hoisting is the flagship feature of webpack 3. One of webpack’s + * trade-offs when bundling was that each module in your bundle would be + * wrapped in individual function closures. These wrapper functions made + * it slower for your JavaScript to execute in the browser. In comparison, + * tools like Closure Compiler and RollupJS ‘hoist’ or concatenate the + * scope of all your modules into one closure and allow for your code to + * have a faster execution time in the browser. + * + * See: https://webpack.js.org/plugins/module-concatenation-plugin/ + */ + new ModuleConcatenationPlugin(), + + /** + * This plugin will cause hashes to be based on the relative path of the + * module, generating a four character string as the module id. Suggested + * for use in production. + * + * See: https://webpack.js.org/plugins/hashed-module-ids-plugin/ + */ + new HashedModuleIdsPlugin(), + /** * Webpack plugin to optimize a JavaScript file for faster initial load * by wrapping eagerly-invoked functions. diff --git a/package.json b/package.json index a60a0851ec..c352ec1527 100644 --- a/package.json +++ b/package.json @@ -25,13 +25,13 @@ "build:renderer:aot:prod": "webpack --config config/webpack.prod.js --progress --profile --bail", "build:renderer:dev": "webpack --config config/webpack.dev.js --progress --profile", "build:renderer:prod": "webpack --config config/webpack.prod.js --progress --profile --bail", - "build": "npm run build:prod", + "build": "npm run build:aot", "ci:aot": "npm run test && npm run build:aot && npm run e2e", "ci:jit": "npm run test && npm run build:prod && npm run e2e", "ci:nobuild": "npm run test && npm run e2e", "ci:testall": "npm run test && npm run build:prod && npm run e2e && npm run build:aot && npm run e2e", "ci:travis": "npm run test && npm run build:dev && npm run e2e && npm run build:prod && npm run e2e && npm run build:aot && npm run e2e", - "ci": "npm run ci:testall", + "ci": "npm run ci:aot", "clean:aot": "rimraf compiled", "clean:appdata": "electron config/clean-app-data", "clean:build": "rimraf dist dev compiled *.temp.json", @@ -90,17 +90,16 @@ "@angularclass/conventions-loader": "^1.0.13", "@angularclass/hmr": "~2.1.3", "@angularclass/hmr-loader": "~3.0.2", - "@ngrx/core": "^1.2.0", - "@ngrx/effects": "^2.0.3", - "@ngrx/router-store": "^1.2.6", - "@ngrx/store": "^2.2.2", - "@ngrx/store-devtools": "^3.2.4", + "@ngrx/effects": "^4.0.5", + "@ngrx/router-store": "^4.0.4", + "@ngrx/store": "^4.0.3", + "@ngrx/store-devtools": "^4.0.0", "@types/chai": "^4.0.0", - "@types/chai-as-promised": "^0.0.31", + "@types/chai-as-promised": "^7.1.0", "@types/hammerjs": "^2.0.34", "@types/jasmine": "^2.5.51", "@types/mocha": "^2.2.41", - "@types/node": "^7.0.28", + "@types/node": "^8.0.30", "@types/source-map": "^0.5.0", "@types/uglify-js": "^2.6.29", "@types/webdriverio": "^4.7.0", @@ -123,7 +122,7 @@ "electron-debug": "^1.4.0", "exports-loader": "^0.6.4", "expose-loader": "^0.7.3", - "express": "^4.15.3", + "express": "^4.15.5", "extract-text-webpack-plugin": "~3.0.0", "file-loader": "^0.11.2", "find-root": "^1.0.0", @@ -146,8 +145,8 @@ "ncp": "^2.0.0", "ng-router-loader": "^2.1.0", "ngc-webpack": "~3.2.2", - "ngrx-store-freeze": "^0.1.9", - "ngrx-store-logger": "^0.1.8", + "ngrx-store-freeze": "^0.2.0", + "ngrx-store-logger": "^0.2.0", "node-sass": "^4.5.3", "npm-run-all": "^4.0.2", "optimize-js-plugin": "0.0.4", diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index fba2439bb9..8cf8e3de68 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -10,8 +10,7 @@ import { StoreModule } from '@ngrx/store'; // Load the implementations that should be tested import { AppComponent } from './app.component'; -import { rootReducer } from './reducers'; -import { HomeActions } from './home/home.actions'; +import { reducers } from './reducers'; describe(`App`, () => { let comp: AppComponent; @@ -21,9 +20,9 @@ describe(`App`, () => { beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ AppComponent ], - imports: [ StoreModule.provideStore(rootReducer) ], + imports: [ StoreModule.forRoot(reducers) ], schemas: [NO_ERRORS_SCHEMA], - providers: [HomeActions] + providers: [] }) .compileComponents(); // compile template and css })); diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 094e3a32d9..67ee01a2db 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -12,7 +12,6 @@ import { shell } from 'electron'; import { AppState } from './reducers'; import { Store } from '@ngrx/store'; import { HomeState } from './home/home.reducer'; -import { HomeActions } from './home/home.actions'; /* * App Component @@ -72,10 +71,7 @@ export class AppComponent implements OnInit { public url = 'https://github.com/colinskow/angular-electron-dream-starter'; public state$: Observable; - constructor( - private store: Store, - private homeActions: HomeActions, - ) { + constructor(private store: Store) { this.state$ = this.store.select(state => state.home); } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 5e4f7ef22d..fec2457a70 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -16,7 +16,10 @@ import { } from '@angular/router'; import { EffectsModule } from '@ngrx/effects'; -import { RouterStoreModule } from '@ngrx/router-store'; +import { + RouterStateSerializer, + StoreRouterConnectingModule +} from '@ngrx/router-store'; import { StoreModule } from '@ngrx/store'; import { Store } from '@ngrx/store'; import { StoreDevtoolsModule } from '@ngrx/store-devtools'; @@ -26,14 +29,17 @@ import { StoreDevtoolsModule } from '@ngrx/store-devtools'; */ import { ENV_PROVIDERS } from './environment'; import { ROUTES } from './app.routes'; -import { rootReducer } from './reducers'; +import { + reducers, + metaReducers, + AppState, + CustomSerializer +} from './reducers'; // App is our top level component import { AppComponent } from './app.component'; import { APP_BASE_HREF } from '@angular/common'; import { APP_RESOLVER_PROVIDERS } from './app.resolver'; -import { AppState } from './reducers'; import { HomeComponent } from './home'; -import { HomeActions } from './home/home.actions'; import { AboutComponent } from './about'; import { NoContentComponent } from './no-content'; import { XLargeDirective } from './home/x-large'; @@ -46,8 +52,8 @@ declare const ENV: string; // Application wide providers const APP_PROVIDERS = [ ...APP_RESOLVER_PROVIDERS, - HomeActions, - { provide: APP_BASE_HREF, useValue : '/' } + { provide: APP_BASE_HREF, useValue : '/' }, + { provide: RouterStateSerializer, useClass: CustomSerializer } ]; interface InternalStateType { @@ -65,7 +71,10 @@ let CONDITIONAL_IMPORTS = []; if (ENV === 'development') { console.log('loading react devtools'); - CONDITIONAL_IMPORTS.push(StoreDevtoolsModule.instrumentOnlyWithExtension()); + CONDITIONAL_IMPORTS.push(StoreDevtoolsModule.instrument()); + // AoT won't allow metaReducers, so we need to add them conditionally + // this should override the previous StoreModule declaration + CONDITIONAL_IMPORTS.push(StoreModule.forRoot(reducers, { metaReducers })); } /** @@ -84,8 +93,8 @@ if (ENV === 'development') { BrowserModule, FormsModule, HttpModule, - StoreModule.provideStore(rootReducer), - RouterStoreModule.connectRouter(), + StoreModule.forRoot(reducers), + StoreRouterConnectingModule, RouterModule.forRoot(ROUTES, { useHash: true, preloadingStrategy: PreloadAllModules }), ...CONDITIONAL_IMPORTS ], diff --git a/src/app/home/home.actions.ts b/src/app/home/home.actions.ts index 075d8a6a78..374a5b24b7 100644 --- a/src/app/home/home.actions.ts +++ b/src/app/home/home.actions.ts @@ -2,15 +2,12 @@ import { Injectable } from '@angular/core'; import { Response } from '@angular/http'; import { Action } from '@ngrx/store'; -@Injectable() +export const SET_VALUE = '[Home] Set Value'; -export class HomeActions { +export class SetValue implements Action { + public readonly type = SET_VALUE; - public static SET_VALUE = '[Home] Set Value'; - public setValue(value: string): Action { - return { - type: HomeActions.SET_VALUE, - payload: value - }; - } + constructor(public payload: string) {} } + +export type Actions = SetValue; diff --git a/src/app/home/home.component.spec.ts b/src/app/home/home.component.spec.ts index 46c9694d36..7ba906d32c 100644 --- a/src/app/home/home.component.spec.ts +++ b/src/app/home/home.component.spec.ts @@ -16,8 +16,7 @@ import { MockBackend } from '@angular/http/testing'; import { StoreModule } from '@ngrx/store'; // Load the implementations that should be tested -import { rootReducer } from '../reducers'; -import { HomeActions } from './home.actions'; +import { reducers } from '../reducers'; import { HomeComponent } from './home.component'; import { Title } from './title'; @@ -29,7 +28,7 @@ describe(`Home`, () => { beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [HomeComponent], - imports: [StoreModule.provideStore(rootReducer)], + imports: [StoreModule.forRoot(reducers)], schemas: [NO_ERRORS_SCHEMA], providers: [ BaseRequestOptions, @@ -41,7 +40,6 @@ describe(`Home`, () => { }, deps: [MockBackend, BaseRequestOptions] }, - HomeActions, Title, ] }) diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 430ce0da9c..7e3635ef04 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -7,7 +7,7 @@ import { ipcRenderer } from 'electron'; import { Store } from '@ngrx/store'; import { AppState } from '../reducers'; import { HomeState } from './home.reducer'; -import { HomeActions } from './home.actions'; +import * as home from './home.actions'; import { Title } from './title'; import { XLargeDirective } from './x-large'; @@ -31,7 +31,6 @@ export class HomeComponent implements OnInit { // TypeScript public modifiers constructor( private store: Store, - private homeActions: HomeActions, public title: Title ) {} @@ -42,7 +41,7 @@ export class HomeComponent implements OnInit { public submitState(value: string) { console.log('submitState', value); - this.store.dispatch(this.homeActions.setValue(value)); + this.store.dispatch(new home.SetValue(value)); this.localState.value = ''; } diff --git a/src/app/home/home.reducer.ts b/src/app/home/home.reducer.ts index 87525bb890..760c53bbd8 100644 --- a/src/app/home/home.reducer.ts +++ b/src/app/home/home.reducer.ts @@ -1,6 +1,6 @@ import { Action } from '@ngrx/store'; -import { HomeActions } from './home.actions'; +import * as home from './home.actions'; export interface HomeState { value?: string; @@ -8,10 +8,10 @@ export interface HomeState { export const initialState: HomeState = {}; -export function homeReducer(state = initialState, action: Action): HomeState { +export function homeReducer(state = initialState, action: home.Actions): HomeState { switch (action.type) { - case HomeActions.SET_VALUE: { + case home.SET_VALUE: { return Object.assign({}, state, { value: action.payload }); diff --git a/src/app/reducers/index.ts b/src/app/reducers/index.ts index fb4f510ebc..89d13be66b 100644 --- a/src/app/reducers/index.ts +++ b/src/app/reducers/index.ts @@ -1,21 +1,27 @@ /* - * Reducers: this file contains boilerplate code to handle debugging - * in development mode, as well as integrate the store with HMR. - * Customize your own reducers in `root.ts`. + * Reducers: YOU LIKELY WON'T NEED TO EDIT THIS FILE. + * This is boilerplate code to connect your store to debug tools and HMR. + * Customize your root reducer and AppState in `root.ts`. */ -import { compose } from '@ngrx/core/compose'; -import { ActionReducer, combineReducers } from '@ngrx/store'; +import { compose } from '@ngrx/store'; +import { ActionReducer, ActionReducerMap, MetaReducer } from '@ngrx/store'; +import { Params, RouterStateSnapshot } from '@angular/router'; +import { + routerReducer, + RouterReducerState, + RouterStateSerializer +} from '@ngrx/router-store'; +// storeFreeze is currently conflicting with @ngrx/router-store import { storeFreeze } from 'ngrx-store-freeze'; import { storeLogger } from 'ngrx-store-logger'; -import { reducers } from './root'; - +import { AppState } from './root'; export { reducers, AppState } from './root'; declare const ENV: string; // Generate a reducer to set the root state in dev mode for HMR function stateSetter(reducer: ActionReducer): ActionReducer { - return function(state, action) { + return function(state, action: any) { if (action.type === 'SET_ROOT_STATE') { return action.payload; } @@ -23,15 +29,29 @@ function stateSetter(reducer: ActionReducer): ActionReducer { }; } -const DEV_REDUCERS = [stateSetter, storeFreeze, storeLogger()]; +function logger(reducer: ActionReducer): any { + return storeLogger()(reducer); +} + +export const metaReducers = ENV === 'development' + ? [stateSetter, logger, storeFreeze] + : []; + +export interface RouterStateUrl { + url: string; + queryParams: Params; +} -const developmentReducer: any = compose(...DEV_REDUCERS, combineReducers)(reducers); -const productionReducer = compose(combineReducers)(reducers); +// The CustomSerializer improves @ngrx performance and allows storeFreeze +// to co-exist with the router-store. +// See: https://github.com/ngrx/platform/blob/master/docs/router-store/api.md +export class CustomSerializer implements RouterStateSerializer { + public serialize(routerState: RouterStateSnapshot): RouterStateUrl { + const { url } = routerState; + const queryParams = routerState.root.queryParams; -export function rootReducer(state: any, action: any) { - if (ENV !== 'development') { - return productionReducer(state, action); - } else { - return developmentReducer(state, action); + // Only return an object including the URL and query params + // instead of the entire snapshot + return { url, queryParams }; } } diff --git a/src/app/reducers/root.ts b/src/app/reducers/root.ts index 7761aa07d2..b74badabde 100644 --- a/src/app/reducers/root.ts +++ b/src/app/reducers/root.ts @@ -1,8 +1,8 @@ -import { routerReducer, RouterState } from '@ngrx/router-store'; +import { routerReducer, RouterReducerState } from '@ngrx/router-store'; import * as fromHome from '../home/home.reducer'; export interface AppState { - router: RouterState; + router: RouterReducerState; home: fromHome.HomeState; } diff --git a/yarn.lock b/yarn.lock index 4aa67b880c..b7b5890c11 100644 --- a/yarn.lock +++ b/yarn.lock @@ -122,29 +122,25 @@ version "2.1.3" resolved "https://registry.yarnpkg.com/@angularclass/hmr/-/hmr-2.1.3.tgz#34e658ed3da37f23b0a200e2da5a89be92bb209f" -"@ngrx/core@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ngrx/core/-/core-1.2.0.tgz#882b46abafa2e0e6d887cb71a1b2c2fa3e6d0dc6" - -"@ngrx/effects@^2.0.3": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@ngrx/effects/-/effects-2.0.4.tgz#418eee5e1032fa66de5bbf1855653bb1951f12a4" +"@ngrx/effects@^4.0.5": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@ngrx/effects/-/effects-4.0.5.tgz#1224763800621b7305f9b18bc17ee09b25c861d1" -"@ngrx/router-store@^1.2.6": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@ngrx/router-store/-/router-store-1.2.6.tgz#a2eb0ca515e9b367781f1030250dd64bb73c086b" +"@ngrx/router-store@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@ngrx/router-store/-/router-store-4.0.4.tgz#ab59f35aae93465088384faf009e21b22edd456a" -"@ngrx/store-devtools@^3.2.4": - version "3.2.4" - resolved "https://registry.yarnpkg.com/@ngrx/store-devtools/-/store-devtools-3.2.4.tgz#2ce4d13bf34848a9e51ec87e3b125ed67b51e550" +"@ngrx/store-devtools@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@ngrx/store-devtools/-/store-devtools-4.0.0.tgz#b79c24773217df7fd9735ad21f9cbf2533c96e04" -"@ngrx/store@^2.2.2": - version "2.2.3" - resolved "https://registry.yarnpkg.com/@ngrx/store/-/store-2.2.3.tgz#e7bd1149f1c44208f1cc4744353f0f98a0f1f57b" +"@ngrx/store@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@ngrx/store/-/store-4.0.3.tgz#36abacdfa19bfb8506e40de80bae06050a1e15e9" -"@types/chai-as-promised@^0.0.31": - version "0.0.31" - resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-0.0.31.tgz#e1e905ea6d971dafcad36560c8f1f7a7d690c5e5" +"@types/chai-as-promised@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.0.tgz#010b04cde78eacfb6e72bfddb3e58fe23c2e78b9" dependencies: "@types/chai" "*" @@ -201,7 +197,7 @@ version "2.2.43" resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.43.tgz#03c54589c43ad048cbcbfd63999b55d0424eec27" -"@types/node@*": +"@types/node@*", "@types/node@^8.0.30": version "8.0.30" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.30.tgz#aa3c42946fc6357737eb215349fe728b38679d05" @@ -209,7 +205,7 @@ version "6.0.88" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.88.tgz#f618f11a944f6a18d92b5c472028728a3e3d4b66" -"@types/node@^7.0.18", "@types/node@^7.0.28": +"@types/node@^7.0.18": version "7.0.43" resolved "https://registry.yarnpkg.com/@types/node/-/node-7.0.43.tgz#a187e08495a075f200ca946079c914e1a5fe962c" @@ -385,13 +381,13 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" -app-package-builder@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/app-package-builder/-/app-package-builder-1.0.1.tgz#fb4e0f2f444f8435d0b963c55902dfd32337b11f" +app-package-builder@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/app-package-builder/-/app-package-builder-1.0.2.tgz#bd55b7a88f7be7fa919bc5472e5a05489020bfc3" dependencies: bluebird-lst "^1.0.3" - builder-util "2.0.2" - builder-util-runtime "1.0.2" + builder-util "2.0.4" + builder-util-runtime "1.0.5" fs-extra-p "^4.4.2" int64-buffer "^0.1.9" js-yaml "^3.10.0" @@ -998,15 +994,15 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" -builder-util-runtime@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-1.0.2.tgz#b10ca7913159f219b1707d46f6d3139825ee4605" +builder-util-runtime@1.0.5, builder-util-runtime@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-1.0.5.tgz#7f2c3eb285230ae60c34f360a9235b08af88f519" dependencies: bluebird-lst "^1.0.3" debug "^3.0.1" fs-extra-p "^4.4.2" -builder-util-runtime@1.0.4, builder-util-runtime@^1.0.2, builder-util-runtime@^1.0.3: +builder-util-runtime@^1.0.2, builder-util-runtime@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/builder-util-runtime/-/builder-util-runtime-1.0.4.tgz#4de588094f25fa484e6def0ec4a9d7b6093cf52f" dependencies: @@ -1014,13 +1010,13 @@ builder-util-runtime@1.0.4, builder-util-runtime@^1.0.2, builder-util-runtime@^1 debug "^3.0.1" fs-extra-p "^4.4.2" -builder-util@2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-2.0.2.tgz#407e2d43060ff86f7ec189d9fc7a12db138c5849" +builder-util@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-2.0.4.tgz#69cf6a16e0b5fa9c4a3ba513c3352c783b221f28" dependencies: "7zip-bin" "^2.2.4" bluebird-lst "^1.0.3" - builder-util-runtime "^1.0.2" + builder-util-runtime "^1.0.5" chalk "^2.1.0" debug "^3.0.1" fs-extra-p "^4.4.2" @@ -1035,7 +1031,7 @@ builder-util@2.0.2: temp-file "^2.0.3" tunnel-agent "^0.6.0" -builder-util@2.0.3, builder-util@^2.0.2, builder-util@^2.0.3: +builder-util@^2.0.2, builder-util@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/builder-util/-/builder-util-2.0.3.tgz#f0a6ed6078217e1393ed02d66090e89066a0a97b" dependencies: @@ -2010,15 +2006,15 @@ ejs@^2.5.7, ejs@~2.5.6: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" electron-builder@^19.30.1: - version "19.30.1" - resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.30.1.tgz#5e163f0cb88cbe5632f921d45a1d5a31b85a806e" + version "19.30.2" + resolved "https://registry.yarnpkg.com/electron-builder/-/electron-builder-19.30.2.tgz#951be52a97229a0691fb6dccc4bbf7a3f86a3f30" dependencies: "7zip-bin" "^2.2.4" - app-package-builder "1.0.1" + app-package-builder "1.0.2" asar-integrity "0.2.1" bluebird-lst "^1.0.3" - builder-util "2.0.3" - builder-util-runtime "1.0.4" + builder-util "2.0.4" + builder-util-runtime "1.0.5" chalk "^2.1.0" chromium-pickle-js "^0.2.0" cuint "^0.2.2" @@ -2419,7 +2415,7 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -etag@~1.8.0: +etag@~1.8.0, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" @@ -2519,9 +2515,9 @@ expose-loader@^0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/expose-loader/-/expose-loader-0.7.3.tgz#35fbd3659789e4faa81f59de8b7e9fc39e466d51" -express@^4.15.3: - version "4.15.4" - resolved "https://registry.yarnpkg.com/express/-/express-4.15.4.tgz#032e2253489cf8fce02666beca3d11ed7a2daed1" +express@^4.15.5: + version "4.15.5" + resolved "https://registry.yarnpkg.com/express/-/express-4.15.5.tgz#670235ca9598890a5ae8170b83db722b842ed927" dependencies: accepts "~1.3.3" array-flatten "1.1.1" @@ -2529,13 +2525,13 @@ express@^4.15.3: content-type "~1.0.2" cookie "0.3.1" cookie-signature "1.0.6" - debug "2.6.8" + debug "2.6.9" depd "~1.1.1" encodeurl "~1.0.1" escape-html "~1.0.3" etag "~1.8.0" - finalhandler "~1.0.4" - fresh "0.5.0" + finalhandler "~1.0.6" + fresh "0.5.2" merge-descriptors "1.0.1" methods "~1.1.2" on-finished "~2.3.0" @@ -2544,8 +2540,8 @@ express@^4.15.3: proxy-addr "~1.1.5" qs "6.5.0" range-parser "~1.2.0" - send "0.15.4" - serve-static "1.12.4" + send "0.15.6" + serve-static "1.12.6" setprototypeof "1.0.3" statuses "~1.3.1" type-is "~1.6.15" @@ -2675,7 +2671,7 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@1.0.6, finalhandler@~1.0.4: +finalhandler@1.0.6, finalhandler@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.6.tgz#007aea33d1a4d3e42017f624848ad58d212f814f" dependencies: @@ -2762,9 +2758,9 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fresh@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" from@~0: version "0.1.7" @@ -4628,15 +4624,15 @@ ngc-webpack@~3.2.2: source-map "^0.5.6" ts-node "^3.2.0" -ngrx-store-freeze@^0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/ngrx-store-freeze/-/ngrx-store-freeze-0.1.9.tgz#b20f18f21fd5efc4e1b1e05f6f279674d0f70c81" +ngrx-store-freeze@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ngrx-store-freeze/-/ngrx-store-freeze-0.2.0.tgz#74c231947bbe1938af722f6a72624dc69788d39f" dependencies: deep-freeze-strict "^1.1.1" -ngrx-store-logger@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/ngrx-store-logger/-/ngrx-store-logger-0.1.8.tgz#385cc71c4ad7d503173d88705846614c1be2eff6" +ngrx-store-logger@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ngrx-store-logger/-/ngrx-store-logger-0.2.0.tgz#9bef9447bc91d8e35a2aa6ae1c5a57ea51036694" no-case@^2.2.0: version "2.3.2" @@ -6042,17 +6038,17 @@ semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -send@0.15.4: - version "0.15.4" - resolved "https://registry.yarnpkg.com/send/-/send-0.15.4.tgz#985faa3e284b0273c793364a35c6737bd93905b9" +send@0.15.6: + version "0.15.6" + resolved "https://registry.yarnpkg.com/send/-/send-0.15.6.tgz#20f23a9c925b762ab82705fe2f9db252ace47e34" dependencies: - debug "2.6.8" + debug "2.6.9" depd "~1.1.1" destroy "~1.0.4" encodeurl "~1.0.1" escape-html "~1.0.3" - etag "~1.8.0" - fresh "0.5.0" + etag "~1.8.1" + fresh "0.5.2" http-errors "~1.6.2" mime "1.3.4" ms "2.0.0" @@ -6060,14 +6056,14 @@ send@0.15.4: range-parser "~1.2.0" statuses "~1.3.1" -serve-static@1.12.4: - version "1.12.4" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.4.tgz#9b6aa98eeb7253c4eedc4c1f6fdbca609901a961" +serve-static@1.12.6: + version "1.12.6" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.12.6.tgz#b973773f63449934da54e5beba5e31d9f4211577" dependencies: encodeurl "~1.0.1" escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.15.4" + parseurl "~1.3.2" + send "0.15.6" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0"