From 48f0554a6a59f97ef8f3f9ccfea4e1184dd459ba Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 14 Feb 2018 10:06:51 +0100 Subject: [PATCH 01/12] Tarea #62 link a la foto --- client/core/src/directives/index.js | 1 + client/core/src/directives/visible-by.js | 17 +++++++++++++++++ client/item/routes.json | 11 ----------- client/item/src/descriptor/item-descriptor.html | 10 +++++++--- client/item/src/item.js | 1 - client/item/src/locale/es.yml | 1 - client/item/src/picture/item-picture.html | 5 ----- client/item/src/picture/item-picture.js | 5 ----- 8 files changed, 25 insertions(+), 26 deletions(-) create mode 100644 client/core/src/directives/visible-by.js delete mode 100644 client/item/src/picture/item-picture.html delete mode 100644 client/item/src/picture/item-picture.js diff --git a/client/core/src/directives/index.js b/client/core/src/directives/index.js index 9a6531b1e..02f922149 100644 --- a/client/core/src/directives/index.js +++ b/client/core/src/directives/index.js @@ -5,3 +5,4 @@ import './validation'; import './acl'; import './on-error-src'; import './zoom-image'; +import './visible-by'; diff --git a/client/core/src/directives/visible-by.js b/client/core/src/directives/visible-by.js new file mode 100644 index 000000000..e05079fb5 --- /dev/null +++ b/client/core/src/directives/visible-by.js @@ -0,0 +1,17 @@ +import ngModule from '../module'; + +function vnVisibleBy(aclService) { + return { + restrict: 'A', + priority: -1, + link: function($scope, $element, $attrs) { + let acls = $attrs.vnVisibleBy.split(','); + if (!aclService.aclPermission(acls)) { + $element[0].style.visibility = 'hidden'; + } + } + }; +} +vnVisibleBy.$inject = ['aclService']; + +ngModule.directive('vnVisibleBy', vnVisibleBy); diff --git a/client/item/routes.json b/client/item/routes.json index 74dbe6dad..863a8a4b9 100644 --- a/client/item/routes.json +++ b/client/item/routes.json @@ -80,17 +80,6 @@ "icon": "folder" } },{ - "url" : "/picture", - "state": "item.card.picture", - "component": "vn-item-picture", - "params": { - "item": "$ctrl.item" - }, - "menu": { - "description": "Picture", - "icon": "folder" - } - }, { "url" : "/barcode", "state": "item.card.barcode", "component": "vn-item-barcode", diff --git a/client/item/src/descriptor/item-descriptor.html b/client/item/src/descriptor/item-descriptor.html index 3837e838a..a43f7ba0e 100644 --- a/client/item/src/descriptor/item-descriptor.html +++ b/client/item/src/descriptor/item-descriptor.html @@ -3,10 +3,14 @@ - + + ng-src="http://verdnatura.es/vn-image-data/catalog/200x200/{{::$ctrl.item.image}}" + zoom-image="http://verdnatura.es/vn-image-data/catalog/900x900/{{::$ctrl.item.image}}" on-error-src/> + +
Id: {{$ctrl.item.id}}
diff --git a/client/item/src/item.js b/client/item/src/item.js index 6ba7dd8cf..9ddba12ad 100644 --- a/client/item/src/item.js +++ b/client/item/src/item.js @@ -11,6 +11,5 @@ import './tags/item-tags'; import './history/item-history'; import './niche/item-niche'; import './botanical/item-botanical'; -import './picture/item-picture'; import './barcode/item-barcode'; diff --git a/client/item/src/locale/es.yml b/client/item/src/locale/es.yml index a80590f67..34b6be39a 100644 --- a/client/item/src/locale/es.yml +++ b/client/item/src/locale/es.yml @@ -13,7 +13,6 @@ Item history: Historial del artículo Item tags: Tags del artículo Niche: Nicho Picture: Foto -Item pictures: Fotos del artículo Barcode: Código barras Item barcode: Código de barras del artículo Changed by: Cambiado por diff --git a/client/item/src/picture/item-picture.html b/client/item/src/picture/item-picture.html deleted file mode 100644 index 93acec3c9..000000000 --- a/client/item/src/picture/item-picture.html +++ /dev/null @@ -1,5 +0,0 @@ - - - Item pictures - - \ No newline at end of file diff --git a/client/item/src/picture/item-picture.js b/client/item/src/picture/item-picture.js deleted file mode 100644 index 20fdd8499..000000000 --- a/client/item/src/picture/item-picture.js +++ /dev/null @@ -1,5 +0,0 @@ -import ngModule from '../module'; - -ngModule.component('vnItemPicture', { - template: require('./item-picture.html') -}); From 8130b354342533067a3c5dc4a8dbe323867e6c69 Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 14 Feb 2018 10:56:41 +0100 Subject: [PATCH 02/12] =?UTF-8?q?Tarea=20#62=20abre=20foto=20en=20otra=20p?= =?UTF-8?q?esta=C3=B1a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/item/src/descriptor/item-descriptor.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/item/src/descriptor/item-descriptor.html b/client/item/src/descriptor/item-descriptor.html index a43f7ba0e..b7a8c9a1f 100644 --- a/client/item/src/descriptor/item-descriptor.html +++ b/client/item/src/descriptor/item-descriptor.html @@ -7,7 +7,7 @@ - From aadf763e76ac95c0a644797e6234f742193f905e Mon Sep 17 00:00:00 2001 From: jgallego Date: Wed, 14 Feb 2018 11:33:21 +0100 Subject: [PATCH 03/12] refactor html --- client/item/src/list/list.html | 3 +- package-lock.json | 916 ++++++++++++++++++++------------- 2 files changed, 545 insertions(+), 374 deletions(-) diff --git a/client/item/src/list/list.html b/client/item/src/list/list.html index 00f498d4e..b3bee2570 100644 --- a/client/item/src/list/list.html +++ b/client/item/src/list/list.html @@ -8,8 +8,7 @@ on-search="$ctrl.search(index)" advanced="true" popover="vn-item-filter-panel" - ignore-keys = "['page', 'size', 'search']" - > + ignore-keys = "['page', 'size', 'search']"> diff --git a/package-lock.json b/package-lock.json index 593858160..032b06bd0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -42,8 +42,7 @@ "acorn": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.4.1.tgz", - "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==", - "dev": true + "integrity": "sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ==" }, "acorn-dynamic-import": { "version": "2.0.2", @@ -66,7 +65,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", - "dev": true, "requires": { "acorn": "3.3.0" }, @@ -74,8 +72,7 @@ "acorn": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", - "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", - "dev": true + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" } } }, @@ -86,20 +83,20 @@ "dev": true }, "ajv": { - "version": "4.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.2.tgz", - "integrity": "sha1-8WbDwRy8bLncwQKlvP5bcslSh+Y=", - "dev": true, + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", "requires": { "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" } }, "ajv-keywords": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz", - "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=", - "dev": true + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=" }, "align-text": { "version": "0.1.4", @@ -216,10 +213,9 @@ } }, "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.0.0.tgz", + "integrity": "sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ==" }, "ansi-gray": { "version": "0.1.1", @@ -248,14 +244,12 @@ "ansi-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz", - "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=", - "dev": true + "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=" }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, "ansi-wrap": { "version": "0.1.0", @@ -368,7 +362,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", - "dev": true, "requires": { "array-uniq": "1.0.3" } @@ -376,8 +369,7 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" }, "array-unique": { "version": "0.2.1", @@ -394,8 +386,7 @@ "arrify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, "asn1": { "version": "0.2.3", @@ -493,14 +484,20 @@ "dev": true }, "babel-code-frame": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.22.0.tgz", - "integrity": "sha1-AnYgvuVnqIwyVhV05/0IAdMxGOQ=", - "dev": true, + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "requires": { "chalk": "1.1.3", "esutils": "2.0.2", - "js-tokens": "3.0.1" + "js-tokens": "3.0.2" + }, + "dependencies": { + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + } } }, "babel-core": { @@ -1248,8 +1245,7 @@ "balanced-match": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", - "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", - "dev": true + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" }, "base": { "version": "0.11.2", @@ -1365,7 +1361,7 @@ "bluebird": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==", + "integrity": "sha1-2VUfnemPH82h5oPRfukaBgLuLrk=", "dev": true }, "bn.js": { @@ -1600,7 +1596,6 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.6.tgz", "integrity": "sha1-cZfX6qm4fmSDkOph/GbIRCdCDfk=", - "dev": true, "requires": { "balanced-match": "0.4.2", "concat-map": "0.0.1" @@ -1713,8 +1708,7 @@ "buffer-shims": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", - "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", - "dev": true + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" }, "buffer-xor": { "version": "1.0.3", @@ -1784,7 +1778,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, "requires": { "callsites": "0.2.0" } @@ -1798,8 +1791,7 @@ "callsites": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=" }, "camel-case": { "version": "3.0.0", @@ -1853,7 +1845,6 @@ "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", @@ -1862,6 +1853,11 @@ "supports-color": "2.0.0" } }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=" + }, "chokidar": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.6.1.tgz", @@ -1892,8 +1888,7 @@ "circular-json": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=", - "dev": true + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==" }, "class-utils": { "version": "0.3.6", @@ -2030,19 +2025,17 @@ "dev": true }, "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "2.0.0" } }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "cliui": { "version": "3.2.0", @@ -2114,8 +2107,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "code-point-at": { "version": "1.1.0", @@ -2137,7 +2129,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -2145,8 +2136,7 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-support": { "version": "1.1.3", @@ -2288,14 +2278,12 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, "requires": { "inherits": "2.0.3", "readable-stream": "2.3.3", @@ -2306,7 +2294,6 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", "integrity": "sha1-No8lEtefnUb9/HE0mueHi7weuVw=", - "dev": true, "requires": { "core-util-is": "1.0.2", "inherits": "2.0.3", @@ -2321,7 +2308,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", "integrity": "sha1-D8Z9fBQYJd6UKC3VNr7GubzoYKs=", - "dev": true, "requires": { "safe-buffer": "5.1.1" } @@ -2470,8 +2456,7 @@ "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "cors": { "version": "2.8.1", @@ -4032,8 +4017,7 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "defaults": { "version": "1.0.3", @@ -4075,7 +4059,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", - "dev": true, "requires": { "globby": "5.0.0", "is-path-cwd": "1.0.0", @@ -4190,13 +4173,11 @@ } }, "doctrine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.0.0.tgz", - "integrity": "sha1-xz2NKQnSIpHhoAejlYBNqLZl/mM=", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "2.0.2" } }, "dom-serialize": { @@ -4211,12 +4192,50 @@ "void-elements": "2.0.1" } }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.1.tgz", + "integrity": "sha1-iS5HAAqZvlW783dP/qBWHYh5wlk=", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, "dot-prop": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", @@ -4505,6 +4524,11 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, "errno": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz", @@ -4768,8 +4792,7 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "escope": { "version": "3.6.0", @@ -4784,53 +4807,162 @@ } }, "eslint": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz", - "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=", - "dev": true, + "version": "4.17.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.17.0.tgz", + "integrity": "sha512-AyxBUCANU/o/xC0ijGMKavo5Ls3oK6xykiOITlMdjFjrKOsqLrA7Nf5cnrDgcKrHzBirclAZt63XO7YZlVUPwA==", "requires": { - "babel-code-frame": "6.22.0", - "chalk": "1.1.3", + "ajv": "5.5.2", + "babel-code-frame": "6.26.0", + "chalk": "2.3.1", "concat-stream": "1.6.0", - "debug": "2.2.0", - "doctrine": "2.0.0", - "escope": "3.6.0", - "espree": "3.5.1", + "cross-spawn": "5.1.0", + "debug": "3.1.0", + "doctrine": "2.1.0", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "1.0.0", + "espree": "3.5.3", "esquery": "1.0.0", - "estraverse": "4.2.0", "esutils": "2.0.2", "file-entry-cache": "2.0.0", - "glob": "7.1.1", - "globals": "9.14.0", - "ignore": "3.3.5", + "functional-red-black-tree": "1.0.1", + "glob": "7.1.2", + "globals": "11.3.0", + "ignore": "3.3.7", "imurmurhash": "0.1.4", - "inquirer": "0.12.0", - "is-my-json-valid": "2.15.0", - "is-resolvable": "1.0.0", + "inquirer": "3.3.0", + "is-resolvable": "1.1.0", "js-yaml": "3.10.0", - "json-stable-stringify": "1.0.1", + "json-stable-stringify-without-jsonify": "1.0.1", "levn": "0.3.0", - "lodash": "4.16.6", + "lodash": "4.17.5", + "minimatch": "3.0.3", "mkdirp": "0.5.1", "natural-compare": "1.4.0", "optionator": "0.8.2", "path-is-inside": "1.0.2", - "pluralize": "1.2.1", - "progress": "1.1.8", + "pluralize": "7.0.0", + "progress": "2.0.0", "require-uncached": "1.0.3", - "shelljs": "0.7.8", - "strip-bom": "3.0.0", + "semver": "5.3.0", + "strip-ansi": "4.0.0", "strip-json-comments": "2.0.1", - "table": "3.8.3", - "text-table": "0.2.0", - "user-home": "2.0.0" + "table": "4.0.2", + "text-table": "0.2.0" }, "dependencies": { - "strip-bom": { + "ansi-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.0" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "requires": { + "lru-cache": "4.0.1", + "shebang-command": "1.2.0", + "which": "1.2.11" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + }, + "dependencies": { + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.11" + } + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "requires": { + "has-flag": "3.0.0" + } } } }, @@ -4875,28 +5007,41 @@ "integrity": "sha1-ekJ55yLUXg5Bm9Nik3PvXQZqoOM=", "dev": true }, + "eslint-plugin-html": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.2.tgz", + "integrity": "sha512-CrQd0F8GWdNWnu4PFrYZl+LjUCXNVy2h0uhDMtnf/7VKc9HRcnkXSrlg0BSGfptZPSzmwnnwCaREAa9+fnQhYw==", + "requires": { + "htmlparser2": "3.9.2" + } + }, "eslint-plugin-jasmine": { "version": "2.8.4", "resolved": "https://registry.npmjs.org/eslint-plugin-jasmine/-/eslint-plugin-jasmine-2.8.4.tgz", "integrity": "sha1-Z6VVHj0dXguMa1Sq66uVNw9dN94=", "dev": true }, - "espree": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.1.tgz", - "integrity": "sha1-DJiLirRttTEAoZVK5LqZXd0n2H4=", - "dev": true, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "requires": { - "acorn": "5.1.2", + "esrecurse": "4.2.0", + "estraverse": "4.2.0" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==" + }, + "espree": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz", + "integrity": "sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ==", + "requires": { + "acorn": "5.4.1", "acorn-jsx": "3.0.1" - }, - "dependencies": { - "acorn": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz", - "integrity": "sha1-kRy1PgNoB88Pp3jcXTcPvYZCRtc=", - "dev": true - } } }, "esprima": { @@ -4909,7 +5054,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.0.tgz", "integrity": "sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo=", - "dev": true, "requires": { "estraverse": "4.2.0" } @@ -4918,7 +5062,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz", "integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=", - "dev": true, "requires": { "estraverse": "4.2.0", "object-assign": "4.1.0" @@ -4927,14 +5070,12 @@ "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "etag": { "version": "1.8.1", @@ -5053,12 +5194,6 @@ "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", "dev": true }, - "exit-hook": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz", - "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=", - "dev": true - }, "expand-braces": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz", @@ -5249,6 +5384,26 @@ } } }, + "external-editor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.1.0.tgz", + "integrity": "sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA==", + "requires": { + "chardet": "0.4.2", + "iconv-lite": "0.4.19", + "tmp": "0.0.33" + }, + "dependencies": { + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "1.0.2" + } + } + } + }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -5322,20 +5477,17 @@ "fast-deep-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", - "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", - "dev": true + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=" }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fastparse": { "version": "1.1.1", @@ -5362,22 +5514,19 @@ } }, "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.0" + "escape-string-regexp": "1.0.5" } }, "file-entry-cache": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, "requires": { - "flat-cache": "1.2.2", + "flat-cache": "1.3.0", "object-assign": "4.1.0" } }, @@ -5770,10 +5919,9 @@ "dev": true }, "flat-cache": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.2.2.tgz", - "integrity": "sha1-+oZxTnLCHbiGAXYezy9VXRq8a5Y=", - "dev": true, + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", "requires": { "circular-json": "0.3.3", "del": "2.2.2", @@ -5873,8 +6021,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "1.1.3", @@ -6804,6 +6951,11 @@ "integrity": "sha1-2RBL8+RniLVUaMAr8bL6vPj8Ga8=", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -6889,7 +7041,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", - "dev": true, "requires": { "fs.realpath": "1.0.0", "inflight": "1.0.6", @@ -7110,16 +7261,14 @@ } }, "globals": { - "version": "9.14.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-9.14.0.tgz", - "integrity": "sha1-iFmTavADh0EmMFOznQ52yiQeQDQ=", - "dev": true + "version": "11.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz", + "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==" }, "globby": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", - "dev": true, "requires": { "array-union": "1.0.2", "arrify": "1.0.1", @@ -9714,7 +9863,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, "requires": { "ansi-regex": "2.0.0" } @@ -9961,6 +10109,19 @@ "uglify-js": "2.7.4" } }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.1", + "domutils": "1.7.0", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.1.5" + } + }, "http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", @@ -10064,8 +10225,7 @@ "iconv-lite": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", - "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=", - "dev": true + "integrity": "sha1-90aPYBNfXl2tM5nAqBvpoWA6CCs=" }, "ieee754": { "version": "1.1.8", @@ -10074,10 +10234,9 @@ "dev": true }, "ignore": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.5.tgz", - "integrity": "sha1-xOcVRV9gc6jX5drnLS/J1xZj26Y=", - "dev": true + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", + "integrity": "sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA==" }, "ignore-by-default": { "version": "1.0.1", @@ -10124,8 +10283,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "in-publish": { "version": "2.0.0", @@ -10152,7 +10310,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "1.4.0", "wrappy": "1.0.2" @@ -10161,8 +10318,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { "version": "1.3.4", @@ -10171,24 +10327,84 @@ "dev": true }, "inquirer": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz", - "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=", - "dev": true, + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", "requires": { - "ansi-escapes": "1.4.0", - "ansi-regex": "2.0.0", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", + "ansi-escapes": "3.0.0", + "chalk": "2.3.1", + "cli-cursor": "2.1.0", "cli-width": "2.2.0", - "figures": "1.7.0", + "external-editor": "2.1.0", + "figures": "2.0.0", "lodash": "4.16.6", - "readline2": "1.0.1", - "run-async": "0.1.0", - "rx-lite": "3.1.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "mute-stream": "0.0.7", + "run-async": "2.3.0", + "rx-lite": "4.0.8", + "rx-lite-aggregates": "4.0.8", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + } + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "requires": { + "has-flag": "3.0.0" + } + } } }, "internal-ip": { @@ -10454,14 +10670,12 @@ "is-path-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", - "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", - "dev": true + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=" }, "is-path-in-cwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", - "dev": true, "requires": { "is-path-inside": "1.0.0" } @@ -10470,7 +10684,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.0.tgz", "integrity": "sha1-/AbloWg/vaE95mev9xe7wQpI838=", - "dev": true, "requires": { "path-is-inside": "1.0.2" } @@ -10504,6 +10717,11 @@ "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, "is-property": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", @@ -10535,13 +10753,9 @@ } }, "is-resolvable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", - "integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", - "dev": true, - "requires": { - "tryit": "1.0.3" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" }, "is-retry-allowed": { "version": "1.1.0", @@ -10597,8 +10811,7 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isbinaryfile": { "version": "3.0.2", @@ -10609,8 +10822,7 @@ "isexe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/isexe/-/isexe-1.1.2.tgz", - "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=", - "dev": true + "integrity": "sha1-NvPiLmB1CSD15yQaR2qMakInWtA=" }, "isobject": { "version": "2.1.0", @@ -10647,7 +10859,7 @@ "jasmine-spec-reporter": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz", - "integrity": "sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg==", + "integrity": "sha1-HWMq7ANBZwrTJPkrqEtLMrNeniI=", "dev": true, "requires": { "colors": "1.1.2" @@ -10689,7 +10901,6 @@ "version": "3.10.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", - "dev": true, "requires": { "argparse": "1.0.9", "esprima": "4.0.0" @@ -10698,8 +10909,7 @@ "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" } } }, @@ -10731,17 +10941,12 @@ "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", - "dev": true + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "json-stable-stringify": { + "json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "json-stringify-safe": { "version": "5.0.1", @@ -10769,12 +10974,6 @@ "graceful-fs": "4.1.10" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsonpointer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.0.tgz", @@ -10795,7 +10994,7 @@ "karma": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/karma/-/karma-1.7.1.tgz", - "integrity": "sha512-k5pBjHDhmkdaUccnC7gE3mBzZjcxyxYsYVaqiL2G5AqlfLyBO5nw2VdNK+O16cveEPd/gIOWULH7gkiYYwVNHg==", + "integrity": "sha1-hcwI6eCiLXzpzKN8ShvoJPaisa4=", "dev": true, "requires": { "bluebird": "3.5.1", @@ -10847,7 +11046,7 @@ "karma-chrome-launcher": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz", - "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==", + "integrity": "sha1-zxudBxNswY/iOTJ9JGVMPbw2is8=", "dev": true, "requires": { "fs-access": "1.0.1", @@ -10985,7 +11184,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "1.1.2", "type-check": "0.3.2" @@ -11059,8 +11257,7 @@ "lodash": { "version": "4.16.6", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.6.tgz", - "integrity": "sha1-0iyaxmAojzhD4Wun0rXQbMon13c=", - "dev": true + "integrity": "sha1-0iyaxmAojzhD4Wun0rXQbMon13c=" }, "lodash._baseassign": { "version": "3.2.0", @@ -11440,7 +11637,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.1.tgz", "integrity": "sha1-E0OVXtry432bnn7nJB4nxLn7cr4=", - "dev": true, "requires": { "pseudomap": "1.0.2", "yallist": "2.0.0" @@ -11662,8 +11858,7 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" }, "minimalistic-assert": { "version": "1.0.0", @@ -11681,7 +11876,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.3.tgz", "integrity": "sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=", - "dev": true, "requires": { "brace-expansion": "1.1.6" } @@ -11753,7 +11947,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" }, @@ -11761,8 +11954,7 @@ "minimist": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" } } }, @@ -11804,10 +11996,9 @@ "dev": true }, "mute-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz", - "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=", - "dev": true + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" }, "mysql": { "version": "2.15.0", @@ -11910,8 +12101,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "ncname": { "version": "1.0.0", @@ -12316,8 +12506,7 @@ "object-assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", - "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=", - "dev": true + "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" }, "object-component": { "version": "0.0.3", @@ -12532,16 +12721,17 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1.0.2" } }, "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "1.2.0" + } }, "opn": { "version": "5.2.0", @@ -12574,7 +12764,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "0.1.3", "fast-levenshtein": "2.0.6", @@ -12587,8 +12776,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" } } }, @@ -12660,8 +12848,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.4", @@ -12856,14 +13043,12 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=" }, "path-key": { "version": "2.0.1", @@ -12940,20 +13125,17 @@ "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, "requires": { "pinkie": "2.0.4" } @@ -13032,8 +13214,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prepend-http": { "version": "1.0.4", @@ -13078,14 +13259,12 @@ "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "progress": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz", - "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=" }, "progress-stream": { "version": "1.2.0", @@ -13164,8 +13343,7 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "public-encrypt": { "version": "4.0.0", @@ -13338,7 +13516,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", - "dev": true, "requires": { "buffer-shims": "1.0.0", "core-util-is": "1.0.2", @@ -13361,17 +13538,6 @@ "set-immediate-shim": "1.0.1" } }, - "readline2": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz", - "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "mute-stream": "0.0.5" - } - }, "recast": { "version": "0.11.18", "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.18.tgz", @@ -13592,7 +13758,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, "requires": { "caller-path": "0.1.0", "resolve-from": "1.0.1" @@ -13667,8 +13832,7 @@ "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=" }, "resolve-url": { "version": "0.2.1", @@ -13677,13 +13841,19 @@ "dev": true }, "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "onetime": "2.0.1", + "signal-exit": "3.0.2" + }, + "dependencies": { + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + } } }, "right-align": { @@ -13699,7 +13869,6 @@ "version": "2.5.4", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz", "integrity": "sha1-loAAk8vxoMhr2VtGJUZ1NcKd+gQ=", - "dev": true, "requires": { "glob": "7.1.1" } @@ -13715,12 +13884,11 @@ } }, "run-async": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz", - "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=", - "dev": true, + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "requires": { - "once": "1.4.0" + "is-promise": "2.1.0" } }, "run-sequence": { @@ -13774,16 +13942,22 @@ } }, "rx-lite": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz", - "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=", - "dev": true + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=" + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "requires": { + "rx-lite": "4.0.8" + } }, "safe-buffer": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=", - "dev": true + "integrity": "sha1-iTMSr2myEj3vcfV4iQAWce6yyFM=" }, "sass-graph": { "version": "2.2.4", @@ -13900,8 +14074,7 @@ "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" }, "semver-diff": { "version": "2.1.0", @@ -14130,7 +14303,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "1.0.0" } @@ -14138,19 +14310,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", - "dev": true, - "requires": { - "glob": "7.1.1", - "interpret": "1.0.1", - "rechoir": "0.6.2" - } + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "sigmund": { "version": "1.0.1", @@ -14180,10 +14340,19 @@ "dev": true }, "slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "requires": { + "is-fullwidth-code-point": "2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } + } }, "sliced": { "version": "1.0.1", @@ -14956,8 +15125,7 @@ "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "stringstream": { "version": "0.0.5", @@ -14969,7 +15137,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, "requires": { "ansi-regex": "2.0.0" } @@ -15001,8 +15168,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "style-loader": { "version": "0.20.1", @@ -15068,40 +15234,63 @@ "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 + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, "table": { - "version": "3.8.3", - "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz", - "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=", - "dev": true, + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", "requires": { - "ajv": "4.11.2", - "ajv-keywords": "1.5.1", - "chalk": "1.1.3", - "lodash": "4.16.6", - "slice-ansi": "0.0.4", + "ajv": "5.5.2", + "ajv-keywords": "2.1.1", + "chalk": "2.3.1", + "lodash": "4.17.5", + "slice-ansi": "1.0.0", "string-width": "2.1.1" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", + "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", + "requires": { + "color-convert": "1.9.0" + } + }, + "chalk": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz", + "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==", + "requires": { + "ansi-styles": "3.2.0", + "escape-string-regexp": "1.0.5", + "supports-color": "5.2.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "lodash": { + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", + "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=", - "dev": true, + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "requires": { "is-fullwidth-code-point": "2.0.0", "strip-ansi": "4.0.0" @@ -15111,10 +15300,17 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, "requires": { "ansi-regex": "3.0.0" } + }, + "supports-color": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz", + "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==", + "requires": { + "has-flag": "3.0.0" + } } } }, @@ -15147,8 +15343,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "throttleit": { "version": "0.0.2", @@ -15159,8 +15354,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "through2": { "version": "2.0.1", @@ -15440,12 +15634,6 @@ } } }, - "tryit": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz", - "integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=", - "dev": true - }, "tty-browserify": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", @@ -15469,7 +15657,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "1.1.2" } @@ -15504,8 +15691,7 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "uglify-js": { "version": "2.7.4", @@ -15931,19 +16117,10 @@ } } }, - "user-home": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz", - "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, "useragent": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/useragent/-/useragent-2.3.0.tgz", - "integrity": "sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw==", + "integrity": "sha1-IX+UOtVAyyEoZYqyP8lg9qiMmXI=", "dev": true, "requires": { "lru-cache": "4.1.1", @@ -15988,8 +16165,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "utils-merge": { "version": "1.0.1", @@ -16911,7 +17087,6 @@ "version": "1.2.11", "resolved": "https://registry.npmjs.org/which/-/which-1.2.11.tgz", "integrity": "sha1-yLLu6muMFln6fB3U/aq+lTPcXos=", - "dev": true, "requires": { "isexe": "1.1.2" } @@ -16964,14 +17139,12 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, "requires": { "mkdirp": "0.5.1" } @@ -17050,8 +17223,7 @@ "yallist": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.0.0.tgz", - "integrity": "sha1-MGxUODXwnuGkyyO3vOmrNByRzdQ=", - "dev": true + "integrity": "sha1-MGxUODXwnuGkyyO3vOmrNByRzdQ=" }, "yaml-loader": { "version": "0.5.0", From f18b875ae6ab3cb7f7bcb73510d4b73df1b49c51 Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Wed, 14 Feb 2018 11:46:07 +0100 Subject: [PATCH 04/12] E2E partially fixed --- e2e/helpers/selectors.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index 013d34627..dba8758d9 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -53,7 +53,7 @@ export default { socialNameInput: `${components.vnTextfield}[name="socialName"]`, fiscalIdInput: `${components.vnTextfield}[name="fi"]`, equalizationTaxCheckboxLabel: `${components.vnCheck}[label='Is equalizated'] > label > input`, - acceptPropagationButton: `body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > vn-client-fiscal-data > vn-dialog > div > form > div.button-bar > tpl-buttons > button:nth-child(2)`, + acceptPropagationButton: `vn-client-fiscal-data vn-confirm button[response="ACCEPT"]`, addressInput: `${components.vnTextfield}[name="street"]`, cityInput: `${components.vnTextfield}[name="city"]`, postcodeInput: `${components.vnTextfield}[name="postcode"]`, @@ -76,7 +76,7 @@ export default { payMethodOptionOne: `${components.vnAutocomplete}[field="$ctrl.client.payMethodFk"] > vn-vertical > vn-drop-down > vn-vertical:not(.ng-hide) > vn-auto:nth-child(2) > ul > li:nth-child(2)`, IBANInput: `${components.vnTextfield}[name="iban"]`, dueDayInput: `${components.vnTextfield}[name="dueDay"]`, - cancelNotificationButton: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > vn-client-billing-data > vn-dialog > div > form > div.button-bar > tpl-buttons > button:nth-child(1)', + cancelNotificationButton: 'vn-client-billing-data > vn-dialog tpl-buttons > button:nth-child(1)', receivedCoreVNHCheckbox: `${components.vnCheck}[label='Received core VNH'] > label > input`, receivedCoreVNLCheckbox: `${components.vnCheck}[label='Received core VNL'] > label > input`, receivedB2BVNLCheckbox: `${components.vnCheck}[label='Received B2B VNL'] > label > input`, From 87dfa496924b0f1b39054babb8e049bb8005ca6a Mon Sep 17 00:00:00 2001 From: Juan Ferrer Toribio Date: Wed, 14 Feb 2018 12:52:24 +0100 Subject: [PATCH 05/12] Bugs with webpack assets solved --- services/auth/Dockerfile | 2 +- services/auth/server/boot/routes.js | 2 +- services/loopback/server/assets.js | 38 -------------------- services/loopback/server/server.js | 53 ++++++++++++++++++++-------- services/salix/Dockerfile | 2 +- services/salix/server/boot/routes.js | 2 +- 6 files changed, 43 insertions(+), 56 deletions(-) delete mode 100644 services/loopback/server/assets.js diff --git a/services/auth/Dockerfile b/services/auth/Dockerfile index 935e0809f..3a151e289 100644 --- a/services/auth/Dockerfile +++ b/services/auth/Dockerfile @@ -2,7 +2,7 @@ FROM node:8.9.4 COPY auth /app COPY loopback /loopback -COPY nginx/static/webpack-assets.json /loopback/server/ +COPY nginx/static/webpack-assets.json /loopback/client/ WORKDIR /app diff --git a/services/auth/server/boot/routes.js b/services/auth/server/boot/routes.js index e84749bc8..5460afb5a 100644 --- a/services/auth/server/boot/routes.js +++ b/services/auth/server/boot/routes.js @@ -6,7 +6,7 @@ module.exports = function(app) { let applications = app.get('applications'); app.get('/', function(req, res) { - res.render('index.ejs'); + app.renderIndex(res); }); app.post('/login', function(req, res) { diff --git a/services/loopback/server/assets.js b/services/loopback/server/assets.js deleted file mode 100644 index 1a857874e..000000000 --- a/services/loopback/server/assets.js +++ /dev/null @@ -1,38 +0,0 @@ -require('require-yaml'); - -/** - * Obtains the webpack asset filenames with its hash. - * - * @param {String} main The main asset name - * @param {Array} deps The main asset dependencies - * @return {Array} The assets filenames - */ -function assets(main, deps) { - let jsFiles; - let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development'; - - if (env === 'development') { - const wpConfig = require('../../../webpack.config.yml'); - let publicPath = wpConfig.publicPath; - - jsFiles = [`${publicPath}/manifest.js`]; - - for (let dep of deps) - jsFiles.push(`${publicPath}/${dep}.js`); - - jsFiles.push(`${publicPath}/${main}.js`); - } else { - const wpAssets = require('./webpack-assets.json'); - - let jsFiles = [wpAssets.manifest.js]; - - for (let dep of deps) - jsFiles.push(wpAssets[dep].js); - - jsFiles.push(wpAssets[main].js); - } - - return jsFiles; -} - -module.exports = assets; diff --git a/services/loopback/server/server.js b/services/loopback/server/server.js index d3e9699be..294500854 100644 --- a/services/loopback/server/server.js +++ b/services/loopback/server/server.js @@ -1,4 +1,3 @@ - let loopback = require('loopback'); let boot = require('loopback-boot'); let fs = require('fs-extra'); @@ -26,31 +25,57 @@ function vnBoot(app, rootDir, rootModule) { // View + let wpAssets; let viewDir = `${rootDir}/../client`; if (fs.existsSync(viewDir)) { + try { + wpAssets = require('../client/webpack-assets.json'); + } catch (e) {} + app.set('view engine', 'ejs'); app.set('views', viewDir); app.use(loopback.static(path.resolve(rootDir, '../client'))); - app.get('/', function(req, res) { - res.render(`${viewDir}/index.ejs`, { - assets: require('./assets') - }); - }); } + app.renderIndex = async res => { + res.render(`${viewDir}/index.ejs`, { + assets: assets + }); + + function assets(main, deps) { + let jsFiles; + + if (wpAssets) { + jsFiles = [wpAssets.manifest.js]; + + for (let dep of deps) + jsFiles.push(wpAssets[dep].js); + + jsFiles.push(wpAssets[main].js); + } else { + let publicPath = '/static'; + jsFiles = [`${publicPath}/manifest.js`]; + + for (let dep of deps) + jsFiles.push(`${publicPath}/${dep}.js`); + + jsFiles.push(`${publicPath}/${main}.js`); + } + + return jsFiles; + } + }; + // Initialization - app.start = function(port) { + app.start = port => { function onListen() { app.emit('started'); - - if (require.main === rootModule) { - let packageJson = require(`${rootDir}/../package.json`); - let appName = packageJson.name; - let baseUrl = app.get('url').replace(/\/$/, ''); - console.log(`Web server ${appName} listening at: %s`, baseUrl); - } + let packageJson = require(`${rootDir}/../package.json`); + let appName = packageJson.name; + let baseUrl = app.get('url').replace(/\/$/, ''); + console.log(`Web server ${appName} listening at: %s`, baseUrl); } let args = port ? [port, onListen] : [onListen]; diff --git a/services/salix/Dockerfile b/services/salix/Dockerfile index c5fd26608..a7762e81e 100644 --- a/services/salix/Dockerfile +++ b/services/salix/Dockerfile @@ -2,7 +2,7 @@ FROM node:8.9.4 COPY salix /app COPY loopback /loopback -COPY nginx/static/webpack-assets.json /loopback/server/ +COPY nginx/static/webpack-assets.json /loopback/client/ WORKDIR /app diff --git a/services/salix/server/boot/routes.js b/services/salix/server/boot/routes.js index c7e5d09b3..56b2a3f47 100644 --- a/services/salix/server/boot/routes.js +++ b/services/salix/server/boot/routes.js @@ -5,7 +5,7 @@ module.exports = function(app) { let token = req.cookies.vnToken; validateToken(token, function(isValid) { if (isValid) - res.render('index.ejs'); + app.renderIndex(res); else redirectToAuth(res, req.get('origin')); }); From 61cd4acca5c74a62961ea0a56ed92bb17c7f3459 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez <=> Date: Wed, 14 Feb 2018 14:22:35 +0100 Subject: [PATCH 06/12] item-barcode functionality plus front end tests --- client/item/src/barcode/item-barcode.html | 37 ++++- client/item/src/barcode/item-barcode.js | 124 ++++++++++++++- client/item/src/barcode/item-barcode.spec.js | 142 ++++++++++++++++++ .../common/methods/item/crudItemBarcodes.js | 36 +++++ services/item/common/models/item.json | 5 + services/item/common/models/itemBarcode.js | 3 + services/item/common/models/itemBarcode.json | 28 ++++ services/item/server/model-config.json | 3 + 8 files changed, 372 insertions(+), 6 deletions(-) create mode 100644 client/item/src/barcode/item-barcode.spec.js create mode 100644 services/item/common/methods/item/crudItemBarcodes.js create mode 100644 services/item/common/models/itemBarcode.js create mode 100644 services/item/common/models/itemBarcode.json diff --git a/client/item/src/barcode/item-barcode.html b/client/item/src/barcode/item-barcode.html index 549ac04d1..9f01f4c64 100644 --- a/client/item/src/barcode/item-barcode.html +++ b/client/item/src/barcode/item-barcode.html @@ -1,5 +1,32 @@ - - - Item barcode - - \ No newline at end of file +
+ + + + Item Barcodes + + + + + + + + + + + + + + + +
diff --git a/client/item/src/barcode/item-barcode.js b/client/item/src/barcode/item-barcode.js index 850c262b8..eac4ab6cb 100644 --- a/client/item/src/barcode/item-barcode.js +++ b/client/item/src/barcode/item-barcode.js @@ -1,5 +1,127 @@ import ngModule from '../module'; +export default class Controller { + constructor($state, $scope, $http, $q, $translate, vnApp) { + this.$state = $state; + this.$scope = $scope; + this.$http = $http; + this.$q = $q; + this.$translate = $translate; + this.vnApp = vnApp; + + this.barcodes = []; + this.removedBarcodes = []; + this.oldBarcodes = {}; + } + _setIconAdd() { + if (this.barcodes.length) { + this.barcodes.map(element => { + element.showAddIcon = false; + return true; + }); + this.barcodes[this.barcodes.length - 1].showAddIcon = true; + } else { + this.addBarcode(); + } + } + + _setDirtyForm() { + if (this.$scope.form) { + this.$scope.form.$setDirty(); + } + } + _unsetDirtyForm() { + if (this.$scope.form) { + this.$scope.form.$setPristine(); + } + } + _equalBarcodes(oldBarcode, newBarcode) { + return oldBarcode.id === newBarcode.id && oldBarcode.code === newBarcode.code; + } + + addBarcode() { + this.barcodes.push({code: null, itemFk: this.$state.params.id, showAddIcon: true}); + this._setIconAdd(); + } + + removeBarcode(index) { + let item = this.barcodes[index]; + if (item) { + this.barcodes.splice(index, 1); + this._setIconAdd(); + if (item.id) { + this.removedBarcodes.push(item.id); + this._setDirtyForm(); + } + } + } + + submit() { + let codes = []; + let repeatedBarcodes = false; + let canSubmit; + let barcodesObj = { + delete: this.removedBarcodes, + create: [], + update: [] + }; + for (let i = 0; i < this.barcodes.length; i++) { + let barcode = this.barcodes[i]; + let isNewBarcode = barcode.id === undefined; + + if (barcode.code && codes.indexOf(barcode.code) !== -1) { + repeatedBarcodes = true; + break; + } + if (barcode.code) codes.push(barcode.code); + + if (isNewBarcode && barcode.code) { + barcodesObj.create.push(barcode); + } else if (!isNewBarcode && !this._equalBarcodes(this.oldBarcodes[barcode.id], barcode)) { + barcodesObj.update.push(barcode); + } + } + + if (repeatedBarcodes) { + return this.vnApp.showMessage(this.$translate.instant('The barcode must be unique')); + } + + canSubmit = barcodesObj.update.length > 0 || barcodesObj.create.length > 0 || barcodesObj.delete.length > 0; + + if (canSubmit) { + return this.$http.post(`/item/api/ItemBarcodes/crudItemBarcodes`, barcodesObj).then(() => { + this.getBarcodes(); + this._unsetDirtyForm(); + }); + } + this.vnApp.showMessage(this.$translate.instant('No changes to save')); + } + + setOldBarcodes(response) { + this._setIconAdd(); + response.data.forEach(barcode => { + this.oldBarcodes[barcode.id] = Object.assign({}, barcode); + }); + } + + getBarcodes() { + let filter = { + where: {itemFk: this.$state.params.id} + }; + this.$http.get(`/item/api/ItemBarcodes?filter=${JSON.stringify(filter)}`).then(response => { + this.barcodes = response.data; + this.setOldBarcodes(response); + }); + } + + $onInit() { + this.getBarcodes(); + } +} + +Controller.$inject = ['$state', '$scope', '$http', '$q', '$translate', 'vnApp']; + ngModule.component('vnItemBarcode', { - template: require('./item-barcode.html') + template: require('./item-barcode.html'), + controller: Controller }); diff --git a/client/item/src/barcode/item-barcode.spec.js b/client/item/src/barcode/item-barcode.spec.js new file mode 100644 index 000000000..98e645c26 --- /dev/null +++ b/client/item/src/barcode/item-barcode.spec.js @@ -0,0 +1,142 @@ +import './item-barcode.js'; + +describe('Item', () => { + describe('Component vnItemBarcode', () => { + let $componentController; + let $state; + let controller; + let $httpBackend; + + beforeEach(() => { + angular.mock.module('item'); + }); + + beforeEach(angular.mock.inject((_$componentController_, _$state_, _$httpBackend_) => { + $componentController = _$componentController_; + $state = _$state_; + $httpBackend = _$httpBackend_; + $state.params.id = '1'; + controller = $componentController('vnItemBarcode', {$state: $state}); + })); + + describe('add / remove barcode()', () => { + it('should add one empty barcode into controller barcodes collection and call _setIconAdd()', () => { + controller.barcodes = []; + spyOn(controller, '_setIconAdd').and.callThrough(); + controller.addBarcode(); + + expect(controller._setIconAdd).toHaveBeenCalledWith(); + expect(controller.barcodes.length).toEqual(1); + expect(controller.barcodes[0].id).toBe(undefined); + expect(controller.barcodes[0].showAddIcon).toBeTruthy(); + }); + + it('should remove a barcode that occupies the position in the index given and call _setIconAdd()', () => { + let index = 2; + controller.barcodes = [ + {id: 1, code: '1111', showAddIcon: false}, + {id: 2, code: '2222', showAddIcon: false}, + {id: 3, code: '3333', showAddIcon: true} + ]; + + spyOn(controller, '_setIconAdd').and.callThrough(); + + controller.removeBarcode(index); + + expect(controller._setIconAdd).toHaveBeenCalledWith(); + expect(controller.barcodes.length).toEqual(2); + expect(controller.barcodes[0].showAddIcon).toBeFalsy(); + expect(controller.barcodes[1].showAddIcon).toBeTruthy(); + expect(controller.barcodes[index]).toBe(undefined); + }); + }); + + describe('_equalBarcodes()', () => { + it('should return true if two barcodes are equals independent of control attributes', () => { + let code1 = {id: 1, code: '1111', showAddIcon: true}; + let code2 = {id: 1, code: '1111', showAddIcon: false}; + let equals = controller._equalBarcodes(code2, code1); + + expect(equals).toBeTruthy(); + }); + + it('should return false if two barcodes aint equals independent of control attributes', () => { + let code1 = {id: 1, code: '1111', showAddIcon: true}; + let code2 = {id: 1, code: '2222', showAddIcon: true}; + let equals = controller._equalBarcodes(code2, code1); + + expect(equals).toBeFalsy(); + }); + }); + + describe('getBarcodes()', () => { + it('should perform a GET query to receive the item barcodes', () => { + let filter = { + where: {itemFk: '1'} + }; + let res = [{id: 1, code: '1111'}]; + $httpBackend.when('GET', `/item/api/ItemBarcodes?filter=${JSON.stringify(filter)}`).respond(res); + $httpBackend.expectGET(`/item/api/ItemBarcodes?filter=${JSON.stringify(filter)}`); + controller.getBarcodes(); + $httpBackend.flush(); + }); + }); + + describe('submit()', () => { + it("should return an error message 'The barcode must be unique' when the code isnt unique", () => { + spyOn(controller.vnApp, 'showMessage').and.callThrough(); + controller.barcodes = [ + {code: 123454, itemFk: 1, id: 1}, + {code: 123454, itemFk: 1} + ]; + controller.oldBarcodes = {1: {id: 1, code: 123454, itemFk: 1}}; + controller.submit(); + + expect(controller.vnApp.showMessage).toHaveBeenCalledWith('The barcode must be unique'); + }); + + it("should perfom a query to delete barcodes", () => { + controller.removedBarcodes = [1, 2, 3]; + + $httpBackend.when('GET', `/item/api/ItemBarcodes?filter={"where":{"itemFk":"1"}}`).respond([{code: 123454, itemFk: 1, id: 1}]); + $httpBackend.when('POST', `/item/api/ItemBarcodes/crudItemBarcodes`).respond('ok!'); + $httpBackend.expectPOST(`/item/api/ItemBarcodes/crudItemBarcodes`); + controller.submit(); + $httpBackend.flush(); + }); + + it("should perfom a query to update barcodes", () => { + controller.barcodes = [{code: 2222, itemFk: 1, id: 1}]; + controller.oldBarcodes = {1: {id: 1, code: 1111, itemFk: 1}}; + + $httpBackend.when('GET', `/item/api/ItemBarcodes?filter={"where":{"itemFk":"1"}}`).respond([{}]); + $httpBackend.when('POST', `/item/api/ItemBarcodes/crudItemBarcodes`).respond('ok!'); + $httpBackend.expectPOST(`/item/api/ItemBarcodes/crudItemBarcodes`); + controller.submit(); + $httpBackend.flush(); + }); + + it("should perfom a query to create new barcode", () => { + controller.barcodes = [{code: 1111, itemFk: 1}]; + + $httpBackend.when('GET', `/item/api/ItemBarcodes?filter={"where":{"itemFk":"1"}}`).respond([{}]); + $httpBackend.when('POST', `/item/api/ItemBarcodes/crudItemBarcodes`).respond('ok!'); + $httpBackend.expectPOST(`/item/api/ItemBarcodes/crudItemBarcodes`); + controller.submit(); + $httpBackend.flush(); + }); + + it("should return a message 'No changes to save' when there are no changes to apply", () => { + spyOn(controller.vnApp, 'showMessage').and.callThrough(); + controller.oldBarcodes = [ + {code: 1, itemFk: 1, id: 1}, + {code: 2, itemFk: 1, id: 2} + ]; + controller.barcodes = []; + controller.submit(); + + expect(controller.vnApp.showMessage).toHaveBeenCalledWith('No changes to save'); + }); + }); + }); +}); diff --git a/services/item/common/methods/item/crudItemBarcodes.js b/services/item/common/methods/item/crudItemBarcodes.js new file mode 100644 index 000000000..93eedf133 --- /dev/null +++ b/services/item/common/methods/item/crudItemBarcodes.js @@ -0,0 +1,36 @@ +module.exports = Self => { + Self.remoteMethod('crudItemBarcodes', { + description: 'create, update or delete barcodes', + accessType: 'WRITE', + accepts: [ + { + arg: 'barcodes', + type: 'Object', + require: true, + description: 'object with barcodes to create, update or delete, Example: {create: [], update: [], delete: []}', + http: {source: 'body'} + } + ], + http: { + path: `/crudItemBarcodes`, + verb: 'post' + } + }); + + Self.crudItemBarcodes = barcodes => { + let promises = []; + + if (barcodes.delete && barcodes.delete.length) { + promises.push(Self.destroyAll({id: {inq: barcodes.delete}})); + } + if (barcodes.create.length) { + promises.push(Self.create(barcodes.create)); + } + if (barcodes.update.length) { + barcodes.update.forEach(barcode => { + promises.push(Self.upsert(barcode)); + }); + } + return Promise.all(promises); + }; +}; diff --git a/services/item/common/models/item.json b/services/item/common/models/item.json index 6944a5eea..c693871ec 100644 --- a/services/item/common/models/item.json +++ b/services/item/common/models/item.json @@ -84,6 +84,11 @@ "type": "hasMany", "model": "ItemTag", "foreignKey": "itemFk" + }, + "itemBarcode": { + "type": "hasMany", + "model": "ItemBarcode", + "foreignKey": "itemFk" } } } \ No newline at end of file diff --git a/services/item/common/models/itemBarcode.js b/services/item/common/models/itemBarcode.js new file mode 100644 index 000000000..be746ecb3 --- /dev/null +++ b/services/item/common/models/itemBarcode.js @@ -0,0 +1,3 @@ +module.exports = function(Self) { + require('../methods/item/crudItemBarcodes.js')(Self); +}; diff --git a/services/item/common/models/itemBarcode.json b/services/item/common/models/itemBarcode.json new file mode 100644 index 000000000..9274cae98 --- /dev/null +++ b/services/item/common/models/itemBarcode.json @@ -0,0 +1,28 @@ +{ + "name": "ItemBarcode", + "base": "VnModel", + "options": { + "mysql": { + "table": "itemBarcode", + "database": "vn" + } + }, + "properties": { + "id": { + "type": "Number", + "id": true, + "description": "Identifier" + }, + "code": { + "type": "String", + "required": true + } + }, + "relations": { + "item": { + "type": "belongsTo", + "model": "Item", + "foreignKey": "itemFk" + } + } + } diff --git a/services/item/server/model-config.json b/services/item/server/model-config.json index 09eed1735..8c1e5d26b 100644 --- a/services/item/server/model-config.json +++ b/services/item/server/model-config.json @@ -37,5 +37,8 @@ }, "ItemLog": { "dataSource": "vn" + }, + "ItemBarcode": { + "dataSource": "vn" } } From 6e1d3135d5d20a2de10f1ebe0ef3e7032bfe4baf Mon Sep 17 00:00:00 2001 From: Carlos Jimenez <=> Date: Wed, 14 Feb 2018 14:24:14 +0100 Subject: [PATCH 07/12] mini refactor on routes.json and crudAddressObervations --- client/item/routes.json | 29 ++++++++++++------- .../address/crudAddressObservations.js | 3 -- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/client/item/routes.json b/client/item/routes.json index 74dbe6dad..94722cd38 100644 --- a/client/item/routes.json +++ b/client/item/routes.json @@ -15,16 +15,19 @@ "state": "item.index", "component": "vn-item-list", "acl": ["developer"] - }, { + }, + { "url": "/create", "state": "item.create", "component": "vn-item-create" - }, { + }, + { "url": "/:id", "state": "item.card", "abstract": true, "component": "vn-item-card" - }, { + }, + { "url" : "/data", "state": "item.card.data", "component": "vn-item-data", @@ -35,7 +38,8 @@ "description": "Basic data", "icon": "folder" } - },{ + }, + { "url" : "/tags", "state": "item.card.tags", "component": "vn-item-tags", @@ -46,7 +50,8 @@ "description": "Tags", "icon": "folder" } - },{ + }, + { "url" : "/history", "state": "item.card.history", "component": "vn-item-history", @@ -57,7 +62,8 @@ "description": "History", "icon": "folder" } - },{ + }, + { "url" : "/niche", "state": "item.card.niche", "component": "vn-item-niche", @@ -68,7 +74,8 @@ "description": "Niche", "icon": "folder" } - },{ + }, + { "url" : "/botanical", "state": "item.card.botanical", "component": "vn-item-botanical", @@ -79,7 +86,8 @@ "description": "Botanical", "icon": "folder" } - },{ + }, + { "url" : "/picture", "state": "item.card.picture", "component": "vn-item-picture", @@ -90,9 +98,10 @@ "description": "Picture", "icon": "folder" } - }, { + }, + { "url" : "/barcode", - "state": "item.card.barcode", + "state": "item.card.itemBarcode", "component": "vn-item-barcode", "params": { "item": "$ctrl.item" diff --git a/services/client/common/methods/address/crudAddressObservations.js b/services/client/common/methods/address/crudAddressObservations.js index b158b0749..0b80d1bac 100644 --- a/services/client/common/methods/address/crudAddressObservations.js +++ b/services/client/common/methods/address/crudAddressObservations.js @@ -11,9 +11,6 @@ module.exports = Self => { http: {source: 'body'} } ], - returns: { - arg: 'sumAmount' - }, http: { path: `/crudAddressObservations`, verb: 'post' From f0c84451491a10ca55f47efb3054dc833f2d5180 Mon Sep 17 00:00:00 2001 From: Carlos Jimenez <=> Date: Wed, 14 Feb 2018 14:52:35 +0100 Subject: [PATCH 08/12] refactor on back end tests gulp task plus file to use pending to be finished --- gulpfile.js | 18 +++++++++++++++++- services-test.config.js | 24 ++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 services-test.config.js diff --git a/gulpfile.js b/gulpfile.js index 05bcc6b76..af1ecc636 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -76,6 +76,22 @@ gulp.task('e2e-only', () => { .pipe(jasmine({reporter: 'none'})); }); +/** + * Runs the backend tests. + */ +// gulp.task('test', ['test-only'], async () => { +// gulp.watch('./services/**/*', ['test-only']); +// gulp.unwatch('./services/node_modules'); +// }); + +// gulp.task('test-only', () => { +// const jasmine = require('gulp-jasmine'); +// gulp.src('./services/loopback/common/**/*[sS]pec.js') +// .pipe(jasmine( +// require('./services-test.config') +// )); +// }); + /** * Cleans all generated project files. */ @@ -181,7 +197,7 @@ gulp.task('nginx-start', ['nginx-conf'], async () => { if (isWindows) nginxBin = `start /B ${nginxBin}`; - log(`Application will be at http://${proxyConf.host}:${proxyConf.port}/`); + log(`Application will be available at http://${proxyConf.host}:${proxyConf.port}/`); await execP(`${nginxBin} -c "${nginxConf}" -p "${nginxDir}"`); }); diff --git a/services-test.config.js b/services-test.config.js new file mode 100644 index 000000000..aa8866fc8 --- /dev/null +++ b/services-test.config.js @@ -0,0 +1,24 @@ +// const SpecReporter = require('jasmine-spec-reporter').SpecReporter; + +// module.exports = { +// reporter: new SpecReporter({ +// spec: { +// // displayStacktrace: 'summary', +// displaySuccessful: false, +// displayFailedSpec: true, +// displaySpecDuration: true +// } +// }), +// config: { +// spec_dir: 'services', +// spec_files: [ +// // '**/*.spec.js', +// 'auth/server/**/*.spec.js', +// 'client/common/**/*.spec.js', +// 'loopback/common/**/*.spec.js' +// ], +// helpers: [ +// '/services/utils/jasmineHelpers.js' +// ] +// } +// }; From 79c4aac3f50e34159917e6229264745d24e5feff Mon Sep 17 00:00:00 2001 From: Carlos Jimenez <=> Date: Wed, 14 Feb 2018 15:56:22 +0100 Subject: [PATCH 09/12] corrected indentation on routes.json and added one path to services tests js --- client/client/routes.json | 60 ++++++++++++++++++++++++++------------- services_tests.js | 1 + 2 files changed, 41 insertions(+), 20 deletions(-) diff --git a/client/client/routes.json b/client/client/routes.json index 896ab0cad..d8d0fbc03 100644 --- a/client/client/routes.json +++ b/client/client/routes.json @@ -9,16 +9,19 @@ "state": "clients", "component": "vn-client-index", "acl": ["employee"] - }, { + }, + { "url": "/create", "state": "create", "component": "vn-client-create" - }, { + }, + { "url": "/clients/:id", "state": "clientCard", "abstract": true, "component": "vn-client-card" - }, { + }, + { "url": "/basic-data", "state": "clientCard.basicData", "component": "vn-client-basic-data", @@ -29,7 +32,8 @@ "description": "Basic data", "icon": "person" } - }, { + }, + { "url": "/fiscal-data", "state": "clientCard.fiscalData", "component": "vn-client-fiscal-data", @@ -40,7 +44,8 @@ "description": "Fiscal data", "icon": "account_balance" } - }, { + }, + { "url": "/billing-data", "state": "clientCard.billingData", "component": "vn-client-billing-data", @@ -51,12 +56,14 @@ "description": "Pay method", "icon": "assignment" } - }, { + }, + { "url": "/addresses", "state": "clientCard.addresses", "component": "ui-view", "abstract": true - }, { + }, + { "url": "/list", "state": "clientCard.addresses.list", "component": "vn-client-addresses", @@ -67,15 +74,18 @@ "description": "Addresses", "icon": "local_shipping" } - }, { + }, + { "url": "/create", "state": "clientCard.addresses.create", "component": "vn-address-create" - }, { + }, + { "url": "/:addressId/edit", "state": "clientCard.addresses.edit", "component": "vn-address-edit" - }, { + }, + { "url": "/web-access", "state": "clientCard.webAccess", "component": "vn-client-web-access", @@ -86,12 +96,14 @@ "description": "Web access", "icon": "language" } - }, { + }, + { "url": "/notes", "state": "clientCard.notes", "component": "ui-view", "abstract": true - }, { + }, + { "url": "/list", "state": "clientCard.notes.list", "component": "vn-client-notes", @@ -102,16 +114,19 @@ "description": "Notes", "icon": "insert_drive_file" } - }, { + }, + { "url": "/create", "state": "clientCard.notes.create", "component": "vn-note-create" - }, { + }, + { "url": "/credit", "abstract": true, "state": "clientCard.credit", "component": "ui-view" - }, { + }, + { "url": "/list", "state": "clientCard.credit.list", "component": "vn-client-credit-list", @@ -123,19 +138,22 @@ "icon": "credit_card" }, "acl": ["manager", "salesAssistant", "teamBoss", "teamManager"] - }, { + }, + { "url": "/create", "state": "clientCard.credit.create", "component": "vn-client-credit-create", "params": { "client": "$ctrl.client" } - }, { + }, + { "url": "/greuge", "abstract": true, "state": "clientCard.greuge", "component": "ui-view" - }, { + }, + { "url": "/list", "state": "clientCard.greuge.list", "component": "vn-client-greuge-list", @@ -146,14 +164,16 @@ "description": "Greuge", "icon": "work" } - }, { + }, + { "url": "/create", "state": "clientCard.greuge.create", "component": "vn-client-greuge-create", "params": { "client": "$ctrl.client" } - }, { + }, + { "url": "/mandate", "state": "clientCard.mandate", "component": "vn-client-mandate", diff --git a/services_tests.js b/services_tests.js index 068f8c8f2..fe3c907da 100644 --- a/services_tests.js +++ b/services_tests.js @@ -19,6 +19,7 @@ jasmine.loadConfig({ spec_files: [ 'auth/server/**/*[sS]pec.js', 'client/common/**/*[sS]pec.js', + 'item/common/**/*[sS]pec.js', 'loopback/common/**/*[sS]pec.js' ], helpers: [ From 3abc4c7a68469f67dcabf5e533bc0b3f810e93fe Mon Sep 17 00:00:00 2001 From: Carlos Jimenez <=> Date: Wed, 14 Feb 2018 16:49:19 +0100 Subject: [PATCH 10/12] backend unit test for crudItemBarcodes --- .../item/specs/crudItemBarcodes.spec.js | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 services/item/common/methods/item/specs/crudItemBarcodes.spec.js diff --git a/services/item/common/methods/item/specs/crudItemBarcodes.spec.js b/services/item/common/methods/item/specs/crudItemBarcodes.spec.js new file mode 100644 index 000000000..72365229a --- /dev/null +++ b/services/item/common/methods/item/specs/crudItemBarcodes.spec.js @@ -0,0 +1,51 @@ +const crudItemBarcodes = require('../crudItemBarcodes'); +const catchErrors = require('../../../../../../services/utils/jasmineHelpers').catchErrors; + +describe('Item crudItemBarcodes()', () => { + it('should call the destroyAll methodif there are ids in delete Array', done => { + let self = jasmine.createSpyObj('self', ['remoteMethod', 'crudItemBarcodes', 'destroyAll', 'create', 'upsert']); + + crudItemBarcodes(self); + self.crudItemBarcodes({ + delete: [1], + create: [], + update: [] + }).then(result => { + expect(self.destroyAll).toHaveBeenCalledWith({id: {inq: [1]}}); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should call the create method if there are ids in create Array', done => { + let self = jasmine.createSpyObj('self', ['remoteMethod', 'crudItemBarcodes', 'destroyAll', 'create', 'upsert']); + + crudItemBarcodes(self); + self.crudItemBarcodes({ + delete: [], + create: [1], + update: [] + }).then(result => { + expect(self.create).toHaveBeenCalledWith([1]); + done(); + }) + .catch(catchErrors(done)); + }); + + it('should call the upsert method as many times as ids in update Array', done => { + let self = jasmine.createSpyObj('self', ['remoteMethod', 'crudItemBarcodes', 'destroyAll', 'create', 'upsert']); + + crudItemBarcodes(self); + self.crudItemBarcodes({ + delete: [], + create: [], + update: [1, 2] + }).then(result => { + expect(self.upsert).toHaveBeenCalledWith(1); + expect(self.upsert).toHaveBeenCalledWith(2); + expect(self.upsert.calls.count()).toEqual(2); + done(); + }) + .catch(catchErrors(done)); + }); +}); From 0354628324bc6721e58ed452f5b7ec3bbec68c9d Mon Sep 17 00:00:00 2001 From: Carlos Jimenez <=> Date: Thu, 15 Feb 2018 08:49:58 +0100 Subject: [PATCH 11/12] acl for item barcode --- client/item/src/barcode/item-barcode.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/client/item/src/barcode/item-barcode.html b/client/item/src/barcode/item-barcode.html index 9f01f4c64..94b5e946a 100644 --- a/client/item/src/barcode/item-barcode.html +++ b/client/item/src/barcode/item-barcode.html @@ -5,15 +5,17 @@ Item Barcodes - + Date: Thu, 15 Feb 2018 10:03:49 +0100 Subject: [PATCH 12/12] fixed all e2e and selectors --- e2e/helpers/selectors.js | 4 ++-- ...05_add_address.spec.1.js => 05_add_address.spec.js} | 0 e2e/paths/06_add_address_notes.spec.js | 10 +++++----- e2e/paths/08_add_notes.spec.js | 4 ++-- 4 files changed, 9 insertions(+), 9 deletions(-) rename e2e/paths/{05_add_address.spec.1.js => 05_add_address.spec.js} (100%) diff --git a/e2e/helpers/selectors.js b/e2e/helpers/selectors.js index dba8758d9..06fc42a0e 100644 --- a/e2e/helpers/selectors.js +++ b/e2e/helpers/selectors.js @@ -53,7 +53,7 @@ export default { socialNameInput: `${components.vnTextfield}[name="socialName"]`, fiscalIdInput: `${components.vnTextfield}[name="fi"]`, equalizationTaxCheckboxLabel: `${components.vnCheck}[label='Is equalizated'] > label > input`, - acceptPropagationButton: `vn-client-fiscal-data vn-confirm button[response="ACCEPT"]`, + acceptPropagationButton: `body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > vn-client-fiscal-data > vn-confirm > div > form > div.button-bar > tpl-buttons > button:nth-child(2)`, addressInput: `${components.vnTextfield}[name="street"]`, cityInput: `${components.vnTextfield}[name="city"]`, postcodeInput: `${components.vnTextfield}[name="postcode"]`, @@ -115,7 +115,7 @@ export default { addNoteFloatButton: `${components.vnFloatButton}`, noteInput: `${components.vnTextarea}[label="Note"]`, saveButton: `${components.vnSubmit}`, - firstNoteText: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > ui-view > vn-client-notes > vn-card > div > vn-vertical > vn-one:nth-child(2) > vn-horizontal:nth-child(2) > b' + firstNoteText: 'body > vn-app > vn-vertical > vn-vertical > vn-client-card > vn-main-block > vn-horizontal > vn-one > vn-vertical > ui-view > vn-client-notes > vn-card > div > vn-vertical > vn-one:nth-child(2) > vn-horizontal.ng-binding' }, credit: { creditButton: `${components.vnMenuItem}[ui-sref="clientCard.credit.list"]`, diff --git a/e2e/paths/05_add_address.spec.1.js b/e2e/paths/05_add_address.spec.js similarity index 100% rename from e2e/paths/05_add_address.spec.1.js rename to e2e/paths/05_add_address.spec.js diff --git a/e2e/paths/06_add_address_notes.spec.js b/e2e/paths/06_add_address_notes.spec.js index 3c3d34a35..349d25093 100644 --- a/e2e/paths/06_add_address_notes.spec.js +++ b/e2e/paths/06_add_address_notes.spec.js @@ -84,9 +84,9 @@ describe('Add address notes path', () => { .catch(catchErrors(done)); }); - it('should add as many notes as observation types', done => { - nightmare - .waitToClick(selectors.addresses.defaultCheckboxInput) + // it('should add as many notes as observation types', done => { + // nightmare + // .waitToClick(selectors.addresses.defaultCheckboxInput) // .waitToClick(selectors.fiscalData.saveButton) // .wait(selectors.globalItems.snackbarIsActive) // .getInnerText(selectors.globalItems.snackbarIsActive) @@ -94,6 +94,6 @@ describe('Add address notes path', () => { // expect(result).toContain('Some fields are invalid'); // done(); // }) - .catch(catchErrors(done)); - }); + // .catch(catchErrors(done)); + // }); }); diff --git a/e2e/paths/08_add_notes.spec.js b/e2e/paths/08_add_notes.spec.js index 339ea186e..c8f12209c 100644 --- a/e2e/paths/08_add_notes.spec.js +++ b/e2e/paths/08_add_notes.spec.js @@ -85,7 +85,7 @@ describe('Add notes path', () => { it(`should create a note`, done => { nightmare - .type(selectors.notes.noteInput, 'Meeting with Black Widow 21th 9am') + .type(selectors.notes.noteInput, 'Meeting with Black Widow 21st 9am') .click(selectors.notes.saveButton) .wait(selectors.globalItems.snackbarIsActive) .getInnerText(selectors.globalItems.snackbarIsActive) @@ -102,7 +102,7 @@ describe('Add notes path', () => { .wait(selectors.notes.firstNoteText) .getInnerText(selectors.notes.firstNoteText) .then(value => { - expect(value).toEqual('Meeting with Black Widow 21th 9am'); + expect(value).toEqual('Meeting with Black Widow 21st 9am'); done(); }) .catch(catchErrors(done));