diff --git a/Project-2-soapui-project.xml b/Project-2-soapui-project.xml
deleted file mode 100644
index de7ea51..0000000
--- a/Project-2-soapui-project.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-
-Response 1SEQUENCE/*
-// Script dispatcher is used to select a response based on the incoming request.
-// Here are few examples showing how to match based on path, query param, header and body
-
-// Match based on path
-def requestPath = mockRequest.getPath()
-log.info "Path: "+ requestPath
-
-if( requestPath.contains("json") )
-{
- // return the name of the response you want to dispatch
- return "JSON Response"
-}
-
-
-// Match based on query parameter
-def queryString = mockRequest.getRequest().getQueryString()
-log.info "QueryString: " + queryString
-
-if( queryString.contains("stockholm") )
-{
- // return the name of the response you want to dispatch
- return "Response Stockholm"
-}
-else if( queryString.contains("london") )
-{
- // return the name of the response you want to dispatch
- return "Response London"
-}
-
-
-// Match based on header
-def acceptEncodingHeaderList = mockRequest.getRequestHeaders().get("Accept-Encoding")
-log.info "AcceptEncoding Header List: " + acceptEncodingHeaderList
-
-if( acceptEncodingHeaderList.contains("gzip,deflate") )
-{
- // return the name of the response you want to dispatch
- return "GZiped Response"
-}
-
-
-// Match based on body
-def requestBody = mockRequest.getRequestContent()
-log.info "Request body: " + requestBody
-
-if( requestBody.contains("some data") )
-{
- // return the name of the response you want to dispatch
- return "Response N"
-}
-*/
-{
- "name":"fm0009",
- "id":12,
- "age":30
-}SEQUENCE/*
-// Script dispatcher is used to select a response based on the incoming request.
-// Here are few examples showing how to match based on path, query param, header and body
-
-// Match based on path
-def requestPath = mockRequest.getPath()
-log.info "Path: "+ requestPath
-
-if( requestPath.contains("json") )
-{
- // return the name of the response you want to dispatch
- return "JSON Response"
-}
-
-
-// Match based on query parameter
-def queryString = mockRequest.getRequest().getQueryString()
-log.info "QueryString: " + queryString
-
-if( queryString.contains("stockholm") )
-{
- // return the name of the response you want to dispatch
- return "Response Stockholm"
-}
-else if( queryString.contains("london") )
-{
- // return the name of the response you want to dispatch
- return "Response London"
-}
-
-
-// Match based on header
-def acceptEncodingHeaderList = mockRequest.getRequestHeaders().get("Accept-Encoding")
-log.info "AcceptEncoding Header List: " + acceptEncodingHeaderList
-
-if( acceptEncodingHeaderList.contains("gzip,deflate") )
-{
- // return the name of the response you want to dispatch
- return "GZiped Response"
-}
-
-
-// Match based on body
-def requestBody = mockRequest.getRequestContent()
-log.info "Request body: " + requestBody
-
-if( requestBody.contains("some data") )
-{
- // return the name of the response you want to dispatch
- return "Response N"
-}
-*/
-SEQUENCE/*
-// Script dispatcher is used to select a response based on the incoming request.
-// Here are few examples showing how to match based on path, query param, header and body
-
-// Match based on path
-def requestPath = mockRequest.getPath()
-log.info "Path: "+ requestPath
-
-if( requestPath.contains("json") )
-{
- // return the name of the response you want to dispatch
- return "JSON Response"
-}
-
-
-// Match based on query parameter
-def queryString = mockRequest.getRequest().getQueryString()
-log.info "QueryString: " + queryString
-
-if( queryString.contains("stockholm") )
-{
- // return the name of the response you want to dispatch
- return "Response Stockholm"
-}
-else if( queryString.contains("london") )
-{
- // return the name of the response you want to dispatch
- return "Response London"
-}
-
-
-// Match based on header
-def acceptEncodingHeaderList = mockRequest.getRequestHeaders().get("Accept-Encoding")
-log.info "AcceptEncoding Header List: " + acceptEncodingHeaderList
-
-if( acceptEncodingHeaderList.contains("gzip,deflate") )
-{
- // return the name of the response you want to dispatch
- return "GZiped Response"
-}
-
-
-// Match based on body
-def requestBody = mockRequest.getRequestContent()
-log.info "Request body: " + requestBody
-
-if( requestBody.contains("some data") )
-{
- // return the name of the response you want to dispatch
- return "Response N"
-}
-*/
-
\ No newline at end of file
diff --git a/e2e/app.e2e-spec.ts b/e2e/app.e2e-spec.ts
deleted file mode 100644
index b391ad8..0000000
--- a/e2e/app.e2e-spec.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { APage } from './app.po';
-
-describe('a App', () => {
- let page: APage;
-
- beforeEach(() => {
- page = new APage();
- });
-
- it('should display welcome message', () => {
- page.navigateTo();
- expect(page.getParagraphText()).toEqual('Welcome to app!');
- });
-});
diff --git a/e2e/app.po.ts b/e2e/app.po.ts
deleted file mode 100644
index 191d2cc..0000000
--- a/e2e/app.po.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { browser, by, element } from 'protractor';
-
-export class APage {
- navigateTo() {
- return browser.get('/');
- }
-
- getParagraphText() {
- return element(by.css('app-root h1')).getText();
- }
-}
diff --git a/e2e/tsconfig.e2e.json b/e2e/tsconfig.e2e.json
deleted file mode 100644
index 1d9e5ed..0000000
--- a/e2e/tsconfig.e2e.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "extends": "../tsconfig.json",
- "compilerOptions": {
- "outDir": "../out-tsc/e2e",
- "baseUrl": "./",
- "module": "commonjs",
- "target": "es5",
- "types": [
- "jasmine",
- "jasminewd2",
- "node"
- ]
- }
-}
diff --git a/package-lock.json b/package-lock.json
index b8a79f8..82efffa 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,19 +13,18 @@
}
},
"@angular/cli": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.2.7.tgz",
- "integrity": "sha512-RW9VM2TCus3nullXsCKvT5AXoaBzHzjZEY58jw1lhqntQooUAPiUikYu54MSWOZG9IfgMbAp7fXgiC/48Y0Hxw==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-1.2.1.tgz",
+ "integrity": "sha512-Y3AqcyvWcy9c4KuQAKHzXp2oO51bNY3o/90wfpcwct3Bt4znDMXuoQdgf+VhffcbIgc/b2yyPlOatXLRJ7531A==",
"dev": true,
"requires": {
"@ngtools/json-schema": "1.1.0",
- "@ngtools/webpack": "1.5.5",
+ "@ngtools/webpack": "1.5.1",
"autoprefixer": "6.7.7",
- "chalk": "2.1.0",
- "circular-dependency-plugin": "3.0.0",
+ "chalk": "1.1.3",
"common-tags": "1.4.0",
"core-object": "3.1.4",
- "css-loader": "0.28.4",
+ "css-loader": "0.28.5",
"cssnano": "3.10.0",
"denodeify": "1.2.1",
"diff": "3.3.0",
@@ -34,17 +33,17 @@
"exports-loader": "0.6.4",
"extract-text-webpack-plugin": "2.1.2",
"file-loader": "0.10.1",
- "fs-extra": "4.0.1",
+ "fs-extra": "3.0.1",
"get-caller-file": "1.0.2",
"glob": "7.1.2",
"heimdalljs": "0.2.5",
"heimdalljs-logger": "0.1.9",
"html-webpack-plugin": "2.30.1",
"inflection": "1.12.0",
- "inquirer": "3.2.1",
+ "inquirer": "3.2.2",
"isbinaryfile": "3.0.2",
"istanbul-instrumenter-loader": "2.0.0",
- "karma-source-map-support": "1.2.0",
+ "json-loader": "0.5.7",
"less": "2.7.2",
"less-loader": "4.0.5",
"license-webpack-plugin": "0.4.3",
@@ -54,7 +53,7 @@
"node-modules-path": "1.0.1",
"node-sass": "4.5.3",
"nopt": "4.0.1",
- "opn": "5.1.0",
+ "opn": "4.0.2",
"portfinder": "1.0.13",
"postcss-loader": "1.3.3",
"postcss-url": "5.1.2",
@@ -67,7 +66,6 @@
"semver": "5.4.1",
"silent-error": "1.1.0",
"source-map-loader": "0.2.1",
- "source-map-support": "0.4.15",
"style-loader": "0.13.2",
"stylus": "0.54.5",
"stylus-loader": "3.0.1",
@@ -180,6 +178,21 @@
"tsickle": "0.21.6"
}
},
+ "@ngrx/effects": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-4.0.5.tgz",
+ "integrity": "sha1-EiR2OABiG3MF+bGLwX7gmyXIYdE="
+ },
+ "@ngrx/store": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-4.0.3.tgz",
+ "integrity": "sha1-Nqus36Gb+4UG5A3oC64GBQoeFek="
+ },
+ "@ngrx/store-devtools": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-4.0.0.tgz",
+ "integrity": "sha1-t5wkdzIX33/Zc1rSH5y/JTPJbgQ="
+ },
"@ngtools/json-schema": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@ngtools/json-schema/-/json-schema-1.1.0.tgz",
@@ -187,13 +200,14 @@
"dev": true
},
"@ngtools/webpack": {
- "version": "1.5.5",
- "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.5.5.tgz",
- "integrity": "sha1-1uKpMxhAFWU9474z04Q3/dgQCec=",
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-1.5.1.tgz",
+ "integrity": "sha512-zGe9JQ3nTpKd2EnYKvC4+zrf/aOLUr2ZhLmSv8bAWMPu59v7fqo3oFs4n3JAbu8albQJmiktGVeY7Y2fFEsS7A==",
"dev": true,
"requires": {
+ "enhanced-resolve": "3.4.1",
"loader-utils": "1.1.0",
- "magic-string": "0.22.4",
+ "magic-string": "0.19.1",
"source-map": "0.5.6"
}
},
@@ -734,7 +748,7 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
- "caniuse-db": "1.0.30000713",
+ "caniuse-db": "1.0.30000717",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
"postcss": "5.2.17",
@@ -1139,7 +1153,7 @@
"buffer-xor": "1.0.3",
"cipher-base": "1.0.4",
"create-hash": "1.1.3",
- "evp_bytestokey": "1.0.0",
+ "evp_bytestokey": "1.0.2",
"inherits": "2.0.3"
}
},
@@ -1151,7 +1165,7 @@
"requires": {
"browserify-aes": "1.0.6",
"browserify-des": "1.0.0",
- "evp_bytestokey": "1.0.0"
+ "evp_bytestokey": "1.0.2"
}
},
"browserify-des": {
@@ -1205,8 +1219,8 @@
"integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=",
"dev": true,
"requires": {
- "caniuse-db": "1.0.30000713",
- "electron-to-chromium": "1.3.17"
+ "caniuse-db": "1.0.30000717",
+ "electron-to-chromium": "1.3.18"
}
},
"buffer": {
@@ -1297,15 +1311,15 @@
"dev": true,
"requires": {
"browserslist": "1.7.7",
- "caniuse-db": "1.0.30000713",
+ "caniuse-db": "1.0.30000717",
"lodash.memoize": "4.1.2",
"lodash.uniq": "4.5.0"
}
},
"caniuse-db": {
- "version": "1.0.30000713",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000713.tgz",
- "integrity": "sha1-6gF2GEC18Uj6+U7F800KodMhlm8=",
+ "version": "1.0.30000717",
+ "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000717.tgz",
+ "integrity": "sha1-J931/szdM4yZpiyXiMJpT5n2ftc=",
"dev": true
},
"caseless": {
@@ -1342,39 +1356,23 @@
}
},
"chalk": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
- "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
"dev": true,
"requires": {
- "ansi-styles": "3.2.0",
+ "ansi-styles": "2.2.1",
"escape-string-regexp": "1.0.5",
- "supports-color": "4.2.1"
+ "has-ansi": "2.0.0",
+ "strip-ansi": "3.0.1",
+ "supports-color": "2.0.0"
},
"dependencies": {
- "ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
- "requires": {
- "color-convert": "1.9.0"
- }
- },
- "has-flag": {
+ "supports-color": {
"version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
"dev": true
- },
- "supports-color": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz",
- "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==",
- "dev": true,
- "requires": {
- "has-flag": "2.0.0"
- }
}
}
},
@@ -1404,12 +1402,6 @@
"safe-buffer": "5.1.1"
}
},
- "circular-dependency-plugin": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-3.0.0.tgz",
- "integrity": "sha1-m2hpLjWw41EJmNAWS2rlARvqV2A=",
- "dev": true
- },
"clap": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/clap/-/clap-1.2.0.tgz",
@@ -1417,27 +1409,6 @@
"dev": true,
"requires": {
"chalk": "1.1.3"
- },
- "dependencies": {
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
}
},
"clean-css": {
@@ -1764,6 +1735,43 @@
"dev": true,
"requires": {
"chalk": "2.1.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.2.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz",
+ "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ }
}
},
"core-util-is": {
@@ -1876,9 +1884,9 @@
"dev": true
},
"css-loader": {
- "version": "0.28.4",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.4.tgz",
- "integrity": "sha1-bPNXkZLONV6LONX0Ldeh8uyJjQ8=",
+ "version": "0.28.5",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.5.tgz",
+ "integrity": "sha512-/FJmsDD8e6xZOBHMFShN/BCjnrEybq0spYaTZ1QoZ10/jhUa1LDDojQELu/JJ1ykZZjt0nSwkYrb2Mfx3bZx3Q==",
"dev": true,
"requires": {
"babel-code-frame": "6.22.0",
@@ -1894,7 +1902,7 @@
"postcss-modules-scope": "1.1.0",
"postcss-modules-values": "1.3.0",
"postcss-value-parser": "3.3.0",
- "source-list-map": "0.1.8"
+ "source-list-map": "2.0.0"
}
},
"css-parse": {
@@ -2283,12 +2291,6 @@
}
}
},
- "dom-walk": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
- "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=",
- "dev": true
- },
"domain-browser": {
"version": "1.1.7",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.1.7.tgz",
@@ -2337,9 +2339,9 @@
"dev": true
},
"electron-to-chromium": {
- "version": "1.3.17",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.17.tgz",
- "integrity": "sha1-QcE0V8xxZsXBXnZ65h2GqMrN7l0=",
+ "version": "1.3.18",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.18.tgz",
+ "integrity": "sha1-PcyZ2j5rZl9qu8ccKK1Ros1zGpw=",
"dev": true
},
"elliptic": {
@@ -2581,12 +2583,13 @@
}
},
"evp_bytestokey": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.0.tgz",
- "integrity": "sha1-SXtmrZ/vZc18CKYYCCS6FHa2blM=",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz",
+ "integrity": "sha512-ni0r0lrm7AOzsh2qC5mi9sj8S0gmj5fLNjfFpxN05FB4tAVZEKotbkjOtLPqTCX/CXT7NsUr6juZb4IFJeNNdA==",
"dev": true,
"requires": {
- "create-hash": "1.1.3"
+ "md5.js": "1.3.4",
+ "safe-buffer": "5.1.1"
}
},
"exit": {
@@ -2931,9 +2934,9 @@
}
},
"fs-extra": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz",
- "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
+ "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
@@ -3075,24 +3078,6 @@
"is-glob": "2.0.1"
}
},
- "global": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
- "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
- "dev": true,
- "requires": {
- "min-document": "2.19.0",
- "process": "0.5.2"
- },
- "dependencies": {
- "process": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
- "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
- "dev": true
- }
- }
- },
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
@@ -3419,7 +3404,7 @@
"ncname": "1.0.0",
"param-case": "2.1.1",
"relateurl": "0.2.7",
- "uglify-js": "3.0.27"
+ "uglify-js": "3.0.28"
}
},
"html-webpack-plugin": {
@@ -3582,9 +3567,29 @@
"integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=",
"dev": true,
"requires": {
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
},
"dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.2.1"
+ }
+ },
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
@@ -3592,9 +3597,9 @@
"dev": true
},
"postcss": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
- "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
+ "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true,
"requires": {
"chalk": "2.1.0",
@@ -3692,9 +3697,9 @@
"dev": true
},
"inquirer": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.1.tgz",
- "integrity": "sha512-QgW3eiPN8gpj/K5vVpHADJJgrrF0ho/dZGylikGX7iqAdRgC9FVKYKWFLx6hZDBFcOLEoSqINYrVPeFAeG/PdA==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.2.2.tgz",
+ "integrity": "sha512-bTKLzEHJVATimZO/YFdLrom0lRx1BHfRYskFHfIMVkGdp8+dIZaxuU+4yrsS1lcu6YWywVQVVsfvdwESzbeqHw==",
"dev": true,
"requires": {
"ansi-escapes": "2.0.0",
@@ -3719,6 +3724,32 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.2.1"
+ }
+ },
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "dev": true
+ },
"strip-ansi": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
@@ -3727,6 +3758,15 @@
"requires": {
"ansi-regex": "3.0.0"
}
+ },
+ "supports-color": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.2.1.tgz",
+ "integrity": "sha512-qxzYsob3yv6U+xMzPrv170y8AwGP7i74g+pbixCfD6rgso8BscLT2qXIuz6TpOaiJZ3mFgT5O9lyT9nMU4LfaA==",
+ "dev": true,
+ "requires": {
+ "has-flag": "2.0.0"
+ }
}
}
},
@@ -3946,12 +3986,6 @@
"integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
"dev": true
},
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
- "dev": true
- },
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
@@ -4456,15 +4490,6 @@
"karma-jasmine": "1.1.0"
}
},
- "karma-source-map-support": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.2.0.tgz",
- "integrity": "sha1-G/gee7SwiWJ6s1LsQXnhF8QGpUA=",
- "dev": true,
- "requires": {
- "source-map-support": "0.4.15"
- }
- },
"kind-of": {
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -4732,9 +4757,9 @@
"dev": true
},
"magic-string": {
- "version": "0.22.4",
- "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz",
- "integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==",
+ "version": "0.19.1",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.19.1.tgz",
+ "integrity": "sha1-FNdoATyvLsj96hakmvgvw3fnUgE=",
"dev": true,
"requires": {
"vlq": "0.2.2"
@@ -4767,6 +4792,28 @@
"integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=",
"dev": true
},
+ "md5.js": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz",
+ "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=",
+ "dev": true,
+ "requires": {
+ "hash-base": "3.0.4",
+ "inherits": "2.0.3"
+ },
+ "dependencies": {
+ "hash-base": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
+ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "safe-buffer": "5.1.1"
+ }
+ }
+ }
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -4911,15 +4958,6 @@
"integrity": "sha1-5md4PZLonb00KBi1IwudYqZyrRg=",
"dev": true
},
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
- "dev": true,
- "requires": {
- "dom-walk": "0.1.1"
- }
- },
"minimalistic-assert": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
@@ -5120,7 +5158,7 @@
"stream-browserify": "2.0.1",
"stream-http": "2.7.2",
"string_decoder": "0.10.31",
- "timers-browserify": "2.0.3",
+ "timers-browserify": "2.0.4",
"tty-browserify": "0.0.0",
"url": "0.11.0",
"util": "0.10.3",
@@ -5192,29 +5230,6 @@
"request": "2.81.0",
"sass-graph": "2.2.4",
"stdout-stream": "1.4.0"
- },
- "dependencies": {
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true,
- "optional": true
- }
}
},
"nopt": {
@@ -5384,12 +5399,13 @@
}
},
"opn": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/opn/-/opn-5.1.0.tgz",
- "integrity": "sha512-iPNl7SyM8L30Rm1sjGdLLheyHVw5YXVfi3SKWJzBI7efxRwHojfRFjwE/OLM6qp9xJYMgab8WicTU1cPoY+Hpg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
+ "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
"dev": true,
"requires": {
- "is-wsl": "1.1.0"
+ "object-assign": "4.1.1",
+ "pinkie-promise": "2.0.1"
}
},
"optimist": {
@@ -5489,7 +5505,7 @@
"asn1.js": "4.9.1",
"browserify-aes": "1.0.6",
"create-hash": "1.1.3",
- "evp_bytestokey": "1.0.0",
+ "evp_bytestokey": "1.0.2",
"pbkdf2": "3.0.13"
}
},
@@ -5666,29 +5682,6 @@
"js-base64": "2.1.9",
"source-map": "0.5.6",
"supports-color": "3.2.3"
- },
- "dependencies": {
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
- "dev": true
- }
- }
- }
}
},
"postcss-calc": {
@@ -5913,9 +5906,29 @@
"integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=",
"dev": true,
"requires": {
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
},
"dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.2.1"
+ }
+ },
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
@@ -5923,9 +5936,9 @@
"dev": true
},
"postcss": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
- "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
+ "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true,
"requires": {
"chalk": "2.1.0",
@@ -5951,9 +5964,29 @@
"dev": true,
"requires": {
"css-selector-tokenizer": "0.7.0",
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
},
"dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.2.1"
+ }
+ },
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
@@ -5961,9 +5994,9 @@
"dev": true
},
"postcss": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
- "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
+ "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true,
"requires": {
"chalk": "2.1.0",
@@ -5989,9 +6022,29 @@
"dev": true,
"requires": {
"css-selector-tokenizer": "0.7.0",
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
},
"dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.2.1"
+ }
+ },
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
@@ -5999,9 +6052,9 @@
"dev": true
},
"postcss": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
- "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
+ "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true,
"requires": {
"chalk": "2.1.0",
@@ -6027,9 +6080,29 @@
"dev": true,
"requires": {
"icss-replace-symbols": "1.1.0",
- "postcss": "6.0.8"
+ "postcss": "6.0.9"
},
"dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "dev": true,
+ "requires": {
+ "color-convert": "1.9.0"
+ }
+ },
+ "chalk": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz",
+ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "4.2.1"
+ }
+ },
"has-flag": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
@@ -6037,9 +6110,9 @@
"dev": true
},
"postcss": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.8.tgz",
- "integrity": "sha512-G6WnRmdTt2jvJvY+aY+M0AO4YlbxE+slKPZb+jG2P2U9Tyxi3h1fYZ/DgiFU6DC6bv3XIEJoZt+f/kNh8BrWFw==",
+ "version": "6.0.9",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.9.tgz",
+ "integrity": "sha512-bBE2AHNEBhF23TfET6AA/lFP8ah+qHOZoFJEflFG+HgvVLdTmMOrocx/4LVVDIn3w6jUssw1q2Exk1cc9UOI8w==",
"dev": true,
"requires": {
"chalk": "2.1.0",
@@ -7344,9 +7417,9 @@
}
},
"source-list-map": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-0.1.8.tgz",
- "integrity": "sha1-xVCyq1Qn9rPyH1r+rYjE9Vh7IQY=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
+ "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==",
"dev": true
},
"source-map": {
@@ -7936,12 +8009,11 @@
"dev": true
},
"timers-browserify": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.3.tgz",
- "integrity": "sha512-+JAqyNgg+M8+gXIrq2EeUr4kZqRz47Ysco7X5QKRGScRE9HIHckyHD1asozSFGeqx2nmPCgA8T5tIGVO0ML7/w==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.4.tgz",
+ "integrity": "sha512-uZYhyU3EX8O7HQP+J9fTVYwsq90Vr68xPEFo7yrVImIxYvHgukBEgOB/SgGoorWVTzGM/3Z+wUNnboA4M8jWrg==",
"dev": true,
"requires": {
- "global": "4.3.2",
"setimmediate": "1.0.5"
}
},
@@ -8190,9 +8262,9 @@
"dev": true
},
"uglify-js": {
- "version": "3.0.27",
- "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.27.tgz",
- "integrity": "sha512-HD8CmxPXUI62v5tweiulMcP/apAtx1DXGcNZkhKQZyC+MTrTsoCBb8yPAwVrbvpgw3EpRU76bRe6axjIiCYcQg==",
+ "version": "3.0.28",
+ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.0.28.tgz",
+ "integrity": "sha512-0h/qGay016GG2lVav3Kz174F3T2Vjlz2v6HCt+WDQpoXfco0hWwF5gHK9yh88mUYvIC+N7Z8NT8WpjSp1yoqGA==",
"dev": true,
"requires": {
"commander": "2.11.0",
@@ -8769,16 +8841,6 @@
"number-is-nan": "1.0.1"
}
},
- "opn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz",
- "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=",
- "dev": true,
- "requires": {
- "object-assign": "4.1.1",
- "pinkie-promise": "2.0.1"
- }
- },
"string-width": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
@@ -8839,14 +8901,6 @@
"requires": {
"source-list-map": "2.0.0",
"source-map": "0.5.6"
- },
- "dependencies": {
- "source-list-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz",
- "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==",
- "dev": true
- }
}
},
"websocket-driver": {
diff --git a/package.json b/package.json
index 26c4103..5682b2c 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,9 @@
"@angular/platform-browser": "^4.0.0",
"@angular/platform-browser-dynamic": "^4.0.0",
"@angular/router": "^4.0.0",
+ "@ngrx/effects": "^4.0.5",
+ "@ngrx/store": "^4.0.3",
+ "@ngrx/store-devtools": "^4.0.0",
"core-js": "^2.4.1",
"rxjs": "^5.4.1",
"zone.js": "^0.8.14"
diff --git a/src/actions/index.ts b/src/actions/index.ts
new file mode 100644
index 0000000..4999991
--- /dev/null
+++ b/src/actions/index.ts
@@ -0,0 +1,24 @@
+import { Action } from '@ngrx/store'
+
+
+export class ReceiveUser implements Action {
+ readonly type: string = RECEIVE_USER
+ payload: any
+}
+
+
+export class UpdateName implements Action {
+ readonly type: string = UPDATE_NAME
+ payload: string
+}
+
+export class UpdateAge implements Action {
+ readonly type: string = UPDATE_AGE
+ payload: number
+}
+
+export type Actions = ReceiveUser | UpdateName | UpdateAge
+
+export const RECEIVE_USER = 'RECEIVE_USER'
+export const UPDATE_NAME = 'UPDATE_NAME'
+export const UPDATE_AGE = 'UPDATE_AGE'
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 5778f1e..05f97a8 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -3,4 +3,3 @@
Gallery
-
diff --git a/src/app/app.component.ts b/src/app/app.component.ts
index f49fabe..597e441 100644
--- a/src/app/app.component.ts
+++ b/src/app/app.component.ts
@@ -1,4 +1,5 @@
-import { Component } from '@angular/core';
+import { Component, OnInit } from '@angular/core';
+
@Component({
selector: 'app-root',
@@ -6,5 +7,8 @@ import { Component } from '@angular/core';
styleUrls: ['./app.component.css']
})
export class AppComponent {
- title = 'Angular POC';
+
+ constructor() { }
+
+ OnInit() { }
}
diff --git a/src/app/app.module.ts b/src/app/app.module.ts
index 644551d..10e872a 100644
--- a/src/app/app.module.ts
+++ b/src/app/app.module.ts
@@ -10,6 +10,11 @@ import { EditProfileComponent } from './profile/profile.component';
import { NotFoundComponent } from './not-found/not-found.component';
import {ViewProfileComponent} from './profile/view-profile.component';
import { LoginComponent } from './login/login.component';
+import { StoreModule } from '@ngrx/store';
+import { reducers } from '../reducers';
+import { StoreDevtoolsModule } from '@ngrx/store-devtools';
+import { EffectsModule } from '@ngrx/effects';
+import { ProfileService } from './profile/profile.service';
const appRoutes: Routes = [
{path: 'profile', component: ViewProfileComponent},
@@ -30,7 +35,10 @@ const appRoutes: Routes = [
BrowserModule,
HttpModule,
FormsModule,
- AppRoutingModule
+ AppRoutingModule,
+ StoreModule.forRoot(reducers),
+ StoreDevtoolsModule.instrument(),
+ EffectsModule.forRoot([ProfileService])
// RouterModule.forRoot(appRoutes)
],
providers: [],
diff --git a/src/app/authentication.guard.ts b/src/app/authentication.guard.ts
index 5457e4f..262167d 100644
--- a/src/app/authentication.guard.ts
+++ b/src/app/authentication.guard.ts
@@ -18,7 +18,6 @@ export class AuthenticationGuard implements CanActivate {
});
}
canActivate() {
- console.log(this.token);
if (localStorage.getItem('token')) {
return true;
}
diff --git a/src/app/profile/profile.component.ts b/src/app/profile/profile.component.ts
index 415fc14..ab13b0b 100644
--- a/src/app/profile/profile.component.ts
+++ b/src/app/profile/profile.component.ts
@@ -1,7 +1,10 @@
-import { Component, OnInit } from '@angular/core';
+import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { ProfileService } from './profile.service';
-import {UserProfile } from './user-profile';
-import {Router} from '@angular/router';
+import { UserProfile } from '../user-profile';
+import { Router } from '@angular/router';
+import { Store } from '@ngrx/store';
+import { State } from '../../reducers'
+
@Component({
selector: 'app-profile',
@@ -10,17 +13,20 @@ import {Router} from '@angular/router';
providers: [ProfileService]
})
export class EditProfileComponent implements OnInit {
- private userProfile: UserProfile;
+ public userProfile: UserProfile;
- constructor(private profileService: ProfileService, private router: Router) {
+ constructor(private profileService: ProfileService, private store: Store) {
this.userProfile = new UserProfile();
+ store
+ .select('userProfile')
+ .subscribe((userProfile: UserProfile) => this.userProfile = userProfile)
}
- ngOnInit() {
- this.profileService.getProfile('0').then(user => this.userProfile = user);
+ ngOnInit() {
+ this.store.dispatch({ type: 'FETCH_USER' })
}
submit() {
- this.profileService.postProfile('0', this.userProfile).then(userProfile => this.userProfile = userProfile);
+ this.store.dispatch({ type: 'POST_USER', payload: { name: this.userProfile.name, age: this.userProfile.age }})
}
}
diff --git a/src/app/profile/profile.service.ts b/src/app/profile/profile.service.ts
index 822c4e7..31e2190 100644
--- a/src/app/profile/profile.service.ts
+++ b/src/app/profile/profile.service.ts
@@ -1,29 +1,35 @@
-import { UserProfile } from './user-profile';
+import { UserProfile } from '../user-profile';
import { Injectable } from '@angular/core';
import { Http, RequestOptions, Headers} from '@angular/http';
-import 'rxjs/add/operator/toPromise';
+import { Action } from '@ngrx/store';
+import { Actions, Effect, toPayload } from '@ngrx/effects';
+import { Observable } from 'rxjs/Observable';
+import 'rxjs/add/operator/map';
+import 'rxjs/add/operator/mergeMap';
@Injectable()
export class ProfileService {
- constructor(private http: Http) { }
+ constructor(private http: Http, private actions$: Actions) { }
- getProfile(id: String): Promise {
- const headers = new Headers({ 'Authorization': 'Bearer ' + localStorage.getItem('token') });
- const options = new RequestOptions({ headers: headers });
- return this.http.get(`http://localhost:3000/user/${id}`, options)
- .toPromise()
- .then(response => response.json())
- .catch(err => console.log(err));
- }
+ @Effect() fetchUser$: Observable = this.actions$.ofType('FETCH_USER')
+ .map(toPayload)
+ .mergeMap(payload => {
+ const headers = new Headers({ 'Authorization': `Bearer ${localStorage.getItem('token')}` });
+ const options = new RequestOptions({ headers: headers });
+ return this.http.get(`http://localhost:3000/user/0`, options)
+ .map(response => response.json())
+ .map(data => ({ type: 'RECEIVE_USER', payload: data }))
+ })
- postProfile(id: String, profile: UserProfile): Promise {
- const headers = new Headers({ 'Authorization': 'Bearer ' + localStorage.getItem('token') });
- const options = new RequestOptions({ headers: headers });
- return this.http.post(`http://localhost:3000/user/${id}`, {...profile}, options)
- .toPromise()
- .then(response => response.json())
- .catch(err => console.log(err));
- }
+ @Effect() postUser$: Observable = this.actions$.ofType('POST_USER')
+ .map(toPayload)
+ .mergeMap(payload => {
+ const headers = new Headers({ 'Authorization': `Bearer ${localStorage.getItem('token')}` });
+ const options = new RequestOptions({ headers: headers });
+ return this.http.post(`http://localhost:3000/user/0`, payload, options)
+ .map(response => response.json())
+ .map(data => ({ type: 'RECEIVE_USER', payload: data }))
+ })
-}
+}
\ No newline at end of file
diff --git a/src/app/profile/view-profile.component.ts b/src/app/profile/view-profile.component.ts
index 9890203..6f87c16 100644
--- a/src/app/profile/view-profile.component.ts
+++ b/src/app/profile/view-profile.component.ts
@@ -1,8 +1,11 @@
import { AuthenticationGuard } from './../authentication.guard';
import { Component, OnInit } from '@angular/core';
import { ProfileService } from './profile.service';
-import {UserProfile } from './user-profile';
+import {UserProfile } from '../user-profile';
import {Router} from '@angular/router';
+import { Store } from '@ngrx/store';
+import { State } from '../../reducers'
+
@Component({
selector: 'app-view-profile',
@@ -13,12 +16,15 @@ export class ViewProfileComponent implements OnInit {
private userProfile: UserProfile;
title = 'Profile';
- constructor(private profileService: ProfileService, private authenticationGuard: AuthenticationGuard, private router: Router) {
+ constructor(private profileService: ProfileService, private authenticationGuard: AuthenticationGuard, private router: Router, private store: Store) {
this.userProfile = new UserProfile();
+ store
+ .select('userProfile')
+ .subscribe((userProfile: UserProfile) => this.userProfile = userProfile)
}
ngOnInit() {
- this.profileService.getProfile('0').then(user => this.userProfile = user);
+ this.store.dispatch({ type: 'FETCH_USER' })
}
diff --git a/src/app/profile/user-profile.ts b/src/app/user-profile.ts
similarity index 100%
rename from src/app/profile/user-profile.ts
rename to src/app/user-profile.ts
diff --git a/src/reducers/index.ts b/src/reducers/index.ts
new file mode 100644
index 0000000..8afaaf7
--- /dev/null
+++ b/src/reducers/index.ts
@@ -0,0 +1,11 @@
+import { ActionReducerMap } from '@ngrx/store'
+import * as userProfile from './userProfileReducer'
+
+
+export interface State {
+ userProfile: userProfile.State;
+}
+
+export const reducers: ActionReducerMap = {
+ userProfile: userProfile.reducer
+}
\ No newline at end of file
diff --git a/src/reducers/userProfileReducer.ts b/src/reducers/userProfileReducer.ts
new file mode 100644
index 0000000..e58d95e
--- /dev/null
+++ b/src/reducers/userProfileReducer.ts
@@ -0,0 +1,23 @@
+import { RECEIVE_USER, UPDATE_NAME, UPDATE_AGE, Actions } from '../actions'
+
+
+export interface State {
+ id: number
+ name: string
+ age: number
+}
+
+const initalState = { id: 0, name: '', age: 0}
+
+export function reducer(state: State = initalState, action: Actions): State {
+ switch (action.type) {
+ case RECEIVE_USER:
+ return action.payload
+ case UPDATE_NAME:
+ return Object.assign({}, state, { name: action.payload })
+ case UPDATE_AGE:
+ return Object.assign({}, state, { age: action.payload })
+ default:
+ return state
+ }
+}
\ No newline at end of file