From 65e3c5acb5ded1d1adc76a742d356184b8d4b92b Mon Sep 17 00:00:00 2001 From: mpherman Date: Tue, 9 Jul 2019 12:48:56 -0400 Subject: [PATCH] Adding the ability to Party Up! (#24) - This PR will allow users to create a shared group leaderboard or 'party' where they can compare multiple grails against each other. - Each Party can be registered similarly to a Holy Grail sheet by clicking on the register button on the party home page (./party). - There is a tab to Join the party and (if you are logged in as the owner) a tab to Manage the party. - When a user Joins the Party, they are put onto a Pending User list and have to be approved by the party owner before they appear on the party scoreboard. - Once a user is accepted to the party, whenever they save their holy grail a copy will be saved to the Party database for retrieval later. - There is now a party button (indicated by a 1-2-3 ranking icon) in addition to the home button on the bottom left side of the screen to navigate between the sections of the website. - This update also includes an ItemScore value, which is a different way to compare grails rather than just items remaining. The ItemScore for any item is relative to its rarity so a rare item (i.e. Tyrael's Might) will have a high ItemScore and a common item will have a very low ItemScore. This is a work in progress, but I wanted to float the idea out there to see if it has any merit. :smile: - Thanks @Nasicus for the "Party" naming idea. :smiley: --- client/package-lock.json | 2106 ++++++++--------- client/package.json | 2 +- client/src/App.tsx | 112 +- client/src/AppThemeContext.tsx | 57 + client/src/RouteManager.ts | 18 + client/src/areas/grail/GrailArea.tsx | 230 +- client/src/areas/grail/HomeButton.tsx | 19 - .../grail/changeManagement/ChangeLogs.ts | 11 + client/src/areas/home/Home.tsx | 34 +- client/src/areas/party/IPartyError.ts | 9 + client/src/areas/party/ItemTotal.ts | 6 + client/src/areas/party/JoinFormRenderer.tsx | 179 ++ client/src/areas/party/Party.tsx | 99 + client/src/areas/party/PartyBody.tsx | 101 + client/src/areas/party/PartyErrorHandler.tsx | 33 + client/src/areas/party/PartyManager.ts | 200 ++ client/src/areas/party/PartyTabType.tsx | 5 + client/src/areas/party/PartyTable.tsx | 282 +++ .../src/areas/party/UserManagerRenderer.tsx | 201 ++ .../components/DataTableColumnHeader.tsx | 53 + .../party/components/UserManagementButton.tsx | 39 + .../areas/party/home/ItemScoreInfoDialog.tsx | 112 + .../src/areas/party/home/PartyExplanation.tsx | 48 + client/src/areas/party/home/PartyHome.tsx | 29 + .../src/areas/party/home/PartyLoginForm.tsx | 238 ++ .../party/home/PartyRegisterFormDialog.tsx | 144 ++ client/src/common/components/HomeButton.tsx | 24 + .../common/components/IconWithProgress.tsx | 57 + client/src/common/components/PartyButton.tsx | 22 + .../common/definitions/api/IPartyApiModel.ts | 10 + .../definitions/union/IPartyAreaData.ts | 10 + .../common/definitions/union/IPartyData.ts | 20 + .../definitions/union/IPartyUserData.ts | 4 + client/src/common/utils/Api.ts | 57 + client/src/withRoot.tsx | 89 - package-lock.json | 278 +-- server/package-lock.json | 800 +++---- server/src/ConfigManager.ts | 1 + server/src/ItemScores.ts | 537 +++++ server/src/controllers/GrailController.ts | 5 +- server/src/controllers/PartyController.ts | 323 +++ server/src/definitions/IItem.ts | 5 + server/src/definitions/Item.ts | 9 + server/src/initializers/AppInitializer.ts | 18 +- server/src/initializers/DbInitializer.ts | 20 +- server/src/models/IGrailCollection.ts | 1 + server/src/models/IHolyGrail.ts | 1 + server/src/models/IParty.ts | 9 + server/src/models/IPartyData.ts | 7 + server/src/utils/ItemScoreCalculator.ts | 121 + 50 files changed, 4914 insertions(+), 1881 deletions(-) create mode 100644 client/src/AppThemeContext.tsx delete mode 100644 client/src/areas/grail/HomeButton.tsx create mode 100644 client/src/areas/party/IPartyError.ts create mode 100644 client/src/areas/party/ItemTotal.ts create mode 100644 client/src/areas/party/JoinFormRenderer.tsx create mode 100644 client/src/areas/party/Party.tsx create mode 100644 client/src/areas/party/PartyBody.tsx create mode 100644 client/src/areas/party/PartyErrorHandler.tsx create mode 100644 client/src/areas/party/PartyManager.ts create mode 100644 client/src/areas/party/PartyTabType.tsx create mode 100644 client/src/areas/party/PartyTable.tsx create mode 100644 client/src/areas/party/UserManagerRenderer.tsx create mode 100644 client/src/areas/party/components/DataTableColumnHeader.tsx create mode 100644 client/src/areas/party/components/UserManagementButton.tsx create mode 100644 client/src/areas/party/home/ItemScoreInfoDialog.tsx create mode 100644 client/src/areas/party/home/PartyExplanation.tsx create mode 100644 client/src/areas/party/home/PartyHome.tsx create mode 100644 client/src/areas/party/home/PartyLoginForm.tsx create mode 100644 client/src/areas/party/home/PartyRegisterFormDialog.tsx create mode 100644 client/src/common/components/HomeButton.tsx create mode 100644 client/src/common/components/IconWithProgress.tsx create mode 100644 client/src/common/components/PartyButton.tsx create mode 100644 client/src/common/definitions/api/IPartyApiModel.ts create mode 100644 client/src/common/definitions/union/IPartyAreaData.ts create mode 100644 client/src/common/definitions/union/IPartyData.ts create mode 100644 client/src/common/definitions/union/IPartyUserData.ts delete mode 100644 client/src/withRoot.tsx create mode 100644 server/src/ItemScores.ts create mode 100644 server/src/controllers/PartyController.ts create mode 100644 server/src/definitions/IItem.ts create mode 100644 server/src/definitions/Item.ts create mode 100644 server/src/models/IParty.ts create mode 100644 server/src/models/IPartyData.ts create mode 100644 server/src/utils/ItemScoreCalculator.ts diff --git a/client/package-lock.json b/client/package-lock.json index 4eaaa16..55604e6 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,7 +9,7 @@ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "7.0.0" } }, "@babel/core": { @@ -57,7 +57,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.2.2" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { @@ -65,8 +65,8 @@ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "7.1.0", + "@babel/types": "7.2.2" } }, "@babel/helper-builder-react-jsx": { @@ -116,8 +116,8 @@ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/traverse": "7.3.4", + "@babel/types": "7.2.2" } }, "@babel/helper-function-name": { @@ -125,9 +125,9 @@ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "7.0.0", + "@babel/template": "7.2.2", + "@babel/types": "7.2.2" } }, "@babel/helper-get-function-arity": { @@ -135,7 +135,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.2.2" } }, "@babel/helper-hoist-variables": { @@ -151,7 +151,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.2.2" } }, "@babel/helper-module-imports": { @@ -159,7 +159,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.2.2" } }, "@babel/helper-module-transforms": { @@ -180,7 +180,7 @@ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "7.2.2" } }, "@babel/helper-plugin-utils": { @@ -201,11 +201,11 @@ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-wrap-function": "7.2.0", + "@babel/template": "7.2.2", + "@babel/traverse": "7.3.4", + "@babel/types": "7.2.2" } }, "@babel/helper-replace-supers": { @@ -224,8 +224,8 @@ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/template": "7.2.2", + "@babel/types": "7.2.2" } }, "@babel/helper-split-export-declaration": { @@ -241,10 +241,10 @@ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "7.1.0", + "@babel/template": "7.2.2", + "@babel/traverse": "7.3.4", + "@babel/types": "7.2.2" } }, "@babel/helpers": { @@ -277,9 +277,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-remap-async-to-generator": "7.1.0", + "@babel/plugin-syntax-async-generators": "7.2.0" } }, "@babel/plugin-proposal-class-properties": { @@ -306,8 +306,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-json-strings": "7.2.0" } }, "@babel/plugin-proposal-object-rest-spread": { @@ -315,8 +315,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-object-rest-spread": "7.2.0" } }, "@babel/plugin-proposal-optional-catch-binding": { @@ -324,8 +324,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-optional-catch-binding": "7.2.0" } }, "@babel/plugin-proposal-unicode-property-regex": { @@ -343,7 +343,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-decorators": { @@ -351,7 +351,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-dynamic-import": { @@ -359,7 +359,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-flow": { @@ -367,7 +367,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz", "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-json-strings": { @@ -375,7 +375,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-jsx": { @@ -383,7 +383,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-object-rest-spread": { @@ -391,7 +391,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-optional-catch-binding": { @@ -399,7 +399,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-syntax-typescript": { @@ -407,7 +407,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz", "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-arrow-functions": { @@ -415,7 +415,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-async-to-generator": { @@ -423,9 +423,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-module-imports": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-remap-async-to-generator": "7.1.0" } }, "@babel/plugin-transform-block-scoped-functions": { @@ -433,7 +433,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-block-scoping": { @@ -441,8 +441,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "lodash": "^4.17.11" + "@babel/helper-plugin-utils": "7.0.0", + "lodash": "4.17.11" } }, "@babel/plugin-transform-classes": { @@ -465,7 +465,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-destructuring": { @@ -473,7 +473,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-dotall-regex": { @@ -491,7 +491,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-exponentiation-operator": { @@ -499,8 +499,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-flow-strip-types": { @@ -508,8 +508,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.0.tgz", "integrity": "sha512-C4ZVNejHnfB22vI2TYN4RUp2oCmq6cSEAg4RygSvYZUECRqUu9O4PMEMNJ4wsemaRGg27BbgYctG4BZh+AgIHw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-flow": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-flow": "7.2.0" } }, "@babel/plugin-transform-for-of": { @@ -517,7 +517,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-function-name": { @@ -525,8 +525,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "7.1.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-literals": { @@ -534,7 +534,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-member-expression-literals": { @@ -550,8 +550,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "7.2.2", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-modules-commonjs": { @@ -578,8 +578,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", "requires": { - "@babel/helper-module-transforms": "^7.1.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "7.2.2", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { @@ -595,7 +595,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-object-super": { @@ -603,8 +603,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.1.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-replace-supers": "7.3.4" } }, "@babel/plugin-transform-parameters": { @@ -630,8 +630,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.2.0.tgz", "integrity": "sha512-YYQFg6giRFMsZPKUM9v+VcHOdfSQdz9jHCx3akAi3UYgyjndmdYGSXylQ/V+HswQt4fL8IklchD9HTsaOCrWQQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-react-display-name": { @@ -639,7 +639,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz", "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-react-jsx": { @@ -647,9 +647,9 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz", "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==", "requires": { - "@babel/helper-builder-react-jsx": "^7.3.0", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-builder-react-jsx": "7.3.0", + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-jsx": "7.2.0" } }, "@babel/plugin-transform-react-jsx-self": { @@ -657,8 +657,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz", "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-jsx": "7.2.0" } }, "@babel/plugin-transform-react-jsx-source": { @@ -666,8 +666,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz", "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-jsx": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-jsx": "7.2.0" } }, "@babel/plugin-transform-regenerator": { @@ -709,7 +709,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-spread": { @@ -717,7 +717,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-sticky-regex": { @@ -725,8 +725,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/helper-regex": "7.0.0" } }, "@babel/plugin-transform-template-literals": { @@ -734,8 +734,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-typeof-symbol": { @@ -743,7 +743,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0" } }, "@babel/plugin-transform-typescript": { @@ -751,8 +751,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.5.tgz", "integrity": "sha512-RPB/YeGr4ZrFKNwfuQRlMf2lxoCUaU01MTw39/OFE/RiL8HDjtn68BwEPft1P7JN4akyEmjGWAMNldOV7o9V2g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-typescript": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-typescript": "7.3.3" } }, "@babel/plugin-transform-unicode-regex": { @@ -832,11 +832,11 @@ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz", "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-transform-react-display-name": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-react-jsx-self": "^7.0.0", - "@babel/plugin-transform-react-jsx-source": "^7.0.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-transform-react-display-name": "7.2.0", + "@babel/plugin-transform-react-jsx": "7.3.0", + "@babel/plugin-transform-react-jsx-self": "7.2.0", + "@babel/plugin-transform-react-jsx-source": "7.2.0" } }, "@babel/preset-typescript": { @@ -1252,8 +1252,8 @@ "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" + "call-me-maybe": "1.0.1", + "glob-to-regexp": "0.3.0" } }, "@nodelib/fs.stat": { @@ -1362,14 +1362,14 @@ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.1.0.tgz", "integrity": "sha512-d09ehQWqLMywP/PT/5JvXwPskPK9QCXUjiSkAHehreB381qExXf5JFCBWhfEyNonRbkIneCeYM99w+Ud48YIQQ==", "requires": { - "@babel/core": "^7.1.6", - "@babel/plugin-transform-react-constant-elements": "^7.0.0", - "@babel/preset-env": "^7.1.6", - "@babel/preset-react": "^7.0.0", - "@svgr/core": "^4.1.0", - "@svgr/plugin-jsx": "^4.1.0", - "@svgr/plugin-svgo": "^4.0.3", - "loader-utils": "^1.1.0" + "@babel/core": "7.2.2", + "@babel/plugin-transform-react-constant-elements": "7.2.0", + "@babel/preset-env": "7.3.4", + "@babel/preset-react": "7.0.0", + "@svgr/core": "4.1.0", + "@svgr/plugin-jsx": "4.1.0", + "@svgr/plugin-svgo": "4.0.3", + "loader-utils": "1.2.3" } }, "@types/babel__core": { @@ -1449,7 +1449,7 @@ "integrity": "sha512-3m6RPnO35r7Dg+uMLj1+xfZaOgIHHHut61djNjzwExXN4/Pm9has9C6I1KMYSfz7mahDhWUOVg4HW/nZdv5Pww==", "dev": true, "requires": { - "@types/jest-diff": "*" + "@types/jest-diff": "20.0.1" } }, "@types/jest-diff": { @@ -1493,8 +1493,8 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-16.8.19.tgz", "integrity": "sha512-QzEzjrd1zFzY9cDlbIiFvdr+YUmefuuRYrPxmkwG0UQv5XF35gFIi7a95m1bNVcFU0VimxSZ5QVGSiBmlggQXQ==", "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" + "@types/prop-types": "15.5.9", + "csstype": "2.5.7" } }, "@types/react-dom": { @@ -1503,7 +1503,7 @@ "integrity": "sha512-eIRpEW73DCzPIMaNBDP5pPIpK1KXyZwNgfxiVagb5iGiz6da+9A5hslSX6GAQKdO7SayVCS/Fr2kjqprgAvkfA==", "dev": true, "requires": { - "@types/react": "*" + "@types/react": "16.8.4" } }, "@types/react-dropzone": { @@ -1512,7 +1512,7 @@ "integrity": "sha512-okO6HY+w7V0uHoy6JpLY6BwY/s/oObtXZmUQdX0ycjPeLhK8Af/xf79CFkLA1fM6oVp16n1d962ejdkEXk375Q==", "dev": true, "requires": { - "@types/react": "*" + "@types/react": "16.8.4" } }, "@types/react-native": { @@ -1520,8 +1520,8 @@ "resolved": "https://registry.npmjs.org/@types/react-native/-/react-native-0.57.62.tgz", "integrity": "sha512-KdbGlJNPdUDS952y3nzMmeZ+hcbFsRW4FDs9AL+CK7FjiKEVTPeAMmrhk8eMzGnPQBtjyNcZs2uieGpwkh8GXQ==", "requires": { - "@types/prop-types": "*", - "@types/react": "*" + "@types/prop-types": "15.5.9", + "@types/react": "16.8.4" } }, "@types/react-router": { @@ -1530,8 +1530,8 @@ "integrity": "sha512-vOyVO0u3Cs0w6G5DzYqNVqcTsurEnDgOmmkJf2s7VwtunWzpPgI6dHsCBX68vXqeICpP6jCfojgJcHkm5BV7hQ==", "dev": true, "requires": { - "@types/history": "*", - "@types/react": "*" + "@types/history": "4.7.2", + "@types/react": "16.8.4" } }, "@types/react-router-dom": { @@ -1540,9 +1540,9 @@ "integrity": "sha512-xj0DmFjgvAqRfh/kJPO7apD5G30yPQe+8slu/dugioQOkdKpyzc4Fgk4hoTelm6CSHz7pI2PPsW5+Y6GRBF2zw==", "dev": true, "requires": { - "@types/history": "*", - "@types/react": "*", - "@types/react-router": "*" + "@types/history": "4.7.2", + "@types/react": "16.8.4", + "@types/react-router": "4.0.32" } }, "@types/react-transition-group": { @@ -1550,7 +1550,7 @@ "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-2.9.2.tgz", "integrity": "sha512-5Fv2DQNO+GpdPZcxp2x/OQG/H19A01WlmpjVD9cKvVFmoVLOZ9LvBgSWG6pSXIU4og5fgbvGPaCV5+VGkWAEHA==", "requires": { - "@types/react": "*" + "@types/react": "16.8.4" } }, "@types/stack-utils": { @@ -1563,9 +1563,9 @@ "resolved": "https://registry.npmjs.org/@types/styled-components/-/styled-components-4.1.16.tgz", "integrity": "sha512-h4VtEopz0AS2oAbZlVSG1gnEhvx0LXcmYn9jD/y8Z/OHimsQygYFeDPbUDH/rJOaQu3T+PgAgRtOTG2IZyUTVg==", "requires": { - "@types/react": "*", - "@types/react-native": "*", - "csstype": "^2.2.0" + "@types/react": "16.8.4", + "@types/react-native": "0.57.38", + "csstype": "2.5.7" } }, "@types/unist": { @@ -1578,9 +1578,9 @@ "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", "requires": { - "@types/node": "*", - "@types/unist": "*", - "@types/vfile-message": "*" + "@types/node": "11.9.5", + "@types/unist": "2.0.3", + "@types/vfile-message": "1.0.1" } }, "@types/vfile-message": { @@ -1588,8 +1588,8 @@ "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz", "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==", "requires": { - "@types/node": "*", - "@types/unist": "*" + "@types/node": "11.9.5", + "@types/unist": "2.0.3" } }, "@types/yargs": { @@ -1702,7 +1702,7 @@ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", "requires": { - "@xtuc/ieee754": "^1.2.0" + "@xtuc/ieee754": "1.2.0" } }, "@webassemblyjs/leb128": { @@ -1831,8 +1831,8 @@ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", "requires": { - "acorn": "^6.0.1", - "acorn-walk": "^6.0.1" + "acorn": "6.1.0", + "acorn-walk": "6.1.1" } }, "acorn-jsx": { @@ -1855,10 +1855,10 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "2.0.1", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.2.2" } }, "ajv-errors": { @@ -1901,7 +1901,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.3" } }, "anymatch": { @@ -2151,9 +2151,9 @@ "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.2" + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" }, "dependencies": { "ansi-regex": { @@ -2171,11 +2171,11 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" } }, "js-tokens": { @@ -2203,10 +2203,10 @@ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.0.1.tgz", "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.0.0", - "@babel/traverse": "^7.0.0", - "@babel/types": "^7.0.0", + "@babel/code-frame": "7.0.0", + "@babel/parser": "7.3.4", + "@babel/traverse": "7.3.4", + "@babel/types": "7.2.2", "eslint-scope": "3.7.1", "eslint-visitor-keys": "^1.0.0" }, @@ -2227,7 +2227,7 @@ "resolved": "https://registry.npmjs.org/babel-extract-comments/-/babel-extract-comments-1.0.0.tgz", "integrity": "sha512-qWWzi4TlddohA91bFwgt6zO/J0X+io7Qp184Fw0m2JYRSTZnJbFR8+07KmzudHCZgOiKRCrjhylwv9Xd8gfhVQ==", "requires": { - "babylon": "^6.18.0" + "babylon": "6.18.0" } }, "babel-jest": { @@ -2249,10 +2249,10 @@ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.5.tgz", "integrity": "sha512-NTnHnVRd2JnRqPC0vW+iOQWU5pchDbYXsG2E6DMXEpMfUcQKclF9gmf3G3ZMhzG7IG9ji4coL0cm+FxeWxDpnw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "util.promisify": "^1.0.0" + "find-cache-dir": "2.0.0", + "loader-utils": "1.2.3", + "mkdirp": "0.5.1", + "util.promisify": "1.0.0" } }, "babel-plugin-dynamic-import-node": { @@ -2260,7 +2260,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz", "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==", "requires": { - "object.assign": "^4.1.0" + "object.assign": "4.1.0" } }, "babel-plugin-istanbul": { @@ -2301,10 +2301,10 @@ "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.0.tgz", "integrity": "sha512-sQVKG8irFXx14ZfaK1bBePirfkacl3j8nZwSZK+ZjsbnadRHKQTbhXbe/RB1vT6Vgkz45E+V95LBq4KqdhZUNw==", "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-module-imports": "^7.0.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.10" + "@babel/helper-annotate-as-pure": "7.0.0", + "@babel/helper-module-imports": "7.0.0", + "babel-plugin-syntax-jsx": "6.18.0", + "lodash": "4.17.11" } }, "babel-plugin-syntax-jsx": { @@ -2322,8 +2322,8 @@ "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", "requires": { - "babel-plugin-syntax-object-rest-spread": "^6.8.0", - "babel-runtime": "^6.26.0" + "babel-plugin-syntax-object-rest-spread": "6.13.0", + "babel-runtime": "6.26.0" } }, "babel-plugin-transform-react-remove-prop-types": { @@ -2370,8 +2370,8 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.3.tgz", "integrity": "sha512-xC//6DNSSHVjq8O2ge0dyYlhshsH4T7XdCVoxbi5HzLYWfsC5ooFlJjrXk8RcAT+hjHAK9UjBXdylzSoDK3t4g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/helper-plugin-utils": "7.0.0", + "@babel/plugin-syntax-object-rest-spread": "7.2.0" } }, "@babel/plugin-transform-classes": { @@ -2472,8 +2472,8 @@ "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "requires": { - "core-js": "^2.4.0", - "regenerator-runtime": "^0.11.0" + "core-js": "2.6.5", + "regenerator-runtime": "0.11.1" }, "dependencies": { "core-js": { @@ -2508,13 +2508,13 @@ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -2522,7 +2522,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -2530,7 +2530,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -2538,7 +2538,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -2546,9 +2546,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -2578,7 +2578,7 @@ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "requires": { - "tweetnacl": "^0.14.3" + "tweetnacl": "0.14.5" } }, "big.js": { @@ -2648,12 +2648,12 @@ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "requires": { - "array-flatten": "^2.1.0", - "deep-equal": "^1.0.1", - "dns-equal": "^1.0.0", - "dns-txt": "^2.0.2", - "multicast-dns": "^6.0.1", - "multicast-dns-service-types": "^1.1.0" + "array-flatten": "2.1.2", + "deep-equal": "1.0.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" } }, "boolbase": { @@ -2666,7 +2666,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -2732,12 +2732,12 @@ "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-cipher": { @@ -2745,9 +2745,9 @@ "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" } }, "browserify-des": { @@ -2755,10 +2755,10 @@ "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "cipher-base": "1.0.4", + "des.js": "1.0.0", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "browserify-rsa": { @@ -2766,8 +2766,8 @@ "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "requires": { - "bn.js": "^4.1.0", - "randombytes": "^2.0.1" + "bn.js": "4.11.8", + "randombytes": "2.1.0" } }, "browserify-sign": { @@ -2775,13 +2775,13 @@ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", "requires": { - "bn.js": "^4.1.1", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.2", - "elliptic": "^6.0.0", - "inherits": "^2.0.1", - "parse-asn1": "^5.0.0" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.4.1", + "inherits": "2.0.3", + "parse-asn1": "5.1.4" } }, "browserify-zlib": { @@ -2789,7 +2789,7 @@ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "requires": { - "pako": "~1.0.5" + "pako": "1.0.8" } }, "browserslist": { @@ -2807,7 +2807,7 @@ "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", "requires": { - "node-int64": "^0.4.0" + "node-int64": "0.4.0" } }, "buffer": { @@ -2815,9 +2815,9 @@ "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" + "base64-js": "1.3.0", + "ieee754": "1.1.12", + "isarray": "1.0.0" }, "dependencies": { "isarray": { @@ -2906,7 +2906,7 @@ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "requires": { - "callsites": "^2.0.0" + "callsites": "2.0.0" } }, "caller-path": { @@ -2914,7 +2914,7 @@ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "requires": { - "caller-callsite": "^2.0.0" + "caller-callsite": "2.0.0" } }, "callsites": { @@ -2927,8 +2927,8 @@ "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "no-case": "2.3.2", + "upper-case": "1.1.3" } }, "camelcase": { @@ -2946,10 +2946,10 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" + "browserslist": "4.4.2", + "caniuse-lite": "1.0.30000939", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" } }, "caniuse-lite": { @@ -2985,9 +2985,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, "chardet": { @@ -3512,7 +3512,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "ci-info": { @@ -3525,8 +3525,8 @@ "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "class-utils": { @@ -3534,10 +3534,10 @@ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -3545,7 +3545,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "isobject": { @@ -3560,7 +3560,7 @@ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "requires": { - "source-map": "~0.6.0" + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -3575,7 +3575,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "2.0.0" } }, "cli-width": { @@ -3635,9 +3635,9 @@ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" + "@types/q": "1.5.1", + "chalk": "2.4.2", + "q": "1.5.1" } }, "code-point-at": { @@ -3650,8 +3650,8 @@ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color": { @@ -3659,8 +3659,8 @@ "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.2" + "color-convert": "1.9.3", + "color-string": "1.5.3" } }, "color-convert": { @@ -3681,8 +3681,8 @@ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" + "color-name": "1.1.3", + "simple-swizzle": "0.2.2" } }, "combined-stream": { @@ -3690,7 +3690,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "requires": { - "delayed-stream": "~1.0.0" + "delayed-stream": "1.0.0" } }, "comma-separated-tokens": { @@ -3731,13 +3731,13 @@ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "requires": { - "accepts": "~1.3.5", + "accepts": "1.3.5", "bytes": "3.0.0", "compressible": "~2.0.16", "debug": "2.6.9", "on-headers": "~1.0.2", "safe-buffer": "5.1.2", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "debug": { @@ -3765,10 +3765,10 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "buffer-from": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "typedarray": "0.0.6" } }, "confusing-browser-globals": { @@ -3786,7 +3786,7 @@ "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "requires": { - "date-now": "^0.1.4" + "date-now": "0.1.4" } }, "console-polyfill": { @@ -3831,7 +3831,7 @@ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "requires": { - "safe-buffer": "~5.1.1" + "safe-buffer": "5.1.2" } }, "cookie": { @@ -3849,12 +3849,12 @@ "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "copy-descriptor": { @@ -3910,8 +3910,8 @@ "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.0.0" + "bn.js": "4.11.8", + "elliptic": "6.4.1" } }, "create-hash": { @@ -3919,11 +3919,11 @@ "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" + "cipher-base": "1.0.4", + "inherits": "2.0.3", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" } }, "create-hmac": { @@ -3931,12 +3931,12 @@ "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.3", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "cross-spawn": { @@ -3963,17 +3963,17 @@ "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" + "browserify-cipher": "1.0.1", + "browserify-sign": "4.0.4", + "create-ecdh": "4.0.3", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.3", + "pbkdf2": "3.0.17", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" } }, "css-blank-pseudo": { @@ -4008,8 +4008,8 @@ "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", "requires": { - "postcss": "^7.0.6", - "postcss-selector-parser": "^5.0.0-rc.4" + "postcss": "7.0.14", + "postcss-selector-parser": "5.0.0" }, "dependencies": { "cssesc": { @@ -4067,10 +4067,10 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", "requires": { - "boolbase": "^1.0.0", - "css-what": "^2.1.2", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" + "boolbase": "1.0.0", + "css-what": "2.1.3", + "domutils": "1.7.0", + "nth-check": "1.0.2" } }, "css-select-base-adapter": { @@ -4093,8 +4093,8 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "1.1.4", + "source-map": "0.5.7" } }, "css-unit-converter": { @@ -4215,8 +4215,8 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", "requires": { - "mdn-data": "~1.1.0", - "source-map": "^0.5.3" + "mdn-data": "1.1.4", + "source-map": "0.5.7" } } } @@ -4231,7 +4231,7 @@ "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.2.2.tgz", "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", "requires": { - "cssom": "0.3.x" + "cssom": "0.3.6" } }, "csstype": { @@ -4254,7 +4254,7 @@ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "requires": { - "assert-plus": "^1.0.0" + "assert-plus": "1.0.0" } }, "data-urls": { @@ -4262,9 +4262,9 @@ "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", "requires": { - "abab": "^2.0.0", - "whatwg-mimetype": "^2.2.0", - "whatwg-url": "^7.0.0" + "abab": "2.0.0", + "whatwg-mimetype": "2.3.0", + "whatwg-url": "7.0.0" }, "dependencies": { "whatwg-url": { @@ -4272,9 +4272,9 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" } } } @@ -4294,7 +4294,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "decamelize": { @@ -4336,7 +4336,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "requires": { - "object-keys": "^1.0.12" + "object-keys": "1.1.0" } }, "define-property": { @@ -4344,8 +4344,8 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -4353,7 +4353,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -4361,7 +4361,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -4369,9 +4369,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -4391,12 +4391,12 @@ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "requires": { - "globby": "^6.1.0", - "is-path-cwd": "^1.0.0", - "is-path-in-cwd": "^1.0.0", - "p-map": "^1.1.1", - "pify": "^3.0.0", - "rimraf": "^2.2.8" + "globby": "6.1.0", + "is-path-cwd": "1.0.0", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", + "rimraf": "2.6.3" }, "dependencies": { "globby": { @@ -4404,11 +4404,11 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "requires": { - "array-union": "^1.0.1", - "glob": "^7.0.3", - "object-assign": "^4.0.1", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "array-union": "1.0.2", + "glob": "7.1.3", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" }, "dependencies": { "pify": { @@ -4435,8 +4435,8 @@ "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "destroy": { @@ -4459,8 +4459,8 @@ "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" + "address": "1.0.3", + "debug": "2.6.9" }, "dependencies": { "debug": { @@ -4488,9 +4488,9 @@ "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" + "bn.js": "4.11.8", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" } }, "dir-glob": { @@ -4512,8 +4512,8 @@ "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", "requires": { - "ip": "^1.1.0", - "safe-buffer": "^5.0.1" + "ip": "1.1.5", + "safe-buffer": "5.1.2" } }, "dns-txt": { @@ -4521,7 +4521,7 @@ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "requires": { - "buffer-indexof": "^1.0.0" + "buffer-indexof": "1.1.1" } }, "doctrine": { @@ -4529,7 +4529,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "requires": { - "esutils": "^2.0.2" + "esutils": "2.0.2" } }, "dom-converter": { @@ -4537,7 +4537,7 @@ "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "requires": { - "utila": "~0.4" + "utila": "0.4.0" } }, "dom-helpers": { @@ -4545,7 +4545,7 @@ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", "requires": { - "@babel/runtime": "^7.1.2" + "@babel/runtime": "7.3.4" } }, "dom-serializer": { @@ -4553,8 +4553,8 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "requires": { - "domelementtype": "^1.3.0", - "entities": "^1.1.1" + "domelementtype": "1.3.1", + "entities": "1.1.2" } }, "domain-browser": { @@ -4572,7 +4572,7 @@ "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "requires": { - "webidl-conversions": "^4.0.2" + "webidl-conversions": "4.0.2" } }, "domhandler": { @@ -4580,7 +4580,7 @@ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "requires": { - "domelementtype": "1" + "domelementtype": "1.3.1" } }, "domutils": { @@ -4588,8 +4588,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" } }, "dot-prop": { @@ -4597,7 +4597,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "requires": { - "is-obj": "^1.0.0" + "is-obj": "1.0.1" } }, "dotenv": { @@ -4620,10 +4620,10 @@ "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "stream-shift": "1.0.0" } }, "ecc-jsbn": { @@ -4631,8 +4631,8 @@ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "jsbn": "0.1.1", + "safer-buffer": "2.1.2" } }, "ee-first": { @@ -4650,13 +4650,13 @@ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "bn.js": "4.11.8", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "emoji-regex": { @@ -4679,7 +4679,7 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "enhanced-resolve": { @@ -4687,9 +4687,9 @@ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "graceful-fs": "4.1.15", + "memory-fs": "0.4.1", + "tapable": "1.1.1" } }, "entities": { @@ -4702,7 +4702,7 @@ "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "requires": { - "prr": "~1.0.1" + "prr": "1.0.1" } }, "error-ex": { @@ -4710,7 +4710,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "es-abstract": { @@ -4718,12 +4718,12 @@ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "requires": { - "es-to-primitive": "^1.2.0", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", - "object-keys": "^1.0.12" + "es-to-primitive": "1.2.0", + "function-bind": "1.1.1", + "has": "1.0.3", + "is-callable": "1.1.4", + "is-regex": "1.0.4", + "object-keys": "1.1.0" } }, "es-to-primitive": { @@ -4731,9 +4731,9 @@ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "1.1.4", + "is-date-object": "1.0.1", + "is-symbol": "1.0.2" } }, "escape-html": { @@ -4751,11 +4751,11 @@ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz", "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", "requires": { - "esprima": "^3.1.3", - "estraverse": "^4.2.0", - "esutils": "^2.0.2", - "optionator": "^0.8.1", - "source-map": "~0.6.1" + "esprima": "3.1.3", + "estraverse": "4.2.0", + "esutils": "2.0.2", + "optionator": "0.8.2", + "source-map": "0.6.1" }, "dependencies": { "esprima": { @@ -4819,8 +4819,8 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "parent-module": "1.0.0", + "resolve-from": "4.0.0" } }, "resolve-from": { @@ -4848,8 +4848,8 @@ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" + "debug": "2.6.9", + "resolve": "1.10.0" }, "dependencies": { "debug": { @@ -4872,11 +4872,11 @@ "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.2.tgz", "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", "requires": { - "loader-fs-cache": "^1.0.0", - "loader-utils": "^1.0.2", - "object-assign": "^4.0.1", - "object-hash": "^1.1.4", - "rimraf": "^2.6.1" + "loader-fs-cache": "1.0.1", + "loader-utils": "1.2.3", + "object-assign": "4.1.1", + "object-hash": "1.3.1", + "rimraf": "2.6.3" } }, "eslint-module-utils": { @@ -4884,8 +4884,8 @@ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.0.tgz", "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", "requires": { - "debug": "^2.6.8", - "pkg-dir": "^2.0.0" + "debug": "2.6.9", + "pkg-dir": "2.0.0" }, "dependencies": { "debug": { @@ -4944,7 +4944,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "requires": { - "find-up": "^2.1.0" + "find-up": "2.1.0" } } } @@ -4954,7 +4954,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.1.tgz", "integrity": "sha512-9kRxF9hfM/O6WGZcZPszOVPd2W0TLHBtceulLTsGfwMPtiCCLnCW0ssRiOOiXyqrCA20pm1iXdXm7gQeN306zQ==", "requires": { - "lodash": "^4.17.10" + "lodash": "4.17.11" } }, "eslint-plugin-import": { @@ -4987,8 +4987,8 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" + "esutils": "2.0.2", + "isarray": "1.0.0" } }, "find-up": { @@ -5009,10 +5009,10 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "strip-bom": "3.0.0" } }, "locate-path": { @@ -5055,7 +5055,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, "path-type": { @@ -5063,7 +5063,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "requires": { - "pify": "^2.0.0" + "pify": "2.3.0" } }, "pify": { @@ -5076,9 +5076,9 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" + "load-json-file": "2.0.0", + "normalize-package-data": "2.5.0", + "path-type": "2.0.0" } }, "read-pkg-up": { @@ -5086,8 +5086,8 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" + "find-up": "2.1.0", + "read-pkg": "2.0.0" } } } @@ -5141,8 +5141,8 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" + "esrecurse": "4.2.1", + "estraverse": "4.2.0" } }, "eslint-utils": { @@ -5160,9 +5160,9 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "acorn": "6.1.0", + "acorn-jsx": "5.0.1", + "eslint-visitor-keys": "1.0.0" } }, "esprima": { @@ -5175,7 +5175,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "requires": { - "estraverse": "^4.0.0" + "estraverse": "4.2.0" } }, "esrecurse": { @@ -5183,7 +5183,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "requires": { - "estraverse": "^4.1.0" + "estraverse": "4.2.0" } }, "estraverse": { @@ -5216,7 +5216,7 @@ "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", "requires": { - "original": "^1.0.0" + "original": "1.0.2" } }, "evp_bytestokey": { @@ -5224,8 +5224,8 @@ "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" } }, "exec-sh": { @@ -5344,7 +5344,7 @@ "statuses": "~1.5.0", "type-is": "~1.6.18", "utils-merge": "1.0.1", - "vary": "~1.1.2" + "vary": "1.1.2" }, "dependencies": { "array-flatten": { @@ -5387,8 +5387,8 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -5396,7 +5396,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } }, "is-plain-object": { @@ -5419,9 +5419,9 @@ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" } }, "extglob": { @@ -5460,7 +5460,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -5468,7 +5468,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -5476,9 +5476,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "kind-of": { @@ -5526,7 +5526,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", "requires": { - "websocket-driver": ">=0.5.1" + "websocket-driver": "0.7.0" } }, "fb-watchman": { @@ -5534,7 +5534,7 @@ "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", "requires": { - "bser": "^2.0.0" + "bser": "2.0.0" } }, "figgy-pudding": { @@ -5547,7 +5547,7 @@ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "requires": { - "escape-string-regexp": "^1.0.5" + "escape-string-regexp": "1.0.5" } }, "file-entry-cache": { @@ -5563,8 +5563,8 @@ "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-3.0.1.tgz", "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", "requires": { - "loader-utils": "^1.0.2", - "schema-utils": "^1.0.0" + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" } }, "file-selector": { @@ -5572,7 +5572,7 @@ "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-0.1.12.tgz", "integrity": "sha512-Kx7RTzxyQipHuiqyZGf+Nz4vY9R1XGxuQl/hLoJwq+J4avk/9wxxgZyHKtbyIPJmbD4A66DWGYfyykWNpcYutQ==", "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "filesize": { @@ -5673,8 +5673,8 @@ "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "follow-redirects": { @@ -5682,7 +5682,7 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", "requires": { - "debug": "^3.2.6" + "debug": "3.2.6" }, "dependencies": { "debug": { @@ -5690,7 +5690,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } } } @@ -5705,7 +5705,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "forever-agent": { @@ -5740,9 +5740,9 @@ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" + "asynckit": "0.4.0", + "combined-stream": "1.0.7", + "mime-types": "2.1.22" } }, "forwarded": { @@ -5755,7 +5755,7 @@ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fresh": { @@ -5768,8 +5768,8 @@ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "fs-extra": { @@ -5777,9 +5777,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" } }, "fs-write-stream-atomic": { @@ -5787,10 +5787,10 @@ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" + "graceful-fs": "4.1.15", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.6" } }, "fs.realpath": { @@ -5887,7 +5887,7 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "requires": { - "global-prefix": "^3.0.0" + "global-prefix": "3.0.0" } }, "global-prefix": { @@ -5895,9 +5895,9 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" + "ini": "1.3.5", + "kind-of": "6.0.2", + "which": "1.3.1" }, "dependencies": { "kind-of": { @@ -5917,13 +5917,13 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", "requires": { - "array-union": "^1.0.1", + "array-union": "1.0.2", "dir-glob": "2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" + "fast-glob": "2.2.6", + "glob": "7.1.3", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" }, "dependencies": { "ignore": { @@ -5995,8 +5995,8 @@ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" + "ajv": "6.9.2", + "har-schema": "2.0.0" } }, "harmony-reflect": { @@ -6009,7 +6009,7 @@ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "requires": { - "function-bind": "^1.1.1" + "function-bind": "1.1.1" } }, "has-ansi": { @@ -6059,8 +6059,8 @@ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "is-buffer": { @@ -6073,7 +6073,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -6083,8 +6083,8 @@ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "hash.js": { @@ -6092,8 +6092,8 @@ "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" + "inherits": "2.0.3", + "minimalistic-assert": "1.0.1" } }, "hast-util-from-parse5": { @@ -6101,11 +6101,11 @@ "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.1.tgz", "integrity": "sha512-UfPzdl6fbxGAxqGYNThRUhRlDYY7sXu6XU9nQeX4fFZtV+IHbyEJtd+DUuwOqNV4z3K05E/1rIkoVr/JHmeWWA==", "requires": { - "ccount": "^1.0.3", - "hastscript": "^5.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.1.2", - "xtend": "^4.0.1" + "ccount": "1.0.3", + "hastscript": "5.0.0", + "property-information": "5.0.1", + "web-namespaces": "1.1.2", + "xtend": "4.0.1" } }, "hast-util-parse-selector": { @@ -6118,10 +6118,10 @@ "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.0.tgz", "integrity": "sha512-7mOQX5VfVs/gmrOGlN8/EDfp1GqV6P3gTNVt+KnX4gbYhpASTM8bklFdFQCbFRAadURXAmw0R1QQdBdqp7jswQ==", "requires": { - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.2.0", - "property-information": "^5.0.1", - "space-separated-tokens": "^1.0.0" + "comma-separated-tokens": "1.0.5", + "hast-util-parse-selector": "2.2.1", + "property-information": "5.0.1", + "space-separated-tokens": "1.1.2" } }, "he": { @@ -6152,9 +6152,9 @@ "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" } }, "hoist-non-react-statics": { @@ -6175,10 +6175,10 @@ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "requires": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" + "inherits": "2.0.3", + "obuf": "1.1.2", + "readable-stream": "2.3.6", + "wbuf": "1.7.3" } }, "hsl-regex": { @@ -6201,7 +6201,7 @@ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "requires": { - "whatwg-encoding": "^1.0.1" + "whatwg-encoding": "1.0.5" } }, "html-entities": { @@ -6214,13 +6214,13 @@ "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz", "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "requires": { - "camel-case": "3.0.x", - "clean-css": "4.2.x", - "commander": "2.17.x", - "he": "1.2.x", - "param-case": "2.1.x", - "relateurl": "0.2.x", - "uglify-js": "3.4.x" + "camel-case": "3.0.0", + "clean-css": "4.2.1", + "commander": "2.17.1", + "he": "1.2.0", + "param-case": "2.1.1", + "relateurl": "0.2.7", + "uglify-js": "3.4.9" }, "dependencies": { "commander": { @@ -6248,12 +6248,12 @@ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", "requires": { - "domelementtype": "^1.3.1", - "domhandler": "^2.3.0", - "domutils": "^1.5.1", - "entities": "^1.1.1", - "inherits": "^2.0.1", - "readable-stream": "^3.1.1" + "domelementtype": "1.3.1", + "domhandler": "2.4.2", + "domutils": "1.7.0", + "entities": "1.1.2", + "inherits": "2.0.3", + "readable-stream": "3.1.1" }, "dependencies": { "readable-stream": { @@ -6261,9 +6261,9 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -6278,7 +6278,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", @@ -6295,9 +6295,9 @@ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" + "eventemitter3": "3.1.0", + "follow-redirects": "1.7.0", + "requires-port": "1.0.0" } }, "http-proxy-middleware": { @@ -6316,9 +6316,9 @@ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.16.1" } }, "https-browserify": { @@ -6336,7 +6336,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "icss-replace-symbols": { @@ -6357,7 +6357,7 @@ "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", "integrity": "sha1-lNK9qWCERT7zb7xarsN+D3nx/BQ=", "requires": { - "harmony-reflect": "^1.4.6" + "harmony-reflect": "1.6.1" } }, "ieee754": { @@ -6385,7 +6385,7 @@ "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "requires": { - "import-from": "^2.1.0" + "import-from": "2.1.0" } }, "import-fresh": { @@ -6393,8 +6393,8 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "caller-path": "2.0.0", + "resolve-from": "3.0.0" } }, "import-from": { @@ -6402,7 +6402,7 @@ "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" } }, "import-local": { @@ -6434,8 +6434,8 @@ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -6453,13 +6453,13 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", "requires": { - "ansi-escapes": "^3.2.0", - "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", + "ansi-escapes": "3.2.0", + "chalk": "2.4.2", + "cli-cursor": "2.1.0", + "cli-width": "2.2.0", + "external-editor": "3.0.3", + "figures": "2.0.0", + "lodash": "4.17.11", "mute-stream": "0.0.7", "run-async": "^2.2.0", "rxjs": "^6.4.0", @@ -6497,7 +6497,7 @@ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "requires": { - "loose-envify": "^1.0.0" + "loose-envify": "1.3.1" } }, "invert-kv": { @@ -6530,7 +6530,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-arrayish": { @@ -6543,7 +6543,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.13.0" } }, "is-buffer": { @@ -6569,12 +6569,12 @@ "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "requires": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" + "css-color-names": "0.0.4", + "hex-color-regex": "1.1.0", + "hsl-regex": "1.0.0", + "hsla-regex": "1.0.0", + "rgb-regex": "1.0.1", + "rgba-regex": "1.0.0" } }, "is-data-descriptor": { @@ -6582,7 +6582,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-date-object": { @@ -6595,9 +6595,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -6650,7 +6650,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "is-obj": { @@ -6668,7 +6668,7 @@ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "requires": { - "is-path-inside": "^1.0.0" + "is-path-inside": "1.0.1" } }, "is-path-inside": { @@ -6676,7 +6676,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "1.0.2" } }, "is-plain-obj": { @@ -6702,7 +6702,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "requires": { - "has": "^1.0.1" + "has": "1.0.3" } }, "is-regexp": { @@ -6730,7 +6730,7 @@ "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", "requires": { - "html-comment-regex": "^1.1.0" + "html-comment-regex": "1.1.2" } }, "is-symbol": { @@ -6738,7 +6738,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "requires": { - "has-symbols": "^1.0.0" + "has-symbols": "1.0.0" } }, "is-typedarray": { @@ -7896,8 +7896,8 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "jsbn": { @@ -7910,32 +7910,32 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", "requires": { - "abab": "^2.0.0", - "acorn": "^5.5.3", - "acorn-globals": "^4.1.0", - "array-equal": "^1.0.0", - "cssom": ">= 0.3.2 < 0.4.0", - "cssstyle": "^1.0.0", - "data-urls": "^1.0.0", - "domexception": "^1.0.1", - "escodegen": "^1.9.1", - "html-encoding-sniffer": "^1.0.2", - "left-pad": "^1.3.0", - "nwsapi": "^2.0.7", + "abab": "2.0.0", + "acorn": "5.7.3", + "acorn-globals": "4.3.0", + "array-equal": "1.0.0", + "cssom": "0.3.6", + "cssstyle": "1.2.1", + "data-urls": "1.1.0", + "domexception": "1.0.1", + "escodegen": "1.11.1", + "html-encoding-sniffer": "1.0.2", + "left-pad": "1.3.0", + "nwsapi": "2.1.1", "parse5": "4.0.0", - "pn": "^1.1.0", - "request": "^2.87.0", - "request-promise-native": "^1.0.5", - "sax": "^1.2.4", - "symbol-tree": "^3.2.2", - "tough-cookie": "^2.3.4", - "w3c-hr-time": "^1.0.1", - "webidl-conversions": "^4.0.2", - "whatwg-encoding": "^1.0.3", - "whatwg-mimetype": "^2.1.0", - "whatwg-url": "^6.4.1", - "ws": "^5.2.0", - "xml-name-validator": "^3.0.0" + "pn": "1.1.0", + "request": "2.88.0", + "request-promise-native": "1.0.7", + "sax": "1.2.4", + "symbol-tree": "3.2.2", + "tough-cookie": "2.5.0", + "w3c-hr-time": "1.0.1", + "webidl-conversions": "4.0.2", + "whatwg-encoding": "1.0.5", + "whatwg-mimetype": "2.3.0", + "whatwg-url": "6.5.0", + "ws": "5.2.2", + "xml-name-validator": "3.0.0" }, "dependencies": { "acorn": { @@ -7975,7 +7975,7 @@ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "requires": { - "jsonify": "~0.0.0" + "jsonify": "0.0.0" } }, "json-stable-stringify-without-jsonify": { @@ -7998,7 +7998,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", "requires": { - "minimist": "^1.2.0" + "minimist": "1.2.0" } }, "jsonfile": { @@ -8006,7 +8006,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { - "graceful-fs": "^4.1.6" + "graceful-fs": "4.1.15" } }, "jsonify": { @@ -8106,7 +8106,7 @@ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.1.0.tgz", "integrity": "sha512-yDGDG2DS4JcqhA6blsuYbtsT09xL8AoLuUR2Gb5exrw7UEM19sBcOTq+YBBhrNbl0PUC4R4LnFu+dHg2HKeVvA==", "requires": { - "array-includes": "^3.0.3" + "array-includes": "3.0.3" } }, "killable": { @@ -8119,7 +8119,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" }, "dependencies": { "is-buffer": { @@ -8139,8 +8139,8 @@ "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", "requires": { - "lodash": "^4.17.5", - "webpack-sources": "^1.1.0" + "lodash": "4.17.11", + "webpack-sources": "1.3.0" } }, "lazy-cache": { @@ -8171,8 +8171,8 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" + "prelude-ls": "1.1.2", + "type-check": "0.3.2" } }, "load-json-file": { @@ -8191,7 +8191,7 @@ "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", "requires": { - "find-cache-dir": "^0.1.1", + "find-cache-dir": "0.1.1", "mkdirp": "0.5.1" }, "dependencies": { @@ -8200,9 +8200,9 @@ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "requires": { - "commondir": "^1.0.1", - "mkdirp": "^0.5.1", - "pkg-dir": "^1.0.0" + "commondir": "1.0.1", + "mkdirp": "0.5.1", + "pkg-dir": "1.0.0" } }, "find-up": { @@ -8210,8 +8210,8 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "path-exists": { @@ -8219,7 +8219,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } }, "pkg-dir": { @@ -8227,7 +8227,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "requires": { - "find-up": "^1.0.0" + "find-up": "1.1.2" } } } @@ -8242,9 +8242,9 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "big.js": "5.2.2", + "emojis-list": "2.1.0", + "json5": "1.0.1" }, "dependencies": { "json5": { @@ -8252,7 +8252,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", "requires": { - "minimist": "^1.2.0" + "minimist": "1.2.0" } } } @@ -8296,8 +8296,8 @@ "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" } }, "lodash.templatesettings": { @@ -8305,7 +8305,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", "requires": { - "lodash._reinterpolate": "~3.0.0" + "lodash._reinterpolate": "3.0.0" } }, "lodash.unescape": { @@ -8370,7 +8370,7 @@ "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.11.tgz", "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "requires": { - "tmpl": "1.0.x" + "tmpl": "1.0.4" } }, "mamacro": { @@ -8383,7 +8383,7 @@ "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "requires": { - "p-defer": "^1.0.0" + "p-defer": "1.0.0" } }, "map-cache": { @@ -8396,7 +8396,7 @@ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "md5.js": { @@ -8404,9 +8404,9 @@ "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" + "hash-base": "3.0.4", + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "mdn-data": { @@ -8446,8 +8446,8 @@ "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "errno": "0.1.7", + "readable-stream": "2.3.6" } }, "merge-anything": { @@ -8463,9 +8463,9 @@ "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", "requires": { - "arr-union": "^3.1.0", - "clone-deep": "^0.2.4", - "kind-of": "^3.0.2" + "arr-union": "3.1.0", + "clone-deep": "0.2.4", + "kind-of": "3.2.2" } }, "merge-descriptors": { @@ -8478,7 +8478,7 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "requires": { - "readable-stream": "^2.0.1" + "readable-stream": "2.3.6" } }, "merge2": { @@ -8528,8 +8528,8 @@ "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" + "bn.js": "4.11.8", + "brorand": "1.1.0" } }, "mime": { @@ -8570,9 +8570,9 @@ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.5.0.tgz", "integrity": "sha512-IuaLjruM0vMKhUUT51fQdQzBYTX49dLj8w68ALEAe2A4iYNpIC4eMac67mt3NzycvjOlf07/kYxJDc0RTl1Wqw==", "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0", - "webpack-sources": "^1.1.0" + "loader-utils": "1.2.3", + "schema-utils": "1.0.0", + "webpack-sources": "1.3.0" } }, "minimalistic-assert": { @@ -8590,7 +8590,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -8603,16 +8603,16 @@ "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.1", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.1.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" } }, "mixin-deep": { @@ -8620,8 +8620,8 @@ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -8629,7 +8629,7 @@ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } }, "is-plain-object": { @@ -8652,8 +8652,8 @@ "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", "requires": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" + "for-in": "0.1.8", + "is-extendable": "0.1.1" }, "dependencies": { "for-in": { @@ -8693,12 +8693,12 @@ "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.1", + "rimraf": "2.6.3", + "run-queue": "1.0.3" } }, "ms": { @@ -8711,8 +8711,8 @@ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "requires": { - "dns-packet": "^1.3.1", - "thunky": "^1.0.2" + "dns-packet": "1.3.1", + "thunky": "1.0.3" } }, "multicast-dns-service-types": { @@ -8736,17 +8736,17 @@ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "kind-of": { @@ -8781,7 +8781,7 @@ "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "requires": { - "lower-case": "^1.1.1" + "lower-case": "1.1.4" } }, "node-forge": { @@ -8799,28 +8799,28 @@ "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", + "assert": "1.4.1", + "browserify-zlib": "0.2.0", + "buffer": "4.9.1", + "console-browserify": "1.1.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "3.0.0", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", "path-browserify": "0.0.0", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", + "process": "0.11.10", + "punycode": "1.4.1", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.6", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "1.1.1", + "timers-browserify": "2.0.10", "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", + "url": "0.11.0", + "util": "0.11.1", "vm-browserify": "0.0.4" }, "dependencies": { @@ -8893,7 +8893,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } }, "normalize-range": { @@ -8916,7 +8916,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "nth-check": { @@ -8924,7 +8924,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "requires": { - "boolbase": "~1.0.0" + "boolbase": "1.0.0" } }, "num2fraction": { @@ -8957,9 +8957,9 @@ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -8967,7 +8967,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -9002,10 +9002,10 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "define-properties": "1.1.3", + "function-bind": "1.1.1", + "has-symbols": "1.0.0", + "object-keys": "1.1.0" } }, "object.fromentries": { @@ -9013,10 +9013,10 @@ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz", "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.11.0", - "function-bind": "^1.1.1", - "has": "^1.0.1" + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1", + "has": "1.0.3" } }, "object.getownpropertydescriptors": { @@ -9024,8 +9024,8 @@ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "1.1.3", + "es-abstract": "1.13.0" } }, "object.pick": { @@ -9048,10 +9048,10 @@ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", - "function-bind": "^1.1.1", - "has": "^1.0.3" + "define-properties": "1.1.3", + "es-abstract": "1.13.0", + "function-bind": "1.1.1", + "has": "1.0.3" } }, "obuf": { @@ -9077,7 +9077,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "onetime": { @@ -9085,7 +9085,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "1.2.0" } }, "opn": { @@ -9093,7 +9093,7 @@ "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", "requires": { - "is-wsl": "^1.1.0" + "is-wsl": "1.1.0" } }, "optimist": { @@ -9101,8 +9101,8 @@ "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", "requires": { - "minimist": "~0.0.1", - "wordwrap": "~0.0.2" + "minimist": "0.0.10", + "wordwrap": "0.0.3" }, "dependencies": { "minimist": { @@ -9122,8 +9122,8 @@ "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.1.tgz", "integrity": "sha512-Rqm6sSjWtx9FchdP0uzTQDc7GXDKnwVEGoSxjezPkzMewx7gEWE9IMUYKmigTRC4U3RaNSwYVnUDLuIdtTpm0A==", "requires": { - "cssnano": "^4.1.0", - "last-call-webpack-plugin": "^3.0.0" + "cssnano": "4.1.10", + "last-call-webpack-plugin": "3.0.0" } }, "optionator": { @@ -9131,12 +9131,12 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "requires": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.4", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "wordwrap": "~1.0.0" + "deep-is": "0.1.3", + "fast-levenshtein": "2.0.6", + "levn": "0.3.0", + "prelude-ls": "1.1.2", + "type-check": "0.3.2", + "wordwrap": "1.0.0" } }, "original": { @@ -9144,7 +9144,7 @@ "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", "requires": { - "url-parse": "^1.4.3" + "url-parse": "1.4.4" } }, "os-browserify": { @@ -9231,9 +9231,9 @@ "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "cyclist": "0.2.2", + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "param-case": { @@ -9241,7 +9241,7 @@ "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "requires": { - "no-case": "^2.2.0" + "no-case": "2.3.2" } }, "parent-module": { @@ -9249,7 +9249,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "requires": { - "callsites": "^3.0.0" + "callsites": "3.0.0" }, "dependencies": { "callsites": { @@ -9264,12 +9264,12 @@ "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.4.tgz", "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "requires": { - "asn1.js": "^4.0.0", - "browserify-aes": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" + "asn1.js": "4.10.1", + "browserify-aes": "1.2.0", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.0.17", + "safe-buffer": "5.1.2" } }, "parse-json": { @@ -9277,8 +9277,8 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" } }, "parse-unit": { @@ -9357,11 +9357,11 @@ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" } }, "performance-now": { @@ -9384,7 +9384,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "pirates": { @@ -9461,7 +9461,7 @@ "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.2.1.tgz", "integrity": "sha512-W6GctK7K2qQiVR+gYSv/Gyt6jwwIH4vwdviFqx+Y2jAtVf5eZyYIDf5Ac2NCDMBiX5yWscBLZElPTsyA1UtVVA==", "requires": { - "ts-pnp": "^1.0.0" + "ts-pnp": "1.0.1" } }, "popper.js": { @@ -9474,9 +9474,9 @@ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", "requires": { - "async": "^1.5.2", - "debug": "^2.2.0", - "mkdirp": "0.5.x" + "async": "1.5.2", + "debug": "2.6.9", + "mkdirp": "0.5.1" }, "dependencies": { "debug": { @@ -9529,8 +9529,8 @@ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.1.tgz", "integrity": "sha512-L2YKB3vF4PetdTIthQVeT+7YiSzMoNMLLYxPXXppOOP7NoazEAy45sh2LvJ8leCQjfBcfkYQs8TtCcQjeZTp8A==", "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0" + "postcss": "7.0.14", + "postcss-selector-parser": "5.0.0" }, "dependencies": { "cssesc": { @@ -9563,10 +9563,10 @@ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", "requires": { - "css-unit-converter": "^1.1.1", - "postcss": "^7.0.5", - "postcss-selector-parser": "^5.0.0-rc.4", - "postcss-value-parser": "^3.3.1" + "css-unit-converter": "1.1.1", + "postcss": "7.0.14", + "postcss-selector-parser": "5.0.0", + "postcss-value-parser": "3.3.1" }, "dependencies": { "cssesc": { @@ -9676,8 +9676,8 @@ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" + "postcss": "7.0.14", + "postcss-selector-parser": "5.0.0" }, "dependencies": { "cssesc": { @@ -9702,8 +9702,8 @@ "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" + "postcss": "7.0.14", + "postcss-selector-parser": "5.0.0" }, "dependencies": { "cssesc": { @@ -9893,12 +9893,12 @@ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "requires": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" + "browserslist": "4.4.2", + "caniuse-api": "3.0.0", + "cssnano-util-same-parent": "4.0.1", + "postcss": "7.0.14", + "postcss-selector-parser": "3.1.1", + "vendors": "1.0.2" }, "dependencies": { "postcss-selector-parser": { @@ -9906,9 +9906,9 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } } } @@ -9951,10 +9951,10 @@ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "requires": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "7.0.14", + "postcss-selector-parser": "3.1.1" }, "dependencies": { "postcss-selector-parser": { @@ -9962,9 +9962,9 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } } } @@ -10198,8 +10198,8 @@ "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", "requires": { - "postcss": "^7.0.2", - "postcss-selector-parser": "^5.0.0-rc.3" + "postcss": "7.0.14", + "postcss-selector-parser": "5.0.0" }, "dependencies": { "cssesc": { @@ -10316,9 +10316,9 @@ "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "requires": { - "flatten": "^1.0.2", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "flatten": "1.0.2", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } }, "prelude-ls": { @@ -10336,8 +10336,8 @@ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "requires": { - "renderkid": "^2.0.1", - "utila": "~0.4" + "renderkid": "2.0.3", + "utila": "0.4.0" } }, "pretty-format": { @@ -10415,7 +10415,7 @@ "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.1.0.tgz", "integrity": "sha512-tODH6R3+SwTkAQckSp2S9xyYX8dEKYkeXw+4TmJzTxnNzd6mQPu1OD4f9zPrvw/Rm4wpPgI+Zp63mNSGNzUgHg==", "requires": { - "xtend": "^4.0.1" + "xtend": "4.0.1" } }, "proxy-addr": { @@ -10442,12 +10442,12 @@ "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" + "bn.js": "4.11.8", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.4", + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" } }, "pump": { @@ -10455,8 +10455,8 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "pumpify": { @@ -10464,9 +10464,9 @@ "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "duplexify": "3.7.1", + "inherits": "2.0.3", + "pump": "2.0.1" }, "dependencies": { "pump": { @@ -10474,8 +10474,8 @@ "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } } } @@ -10525,7 +10525,7 @@ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "requires": { - "performance-now": "^2.1.0" + "performance-now": "2.1.0" } }, "randombytes": { @@ -10533,7 +10533,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { - "safe-buffer": "^5.1.0" + "safe-buffer": "5.1.2" } }, "randomfill": { @@ -10541,8 +10541,8 @@ "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" } }, "range-parser": { @@ -10700,9 +10700,9 @@ "resolved": "https://registry.npmjs.org/react-event-listener/-/react-event-listener-0.6.6.tgz", "integrity": "sha512-+hCNqfy7o9wvO6UgjqFmBzARJS7qrNoda0VqzvOuioEpoEXKutiKuv92dSz6kP7rYLmyHPyYNLesi5t/aH1gfw==", "requires": { - "@babel/runtime": "^7.2.0", - "prop-types": "^15.6.0", - "warning": "^4.0.1" + "@babel/runtime": "7.3.4", + "prop-types": "15.6.2", + "warning": "4.0.1" } }, "react-is": { @@ -10867,7 +10867,7 @@ "resolved": "https://registry.npmjs.org/realpath-native/-/realpath-native-1.1.0.tgz", "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", "requires": { - "util.promisify": "^1.0.0" + "util.promisify": "1.0.0" } }, "recursive-readdir": { @@ -10888,7 +10888,7 @@ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", "requires": { - "regenerate": "^1.4.0" + "regenerate": "1.4.0" } }, "regenerator-runtime": { @@ -10901,7 +10901,7 @@ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", "requires": { - "private": "^0.1.6" + "private": "0.1.8" } }, "regex-not": { @@ -10909,8 +10909,8 @@ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "regexp-tree": { @@ -10946,7 +10946,7 @@ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", "requires": { - "jsesc": "~0.5.0" + "jsesc": "0.5.0" }, "dependencies": { "jsesc": { @@ -10961,9 +10961,9 @@ "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.0.tgz", "integrity": "sha512-V2OjMD0xcSt39G4uRdMTqDXXm6HwkUbLMDayYKA/d037j8/OtVSQ+tqKwYWOuyBeoCs/3clXRe30VUjeMDTBSA==", "requires": { - "hast-util-from-parse5": "^5.0.0", - "parse5": "^5.0.0", - "xtend": "^4.0.1" + "hast-util-from-parse5": "5.0.0", + "parse5": "5.1.0", + "xtend": "4.0.1" } }, "relateurl": { @@ -10981,11 +10981,11 @@ "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", "requires": { - "css-select": "^1.1.0", - "dom-converter": "^0.2", - "htmlparser2": "^3.3.0", - "strip-ansi": "^3.0.0", - "utila": "^0.4.0" + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.10.1", + "strip-ansi": "3.0.1", + "utila": "0.4.0" }, "dependencies": { "ansi-regex": { @@ -10998,10 +10998,10 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", "requires": { - "boolbase": "~1.0.0", - "css-what": "2.1", + "boolbase": "1.0.0", + "css-what": "2.1.3", "domutils": "1.5.1", - "nth-check": "~1.0.1" + "nth-check": "1.0.2" } }, "domutils": { @@ -11009,8 +11009,8 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "requires": { - "dom-serializer": "0", - "domelementtype": "1" + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" } }, "strip-ansi": { @@ -11043,26 +11043,26 @@ "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" + "aws-sign2": "0.7.0", + "aws4": "1.8.0", + "caseless": "0.12.0", + "combined-stream": "1.0.7", + "extend": "3.0.2", + "forever-agent": "0.6.1", + "form-data": "2.3.3", + "har-validator": "5.1.3", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.22", + "oauth-sign": "0.9.0", + "performance-now": "2.1.0", + "qs": "6.5.2", + "safe-buffer": "5.1.2", + "tough-cookie": "2.4.3", + "tunnel-agent": "0.6.0", + "uuid": "3.3.2" }, "dependencies": { "punycode": { @@ -11075,8 +11075,8 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" + "psl": "1.1.31", + "punycode": "1.4.1" } } } @@ -11086,7 +11086,7 @@ "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", "requires": { - "lodash": "^4.17.11" + "lodash": "4.17.11" } }, "request-promise-native": { @@ -11095,8 +11095,8 @@ "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", "requires": { "request-promise-core": "1.1.2", - "stealthy-require": "^1.1.1", - "tough-cookie": "^2.3.3" + "stealthy-require": "1.1.1", + "tough-cookie": "2.5.0" } }, "require-directory": { @@ -11124,7 +11124,7 @@ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "requires": { - "path-parse": "^1.0.6" + "path-parse": "1.0.6" } }, "resolve-cwd": { @@ -11132,7 +11132,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "3.0.0" } }, "resolve-from": { @@ -11155,8 +11155,8 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "requires": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" + "onetime": "2.0.1", + "signal-exit": "3.0.2" } }, "ret": { @@ -11179,7 +11179,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" } }, "ripemd160": { @@ -11267,12 +11267,12 @@ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", "requires": { - "clone-deep": "^2.0.1", - "loader-utils": "^1.0.1", - "lodash.tail": "^4.1.1", - "neo-async": "^2.5.0", - "pify": "^3.0.0", - "semver": "^5.5.0" + "clone-deep": "2.0.2", + "loader-utils": "1.2.3", + "lodash.tail": "4.1.1", + "neo-async": "2.6.0", + "pify": "3.0.0", + "semver": "5.6.0" }, "dependencies": { "clone-deep": { @@ -11280,10 +11280,10 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", "requires": { - "for-own": "^1.0.0", - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.0", - "shallow-clone": "^1.0.0" + "for-own": "1.0.0", + "is-plain-object": "2.0.4", + "kind-of": "6.0.2", + "shallow-clone": "1.0.0" } }, "for-own": { @@ -11291,7 +11291,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "requires": { - "for-in": "^1.0.1" + "for-in": "1.0.2" } }, "is-plain-object": { @@ -11322,9 +11322,9 @@ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^5.0.0", - "mixin-object": "^2.0.1" + "is-extendable": "0.1.1", + "kind-of": "5.1.0", + "mixin-object": "2.0.1" }, "dependencies": { "kind-of": { @@ -11354,8 +11354,8 @@ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz", "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==", "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "loose-envify": "1.3.1", + "object-assign": "4.1.1" } }, "schema-utils": { @@ -11363,9 +11363,9 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "6.9.2", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.4.0" } }, "select-hose": { @@ -11392,11 +11392,11 @@ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", "http-errors": "~1.7.2", "mime": "1.6.0", @@ -11443,13 +11443,13 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "requires": { - "accepts": "~1.3.4", + "accepts": "1.3.5", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.22", + "parseurl": "1.3.2" }, "dependencies": { "debug": { @@ -11504,10 +11504,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -11515,7 +11515,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-plain-object": { @@ -11548,8 +11548,8 @@ "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "2.0.3", + "safe-buffer": "5.1.2" } }, "shallow-clone": { @@ -11557,10 +11557,10 @@ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", "requires": { - "is-extendable": "^0.1.1", - "kind-of": "^2.0.1", - "lazy-cache": "^0.2.3", - "mixin-object": "^2.0.1" + "is-extendable": "0.1.1", + "kind-of": "2.0.1", + "lazy-cache": "0.2.7", + "mixin-object": "2.0.1" }, "dependencies": { "is-buffer": { @@ -11573,7 +11573,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", "requires": { - "is-buffer": "^1.0.2" + "is-buffer": "1.1.6" } }, "lazy-cache": { @@ -11588,7 +11588,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -11601,10 +11601,10 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "requires": { - "array-filter": "~0.0.0", - "array-map": "~0.0.0", - "array-reduce": "~0.0.0", - "jsonify": "~0.0.0" + "array-filter": "0.0.1", + "array-map": "0.0.0", + "array-reduce": "0.0.0", + "jsonify": "0.0.0" } }, "shellwords": { @@ -11622,7 +11622,7 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { - "is-arrayish": "^0.3.1" + "is-arrayish": "0.3.2" }, "dependencies": { "is-arrayish": { @@ -11647,9 +11647,9 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "3.2.1", + "astral-regex": "1.0.0", + "is-fullwidth-code-point": "2.0.0" } }, "snapdragon": { @@ -11657,14 +11657,14 @@ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { "debug": { @@ -11680,7 +11680,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -11688,7 +11688,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "ms": { @@ -11703,9 +11703,9 @@ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -11713,7 +11713,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -11721,7 +11721,7 @@ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -11729,7 +11729,7 @@ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -11737,9 +11737,9 @@ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } }, "isobject": { @@ -11759,7 +11759,7 @@ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" } }, "sockjs": { @@ -11767,8 +11767,8 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", "requires": { - "faye-websocket": "^0.10.0", - "uuid": "^3.0.1" + "faye-websocket": "0.10.0", + "uuid": "3.3.2" }, "dependencies": { "faye-websocket": { @@ -11776,7 +11776,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "requires": { - "websocket-driver": ">=0.5.1" + "websocket-driver": "0.7.0" } } } @@ -11786,12 +11786,12 @@ "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", "requires": { - "debug": "^3.2.5", - "eventsource": "^1.0.7", - "faye-websocket": "~0.11.1", - "inherits": "^2.0.3", - "json3": "^3.3.2", - "url-parse": "^1.4.3" + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.1", + "inherits": "2.0.3", + "json3": "3.3.2", + "url-parse": "1.4.4" }, "dependencies": { "debug": { @@ -11799,7 +11799,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } } } @@ -11819,11 +11819,11 @@ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-support": { @@ -11857,8 +11857,8 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.3" } }, "spdx-exceptions": { @@ -11871,8 +11871,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.3" } }, "spdx-license-ids": { @@ -11885,11 +11885,11 @@ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", "requires": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" + "debug": "4.1.1", + "handle-thing": "2.0.0", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" } }, "spdy-transport": { @@ -11897,12 +11897,12 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "requires": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" + "debug": "4.1.1", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.1.1", + "wbuf": "1.7.3" }, "dependencies": { "readable-stream": { @@ -11910,9 +11910,9 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "inherits": "2.0.3", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } } } @@ -11927,7 +11927,7 @@ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "sprintf-js": { @@ -11940,15 +11940,15 @@ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" + "asn1": "0.2.4", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.2", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.2", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "safer-buffer": "2.1.2", + "tweetnacl": "0.14.5" } }, "ssri": { @@ -11956,7 +11956,7 @@ "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", "requires": { - "figgy-pudding": "^3.5.1" + "figgy-pudding": "3.5.1" } }, "stable": { @@ -11974,8 +11974,8 @@ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -11983,7 +11983,7 @@ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -12003,8 +12003,8 @@ "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "inherits": "2.0.3", + "readable-stream": "2.3.6" } }, "stream-each": { @@ -12012,8 +12012,8 @@ "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" + "end-of-stream": "1.4.1", + "stream-shift": "1.0.0" } }, "stream-http": { @@ -12021,11 +12021,11 @@ "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" + "builtin-status-codes": "3.0.0", + "inherits": "2.0.3", + "readable-stream": "2.3.6", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.1" } }, "stream-shift": { @@ -12061,7 +12061,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "stringify-object": { @@ -12069,9 +12069,9 @@ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "requires": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" + "get-own-enumerable-property-symbols": "3.0.0", + "is-obj": "1.0.1", + "is-regexp": "1.0.0" } }, "strip-ansi": { @@ -12092,8 +12092,8 @@ "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-1.0.2.tgz", "integrity": "sha512-kL97alc47hoyIQSV165tTt9rG5dn4w1dNnBhOQ3bOU1Nc1hel09jnXANaHJ7vzHLd4Ju8kseDGzlev96pghLFw==", "requires": { - "babel-extract-comments": "^1.0.0", - "babel-plugin-transform-object-rest-spread": "^6.26.0" + "babel-extract-comments": "1.0.0", + "babel-plugin-transform-object-rest-spread": "6.26.0" } }, "strip-eof": { @@ -12111,8 +12111,8 @@ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz", "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==", "requires": { - "loader-utils": "^1.1.0", - "schema-utils": "^1.0.0" + "loader-utils": "1.2.3", + "schema-utils": "1.0.0" } }, "styled-components": { @@ -12139,9 +12139,9 @@ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "requires": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" + "browserslist": "4.4.2", + "postcss": "7.0.14", + "postcss-selector-parser": "3.1.1" }, "dependencies": { "postcss-selector-parser": { @@ -12149,9 +12149,9 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "requires": { - "dot-prop": "^4.1.1", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" + "dot-prop": "4.2.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" } } } @@ -12171,7 +12171,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "svgo": { @@ -12179,10 +12179,10 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", + "chalk": "2.4.2", + "coa": "2.0.2", + "css-select": "2.0.2", + "css-select-base-adapter": "0.1.1", "css-tree": "1.0.0-alpha.28", "css-url-regex": "^1.1.0", "csso": "^3.5.1", @@ -12205,10 +12205,10 @@ "resolved": "https://registry.npmjs.org/table/-/table-5.4.0.tgz", "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", - "slice-ansi": "^2.1.0", - "string-width": "^3.0.0" + "ajv": "6.9.2", + "lodash": "4.17.11", + "slice-ansi": "2.1.0", + "string-width": "3.0.0" }, "dependencies": { "ansi-regex": { @@ -12263,14 +12263,14 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.2.3.tgz", "integrity": "sha512-GOK7q85oAb/5kE12fMuLdn2btOS9OBZn4VsecpHDywoUC/jLhSAKOiYo0ezx7ss2EXPMzyEWFoE0s1WLE+4+oA==", "requires": { - "cacache": "^11.0.2", - "find-cache-dir": "^2.0.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^1.4.0", - "source-map": "^0.6.1", - "terser": "^3.16.1", - "webpack-sources": "^1.1.0", - "worker-farm": "^1.5.2" + "cacache": "11.3.2", + "find-cache-dir": "2.0.0", + "schema-utils": "1.0.0", + "serialize-javascript": "1.6.1", + "source-map": "0.6.1", + "terser": "3.16.1", + "webpack-sources": "1.3.0", + "worker-farm": "1.6.0" }, "dependencies": { "source-map": { @@ -12311,8 +12311,8 @@ "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "readable-stream": "2.3.6", + "xtend": "4.0.1" } }, "thunky": { @@ -12325,7 +12325,7 @@ "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "requires": { - "setimmediate": "^1.0.4" + "setimmediate": "1.0.5" } }, "timsort": { @@ -12348,7 +12348,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "requires": { - "os-tmpdir": "~1.0.2" + "os-tmpdir": "1.0.2" } }, "tmpl": { @@ -12371,7 +12371,7 @@ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" } }, "to-regex": { @@ -12379,10 +12379,10 @@ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -12404,8 +12404,8 @@ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" + "psl": "1.1.31", + "punycode": "2.1.1" } }, "tr46": { @@ -12413,7 +12413,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "trim-right": { @@ -12454,7 +12454,7 @@ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "requires": { - "safe-buffer": "^5.0.1" + "safe-buffer": "5.1.2" } }, "tweetnacl": { @@ -12467,7 +12467,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "requires": { - "prelude-ls": "~1.1.2" + "prelude-ls": "1.1.2" } }, "type-is": { @@ -12521,8 +12521,8 @@ "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", "requires": { - "unicode-canonical-property-names-ecmascript": "^1.0.4", - "unicode-property-aliases-ecmascript": "^1.0.4" + "unicode-canonical-property-names-ecmascript": "1.0.4", + "unicode-property-aliases-ecmascript": "1.0.4" } }, "unicode-match-property-value-ecmascript": { @@ -12568,10 +12568,10 @@ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "extend-shallow": { @@ -12579,7 +12579,7 @@ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-plain-object": { @@ -12600,10 +12600,10 @@ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } @@ -12623,7 +12623,7 @@ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "requires": { - "unique-slug": "^2.0.0" + "unique-slug": "2.0.1" } }, "unique-slug": { @@ -12631,7 +12631,7 @@ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", "requires": { - "imurmurhash": "^0.1.4" + "imurmurhash": "0.1.4" } }, "unist-util-stringify-position": { @@ -12659,8 +12659,8 @@ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -12668,9 +12668,9 @@ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -12715,7 +12715,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "requires": { - "punycode": "^2.1.0" + "punycode": "2.1.1" } }, "urix": { @@ -12744,9 +12744,9 @@ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.2.tgz", "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", "requires": { - "loader-utils": "^1.1.0", - "mime": "^2.0.3", - "schema-utils": "^1.0.0" + "loader-utils": "1.2.3", + "mime": "2.4.0", + "schema-utils": "1.0.0" } }, "url-parse": { @@ -12781,8 +12781,8 @@ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "requires": { - "define-properties": "^1.1.2", - "object.getownpropertydescriptors": "^2.0.3" + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.0.3" } }, "utila": { @@ -12805,8 +12805,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.1.0", + "spdx-expression-parse": "3.0.0" } }, "value-equal": { @@ -13071,18 +13071,18 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", "requires": { - "cliui": "^4.0.0", - "decamelize": "^2.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^10.1.0" + "cliui": "4.1.0", + "decamelize": "2.0.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.1.0", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "3.2.1", + "yargs-parser": "10.1.0" } }, "yargs-parser": { @@ -13090,7 +13090,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", "requires": { - "camelcase": "^4.1.0" + "camelcase": "4.1.0" } } } @@ -13100,8 +13100,8 @@ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "requires": { - "ansi-colors": "^3.0.0", - "uuid": "^3.3.2" + "ansi-colors": "3.2.3", + "uuid": "3.3.2" } }, "webpack-manifest-plugin": { @@ -13109,9 +13109,9 @@ "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.4.tgz", "integrity": "sha512-nejhOHexXDBKQOj/5v5IZSfCeTO3x1Dt1RZEcGfBSul891X/eLIcIVH31gwxPDdsi2Z8LKKFGpM4w9+oTBOSCg==", "requires": { - "fs-extra": "^7.0.0", - "lodash": ">=3.5 <5", - "tapable": "^1.0.0" + "fs-extra": "7.0.1", + "lodash": "4.17.11", + "tapable": "1.1.1" } }, "webpack-sources": { @@ -13119,8 +13119,8 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "2.0.1", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -13168,9 +13168,9 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" + "lodash.sortby": "4.7.0", + "tr46": "1.0.1", + "webidl-conversions": "4.0.2" } }, "which": { @@ -13178,7 +13178,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -13242,9 +13242,9 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "graceful-fs": "4.1.15", + "jsonfile": "4.0.0", + "universalify": "0.1.2" } } } @@ -13357,7 +13357,7 @@ "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "requires": { - "errno": "~0.1.7" + "errno": "0.1.7" } }, "worker-rpc": { @@ -13373,8 +13373,8 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "ansi-regex": { @@ -13387,7 +13387,7 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -13395,9 +13395,9 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -13420,7 +13420,7 @@ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "requires": { - "mkdirp": "^0.5.1" + "mkdirp": "0.5.1" } }, "write-file-atomic": { @@ -13428,9 +13428,9 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.1.tgz", "integrity": "sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg==", "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "graceful-fs": "4.1.15", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" } }, "ws": { @@ -13438,7 +13438,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", "requires": { - "async-limiter": "~1.0.0" + "async-limiter": "1.0.0" } }, "x-is-string": { diff --git a/client/package.json b/client/package.json index c92f014..bfece85 100644 --- a/client/package.json +++ b/client/package.json @@ -1,6 +1,6 @@ { "name": "d2-holy-grail-client", - "version": "1.11.0", + "version": "2.0.0", "scripts": { "dev": "react-scripts start", "test": "react-scripts test", diff --git a/client/src/App.tsx b/client/src/App.tsx index c3d0e75..b6e35ac 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -1,72 +1,66 @@ import * as React from "react"; +import { FC, useState } from "react"; import Typography from "@material-ui/core/Typography/Typography"; -import { Route, Switch } from "react-router-dom"; +import { BrowserRouter, Route, Switch } from "react-router-dom"; import { Home } from "./areas/home/Home"; import { GithubRibbon } from "./common/components/GithubRibbon"; -import { GrailMode } from "./areas/grail/GrailMode"; import { GrailArea } from "./areas/grail/GrailArea"; -import { IWithRootPassDownProps, withRoot } from "./withRoot"; -import styled from "styled-components"; +import styled, { ThemeProvider } from "styled-components"; import { GrailStatistics } from "./areas/GrailStatistics"; +import { Party } from "./areas/party/Party"; +import { PartyHome } from "./areas/party/home/PartyHome"; +import CssBaseline from "@material-ui/core/CssBaseline"; +import { MuiThemeProvider } from "@material-ui/core/styles"; -export interface IPassDownAppProps { - onGrailModeChange: (grailMode: GrailMode) => void; -} +import { defaultTheme, IAppTheme, AppThemeContext } from "./AppThemeContext"; -interface IAppState { - grailMode?: GrailMode; -} +export const App: FC = () => { + const [appTheme, setAppTheme] = useState(defaultTheme); -class AppInternal extends React.Component { - public constructor(props: IWithRootPassDownProps) { - super(props); - this.state = {}; - } - - private onGrailModeChange = (grailMode: GrailMode) => { - if (this.state.grailMode !== grailMode) { - this.setState({ grailMode }); - this.props.onGrailModeChange(grailMode); - } - }; + return ( + + + + <> + + + + + {appTheme.title} + + + + + + + + + + + + + + + + + + ); - private getAppTitle() { - switch (this.state.grailMode) { - case GrailMode.Eth: - return "Diablo II - Eth Grail"; - case GrailMode.Runeword: - return "Diablo II - Runeword Grail"; - default: - return "Diablo II - Holy Grail"; - } + function handleSetTheme(appTheme?: IAppTheme) { + setAppTheme(appTheme || defaultTheme); } - - public render() { - const passDownProps = { - onGrailModeChange: this.onGrailModeChange - } as IPassDownAppProps; - return ( - - - {this.getAppTitle()} - - - - - - - ( - - )} - /> - - - - ); - } -} +}; const RootContainer = styled.div` font-family: ${p => p.theme.typography.fontFamily}; @@ -82,5 +76,3 @@ const HeaderContainer = styled.div` const ContentContainer = styled.div` padding-top: ${p => p.theme.spacing(1) * 6}px; `; - -export const App = withRoot(AppInternal); diff --git a/client/src/AppThemeContext.tsx b/client/src/AppThemeContext.tsx new file mode 100644 index 0000000..cafba7c --- /dev/null +++ b/client/src/AppThemeContext.tsx @@ -0,0 +1,57 @@ +import { createContext } from "react"; +import { Theme, createMuiTheme } from "@material-ui/core"; +import { purple, green, brown, grey, blue } from "@material-ui/core/colors"; + +export const AppThemeContext = createContext<{ + appTheme: IAppTheme; + setAppTheme: (theme?: IAppTheme) => any; +}>(null); + +export interface IAppTheme { + theme: Theme; + title: string; +} + +export const defaultTheme: IAppTheme = { + theme: createMuiTheme({ + typography: {}, + palette: { + primary: purple, + secondary: green + } + }), + title: "Diablo II - Holy Grail" +}; + +export const ethTheme: IAppTheme = { + theme: createMuiTheme({ + typography: {}, + palette: { + primary: brown, + secondary: grey + } + }), + title: "Diablo II - Eth Grail" +}; + +export const runewordTheme: IAppTheme = { + theme: createMuiTheme({ + typography: {}, + palette: { + primary: grey, + secondary: brown + } + }), + title: "Diablo II - Runeword Grail" +}; + +export const partyTheme: IAppTheme = { + theme: createMuiTheme({ + typography: {}, + palette: { + primary: blue, + secondary: grey + } + }), + title: "Diablo II - Holy Grail Party" +}; diff --git a/client/src/RouteManager.ts b/client/src/RouteManager.ts index 00337fa..d7df1ac 100644 --- a/client/src/RouteManager.ts +++ b/client/src/RouteManager.ts @@ -1,6 +1,7 @@ import { parse, stringify } from "query-string"; import { RouteComponentProps } from "react-router-dom"; import { TabType } from "./areas/grail/TabType"; +import { PartyTabType } from "./areas/party/PartyTabType"; import { GrailMode } from "./areas/grail/GrailMode"; export interface IGrailAreaRouterParams { @@ -9,6 +10,11 @@ export interface IGrailAreaRouterParams { tabType?: TabType; } +export interface IPartyAreaRouterParams { + address: string; + tabType?: PartyTabType; +} + export interface IGrailAreaQueryObject { itemName?: string; missingOnly?: string; @@ -44,4 +50,16 @@ export class RouteManager { search: newQuery ? stringify(newQuery) : props.location.search }); } + + public static updatePartyTabType( + props: RouteComponentProps, + tabType: PartyTabType + ) { + const params = props.match.params; + + props.history.push({ + pathname: `/party/${params.address}/${tabType || + PartyTabType.Leaderboard}` + }); + } } diff --git a/client/src/areas/grail/GrailArea.tsx b/client/src/areas/grail/GrailArea.tsx index ab48a93..7cca7c8 100644 --- a/client/src/areas/grail/GrailArea.tsx +++ b/client/src/areas/grail/GrailArea.tsx @@ -1,17 +1,18 @@ import * as React from "react"; +import { FC, useContext, useEffect, useState } from "react"; import { GrailManager } from "./GrailManager"; import { CircularProgress, Divider } from "@material-ui/core"; import { RouteComponentProps, withRouter } from "react-router-dom"; import { ILoginInfo } from "../home/LoginForm"; import { SettingsListItem } from "./dataManipulation/clickable-components/SettingsListItem"; import { GrailTypeToggler } from "./dataManipulation/clickable-components/GrailTypeToggler"; -import { IPassDownAppProps } from "../../App"; import { GrailErrorHandler } from "./GrailErrorHandler"; import { GrailMode } from "./GrailMode"; import { AllBusinessGrailsType } from "../../common/definitions/business/AllBusinessGrailsType"; import { ToggleAllListItem } from "./dataManipulation/clickable-components/ToggleAllListItem"; import { ExportListItem } from "./dataManipulation/clickable-components/ExportListItem"; -import { HomeButton } from "./HomeButton"; +import { HomeButton } from "../../common/components/HomeButton"; +import { PartyButton } from "../../common/components/PartyButton"; import { MenuButton } from "./menu/MenuButton"; import { GrailToServerSaver } from "./dataManipulation/clickable-components/GrailToServerSaver"; import { ChangeDiscarder } from "./dataManipulation/clickable-components/ChangeDiscarder"; @@ -24,8 +25,14 @@ import { ListItemWithProgress } from "../../common/components/ListItemWithProgre import styled from "styled-components"; import { IGrailAreaRouterParams } from "../../RouteManager"; import { GrailVersionMigrator } from "./migrations/GrailVersionMigrator"; +import { + AppThemeContext, + ethTheme, + IAppTheme, + runewordTheme +} from "../../AppThemeContext"; -type Props = IPassDownAppProps & RouteComponentProps; +type Props = RouteComponentProps; interface IGrailAreaState { filterResult?: IFilterResult; @@ -35,30 +42,15 @@ interface IGrailAreaState { hasGrailVersionChange?: boolean; } -class GrailAreaInternal extends React.Component { - public constructor(props: Props) { - super(props); - this.state = { loading: true }; - } - - public static getDerivedStateFromProps(props: Props, state: IGrailAreaState) { - const newMode = GrailAreaInternal.getGrailModeFromRouteParams(props); - if (GrailManager.current && GrailManager.current.grailMode !== newMode) { - state.loading = true; - state.data = null; - state.filterResult = null; - GrailManager.current.setGrailMode(newMode); - props.onGrailModeChange(newMode); - } +const GrailAreaInternal: FC = props => { + const [state, setState] = useState({ loading: true }); + const { setAppTheme } = useContext(AppThemeContext); - return state; - } + const grailMode = getGrailModeFromRouteParams(props); - public componentDidMount() { - const loginInfo = (this.props.location.state || {}) as ILoginInfo; - const address = loginInfo.address || this.props.match.params.address; - const grailMode = GrailAreaInternal.getGrailModeFromRouteParams(this.props); - this.props.onGrailModeChange(grailMode); + useEffect(() => { + const loginInfo = (props.location.state || {}) as ILoginInfo; + const address = loginInfo.address || props.match.params.address; const dataManager = GrailManager.createInstance( grailMode, address, @@ -67,7 +59,8 @@ class GrailAreaInternal extends React.Component { ); dataManager.initialize().subscribe( () => { - this.setState({ + setState({ + ...state, data: dataManager.grail, loading: false, hasGrailVersionChange: dataManager.hasNewVersion @@ -75,90 +68,99 @@ class GrailAreaInternal extends React.Component { }, // todo: if we have local storage data, and an error occurs, only show a warning instead of an error // so you can also use the app offline - (err: IGrailError) => this.setState({ error: err }) + (err: IGrailError) => setState({ ...state, error: err }) ); - } - - public render() { - if (this.state.error) { - return ; - } - - if (this.state.loading) { - return ( - - - - ); + }, []); + + useEffect(() => { + if (GrailManager.current && GrailManager.current.grailMode !== grailMode) { + setState({ + ...state, + loading: true, + data: null, + filterResult: null + }); + GrailManager.current.setGrailMode(grailMode); + + setThemeAndTitle(); } + }, [grailMode]); - if (!this.state.data) { - return null; - } + if (state.error) { + return ; + } + if (state.loading) { return ( -
- {!this.state.hasGrailVersionChange && } - {this.state.hasGrailVersionChange && } -
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - this.setState({ data: d })} /> - - - - - this.setState({ data: GrailManager.current.grail }) - } - /> - - - -
+ + + ); } - private static getGrailModeFromRouteParams(props: Props) { + if (!state.data) { + return null; + } + + return ( +
+ {!state.hasGrailVersionChange && } + {state.hasGrailVersionChange && } +
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + setState({ ...state, data: d })} + /> + + + + + setState({ ...state, data: GrailManager.current.grail }) + } + /> + + + +
+ ); + + function getGrailModeFromRouteParams(props: Props) { switch (props.match.params.grailMode as GrailMode) { case GrailMode.Eth: return GrailMode.Eth; @@ -169,10 +171,26 @@ class GrailAreaInternal extends React.Component { } } - private onFilterResult = (result: IFilterResult) => { - this.setState({ filterResult: result }); - }; -} + function setThemeAndTitle() { + let theme: IAppTheme = null; + switch (grailMode) { + case GrailMode.Eth: + theme = ethTheme; + break; + case GrailMode.Runeword: + theme = runewordTheme; + break; + default: + break; + } + + setAppTheme(theme); + } + + function onFilterResult(result: IFilterResult) { + setState({ ...state, filterResult: result }); + } +}; const RightSideButtons = styled.div` position: fixed; diff --git a/client/src/areas/grail/HomeButton.tsx b/client/src/areas/grail/HomeButton.tsx deleted file mode 100644 index 3daad16..0000000 --- a/client/src/areas/grail/HomeButton.tsx +++ /dev/null @@ -1,19 +0,0 @@ -import * as React from "react"; -import { withRouter, RouteComponentProps } from "react-router-dom"; -import { ButtonWithProgress } from "../../common/components/ButtonWithProgress"; - -const HomeButtonInternal: React.FunctionComponent< - RouteComponentProps<{}> -> = props => { - return ( -
- props.history.push("/")} - text="Go to login page" - firstIcon="home" - /> -
- ); -}; - -export const HomeButton = withRouter(HomeButtonInternal); diff --git a/client/src/areas/grail/changeManagement/ChangeLogs.ts b/client/src/areas/grail/changeManagement/ChangeLogs.ts index af8bd4d..e9eae32 100644 --- a/client/src/areas/grail/changeManagement/ChangeLogs.ts +++ b/client/src/areas/grail/changeManagement/ChangeLogs.ts @@ -3,6 +3,17 @@ export type ChangeLogCollection = { }; export const changeLogs: ChangeLogCollection = { + "2.0.0": [ + { + change: `You can now Party Up with your friends! Implemented by github user mpherman (or glymph on Discord)`, + children: [ + "Go to https://d2-holy-grail.herokuapp.com/party to create your own party!", + "Share and compare grail progress easily by inviting friends to your party", + "Grails are ranked by missing items in each category, as well as a new ItemScore feature", + "ItemScore is a measure of the total rarity of items collected in a Holy Grail" + ] + } + ], "1.11.0": [ `The custom CTRL / COMMAND + F function can now be disabled within the settings` ], diff --git a/client/src/areas/home/Home.tsx b/client/src/areas/home/Home.tsx index 61c60d3..df95e64 100644 --- a/client/src/areas/home/Home.tsx +++ b/client/src/areas/home/Home.tsx @@ -1,12 +1,28 @@ import * as React from "react"; import { LoginForm } from "./LoginForm"; +import { PartyButton } from "../../common/components/PartyButton"; +import styled from "styled-components"; +import { FC, useContext, useEffect } from "react"; +import { AppThemeContext } from "../../AppThemeContext"; -export class Home extends React.Component { - public render() { - return ( -
- -
- ); - } -} +export const Home: FC = () => { + const { setAppTheme } = useContext(AppThemeContext); + + useEffect(() => setAppTheme(), []); + + return ( +
+ + + + + +
+ ); +}; + +const LeftSideButtons = styled.div` + position: fixed; + left: ${p => p.theme.spacing(1)}px; + bottom: ${p => p.theme.spacing(1)}px; +`; diff --git a/client/src/areas/party/IPartyError.ts b/client/src/areas/party/IPartyError.ts new file mode 100644 index 0000000..0875542 --- /dev/null +++ b/client/src/areas/party/IPartyError.ts @@ -0,0 +1,9 @@ +import { IPartyData } from "../../common/definitions/union/IPartyData"; + +export interface IPartyError { + status: number; + type: string; + serverToken?: string; + localToken?: string; + serverData?: IPartyData; +} diff --git a/client/src/areas/party/ItemTotal.ts b/client/src/areas/party/ItemTotal.ts new file mode 100644 index 0000000..61a8b19 --- /dev/null +++ b/client/src/areas/party/ItemTotal.ts @@ -0,0 +1,6 @@ +export enum ItemTotal { + Armor = 123, + Weapons = 197, + Other = 59, + Sets = 127 +} diff --git a/client/src/areas/party/JoinFormRenderer.tsx b/client/src/areas/party/JoinFormRenderer.tsx new file mode 100644 index 0000000..e667020 --- /dev/null +++ b/client/src/areas/party/JoinFormRenderer.tsx @@ -0,0 +1,179 @@ +import * as React from "react"; +import TextField, { + TextFieldProps +} from "@material-ui/core/TextField/TextField"; +import Typography from "@material-ui/core/Typography/Typography"; +import { + ButtonWithProgress, + IButtonWithProgressProps +} from "../../common/components/ButtonWithProgress"; +import styled from "styled-components"; +import { PartyManager } from "./PartyManager"; + +export interface IJoinInfo { + address?: string; + password?: string; + joinAddress?: string; +} + +interface IJoinFormState extends IJoinInfo { + doLogin?: boolean; + renderRegisterDialog?: boolean; + isLoading?: boolean; + error?: string; + success?: boolean; + joinButtonText: string; +} + +export class JoinFormRenderer extends React.Component<{}, IJoinFormState> { + public constructor(props: {}) { + super(props); + this.state = { + joinButtonText: "Party please!" + }; + } + + public render() { + return ( + + Enter your holygrail info to join + +
+ this.handleAddressChange(e)} + onKeyPress={e => this.onKeyPress(e)} + /> +
+
+ + + {this.state.error && ( + {this.state.error} + )} + + + + {this.state.success && ( +
+ You have successfully applied to join this party!
+ **Note: The owner of the party will + have to accept you before you can appear on the leaderboard. +
+ )} +
+ ); + } + + private handleAddressChange = (e: any) => { + this.setState({ joinAddress: e.target.value }); + if (this.state.success) { + // We just successfully saved, so reset the button state on new grail address + this.resetJoinButtonState(); + } + }; + + private resetJoinButtonState = () => { + this.setState({ + isLoading: false, + joinButtonText: "Party please!", + success: false + }); + }; + + private onKeyPress = (e: any) => { + if (e.key !== "Enter") { + return; + } + this.join(); + }; + + private join = () => { + if (!this.state.joinAddress || this.state.success) { + return; + } + + this.setState({ isLoading: true }); + + PartyManager.current + .modifyPartyUser(this.state.joinAddress, "join") + .subscribe( + r => { + this.setState({ + isLoading: false, + success: true, + joinButtonText: "Partied!" + }); + PartyManager.current.refreshData().subscribe(); + }, + res => { + if (res.status === 404) { + this.setState({ + isLoading: false, + error: "No grail exists with this username." + }); + } else if (res.status === 409) { + this.setState({ + isLoading: false, + error: + "There is already a grail with this username signed up to the party.\n If you are not shown on the party yet, contact the owner of the party to become an accepted user." + }); + } else { + this.setState({ + isLoading: false, + error: + "An error occurred when trying to join the party. Try again." + }); + } + } + ); + }; +} + +const RootContainer = styled.div` + width: 350px; + margin: auto; +`; + +const StyledTextField: React.ComponentType = styled(TextField)` + && { + width: 300px; + margin-top: ${p => p.theme.spacing(1) * 2}px; + } +` as any; + +const JoinButtonContainer = styled.div` + margin-left: 0; +`; + +const JoinButtonWithProgressWrapper: React.ComponentType< + IButtonWithProgressProps +> = styled(ButtonWithProgress)` + && { + & > div { + margin-left: 0; + } + } +`; + +const FormContainer = styled.div` + text-align: left; +`; + +const HighlightText = styled.span` + && { + color: red; + font-weight: bold; + } +`; + +const ErrorContainer = styled.div` + color: ${p => p.theme.palette.error.main}; +`; diff --git a/client/src/areas/party/Party.tsx b/client/src/areas/party/Party.tsx new file mode 100644 index 0000000..53f2092 --- /dev/null +++ b/client/src/areas/party/Party.tsx @@ -0,0 +1,99 @@ +import * as React from "react"; +import { FC, useContext, useEffect, useState } from "react"; +import { RouteComponentProps, withRouter } from "react-router-dom"; +import { IPartyError } from "./IPartyError"; +import { PartyManager } from "./PartyManager"; +import { ILoginInfo } from "./home/PartyLoginForm"; +import { IPartyData } from "../../common/definitions/union/IPartyData"; +import { PartyBody } from "./PartyBody"; +import styled from "styled-components"; +import { CircularProgress } from "@material-ui/core"; +import { VersionNotifier } from "../grail/changeManagement/VersionNotifier"; +import { HomeButton } from "../../common/components/HomeButton"; +import { PartyButton } from "../../common/components/PartyButton"; +import { IPartyAreaRouterParams } from "../../RouteManager"; +import { IPartyUserData } from "../../common/definitions/union/IPartyUserData"; +import { PartyErrorHandler } from "./PartyErrorHandler"; +import { AppThemeContext, partyTheme } from "../../AppThemeContext"; + +interface IPartyAreaState { + data?: IPartyData; + users?: IPartyUserData; + error?: IPartyError; + loading?: boolean; +} + +type Props = RouteComponentProps; + +const PartyAreaInternal: FC = props => { + const [state, setState] = useState({ loading: true }); + const { setAppTheme } = useContext(AppThemeContext); + + useEffect(() => { + const loginInfo = (props.location.state || {}) as ILoginInfo; + const address = loginInfo.address || props.match.params.address; + const dataManager = PartyManager.createInstance( + address, + loginInfo.password, + loginInfo.keepLoggedIn + ); + dataManager.initialize().subscribe( + () => { + setState({ + ...state, + data: dataManager.party, + users: dataManager.users, + loading: false + }); + }, + // todo: if we have local storage data, and an error occurs, only show a warning instead of an error + // so you can also use the app offline + (err: IPartyError) => setState({ ...state, error: err }) + ); + setAppTheme(partyTheme); + }, []); + + if (state.error) { + return ; + } + + if (state.loading) { + return ( + + + + ); + } + + if (!state.data) { + return null; + } + + return ( +
+ +
+ +
+ + + + +
+ ); +}; + +const LeftSideButtons = styled.div` + position: fixed; + left: ${p => p.theme.spacing(1)}px; + bottom: ${p => p.theme.spacing(1)}px; +`; + +const LoaderContainer = styled.div` + position: fixed; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +`; + +export const Party = withRouter(PartyAreaInternal); diff --git a/client/src/areas/party/PartyBody.tsx b/client/src/areas/party/PartyBody.tsx new file mode 100644 index 0000000..a012912 --- /dev/null +++ b/client/src/areas/party/PartyBody.tsx @@ -0,0 +1,101 @@ +import * as React from "react"; +import Tabs from "@material-ui/core/Tabs/Tabs"; +import AppBar from "@material-ui/core/AppBar/AppBar"; +import Tab from "@material-ui/core/Tab/Tab"; +import Typography from "@material-ui/core/Typography/Typography"; +import { PartyManager } from "./PartyManager"; +import { PartyTable } from "./PartyTable"; +import styled from "styled-components"; +import { RouteComponentProps, withRouter } from "react-router-dom"; +import { Redirect } from "react-router"; +import { LocationDescriptorObject } from "history"; +import { IPartyAreaRouterParams, RouteManager } from "../../RouteManager"; +import { PartyTabType } from "./PartyTabType"; +import { UserManagerRenderer } from "./UserManagerRenderer"; +import { JoinFormRenderer } from "./JoinFormRenderer"; +import { IPartyUserData } from "../../common/definitions/union/IPartyUserData"; + +export interface IPartyBodyProps { + data: any; + users: IPartyUserData; +} + +interface IPartyBodyState { + activeTab: PartyTabType; +} + +type Props = IPartyBodyProps & RouteComponentProps; + +class PartyBodyInternal extends React.Component { + public constructor(props: Props) { + super(props); + this.state = { + activeTab: PartyTabType.Leaderboard + }; + } + + public render() { + if ( + this.props.match.params.tabType === PartyTabType.Manage && + PartyManager.current.isReadOnly + ) { + const to: LocationDescriptorObject = { + pathname: `/party/${this.props.match.params.address}` + }; + return ; + } + return ( + + + + + + {!PartyManager.current.isReadOnly && ( + + )} + + + + {this.getBody(this.props.match.params.tabType)} + + + ); + } + + private getBody(activeTab: PartyTabType) { + switch (activeTab) { + case PartyTabType.Leaderboard: + return ; + case PartyTabType.Join: + return ; + case PartyTabType.Manage: + return ; + default: + return ; + } + } + + private handleChange = (event: any, nextTab: PartyTabType) => { + this.setState({ activeTab: nextTab }); + RouteManager.updatePartyTabType(this.props, nextTab); + }; +} + +const RootContainer = styled.div` + background-color: ${p => p.theme.palette.background.paper}; + margin-top: 40px; +`; + +const BodyContainer: React.FunctionComponent<{}> = props => { + return ( + + {props.children} + + ); +}; + +export const PartyBody = withRouter(PartyBodyInternal); diff --git a/client/src/areas/party/PartyErrorHandler.tsx b/client/src/areas/party/PartyErrorHandler.tsx new file mode 100644 index 0000000..c1f2442 --- /dev/null +++ b/client/src/areas/party/PartyErrorHandler.tsx @@ -0,0 +1,33 @@ +import * as React from "react"; +import { Typography } from "@material-ui/core"; +import { PartyManager } from "./PartyManager"; +import { IPartyError } from "./IPartyError"; +import { IPartyErrorHandlerProps } from "./PartyErrorHandler"; +import styled from "styled-components"; + +export interface IPartyErrorHandlerProps { + error: IPartyError; +} + +export const PartyErrorHandler: React.FunctionComponent< + IPartyErrorHandlerProps +> = props => { + return ( + + {getErrorMessage(props.error)} + + ); +}; + +function getErrorMessage(error: IPartyError) { + if (error.status === 404) { + return `No party for the address '${PartyManager.current.address}' exists!`; + } + + return "There was an error getting the Party Data from the server. Please try again."; +} + +const RootContainer = styled.div` + max-width: 700px; + margin: auto; +`; diff --git a/client/src/areas/party/PartyManager.ts b/client/src/areas/party/PartyManager.ts new file mode 100644 index 0000000..9aab579 --- /dev/null +++ b/client/src/areas/party/PartyManager.ts @@ -0,0 +1,200 @@ +import { Api } from "../../common/utils/Api"; +import { IPartyApiModel } from "../../common/definitions/api/IPartyApiModel"; +import { LocalStorageHandler } from "../../common/utils/LocalStorageHandler"; +import { Observable, ReplaySubject, Subscriber } from "rxjs"; +import { IPartyError } from "./IPartyError"; +import { IPartyData } from "../../common/definitions/union/IPartyData"; +import { IPartyUserData } from "../../common/definitions/union/IPartyUserData"; +import { IPartyAreaData } from "../../common/definitions/union/IPartyAreaData"; + +export class PartyManager { + public static get current(): PartyManager { + return this._current; + } + private static _current: PartyManager; + + private partyData: IPartyAreaData; + private partyLocalStorage: LocalStorageHandler; + private dataInitializer = new ReplaySubject(1); + + private constructor( + public readonly address: string, + private password?: string, + savePassword?: boolean + ) { + if (!address) { + throw new Error("Address must be specified"); + } + + this.partyLocalStorage = new LocalStorageHandler(`party-${this.address}`); + + this.setPassword(savePassword); + this.initializePartyData(); + } + + public static createInstance( + address: string, + password?: string, + savePassword?: boolean + ): PartyManager { + return (this._current = new PartyManager(address, password, savePassword)); + } + + public get party(): IPartyData { + return this.partyData.data; + } + + public get users(): IPartyUserData { + return this.partyData.users; + } + + public get isReadOnly(): boolean { + return !this.password; + } + + private updateLocaleStorage = (data: IPartyAreaData) => { + this.partyLocalStorage.setValue(data); + }; + + public updateCache = () => { + const cachedData = this.partyLocalStorage.getValue(); + cachedData.data = this.partyData.data; + cachedData.users = this.partyData.users; + this.updateLocaleStorage(cachedData); + }; + + public discardCache = () => { + this.updateLocaleStorage(null); + }; + + public initialize(): Observable { + return this.dataInitializer.asObservable(); + } + + private setPassword(savePassword?: boolean) { + const passwordLocalStorageHandler = new LocalStorageHandler( + `party-password-${this.address}` + ); + if (!this.password) { + this.password = passwordLocalStorageHandler.getValue(); + } else if (savePassword) { + passwordLocalStorageHandler.setValue(this.password); + } + } + + public modifyPartyUser = ( + user: string, + method: string + ): Observable => { + return Observable.create((observer: Subscriber) => { + Api.modifyPartyUser( + this.address, + this.password, + this.partyData.token, + user, + method + ).subscribe( + response => { + // update with latest party data + const areaData = this.convertToAreaData(response.data); + this.updateLocaleStorage(areaData); + this.emitData(areaData); + observer.next(areaData); + observer.complete(); + }, + err => { + observer.error(err); + } + ); + }); + }; + + private convertToAreaData = (data: IPartyApiModel): IPartyAreaData => { + const users = { + userlist: data.userlist, + pendingUserlist: data.pendingUserlist + }; + const areaData = { + address: data.address, + password: data.password, + token: data.token, + users: users, + data: data.data + }; + return areaData; + }; + + public refreshData = (): Observable => { + return Observable.create((observer: Subscriber) => { + this.discardCache(); + this.getApiDataAndEmit().subscribe( + res => { + observer.next(); + observer.complete(); + }, + err => { + observer.error(err); + } + ); + }); + }; + + private getApiDataAndEmit = (): Observable => { + return Observable.create((observer: Subscriber) => { + Api.getParty(this.address).subscribe( + response => { + const apiData = this.convertToAreaData(response.data); + // Always take the API data over local data + this.partyLocalStorage.setValue(apiData); + this.emitData(apiData); + observer.next(); + observer.complete(); + }, + err => { + observer.error(err); + } + ); + }); + }; + + private initializePartyData() { + const cachedData = this.partyLocalStorage.getValue(); + if (cachedData) { + this.emitData(cachedData); + } + this.getApiDataAndEmit().subscribe( + () => { + // Dont need to do anything + }, + err => { + this.dataInitializer.error(err as IPartyError); + } + ); + } + + private emitData(data: IPartyAreaData) { + if (!data.data) { + data.data = { + users: [] + }; + } + + if (!data.users) { + data.users = { + userlist: [], + pendingUserlist: [] + }; + } + + if (!data.users.userlist) { + data.users.userlist = []; + } + + if (!data.users.pendingUserlist) { + data.users.pendingUserlist = []; + } + + this.partyData = data; + this.dataInitializer.next(); + } +} diff --git a/client/src/areas/party/PartyTabType.tsx b/client/src/areas/party/PartyTabType.tsx new file mode 100644 index 0000000..79c65bb --- /dev/null +++ b/client/src/areas/party/PartyTabType.tsx @@ -0,0 +1,5 @@ +export enum PartyTabType { + Leaderboard = "leaderboard", + Join = "join", + Manage = "manage" +} diff --git a/client/src/areas/party/PartyTable.tsx b/client/src/areas/party/PartyTable.tsx new file mode 100644 index 0000000..3041bd4 --- /dev/null +++ b/client/src/areas/party/PartyTable.tsx @@ -0,0 +1,282 @@ +import * as React from "react"; +import Table, { TableProps } from "@material-ui/core/Table"; +import TableBody from "@material-ui/core/TableBody"; +import TableCell, { TableCellProps } from "@material-ui/core/TableCell"; +import TableHead from "@material-ui/core/TableHead"; +import TableRow from "@material-ui/core/TableRow"; +import Paper, { PaperProps } from "@material-ui/core/Paper"; +import Typography from "@material-ui/core/Typography/Typography"; +import { IPartyTableProps } from "./PartyTable"; +import styled from "styled-components"; +import { IPartyData } from "../../common/definitions/union/IPartyData"; +import Icon, { IconProps } from "@material-ui/core/Icon/Icon"; +import { DataTableColumnHeader } from "./components/DataTableColumnHeader"; +import { PartyManager } from "./PartyManager"; +import { IconWithProgress } from "../../common/components/IconWithProgress"; +import { ItemTotal } from "./ItemTotal"; + +export interface IPartyTableProps { + data: IPartyData; +} + +interface IPartyTableState { + data: IPartyData; + sorted: string; + isLoading: boolean; +} + +class Stats { + public uniqArm: number = 0; + public uniqWep: number = 0; + public uniqOth: number = 0; + public set: number = 0; + public total: number = 0; + public itemScore: number = 0; + + public constructor(public name: string) {} +} + +export class PartyTable extends React.Component< + IPartyTableProps, + IPartyTableState +> { + public constructor(props: IPartyTableProps) { + super(props); + this.state = { + data: props.data, + sorted: "total", + isLoading: false + }; + } + + public static getDerivedStateFromProps( + props: IPartyTableProps, + state: IPartyTableState + ) { + state.data = props.data; + return state; + } + + public render() { + let stats: Stats[] = []; + if (this.state.data.users) { + for (let i = 0; i < this.state.data.users.length; i++) { + let user = this.state.data.users[i]; + let statRow = new Stats(user.username); + statRow.uniqArm = user.data + ? user.data.uniqueArmor.missing + : ItemTotal.Armor; + statRow.uniqWep = user.data + ? user.data.uniqueWeapons.missing + : ItemTotal.Weapons; + statRow.uniqOth = user.data + ? user.data.uniqueOther.missing + : ItemTotal.Other; + statRow.set = user.data ? user.data.sets.missing : ItemTotal.Sets; + statRow.itemScore = user.data ? user.data.itemScore : 0; + statRow.total = + statRow.uniqArm + statRow.uniqWep + statRow.uniqOth + statRow.set; + stats.push(statRow); + } + this.sortData(stats, this.state.sorted); + } + + return ( +
+ + Holy Grail Leaders + + + + + + +   + + + + + + + + + + {stats.length !== 0 && + stats.map((s, i) => PartyTable.renderRow(s, i % 2 === 0))} + {stats.length === 0 && PartyTable.renderEmptyRow()} + + + + Notes: + +
  • The numbers above are the number of missing items.
  • +
  • + A grail has to be saved at least once for numbers / scores to + appear in the table. +
  • +
    +
    +
    +
    + ); + } + + private static renderRow(stats: Stats, isSelected?: boolean) { + return ( + + + + {stats.total === 0 && ( + + star + + )} + + {stats.name} + + + + {stats.total} + {stats.uniqArm} + {stats.uniqWep} + {stats.uniqOth} + {stats.set} + {stats.itemScore} + + ); + } + + private static renderEmptyRow() { + return ( + + + "No members yet! Ask them to join." + + + ); + } + + private changeSortingState = (newState: string) => { + if (newState !== this.state.sorted) { + this.setState({ + sorted: newState + }); + } + }; + + private sortData = (data: Stats[], key: string) => { + data.sort((a: Stats, b: Stats) => { + return key === "itemScore" ? b[key] - a[key] : a[key] - b[key]; + }); + }; + + private refreshData = () => { + this.setState({ + isLoading: true + }); + PartyManager.current.refreshData().subscribe( + () => { + this.setState({ + isLoading: false + }); + }, + err => { + this.setState({ + isLoading: false + }); + } + ); + }; +} + +const StyledPaper: React.ComponentType = styled(Paper)` + && { + max-width: 800px; + margin: ${p => p.theme.spacing(1) * 3}px auto auto; + overflow-x: auto; + } +`; + +const StyledTableCell: React.ComponentType = styled(TableCell)` + && { + padding: 14px 40px 14px 24px; + } +`; + +const StyledTable: React.ComponentType = styled(Table)` + && { + max-width: 800px; + text-align: center; + } +`; + +const UserLink = styled.a` + text-decoration: none; + color: #000000; +`; + +const RowHeader = styled.div` + display: flex; +`; + +const PerfectIcon: React.ComponentType = styled(Icon)` + && { + float: left; + font-size: 1rem; + margin-left: -16px; + } +`; + +const TableFootNote = styled(Typography)` + && { + margin: ${p => p.theme.spacing(1)}px; + } +`; + +const NoteList = styled.ul` + margin-top: 0; + padding-left: ${p => p.theme.spacing(3)}px; +`; diff --git a/client/src/areas/party/UserManagerRenderer.tsx b/client/src/areas/party/UserManagerRenderer.tsx new file mode 100644 index 0000000..7a69eb7 --- /dev/null +++ b/client/src/areas/party/UserManagerRenderer.tsx @@ -0,0 +1,201 @@ +import * as React from "react"; +import Table, { TableProps } from "@material-ui/core/Table"; +import TableBody from "@material-ui/core/TableBody"; +import TableCell from "@material-ui/core/TableCell"; +import TableHead from "@material-ui/core/TableHead"; +import TableRow from "@material-ui/core/TableRow"; +import Paper, { PaperProps } from "@material-ui/core/Paper"; +import Typography from "@material-ui/core/Typography/Typography"; +import styled from "styled-components"; +import { UserManagementButton } from "./components/UserManagementButton"; +import { PartyManager } from "./PartyManager"; +import { IPartyUserData } from "../../common/definitions/union/IPartyUserData"; +import { useState, FC, useEffect } from "react"; + +export interface IUserManagerRendererProps { + users: IPartyUserData; +} + +export const UserManagerRenderer: FC = props => { + const [users, setUsers] = useState(props.users); + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + if (JSON.stringify(users) === JSON.stringify(props.users)) { + return; + } + setUsers(props.users); + }, [props.users]); + + return ( +
    + + Pending Users + + + + + + User +   +   + + + + {users.pendingUserlist.length !== 0 && + users.pendingUserlist.map(s => renderPendingUserRow(s))} + {users.pendingUserlist.length === 0 && renderEmptyPendingUserRow()} + + + +
    + + Current Users + + + + + + User +   + + + + {users.userlist.length !== 0 && + users.userlist.map(s => renderUserRow(s))} + {users.userlist.length === 0 && renderEmptyUserRow()} + + + +
    + ); + + function renderEmptyPendingUserRow() { + return ( + + + No pending users. + + + ); + } + + function renderEmptyUserRow() { + return ( + + + No users yet! + + + ); + } + + function renderPendingUserRow(user: string, isSelected?: boolean) { + return ( + + + + + {user} + + + + + + + + + + + + + + + ); + } + + function renderUserRow(user: string, isSelected?: boolean) { + return ( + + + + + {user} + + + + + + + + + + ); + } + + function modifyUser(user: string, method: string) { + PartyManager.current.updateCache(); + setIsLoading(true); + PartyManager.current.modifyPartyUser(user, method).subscribe( + result => { + setUsers(result.users); + setIsLoading(false); + }, + err => { + // Couldnt modify user for some reason + // Display an error message to the user? + // TODO + } + ); + } +}; + +const StyledPaper: React.ComponentType = styled(Paper)` + && { + max-width: 800px; + margin: ${p => p.theme.spacing(1) * 3}px auto auto; + overflow-x: auto; + } +`; + +const StyledTable: React.ComponentType = styled(Table)` + && { + max-width: 800px; + } +`; + +const UserLink = styled.a` + text-decoration: none; + color: #000000; +`; + +const RowHeader = styled.div` + display: flex; +`; + +const UserButtonContainer = styled.div` + margin-left: 0; +`; diff --git a/client/src/areas/party/components/DataTableColumnHeader.tsx b/client/src/areas/party/components/DataTableColumnHeader.tsx new file mode 100644 index 0000000..61c5e30 --- /dev/null +++ b/client/src/areas/party/components/DataTableColumnHeader.tsx @@ -0,0 +1,53 @@ +import * as React from "react"; +import TableCell, { TableCellProps } from "@material-ui/core/TableCell"; +import styled from "styled-components"; +import Icon, { IconProps } from "@material-ui/core/Icon/Icon"; + +export interface IDataTableColumnHeaderProps { + onClick?: (text) => any; + showIcon?: boolean; + text?: string; + sortText?: string; + secondIcon?: string; + secondIconText?: string; +} + +export const DataTableColumnHeader: React.FunctionComponent< + IDataTableColumnHeaderProps +> = props => { + const onClick = () => { + props.onClick(props.sortText); + }; + + return ( + + {props.text} + {props.showIcon && arrow_drop_down} + {props.secondIcon && ( + {props.secondIcon} + )} + + ); +}; + +const ColHeader: React.ComponentType = styled(TableCell)` + && { + padding: 4px 20px 4px 20px; + cursor: pointer; + } +`; + +const DropDownIcon: React.ComponentType = styled(Icon)` + && { + float: left; + font-size: 1rem; + } +`; + +const SecondIcon: React.ComponentType = styled(Icon)` + && { + align-self: center; + font-size: 1.25rem; + margin-bottom: -0.3rem; + } +`; diff --git a/client/src/areas/party/components/UserManagementButton.tsx b/client/src/areas/party/components/UserManagementButton.tsx new file mode 100644 index 0000000..d09037e --- /dev/null +++ b/client/src/areas/party/components/UserManagementButton.tsx @@ -0,0 +1,39 @@ +import * as React from "react"; +import { FC, useState, useEffect } from "react"; +import { ButtonWithProgress } from "../../../common/components/ButtonWithProgress"; + +export interface IUserManagementButtonProps { + onClick: (user, method) => any; + user: string; + text: string; + isDisabled: boolean; +} + +export const UserManagementButton: FC = ({ + onClick, + user, + text, + isDisabled +}) => { + const [isLoading, setIsLoading] = useState(false); + + useEffect(() => { + setIsLoading(false); + }, [isDisabled]); + + const handleClick = () => { + setIsLoading(true); + onClick(user, text.toLowerCase()); + }; + + return ( +
    + +
    + ); +}; diff --git a/client/src/areas/party/home/ItemScoreInfoDialog.tsx b/client/src/areas/party/home/ItemScoreInfoDialog.tsx new file mode 100644 index 0000000..ee983f0 --- /dev/null +++ b/client/src/areas/party/home/ItemScoreInfoDialog.tsx @@ -0,0 +1,112 @@ +import * as React from "react"; +import styled from "styled-components"; +import { Typography } from "@material-ui/core"; +import { FC } from "react"; +import Dialog from "@material-ui/core/Dialog/Dialog"; +import DialogContent from "@material-ui/core/DialogContent/DialogContent"; +import Icon, { IconProps } from "@material-ui/core/Icon/Icon"; +import Table, { TableProps } from "@material-ui/core/Table"; +import TableBody from "@material-ui/core/TableBody"; +import TableCell, { TableCellProps } from "@material-ui/core/TableCell"; +import TableHead from "@material-ui/core/TableHead"; +import TableRow from "@material-ui/core/TableRow"; + +export interface IInfoProps { + onDialogClosed: () => any; +} + +export const ItemScoreInfoDialog: FC = ({ onDialogClosed }) => { + return ( + + +
    + close + + Introducing ItemScore!
    +
    +
    + + ItemScore is based on the relative rarity of an item. Common items + like a Nagelring are not worth many points. The rarer an item is, + the higher its ItemScore. +
    + The ultimate Holy Grail item, Tyrael's Might, is worth 1000 points.{" "} +
    + A fully completed grail will score 10000 points.
    + Some eamples:
    +
    + + + + Item + Score + + + + + Nagelring + 1 + + + Venom Ward + 1 + + + ... + ... + + + Mara's Kaleidoscope + 30 + + + Metalgrid + 75 + + + Crown of Ages + 150 + + + Astreon's Iron Ward + 350 + + + Tyrael's Might + 1000 + + + +
    +
    +
    + ); +}; + +const CloseIcon: React.ComponentType = styled(Icon)` + && { + position: absolute; + top: ${p => p.theme.spacing(1)}px; + right: ${p => p.theme.spacing(1) * 2}px; + cursor: pointer; + } +`; + +const StyledTableCell: React.ComponentType = styled(TableCell)` + && { + padding: 14px 40px 14px 24px; + } +`; + +const StyledTable: React.ComponentType = styled(Table)` + && { + max-width: 800px; + text-align: center; + } +`; + +const TitleText = styled(Typography)` + && { + margin-top: 10px; + } +`; diff --git a/client/src/areas/party/home/PartyExplanation.tsx b/client/src/areas/party/home/PartyExplanation.tsx new file mode 100644 index 0000000..b97e886 --- /dev/null +++ b/client/src/areas/party/home/PartyExplanation.tsx @@ -0,0 +1,48 @@ +import * as React from "react"; +import styled from "styled-components"; +import { Typography } from "@material-ui/core"; +import { Button } from "@material-ui/core"; +import { FC, useState } from "react"; +import { ItemScoreInfoDialog } from "./ItemScoreInfoDialog"; + +export const PartyExplanation: FC = () => { + const [renderItemScoreInfo, setRenderItemScoreInfo] = useState(false); + return ( + + {renderItemScoreInfo && ( + { + setRenderItemScoreInfo(false); + }} + /> + )} + + Introducing Holy Grail Parties!
    +
    + + Ever wanted to compare your grail progress to friends or other members + of a community?
    + Simply create a Holy Grail Party above and invite your friends!
    + The party will automatically keep track of each member's grail progress + as they enter new items.
    + Compare your progress with a simple table of all members' grails in your + party.
    +
    + Also introducing ItemScore! A way to compare grail progress based on the + rarity of items collected.
    + + You can + + to see more information about it. + +
    +
    + ); +}; + +const Host = styled.div` + margin: 50px auto; + max-width: 700px; +`; diff --git a/client/src/areas/party/home/PartyHome.tsx b/client/src/areas/party/home/PartyHome.tsx new file mode 100644 index 0000000..e9675b1 --- /dev/null +++ b/client/src/areas/party/home/PartyHome.tsx @@ -0,0 +1,29 @@ +import * as React from "react"; +import { PartyLoginForm } from "./PartyLoginForm"; +import { PartyExplanation } from "./PartyExplanation"; +import { HomeButton } from "../../../common/components/HomeButton"; +import styled from "styled-components"; +import { partyTheme, AppThemeContext } from "../../../AppThemeContext"; +import { FC, useEffect, useContext } from "react"; + +export const PartyHome: FC = () => { + const { setAppTheme } = useContext(AppThemeContext); + + useEffect(() => setAppTheme(partyTheme), []); + + return ( +
    + + + + + +
    + ); +}; + +const LeftSideButtons = styled.div` + position: fixed; + left: ${p => p.theme.spacing(1)}px; + bottom: ${p => p.theme.spacing(1)}px; +`; diff --git a/client/src/areas/party/home/PartyLoginForm.tsx b/client/src/areas/party/home/PartyLoginForm.tsx new file mode 100644 index 0000000..33cd390 --- /dev/null +++ b/client/src/areas/party/home/PartyLoginForm.tsx @@ -0,0 +1,238 @@ +import * as React from "react"; +import { Button } from "@material-ui/core"; +import Checkbox from "@material-ui/core/Checkbox/Checkbox"; +import TextField, { + TextFieldProps +} from "@material-ui/core/TextField/TextField"; +import { Redirect } from "react-router"; +import { LocationDescriptorObject } from "history"; +import Typography from "@material-ui/core/Typography/Typography"; +import Icon, { IconProps } from "@material-ui/core/Icon/Icon"; +import Paper, { PaperProps } from "@material-ui/core/Paper/Paper"; +import { Api } from "../../../common/utils/Api"; +import { PartyRegisterFormDialog } from "./PartyRegisterFormDialog"; +import { + ButtonWithProgress, + IButtonWithProgressProps +} from "../../../common/components/ButtonWithProgress"; +import styled from "styled-components"; +import { ButtonProps } from "@material-ui/core/Button"; + +export interface ILoginInfo { + address?: string; + password?: string; + keepLoggedIn?: boolean; +} + +interface ILoginFormState extends ILoginInfo { + doLogin?: boolean; + renderRegisterDialog?: boolean; + isLoading?: boolean; + error?: string; +} + +export class PartyLoginForm extends React.Component<{}, ILoginFormState> { + public constructor(props: {}) { + super(props); + this.state = {}; + } + + private login = () => { + if (!this.state.address) { + return; + } + + if (!this.state.password) { + this.setState({ doLogin: true }); + return; + } + + this.setState({ isLoading: true }); + Api.validatePartyPassword( + this.state.address, + this.state.password + ).subscribe( + r => { + if (r.data) { + this.setState({ doLogin: true }); + } else { + this.setState({ + isLoading: false, + error: "The entered password is not correct." + }); + } + }, + res => { + if (res.status === 404) { + // if we have a 404 just do a login, because it will be handled there + this.setState({ doLogin: true }); + } else { + this.setState({ + isLoading: false, + error: "An error occurred when trying to validate your password." + }); + } + } + ); + }; + + private onKeyPress = (e: any) => { + if (e.key !== "Enter") { + return; + } + + this.login(); + }; + + private onRegisterDialogClosed = (loginInfo: ILoginInfo) => { + if (!loginInfo) { + this.setState({ renderRegisterDialog: false }); + } else { + this.setState({ + ...loginInfo, + doLogin: true, + renderRegisterDialog: false + }); + } + }; + + public render() { + if (this.state.doLogin) { + const to: LocationDescriptorObject = { + pathname: `/party/${this.state.address}`, + state: this.state as ILoginInfo + }; + return ; + } + + return ( + + {this.state.renderRegisterDialog && ( + + this.onRegisterDialogClosed(loginInfo) + } + /> + )} + Login + +
    + this.setState({ address: e.target.value })} + onKeyPress={e => this.onKeyPress(e)} + /> +
    + + this.setState({ password: e.target.value })} + onKeyPress={e => this.onKeyPress(e)} + /> + + info + + +
    + {this.state.password && ( +
    + + this.setState({ keepLoggedIn: e.target.checked }) + } + />{" "} + Keep me logged in +
    + )} +
    +
    + + + {this.state.error && ( + {this.state.error} + )} + + + + Want to create your own Holy Grail Party? + this.setState({ renderRegisterDialog: true })} + > + Create one! + + +
    + ); + } +} + +const RootContainer = styled.div` + width: 350px; + margin: auto; +`; + +const StyledTextField: React.ComponentType = styled(TextField)` + && { + width: 300px; + margin-top: ${p => p.theme.spacing(1) * 2}px; + } +` as any; + +const LoginButtonContainer = styled.div` + margin-left: 0; +`; + +const LoginButtonWithProgressWrapper: React.ComponentType< + IButtonWithProgressProps +> = styled(ButtonWithProgress)` + && { + & > div { + margin-left: 0; + } + } +`; + +const StyledPaper: React.ComponentType = styled(Paper)` + && { + width: 300px; + margin: ${p => p.theme.spacing(1) * 4}px auto auto; + padding: ${p => p.theme.spacing(1)}px; + text-align: center; + } +`; + +const CreateButton: React.ComponentType = styled(Button)` + && { + margin-top: ${p => p.theme.spacing(1)}px; + } +`; + +const FormContainer = styled.div` + text-align: left; +`; + +const ErrorContainer = styled.div` + color: ${p => p.theme.palette.error.main}; +`; + +const PasswordContainer = styled.div` + display: flex; +`; + +const InfoIcon: React.ComponentType = styled(Icon)` + && { + align-self: center; + } +`; + +const KeepMeLoggedInCheckbox = styled(Checkbox)` + && { + padding-left: 0; + } +`; diff --git a/client/src/areas/party/home/PartyRegisterFormDialog.tsx b/client/src/areas/party/home/PartyRegisterFormDialog.tsx new file mode 100644 index 0000000..c2a6e3b --- /dev/null +++ b/client/src/areas/party/home/PartyRegisterFormDialog.tsx @@ -0,0 +1,144 @@ +import * as React from "react"; +import { ILoginInfo } from "./PartyLoginForm"; +import { Api } from "../../../common/utils/Api"; +import Dialog from "@material-ui/core/Dialog/Dialog"; +import DialogTitle from "@material-ui/core/DialogTitle/DialogTitle"; +import DialogContent from "@material-ui/core/DialogContent/DialogContent"; +import DialogContentText, { + DialogContentTextProps +} from "@material-ui/core/DialogContentText/DialogContentText"; +import DialogActions from "@material-ui/core/DialogActions/DialogActions"; +import Icon, { IconProps } from "@material-ui/core/Icon/Icon"; +import TextField, { + TextFieldProps +} from "@material-ui/core/TextField/TextField"; +import { ButtonWithProgress } from "../../../common/components/ButtonWithProgress"; +import { IRegisterFormDialogProps } from "./PartyRegisterFormDialog"; +import styled from "styled-components"; + +export interface IRegisterFormDialogProps { + onDialogClosed: (loginInfo?: ILoginInfo) => any; +} + +interface IRegisterFormDialogState { + address?: string; + password?: string; + error?: string; + isLoading?: boolean; +} + +export class PartyRegisterFormDialog extends React.Component< + IRegisterFormDialogProps, + IRegisterFormDialogState +> { + public constructor(props: IRegisterFormDialogProps) { + super(props); + this.state = {}; + } + + public render() { + return ( + this.props.onDialogClosed()}> + Create your own Party + +
    + this.props.onDialogClosed()}> + close + + {this.state.error && {this.state.error}} +
    + this.setState({ address: e.target.value })} + /> +
    +
    + this.setState({ password: e.target.value })} + /> + + + + info + + +
    + + Please do not choose a sensitive password, since we're not + really paying attention to data security ;) + +
    +
    +
    +
    +
    + + this.register()} + text="Register" + isDisabled={!this.state.address || !this.state.password} + /> + +
    + ); + } + + private register = () => { + this.setState({ isLoading: true }); + Api.createParty(this.state.address, this.state.password).subscribe( + () => { + this.setState({ isLoading: false }); + this.props.onDialogClosed({ + address: this.state.address, + password: this.state.password, + keepLoggedIn: false + }); + }, + err => + this.setState({ + isLoading: false, + error: + err.data && err.data.type === "duplicateKey" + ? "There is already a Party for this address! Please choose another one!" + : "There was an unknown error when trying to create your Party!" + }) + ); + }; +} + +const CloseIcon: React.ComponentType = styled(Icon)` + && { + position: absolute; + top: ${p => p.theme.spacing(1)}px; + right: ${p => p.theme.spacing(1)}px; + cursor: pointer; + } +`; + +const StyledTextField: React.ComponentType = styled(TextField)` + && { + width: 300px; + margin-top: ${p => p.theme.spacing(1) * 2}px; + } +` as any; + +const ErrorText: React.ComponentType = styled( + DialogContentText +)` + && { + color: ${p => p.theme.palette.error.main}; + } +`; + +const SecurityInfoContainer = styled.div` + font-style: italic; + padding-top: ${p => p.theme.spacing(1) * 4}px; + display: flex; +`; + +const InfoIconContainer = styled.div` + align-self: center; + padding-right: ${p => p.theme.spacing(1)}px; +`; diff --git a/client/src/common/components/HomeButton.tsx b/client/src/common/components/HomeButton.tsx new file mode 100644 index 0000000..65025e0 --- /dev/null +++ b/client/src/common/components/HomeButton.tsx @@ -0,0 +1,24 @@ +import * as React from "react"; +import { FC } from "react"; +import { RouteComponentProps, withRouter } from "react-router-dom"; +import { ButtonWithProgress } from "./ButtonWithProgress"; + +type Props = RouteComponentProps<{}>; + +const HomeButtonInternal: FC = props => { + return ( +
    + +
    + ); + + function handleClick() { + props.history.push("/"); + } +}; + +export const HomeButton = withRouter(HomeButtonInternal); diff --git a/client/src/common/components/IconWithProgress.tsx b/client/src/common/components/IconWithProgress.tsx new file mode 100644 index 0000000..001274c --- /dev/null +++ b/client/src/common/components/IconWithProgress.tsx @@ -0,0 +1,57 @@ +import CircularProgress, { + CircularProgressProps +} from "@material-ui/core/CircularProgress"; +import green from "@material-ui/core/colors/green"; +import * as React from "react"; +import Icon, { IconProps } from "@material-ui/core/Icon/Icon"; +import styled from "styled-components"; + +export interface IIconWithProgressProps { + isLoading?: boolean; + title?: string; + icon?: string; + onClick: () => any; +} + +export const IconWithProgress: React.FunctionComponent< + IIconWithProgressProps +> = props => { + const onClick = () => { + if (props.isLoading) { + return; + } + props.onClick(); + }; + + const { isLoading } = props; + + return ( + <> + {isLoading && } + {!isLoading && ( + + {props.icon} + + )} + + ); +}; + +const IconProgress: React.ComponentType = styled( + CircularProgress +)` + && { + color: ${() => green[500]}; + vertical-align: middle; + margin-left: 10px; + } +`; + +const CustomIcon: React.ComponentType = styled(Icon)` + && { + font-size: 1.75rem; + margin-left: 5px; + margin-bottom: -0.4rem; + cursor: pointer; + } +`; diff --git a/client/src/common/components/PartyButton.tsx b/client/src/common/components/PartyButton.tsx new file mode 100644 index 0000000..dfc37ce --- /dev/null +++ b/client/src/common/components/PartyButton.tsx @@ -0,0 +1,22 @@ +import * as React from "react"; +import { FC } from "react"; +import { RouteComponentProps, withRouter } from "react-router-dom"; +import { ButtonWithProgress } from "./ButtonWithProgress"; + +const PartyButtonInternal: FC> = props => { + return ( +
    + +
    + ); + + function handleClick() { + props.history.push("/party/"); + } +}; + +export const PartyButton = withRouter(PartyButtonInternal); diff --git a/client/src/common/definitions/api/IPartyApiModel.ts b/client/src/common/definitions/api/IPartyApiModel.ts new file mode 100644 index 0000000..62ccd2c --- /dev/null +++ b/client/src/common/definitions/api/IPartyApiModel.ts @@ -0,0 +1,10 @@ +import { IPartyData } from "../union/IPartyData"; + +export interface IPartyApiModel { + address: string; + password?: string; + data: IPartyData; + userlist: string[]; + pendingUserlist: string[]; + token: string; +} diff --git a/client/src/common/definitions/union/IPartyAreaData.ts b/client/src/common/definitions/union/IPartyAreaData.ts new file mode 100644 index 0000000..e8bf971 --- /dev/null +++ b/client/src/common/definitions/union/IPartyAreaData.ts @@ -0,0 +1,10 @@ +import { IPartyData } from "./IPartyData"; +import { IPartyUserData } from "./IPartyUserData"; + +export interface IPartyAreaData { + address: string; + password?: string; + data: IPartyData; + users: IPartyUserData; + token: string; +} diff --git a/client/src/common/definitions/union/IPartyData.ts b/client/src/common/definitions/union/IPartyData.ts new file mode 100644 index 0000000..e54d2fe --- /dev/null +++ b/client/src/common/definitions/union/IPartyData.ts @@ -0,0 +1,20 @@ +export interface IPartyData { + users?: IUserData[]; +} + +export interface IUserData { + username: string; + data: IUserGrailData; +} + +export interface IUserGrailData { + uniqueArmor?: ICategoryStatsData; + uniqueWeapons?: ICategoryStatsData; + uniqueOther?: ICategoryStatsData; + sets?: ICategoryStatsData; + itemScore?: number; +} + +export interface ICategoryStatsData { + missing: number; +} diff --git a/client/src/common/definitions/union/IPartyUserData.ts b/client/src/common/definitions/union/IPartyUserData.ts new file mode 100644 index 0000000..d9b29ae --- /dev/null +++ b/client/src/common/definitions/union/IPartyUserData.ts @@ -0,0 +1,4 @@ +export interface IPartyUserData { + userlist?: string[]; + pendingUserlist?: string[]; +} diff --git a/client/src/common/utils/Api.ts b/client/src/common/utils/Api.ts index 1dc7e8d..6c26512 100644 --- a/client/src/common/utils/Api.ts +++ b/client/src/common/utils/Api.ts @@ -3,6 +3,7 @@ import { IHolyGrailData } from "../definitions/union/IHolyGrailData"; import { IEthGrailData } from "../definitions/union/IEthGrailData"; import { IRunewordGrailApiData } from "../definitions/api/IRunewordGrailApiData"; import { IHolyGrailApiModel } from "../definitions/api/IHolyGrailApiModel"; +import { IPartyApiModel } from "../definitions/api/IPartyApiModel"; import { IGrailSettings } from "../definitions/union/IGrailSettings"; import { IItemInfo } from "../definitions/api/IItemInfo"; import { IRunewordInfo } from "../definitions/api/IRunewordInfo"; @@ -16,6 +17,7 @@ export interface IApiResponse { export class Api { private static readonly apiUrl = "/api/"; private static readonly grailApiUrl = Api.apiUrl + "grail/"; + private static readonly partyApiUrl = Api.apiUrl + "party/"; public static getStatistics(): Observable> { return this.fetchToObservable(fetch(`${Api.apiUrl}stats`)); @@ -128,4 +130,59 @@ export class Api { } }); }; + + // Party methods + public static getParty( + address: string + ): Observable> { + return this.fetchToObservable(fetch(Api.partyApiUrl + address)); + } + + public static createParty( + address: string, + password: string + ): Observable> { + return this.fetchToObservable( + fetch(Api.partyApiUrl, { + method: "post", + body: JSON.stringify({ address, password }), + headers: { "Content-Type": "application/json" } + }) + ); + } + + public static modifyPartyUser( + address: string, + password: string, + token: string, + user: string, + method: string + ): Observable> { + return this.fetchToObservable( + fetch(`${Api.partyApiUrl}${address}/manage/${method}`, { + method: "put", + body: JSON.stringify({ + address, + password, + token, + user, + method + }), + headers: { "Content-Type": "application/json" } + }) + ); + } + + public static validatePartyPassword( + address: string, + password: string + ): Observable> { + return this.fetchToObservable( + fetch(`${Api.partyApiUrl}${address}/password/validate`, { + method: "put", + body: JSON.stringify({ password }), + headers: { "Content-Type": "application/json" } + }) + ); + } } diff --git a/client/src/withRoot.tsx b/client/src/withRoot.tsx deleted file mode 100644 index ee82f24..0000000 --- a/client/src/withRoot.tsx +++ /dev/null @@ -1,89 +0,0 @@ -import * as React from "react"; -import { createMuiTheme, MuiThemeProvider } from "@material-ui/core/styles"; -import purple from "@material-ui/core/colors/purple"; -import green from "@material-ui/core/colors/green"; -import grey from "@material-ui/core/colors/grey"; -import brown from "@material-ui/core/colors/brown"; -import CssBaseline from "@material-ui/core/CssBaseline"; -import { Theme } from "@material-ui/core/styles/createMuiTheme"; -import { BrowserRouter } from "react-router-dom"; -import { GrailMode } from "./areas/grail/GrailMode"; -import { ThemeProvider } from "styled-components"; - -export interface IWithRootPassDownProps { - onGrailModeChange: (grailMode: GrailMode) => any; -} - -interface IWithRootState { - grailMode: GrailMode; -} - -export function withRoot(Component: React.ComponentType) { - return class extends React.Component<{}, IWithRootState> { - public constructor(props: {}) { - super(props); - this.state = { grailMode: GrailMode.Holy }; - } - - private onGrailModeChange = (grailMode: GrailMode) => { - if (grailMode !== this.state.grailMode) { - this.setState({ grailMode }); - } - }; - - private getTheme = () => { - switch (this.state.grailMode) { - case GrailMode.Eth: - return ethTheme; - case GrailMode.Runeword: - return runewordTheme; - default: - return normalTheme; - } - }; - - public render() { - const passDownProps = { - onGrailModeChange: this.onGrailModeChange - } as IWithRootPassDownProps; - - const theme = this.getTheme(); - return ( - - - <> - - - - - - - - ); - } - }; -} - -const normalTheme: Theme = createMuiTheme({ - typography: {}, - palette: { - primary: purple, - secondary: green - } -}); - -const ethTheme: Theme = createMuiTheme({ - typography: {}, - palette: { - primary: brown, - secondary: grey - } -}); - -const runewordTheme: Theme = createMuiTheme({ - typography: {}, - palette: { - primary: grey, - secondary: brown - } -}); diff --git a/package-lock.json b/package-lock.json index 3f2e971..d1ccef9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,7 +22,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.3" } }, "argparse": { @@ -31,7 +31,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "~1.0.2" + "sprintf-js": "1.0.3" } }, "array-differ": { @@ -46,7 +46,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "array-uniq": "1.0.3" } }, "array-uniq": { @@ -73,7 +73,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -89,7 +89,7 @@ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "callsites": "^2.0.0" + "callsites": "2.0.0" } }, "caller-path": { @@ -98,7 +98,7 @@ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "caller-callsite": "^2.0.0" + "caller-callsite": "2.0.0" } }, "callsites": { @@ -119,9 +119,9 @@ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" }, "dependencies": { "supports-color": { @@ -130,7 +130,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } } } @@ -147,9 +147,9 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" + "string-width": "2.1.1", + "strip-ansi": "4.0.0", + "wrap-ansi": "2.1.0" } }, "code-point-at": { @@ -185,15 +185,15 @@ "integrity": "sha512-pwzXCE7qtOB346LyO9eFWpkFJVO3JQZ/qU/feGeaAHiX1M3Rw3zgXKc5cZ8vSH5DGygkjzLFDzA/pwoQDkRNGg==", "dev": true, "requires": { - "chalk": "^2.4.1", - "date-fns": "^1.23.0", - "lodash": "^4.17.10", - "read-pkg": "^4.0.1", - "rxjs": "^6.3.3", - "spawn-command": "^0.0.2-1", - "supports-color": "^4.5.0", - "tree-kill": "^1.1.0", - "yargs": "^12.0.1" + "chalk": "2.4.1", + "date-fns": "1.29.0", + "lodash": "4.17.11", + "read-pkg": "4.0.1", + "rxjs": "6.3.3", + "spawn-command": "0.0.2-1", + "supports-color": "4.5.0", + "tree-kill": "1.2.1", + "yargs": "12.0.5" } }, "cosmiconfig": { @@ -214,11 +214,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.6.0", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "date-fns": { @@ -239,7 +239,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "^1.4.0" + "once": "1.4.0" } }, "error-ex": { @@ -248,7 +248,7 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "escape-string-regexp": { @@ -269,13 +269,13 @@ "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "6.0.5", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "find-up": { @@ -284,7 +284,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "3.0.0" } }, "get-caller-file": { @@ -341,13 +341,13 @@ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "get-stream": { @@ -356,7 +356,7 @@ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dev": true, "requires": { - "pump": "^3.0.0" + "pump": "3.0.0" } }, "normalize-package-data": { @@ -397,8 +397,8 @@ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" + "caller-path": "2.0.0", + "resolve-from": "3.0.0" } }, "invert-kv": { @@ -419,7 +419,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "^1.0.0" + "builtin-modules": "1.1.1" } }, "is-ci": { @@ -428,7 +428,7 @@ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", "dev": true, "requires": { - "ci-info": "^2.0.0" + "ci-info": "2.0.0" } }, "is-directory": { @@ -461,8 +461,8 @@ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "argparse": "1.0.10", + "esprima": "4.0.1" } }, "json-parse-better-errors": { @@ -477,7 +477,7 @@ "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", "dev": true, "requires": { - "invert-kv": "^2.0.0" + "invert-kv": "2.0.0" } }, "locate-path": { @@ -486,8 +486,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "3.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -502,8 +502,8 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "map-age-cleaner": { @@ -512,7 +512,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "^1.0.0" + "p-defer": "1.0.0" } }, "mem": { @@ -521,9 +521,9 @@ "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", "dev": true, "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" + "map-age-cleaner": "0.1.3", + "mimic-fn": "1.2.0", + "p-is-promise": "1.1.0" } }, "mimic-fn": { @@ -538,7 +538,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "mri": { @@ -553,10 +553,10 @@ "integrity": "sha512-22foS/gqQfANZ3o+W7ST2x25ueHDVNWl/b9OlGcLpy/iKxjCpvcNCM51YCenUi7Mt/jAjjqv8JwZRs8YP5sRjA==", "dev": true, "requires": { - "array-differ": "^2.0.3", - "array-union": "^1.0.2", - "arrify": "^1.0.1", - "minimatch": "^3.0.4" + "array-differ": "2.0.3", + "array-union": "1.0.2", + "arrify": "1.0.1", + "minimatch": "3.0.4" } }, "nice-try": { @@ -571,10 +571,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "is-builtin-module": "1.0.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" } }, "npm-run-path": { @@ -583,7 +583,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "number-is-nan": { @@ -598,7 +598,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "os-locale": { @@ -607,9 +607,9 @@ "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", "dev": true, "requires": { - "execa": "^0.10.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" + "execa": "0.10.0", + "lcid": "2.0.0", + "mem": "4.0.0" } }, "p-defer": { @@ -636,7 +636,7 @@ "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", "dev": true, "requires": { - "p-try": "^2.0.0" + "p-try": "2.0.0" } }, "p-locate": { @@ -645,7 +645,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "2.0.0" } }, "p-try": { @@ -660,8 +660,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" } }, "path-exists": { @@ -741,7 +741,7 @@ "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==", "dev": true, "requires": { - "semver-compare": "^1.0.0" + "semver-compare": "1.0.0" } }, "prettier": { @@ -756,12 +756,12 @@ "integrity": "sha512-hy0yOSnqVykrgoHcCcB72p3B5ERQJcjQI6ExeSGSTFE2cDrPwCQtFb3kXA1F+jUPrbt7orra8U+fjS/Emjgpuw==", "dev": true, "requires": { - "chalk": "^2.3.0", - "execa": "^0.8.0", - "find-up": "^2.1.0", - "ignore": "^3.3.7", - "mri": "^1.1.0", - "multimatch": "^3.0.0" + "chalk": "2.4.1", + "execa": "0.8.0", + "find-up": "2.1.0", + "ignore": "3.3.10", + "mri": "1.1.4", + "multimatch": "3.0.0" }, "dependencies": { "cross-spawn": { @@ -770,9 +770,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.5", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "execa": { @@ -781,13 +781,13 @@ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "find-up": { @@ -796,7 +796,7 @@ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "locate-path": "^2.0.0" + "locate-path": "2.0.0" } }, "locate-path": { @@ -805,8 +805,8 @@ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "p-limit": { @@ -815,7 +815,7 @@ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "p-try": "^1.0.0" + "p-try": "1.0.0" } }, "p-locate": { @@ -824,7 +824,7 @@ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "p-limit": "^1.1.0" + "p-limit": "1.3.0" } }, "p-try": { @@ -847,8 +847,8 @@ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "end-of-stream": "1.4.1", + "once": "1.4.0" } }, "read-pkg": { @@ -857,9 +857,9 @@ "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", "dev": true, "requires": { - "normalize-package-data": "^2.3.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0" + "normalize-package-data": "2.4.0", + "parse-json": "4.0.0", + "pify": "3.0.0" } }, "require-directory": { @@ -901,7 +901,7 @@ "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", "dev": true, "requires": { - "tslib": "^1.9.0" + "tslib": "1.9.3" } }, "semver": { @@ -928,7 +928,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -961,8 +961,8 @@ "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.2" } }, "spdx-exceptions": { @@ -977,8 +977,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.2" } }, "spdx-license-ids": { @@ -999,8 +999,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "strip-ansi": { @@ -1009,7 +1009,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, "strip-eof": { @@ -1024,7 +1024,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "^2.0.0" + "has-flag": "2.0.0" }, "dependencies": { "has-flag": { @@ -1059,8 +1059,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.0.2", + "spdx-expression-parse": "3.0.0" } }, "which": { @@ -1069,7 +1069,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "which-module": { @@ -1084,8 +1084,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "string-width": "1.0.2", + "strip-ansi": "3.0.1" }, "dependencies": { "ansi-regex": { @@ -1100,7 +1100,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "string-width": { @@ -1109,9 +1109,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" } }, "strip-ansi": { @@ -1120,7 +1120,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "2.1.1" } } } @@ -1149,18 +1149,18 @@ "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", "dev": true, "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" + "cliui": "4.1.0", + "decamelize": "1.2.0", + "find-up": "3.0.0", + "get-caller-file": "1.0.3", + "os-locale": "3.0.1", + "require-directory": "2.1.1", + "require-main-filename": "1.0.1", + "set-blocking": "2.0.0", + "string-width": "2.1.1", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "11.1.1" } }, "yargs-parser": { @@ -1169,8 +1169,8 @@ "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "camelcase": "5.0.0", + "decamelize": "1.2.0" } } } diff --git a/server/package-lock.json b/server/package-lock.json index 283154b..a7bb94f 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -10,8 +10,8 @@ "integrity": "sha512-a2+YeUjPkztKJu5aIF2yArYFQQp8d51wZ7DavSHjFuY1mqVgidGyzEQ41JIVNy82fXj8yPgy2vJmfIywgESW6w==", "dev": true, "requires": { - "@types/connect": "*", - "@types/node": "*" + "@types/connect": "3.4.32", + "@types/node": "11.9.5" } }, "@types/bson": { @@ -20,7 +20,7 @@ "integrity": "sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "11.9.5" } }, "@types/connect": { @@ -29,7 +29,7 @@ "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", "dev": true, "requires": { - "@types/node": "*" + "@types/node": "11.9.5" } }, "@types/cors": { @@ -38,7 +38,7 @@ "integrity": "sha512-GmK8AKu8i+s+EChK/uZ5IbrXPcPaQKWaNSGevDT/7o3gFObwSUQwqb1jMqxuo+YPvj0ckGzINI+EO7EHcmJjKg==", "dev": true, "requires": { - "@types/express": "*" + "@types/express": "4.16.1" } }, "@types/express": { @@ -47,9 +47,9 @@ "integrity": "sha512-CjaMu57cjgjuZbh9DpkloeGxV45CnMGlVd+XpG7Gm9QgVrd7KFq+X4HY0vM+2v0bczS48Wg7bvnMY5TN+Xmcfw==", "dev": true, "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "*", - "@types/serve-static": "*" + "@types/body-parser": "1.17.0", + "@types/express-serve-static-core": "4.16.1", + "@types/serve-static": "1.13.2" } }, "@types/express-serve-static-core": { @@ -58,8 +58,8 @@ "integrity": "sha512-847KvL8Q1y3TtFLRTXcVakErLJQgdpFSaq+k043xefz9raEf0C7HalpSY7OW5PyjCnY8P7bPW5t/Co9qqp+USg==", "dev": true, "requires": { - "@types/node": "*", - "@types/range-parser": "*" + "@types/node": "11.9.5", + "@types/range-parser": "1.2.3" } }, "@types/mime": { @@ -74,8 +74,8 @@ "integrity": "sha512-tG+QqJ/hir2p0069ee28t2O9tlGRJKDq1WFZC2QYMlU47LGdldLL8tepfTq6aFLvP58OpwSoxaJ/qjW93ob1NQ==", "dev": true, "requires": { - "@types/bson": "*", - "@types/node": "*" + "@types/bson": "4.0.0", + "@types/node": "11.9.5" } }, "@types/node": { @@ -96,8 +96,8 @@ "integrity": "sha512-/BZ4QRLpH/bNYgZgwhKEh+5AsboDBcUdlBYgzoLX0fpj3Y2gp6EApyOlM3bK53wQS/OE1SrdSYBAbux2D1528Q==", "dev": true, "requires": { - "@types/express-serve-static-core": "*", - "@types/mime": "*" + "@types/express-serve-static-core": "4.16.1", + "@types/mime": "2.0.1" } }, "@types/strip-bom": { @@ -133,7 +133,7 @@ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", "dev": true, "requires": { - "string-width": "^2.0.0" + "string-width": "2.1.1" } }, "ansi-regex": { @@ -148,7 +148,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "1.9.3" } }, "anymatch": { @@ -157,8 +157,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" + "micromatch": "3.1.10", + "normalize-path": "2.1.1" }, "dependencies": { "normalize-path": { @@ -167,7 +167,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "^1.0.1" + "remove-trailing-separator": "1.1.0" } } } @@ -243,13 +243,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.2.1", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.1", + "pascalcase": "0.1.1" }, "dependencies": { "define-property": { @@ -258,7 +258,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -267,7 +267,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -276,7 +276,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -285,9 +285,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -321,13 +321,13 @@ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==", "dev": true, "requires": { - "ansi-align": "^2.0.0", - "camelcase": "^4.0.0", - "chalk": "^2.0.1", - "cli-boxes": "^1.0.0", - "string-width": "^2.0.0", - "term-size": "^1.2.0", - "widest-line": "^2.0.0" + "ansi-align": "2.0.0", + "camelcase": "4.1.0", + "chalk": "2.4.2", + "cli-boxes": "1.0.0", + "string-width": "2.1.1", + "term-size": "1.2.0", + "widest-line": "2.0.1" } }, "brace-expansion": { @@ -336,7 +336,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "^1.0.0", + "balanced-match": "1.0.0", "concat-map": "0.0.1" } }, @@ -346,16 +346,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" }, "dependencies": { "extend-shallow": { @@ -364,7 +364,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -391,15 +391,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "collection-visit": "1.0.0", + "component-emitter": "1.2.1", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.0", + "to-object-path": "0.3.0", + "union-value": "1.0.0", + "unset-value": "1.0.0" } }, "camelcase": { @@ -414,8 +414,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "2.1.1", + "map-obj": "1.0.1" }, "dependencies": { "camelcase": { @@ -438,9 +438,9 @@ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" } }, "chokidar": { @@ -475,10 +475,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" }, "dependencies": { "define-property": { @@ -487,7 +487,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -504,8 +504,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "map-visit": "1.0.0", + "object-visit": "1.0.1" } }, "color-convert": { @@ -541,12 +541,12 @@ "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==", "dev": true, "requires": { - "dot-prop": "^4.1.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "unique-string": "^1.0.0", - "write-file-atomic": "^2.0.0", - "xdg-basedir": "^3.0.0" + "dot-prop": "4.2.0", + "graceful-fs": "4.1.15", + "make-dir": "1.3.0", + "unique-string": "1.0.0", + "write-file-atomic": "2.4.2", + "xdg-basedir": "3.0.0" } }, "content-disposition": { @@ -590,8 +590,8 @@ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dev": true, "requires": { - "object-assign": "^4", - "vary": "^1" + "object-assign": "4.1.1", + "vary": "1.1.2" } }, "create-error-class": { @@ -600,7 +600,7 @@ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "capture-stack-trace": "^1.0.0" + "capture-stack-trace": "1.0.1" } }, "cross-spawn": { @@ -609,9 +609,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "^4.0.1", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "lru-cache": "4.1.5", + "shebang-command": "1.2.0", + "which": "1.3.1" } }, "crypto-random-string": { @@ -626,7 +626,7 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "array-find-index": "1.0.2" } }, "dateformat": { @@ -635,8 +635,8 @@ "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", "dev": true, "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" + "get-stdin": "4.0.1", + "meow": "3.7.0" } }, "debounce": { @@ -677,8 +677,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" + "is-descriptor": "1.0.2", + "isobject": "3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -687,7 +687,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -696,7 +696,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -705,9 +705,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -734,7 +734,7 @@ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", "dev": true, "requires": { - "is-obj": "^1.0.0" + "is-obj": "1.0.1" } }, "duplexer3": { @@ -749,7 +749,7 @@ "integrity": "sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=", "dev": true, "requires": { - "xtend": "^4.0.0" + "xtend": "4.0.1" } }, "ee-first": { @@ -768,7 +768,7 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { - "is-arrayish": "^0.2.1" + "is-arrayish": "0.2.1" } }, "escape-html": { @@ -793,13 +793,13 @@ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", "dev": true, "requires": { - "cross-spawn": "^5.0.1", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" } }, "expand-brackets": { @@ -808,13 +808,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -823,7 +823,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -832,7 +832,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -880,8 +880,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -890,7 +890,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -901,14 +901,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" }, "dependencies": { "define-property": { @@ -917,7 +917,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "extend-shallow": { @@ -926,7 +926,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "is-accessor-descriptor": { @@ -935,7 +935,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -944,7 +944,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -953,9 +953,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -966,7 +966,7 @@ "integrity": "sha1-9KGVc1Xdr0Q8zXiolfPVXiPIoDQ=", "dev": true, "requires": { - "debounce": "^1.0.0" + "debounce": "1.2.0" } }, "fill-range": { @@ -975,10 +975,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" }, "dependencies": { "extend-shallow": { @@ -987,7 +987,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -1012,8 +1012,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" } }, "for-in": { @@ -1033,7 +1033,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "^0.2.2" + "map-cache": "0.2.2" } }, "fresh": { @@ -1600,12 +1600,12 @@ "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "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" } }, "glob-parent": { @@ -1614,8 +1614,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "is-glob": "3.1.0", + "path-dirname": "1.0.2" }, "dependencies": { "is-glob": { @@ -1624,7 +1624,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "^2.1.0" + "is-extglob": "2.1.1" } } } @@ -1635,7 +1635,7 @@ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "^1.3.4" + "ini": "1.3.5" } }, "got": { @@ -1644,17 +1644,17 @@ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", "dev": true, "requires": { - "create-error-class": "^3.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^3.0.0", - "is-redirect": "^1.0.0", - "is-retry-allowed": "^1.0.0", - "is-stream": "^1.0.0", - "lowercase-keys": "^1.0.0", - "safe-buffer": "^5.0.1", - "timed-out": "^4.0.0", - "unzip-response": "^2.0.1", - "url-parse-lax": "^1.0.0" + "create-error-class": "3.0.2", + "duplexer3": "0.1.4", + "get-stream": "3.0.0", + "is-redirect": "1.0.0", + "is-retry-allowed": "1.1.0", + "is-stream": "1.1.0", + "lowercase-keys": "1.0.1", + "safe-buffer": "5.1.2", + "timed-out": "4.0.1", + "unzip-response": "2.0.1", + "url-parse-lax": "1.0.0" } }, "graceful-fs": { @@ -1681,9 +1681,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" } }, "has-values": { @@ -1692,8 +1692,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" + "is-number": "3.0.0", + "kind-of": "4.0.0" }, "dependencies": { "kind-of": { @@ -1702,7 +1702,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1718,7 +1718,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "requires": { - "depd": "~1.1.2", + "depd": "1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.1", "statuses": ">= 1.5.0 < 2", @@ -1730,7 +1730,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": "2.1.2" } }, "ignore-by-default": { @@ -1757,7 +1757,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "^2.0.0" + "repeating": "2.0.1" } }, "inflight": { @@ -1766,8 +1766,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "^1.3.0", - "wrappy": "1" + "once": "1.4.0", + "wrappy": "1.0.2" } }, "inherits": { @@ -1792,7 +1792,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1801,7 +1801,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1818,7 +1818,7 @@ "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "1.13.0" } }, "is-buffer": { @@ -1833,7 +1833,7 @@ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "ci-info": "^1.5.0" + "ci-info": "1.6.0" } }, "is-data-descriptor": { @@ -1842,7 +1842,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1851,7 +1851,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1862,9 +1862,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" }, "dependencies": { "kind-of": { @@ -1893,7 +1893,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "^1.0.0" + "number-is-nan": "1.0.1" } }, "is-fullwidth-code-point": { @@ -1908,7 +1908,7 @@ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "is-extglob": "2.1.1" } }, "is-installed-globally": { @@ -1917,8 +1917,8 @@ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { - "global-dirs": "^0.1.0", - "is-path-inside": "^1.0.0" + "global-dirs": "0.1.1", + "is-path-inside": "1.0.1" } }, "is-npm": { @@ -1933,7 +1933,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -1942,7 +1942,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -1959,7 +1959,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "^1.0.1" + "path-is-inside": "1.0.2" } }, "is-plain-object": { @@ -1968,7 +1968,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "is-redirect": { @@ -2037,7 +2037,7 @@ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", "dev": true, "requires": { - "package-json": "^4.0.0" + "package-json": "4.0.1" } }, "load-json-file": { @@ -2046,11 +2046,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "graceful-fs": "4.1.15", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" }, "dependencies": { "pify": { @@ -2067,8 +2067,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" } }, "lowercase-keys": { @@ -2083,8 +2083,8 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "pseudomap": "1.0.2", + "yallist": "2.1.2" } }, "make-dir": { @@ -2093,7 +2093,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "3.0.0" } }, "make-error": { @@ -2120,7 +2120,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "^1.0.0" + "object-visit": "1.0.1" } }, "media-typer": { @@ -2140,16 +2140,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.5.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" } }, "merge-descriptors": { @@ -2168,19 +2168,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.2", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "mime": { @@ -2207,7 +2207,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "brace-expansion": "1.1.11" } }, "minimist": { @@ -2222,8 +2222,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "for-in": "1.0.2", + "is-extendable": "1.0.1" }, "dependencies": { "is-extendable": { @@ -2232,7 +2232,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "^2.0.4" + "is-plain-object": "2.0.4" } } } @@ -2292,17 +2292,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.2", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" } }, "negotiator": { @@ -2347,7 +2347,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.1" } }, "ms": { @@ -2364,7 +2364,7 @@ "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", "dev": true, "requires": { - "abbrev": "1" + "abbrev": "1.1.1" } }, "normalize-package-data": { @@ -2373,10 +2373,10 @@ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "hosted-git-info": "2.7.1", + "resolve": "1.10.0", + "semver": "5.6.0", + "validate-npm-package-license": "3.0.4" } }, "normalize-path": { @@ -2391,7 +2391,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "2.0.1" } }, "number-is-nan": { @@ -2412,9 +2412,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" }, "dependencies": { "define-property": { @@ -2423,7 +2423,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "kind-of": { @@ -2432,7 +2432,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -2443,7 +2443,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "^3.0.0" + "isobject": "3.0.1" } }, "object.pick": { @@ -2452,7 +2452,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "^3.0.1" + "isobject": "3.0.1" } }, "on-finished": { @@ -2469,7 +2469,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1" + "wrappy": "1.0.2" } }, "p-finally": { @@ -2484,10 +2484,10 @@ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", "dev": true, "requires": { - "got": "^6.7.1", - "registry-auth-token": "^3.0.1", - "registry-url": "^3.0.3", - "semver": "^5.1.0" + "got": "6.7.1", + "registry-auth-token": "3.3.2", + "registry-url": "3.1.0", + "semver": "5.6.0" } }, "parse-json": { @@ -2496,7 +2496,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.2.0" + "error-ex": "1.3.2" } }, "parseurl": { @@ -2522,7 +2522,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "pinkie-promise": "2.0.1" } }, "path-is-absolute": { @@ -2560,9 +2560,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "graceful-fs": "4.1.15", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" }, "dependencies": { "pify": { @@ -2591,7 +2591,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "^2.0.0" + "pinkie": "2.0.4" } }, "posix-character-classes": { @@ -2660,10 +2660,10 @@ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" } }, "read-pkg": { @@ -2672,9 +2672,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "load-json-file": "1.1.0", + "normalize-package-data": "2.5.0", + "path-type": "1.1.0" } }, "read-pkg-up": { @@ -2683,8 +2683,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "find-up": "1.1.2", + "read-pkg": "1.1.0" } }, "readable-stream": { @@ -2693,13 +2693,13 @@ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" } }, "readdirp": { @@ -2708,9 +2708,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "graceful-fs": "4.1.15", + "micromatch": "3.1.10", + "readable-stream": "2.3.6" } }, "redent": { @@ -2719,8 +2719,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "indent-string": "2.1.0", + "strip-indent": "1.0.1" } }, "regex-not": { @@ -2729,8 +2729,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" } }, "registry-auth-token": { @@ -2739,8 +2739,8 @@ "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==", "dev": true, "requires": { - "rc": "^1.1.6", - "safe-buffer": "^5.0.1" + "rc": "1.2.8", + "safe-buffer": "5.1.2" } }, "registry-url": { @@ -2749,7 +2749,7 @@ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", "dev": true, "requires": { - "rc": "^1.0.1" + "rc": "1.2.8" } }, "remove-trailing-separator": { @@ -2776,7 +2776,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "^1.0.0" + "is-finite": "1.0.2" } }, "require_optional": { @@ -2784,8 +2784,8 @@ "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz", "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==", "requires": { - "resolve-from": "^2.0.0", - "semver": "^5.1.0" + "resolve-from": "2.0.0", + "semver": "5.6.0" } }, "resolve": { @@ -2794,7 +2794,7 @@ "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", "dev": true, "requires": { - "path-parse": "^1.0.6" + "path-parse": "1.0.6" } }, "resolve-from": { @@ -2820,7 +2820,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "^7.1.3" + "glob": "7.1.3" } }, "safe-buffer": { @@ -2834,7 +2834,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "~0.1.10" + "ret": "0.1.15" } }, "safer-buffer": { @@ -2848,7 +2848,7 @@ "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", "optional": true, "requires": { - "sparse-bitfield": "^3.0.3" + "sparse-bitfield": "3.0.3" } }, "semver": { @@ -2862,7 +2862,7 @@ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", "dev": true, "requires": { - "semver": "^5.0.3" + "semver": "5.6.0" } }, "send": { @@ -2871,11 +2871,11 @@ "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", "fresh": "0.5.2", "http-errors": "~1.7.2", "mime": "1.6.0", @@ -2909,10 +2909,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" }, "dependencies": { "extend-shallow": { @@ -2921,7 +2921,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -2937,7 +2937,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "1.0.0" } }, "shebang-regex": { @@ -2964,14 +2964,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.2", + "use": "3.1.1" }, "dependencies": { "define-property": { @@ -2980,7 +2980,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } }, "extend-shallow": { @@ -2989,7 +2989,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } } } @@ -3000,9 +3000,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" }, "dependencies": { "define-property": { @@ -3011,7 +3011,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "is-descriptor": "1.0.2" } }, "is-accessor-descriptor": { @@ -3020,7 +3020,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-data-descriptor": { @@ -3029,7 +3029,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "kind-of": "6.0.2" } }, "is-descriptor": { @@ -3038,9 +3038,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.2" } } } @@ -3051,7 +3051,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "^3.2.0" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -3060,7 +3060,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -3077,11 +3077,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" } }, "source-map-support": { @@ -3090,8 +3090,8 @@ "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "buffer-from": "1.1.1", + "source-map": "0.6.1" }, "dependencies": { "source-map": { @@ -3114,7 +3114,7 @@ "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", "optional": true, "requires": { - "memory-pager": "^1.0.2" + "memory-pager": "1.5.0" } }, "spdx-correct": { @@ -3123,8 +3123,8 @@ "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "spdx-expression-parse": "3.0.0", + "spdx-license-ids": "3.0.3" } }, "spdx-exceptions": { @@ -3139,8 +3139,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "spdx-exceptions": "2.2.0", + "spdx-license-ids": "3.0.3" } }, "spdx-license-ids": { @@ -3155,7 +3155,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "extend-shallow": "3.0.2" } }, "static-extend": { @@ -3164,8 +3164,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "define-property": "0.2.5", + "object-copy": "0.1.0" }, "dependencies": { "define-property": { @@ -3174,7 +3174,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "^0.1.0" + "is-descriptor": "0.1.6" } } } @@ -3190,8 +3190,8 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" } }, "string_decoder": { @@ -3200,7 +3200,7 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "5.1.2" } }, "strip-ansi": { @@ -3209,7 +3209,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "3.0.0" } }, "strip-bom": { @@ -3218,7 +3218,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "is-utf8": "0.2.1" } }, "strip-eof": { @@ -3233,7 +3233,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "^4.0.1" + "get-stdin": "4.0.1" } }, "strip-json-comments": { @@ -3248,7 +3248,7 @@ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "3.0.0" } }, "term-size": { @@ -3257,7 +3257,7 @@ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", "dev": true, "requires": { - "execa": "^0.7.0" + "execa": "0.7.0" } }, "timed-out": { @@ -3272,7 +3272,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "^3.0.2" + "kind-of": "3.2.2" }, "dependencies": { "kind-of": { @@ -3281,7 +3281,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "is-buffer": "1.1.6" } } } @@ -3292,10 +3292,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" } }, "to-regex-range": { @@ -3304,8 +3304,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "3.0.0", + "repeat-string": "1.6.1" } }, "toidentifier": { @@ -3319,7 +3319,7 @@ "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", "dev": true, "requires": { - "nopt": "~1.0.10" + "nopt": "1.0.10" } }, "tree-kill": { @@ -3373,10 +3373,10 @@ "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", "dev": true, "requires": { - "@types/strip-bom": "^3.0.0", + "@types/strip-bom": "3.0.0", "@types/strip-json-comments": "0.0.30", - "strip-bom": "^3.0.0", - "strip-json-comments": "^2.0.0" + "strip-bom": "3.0.0", + "strip-json-comments": "2.0.1" }, "dependencies": { "strip-bom": { @@ -3408,7 +3408,7 @@ "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", "dev": true, "requires": { - "debug": "^2.2.0" + "debug": "2.6.9" } }, "union-value": { @@ -3417,10 +3417,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "0.4.3" }, "dependencies": { "extend-shallow": { @@ -3429,7 +3429,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "is-extendable": "0.1.1" } }, "set-value": { @@ -3438,10 +3438,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "to-object-path": "0.3.0" } } } @@ -3452,7 +3452,7 @@ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", "dev": true, "requires": { - "crypto-random-string": "^1.0.0" + "crypto-random-string": "1.0.0" } }, "unpipe": { @@ -3466,8 +3466,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" + "has-value": "0.3.1", + "isobject": "3.0.1" }, "dependencies": { "has-value": { @@ -3476,9 +3476,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" }, "dependencies": { "isobject": { @@ -3518,16 +3518,16 @@ "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==", "dev": true, "requires": { - "boxen": "^1.2.1", - "chalk": "^2.0.1", - "configstore": "^3.0.0", - "import-lazy": "^2.1.0", - "is-ci": "^1.0.10", - "is-installed-globally": "^0.1.0", - "is-npm": "^1.0.0", - "latest-version": "^3.0.0", - "semver-diff": "^2.0.0", - "xdg-basedir": "^3.0.0" + "boxen": "1.3.0", + "chalk": "2.4.2", + "configstore": "3.1.2", + "import-lazy": "2.1.0", + "is-ci": "1.2.1", + "is-installed-globally": "0.1.0", + "is-npm": "1.0.0", + "latest-version": "3.1.0", + "semver-diff": "2.1.0", + "xdg-basedir": "3.0.0" } }, "urix": { @@ -3542,7 +3542,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "^1.0.1" + "prepend-http": "1.0.4" } }, "use": { @@ -3568,8 +3568,8 @@ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "spdx-correct": "3.1.0", + "spdx-expression-parse": "3.0.0" } }, "vary": { @@ -3583,7 +3583,7 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "^2.0.0" + "isexe": "2.0.0" } }, "widest-line": { @@ -3592,7 +3592,7 @@ "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==", "dev": true, "requires": { - "string-width": "^2.1.1" + "string-width": "2.1.1" } }, "wrappy": { @@ -3607,9 +3607,9 @@ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "graceful-fs": "4.1.15", + "imurmurhash": "0.1.4", + "signal-exit": "3.0.2" } }, "xdg-basedir": { diff --git a/server/src/ConfigManager.ts b/server/src/ConfigManager.ts index 46c384f..53aa217 100644 --- a/server/src/ConfigManager.ts +++ b/server/src/ConfigManager.ts @@ -2,6 +2,7 @@ export class DbConfig { private defaultMongoUrl = "mongodb://localhost/HolyGrail"; public readonly holyGrailCollection = "holygrails"; + public readonly partyCollection = "parties"; private _mongoUrl: string; public get mongoUrl(): string { diff --git a/server/src/ItemScores.ts b/server/src/ItemScores.ts new file mode 100644 index 0000000..1eb7276 --- /dev/null +++ b/server/src/ItemScores.ts @@ -0,0 +1,537 @@ +export const ItemScores = { + "Nokozan Relic": 1, + "Gheed's Fortune": 1, + Annihilus: 1, + Nagelring: 1, + "Manald Heal": 1, + "Angelic Halo": 1, + "Cathan's Seal": 1, + Goreshovel: 1, + "Rogue's Bow": 1, + Steelgoad: 1, + Gleamscythe: 1, + Shadowfang: 1, + "Angelic Mantle": 1, + "Berserker's Headgear": 1, + "Civerb's Ward": 1, + "Cleglaw's Pincers": 1, + "Hsarus' Iron Stay": 1, + "Hsarus' Iron Heel": 1, + "Coif of Glory": 1, + Darkglow: 1, + Stormguild: 1, + "Swordback Hold": 1, + "Chance Guards": 1, + "Treads of Cthon": 1, + Nightsmoke: 1, + "Hwanin's Blessing": 1, + "Spire of Lazarus": 1, + Maelstrom: 1, + Duskdeep: 1, + Hawkmail: 1, + "Sparking Mail": 1, + Steelclash: 1, + Bladebone: 1, + Ichorsting: 1, + Bloodrise: 1, + "Soul Harvest": 1, + "Griswold's Edge": 1, + "Berserker's Hatchet": 1, + "Cathan's Mesh": 1, + "Civerb's Cudgel": 1, + "Isenhart's Lightbrand": 1, + "Isenhart's Horns": 1, + "Milabrega's Orb": 1, + Rusthandle: 1, + "Venom Ward": 1, + "The Chieftain": 1, + Stormstrike: 1, + "The Jade Tan Do": 1, + Bloodthief: 1, + Soulflay: 1, + "Cathan's Rule": 1, + "Isenhart's Case": 1, + "Sander's Superstition": 1, + "The Salamander": 1, + Gravenspine: 1, + "Skull Splitter": 1, + "The General's Tan Do Li Ga": 1, + Bonesnap: 1, + "The Battlebranch": 1, + "Lance of Yaggai": 1, + Hellplague: 1, + "Kinemil's Awl": 1, + "Arctic Mitts": 1, + "Berserker's Hauberk": 1, + "Cathan's Visage": 1, + "Cleglaw's Tooth": 1, + "Infernal Sign": 1, + "Iratha's Cord": 1, + "Iratha's Cuff": 1, + "Milabrega's Rod": 1, + "Tancred's Crowbill": 1, + "Vidala's Fetlock": 1, + "The Face of Horror": 1, + Iceblink: 1, + "Wall of the Eyeless": 1, + Magefist: 1, + "Goblin Toe": 1, + Goldwrap: 1, + Stormeye: 1, + Brainhew: 1, + Wizendraw: 1, + Hellcast: 1, + "Spectral Shard": 1, + "The Tannr Gorerod": 1, + Blacktongue: 1, + "Sigon's Visor": 1, + "Sigon's Guard": 1, + "Tancred's Skull": 1, + "Vidala's Barb": 1, + "Naj's Circlet": 1, + Howltusk: 1, + Wormskull: 1, + Boneflesh: 1, + "Bverrit Keep": 1, + "Arcanna's Deathwand": 1, + "Immortal King's Will": 1, + "The Iron Jang Bong": 1, + Frostburn: 1, + Tearhaunch: 1, + Bladebuckle: 1, + "Arctic Horn": 1, + "Death's Touch": 1, + "Sigon's Sabot": 1, + "Sigon's Wrap": 1, + "Sigon's Gage": 1, + Rakescar: 1, + Humongous: 1, + Hellclap: 1, + Ironstone: 1, + "Culwen's Point": 1, + Ripsaw: 1, + "Infernal Torch": 1, + "Ume's Lament": 1, + "Umbral Disk": 1, + "Axe of Fechmar": 1, + Leadcrow: 1, + Stoutnail: 1, + "Dimoak's Hew": 1, + "The Dragon Chang": 1, + "Blood Crescent": 1, + "Arcanna's Head": 1, + "Cleglaw's Claw": 1, + Tarnhelm: 1, + "The Centurion": 1, + Witherstring: 1, + Bloodfist: 1, + Gorefoot: 1, + Deathspade: 1, + Crushflange: 1, + "Serpent Lord": 1, + "Angelic Sickle": 1, + "Arctic Binding": 1, + "Cow King's Hide": 1, + "Cow King's Hooves": 1, + "Sander's Taboo": 1, + "Sander's Riprap": 1, + Twitchthroe: 1, + Snakecord: 1, + "Raven Claw": 1, + "The Diggler": 1, + Razortine: 1, + "Skewer of Krintiz": 1, + "The Mahim-Oak Curio": 2, + "Angelic Wings": 2, + "Cathan's Sigil": 2, + "Civerb's Icon": 2, + "Iratha's Collar": 2, + "Tancred's Weird": 2, + "Vidala's Snare": 2, + "Dwarf Star": 2, + "Raven Frost": 2, + "Iratha's Coil": 2, + "Isenhart's Parry": 2, + "Milabrega's Diadem": 2, + "Undead Crown": 2, + Rockfleece: 2, + "The Ward": 2, + Skystrike: 2, + "Dark Clan Crusher": 2, + Woestave: 2, + Bloodletter: 2, + Razorswitch: 2, + "Sigon's Shelter": 2, + Rattlecage: 2, + "Venom Grip": 2, + Coldkill: 2, + Blastbark: 2, + Riphook: 2, + Doomslinger: 2, + Spineripper: 2, + Steeldriver: 2, + Fleshrender: 2, + "The Meat Scraper": 2, + "The Impaler": 2, + "The Patriarch": 2, + Deathbit: 2, + "Zakarum's Hand": 2, + "Suicide Branch": 2, + "Arcanna's Flesh": 2, + "Cow King's Horns": 2, + "Rite of Passage": 2, + "Butcher's Pupil": 2, + "Warlord's Trust": 2, + "Kuko Shakaku": 2, + "Langer Briser": 2, + "Heart Carver": 2, + "Sureshrill Frost": 2, + "The Grim Reaper": 2, + "Kelpie Snare": 2, + Hexfire: 2, + "Peasant Crown": 2, + "Heavenly Garb": 2, + "The Spirit Shroud": 2, + "Skin of the Vipermagi": 2, + Visceratuant: 2, + Infernostride: 2, + "String of Ears": 2, + "Pierre Tombale Couant": 2, + "The Scalper": 2, + "Titan's Revenge": 2, + Ribcracker: 2, + "Aldur's Rhythm": 2, + "Hwanin's Justice": 2, + "Tancred's Spine": 2, + "M'avina's Tenet": 2, + "Whitstan's Guard": 2, + "Magnus' Skin": 2, + Spellsteel: 2, + Endlesshail: 2, + "Blade of Ali Baba": 2, + "Ginther's Rift": 2, + Islestrike: 2, + Moonfall: 2, + "Blackleach Blade": 2, + "Crainte Vomir": 2, + Rockstopper: 2, + Goldskin: 2, + "Skin of the Flayed One": 2, + "Moser's Blessed Circle": 2, + Gravepalm: 2, + Waterwalk: 2, + Razortail: 2, + "Arctic Furs": 4, + "Death's Hand": 4, + "Death's Guard": 4, + "Hsarus' Iron Fist": 4, + "Infernal Cranium": 4, + "Tancred's Hobnails": 4, + "Vidala's Ambush": 4, + "Milabrega's Robe": 4, + "The Eye of Etlich": 5, + "Carrion Wind": 5, + "Biggin's Bonnet": 5, + "Pelta Lunata": 5, + "The Hand of Broc": 5, + Hotspur: 5, + "The Gnasher": 5, + Gull: 5, + Felloak: 5, + "Rixot's Keen": 5, + "Sander's Paragon": 5, + Pluckeye: 5, + Greyform: 5, + Stormrider: 5, + "Pus Spitter": 5, + "Blackbog's Sharp": 5, + "Athena's Wrath": 5, + "Soulfeast Tine": 5, + Headstriker: 5, + "Bing Sz Wang": 5, + Stealskull: 5, + "Silks of the Victor": 5, + "Iron Pelt": 5, + "Spirit Forge": 5, + Stormchaser: 5, + "Lance Guard": 5, + "Hwanin's Refuge": 5, + "Natalya's Soul": 5, + "Sazabi's Mental Sheath": 5, + "Tal Rasha's Fine Spun Cloth": 5, + "Trang-Oul's Claws": 5, + "Haemosu's Adamant": 5, + "Tal Rasha's Horadric Crest": 5, + "Pompeii's Wrath": 6, + "Witchwild String": 6, + "Baezil's Vortex": 6, + "Bloodtree Stump": 6, + "Hone Sundan": 6, + "Coldsteel Eye": 6, + "Plague Bearer": 6, + "The Vile Husk": 6, + "Darksight Helm": 6, + "Crow Caw": 6, + Shaftstop: 6, + "Tiamat's Rebuke": 6, + Ghoulhide: 6, + Silkweave: 6, + "Gloom's Trap": 6, + "Blackhorn's Face": 6, + "Duriel's Shell": 6, + "Lidless Wall": 6, + "Guardian Naga": 6, + "Boneslayer Blade": 6, + Cliffkiller: 6, + "Buriza-Do Kyanon": 6, + Stormspike: 6, + Earthshaker: 6, + "Spire of Honor": 6, + Cloudcrack: 6, + "Aldur's Stony Gaze": 6, + "Aldur's Advance": 6, + "M'avina's Icy Clutch": 6, + "Natalya's Totem": 6, + "Guillaume's Face": 6, + "Wilhelm's Pride": 6, + "Tal Rasha's Lidless Eye": 6, + "Immortal King's Detail": 6, + "Immortal King's Forge": 6, + "Immortal King's Pillar": 6, + "The Minotaur": 7, + Magewrath: 7, + "Husoldal Evo": 7, + "The Atlantean": 7, + "Todesfaelle Flamme": 7, + "Bartuc's Cut-Throat": 7, + "Lycander's Flank": 7, + "The Oculus": 7, + "Valkyrie Wing": 7, + "Vampire Gaze": 7, + "Skullder's Ire": 7, + "Gerke's Sanctuary": 7, + "Lava Gout": 7, + "War Traveler": 7, + Snowclash: 7, + "Razor's Edge": 7, + "Goldstrike Arch": 7, + "Demon Machine": 7, + "The Gavel of Pain": 7, + Swordguard: 7, + "Nord's Tenderizer": 7, + "Guardian Angel": 7, + Hellmouth: 7, + "Gore Rider": 7, + "Thundergod's Vigor": 7, + "Blood Raven's Charge": 7, + "Laying of Hands": 7, + "Hwanin's Splendor": 7, + "Dangoon's Teaching": 7, + "Trang-Oul's Scales": 7, + "Demon Limb": 8, + "Grim's Burning Dead": 8, + "Crown of Thieves": 8, + Toothrow: 8, + "Radament's Sphere": 8, + Gimmershred: 8, + "Jalal's Mane": 8, + Wizardspike: 8, + Bonehew: 8, + "Arioc's Needle": 8, + "Harlequin Crest": 8, + "Que-Hegan's Wisdom": 8, + "Atma's Wail": 8, + "Djinn Slayer": 8, + Bloodmoon: 8, + "Jade Talon": 8, + "Black Hades": 8, + "Blackoak Shield": 8, + "Dracul's Grasp": 8, + "Arachnid Mesh": 8, + Stoneraven: 8, + "Dark Adherent": 8, + "Griswold's Heart": 8, + "Immortal King's Stone Crusher": 8, + "Ethereal Edge": 9, + Corpsemourn: 9, + "Ormus' Robes": 9, + "Sandstorm Trek": 9, + Thunderstroke: 9, + Windhammer: 9, + "Eschuta's Temper": 9, + "Rune Master": 9, + "Demon's Arch": 9, + "Baranar's Star": 9, + "The Reaper's Toll": 9, + Flamebellow: 9, + "Kira's Guardian": 9, + "The Gladiator's Bane": 9, + Stormshield: 9, + Marrowwalk: 9, + Credendum: 9, + "Natalya's Shadow": 9, + "Saracen's Chance": 10, + "The Cat's Eye": 10, + "Crescent Moon": 10, + "Atma's Scarab": 10, + "The Rising Sun": 10, + "Highlord's Wrath": 10, + "Hellfire Torch": 10, + "Rainbow Facet": 10, + "Rainbow Facet - Fire Level": 10, + "Rainbow Facet - Fire Die": 10, + "Rainbow Facet - Light Level": 10, + "Rainbow Facet - Light Die": 10, + "Rainbow Facet - Cold Level": 10, + "Rainbow Facet - Cold Die": 10, + "Rainbow Facet - Poison Level": 10, + "Rainbow Facet - Poison Die": 10, + "Blinkbat's Form": 10, + Lenymo: 10, + "Knell Striker": 10, + "Bane Ash": 10, + "Torch of Iro": 10, + "Chromatic Ire": 10, + "Carin Shard": 10, + "The Fetid Sprinkler": 10, + Warpspear: 10, + "Hand of Blessed Light": 10, + "Arm of King Leoric": 10, + "Lycander's Aim": 10, + "Skull Collector": 10, + "Blackhand Key": 10, + "Trang-Oul's Wing": 10, + Homunculus: 10, + "Arreat's Face": 10, + "Steel Shade": 10, + "Spike Thorn": 10, + "Soul Drainer": 10, + "Nosferatu's Coil": 10, + "Shadow Killer": 10, + Hellslayer: 10, + Hellrack: 10, + Viperfork: 10, + Lightsabre: 10, + "Naj's Puzzler": 10, + "Andariel's Visage": 10, + "Verdungo's Hearty Cord": 10, + "Arcanna's Sign": 15, + "Telling of Beads": 15, + "Tal Rasha's Adjudication": 15, + "Stone of Jordan": 15, + "Bul-Kathos' Wedding Band": 15, + "Herald of Zakarum": 15, + "Heaven's Light": 15, + "Cerebus' Bite": 15, + "The Redeemer": 15, + Wolfhowl: 15, + "Naj's Light Plate": 15, + "Sazabi's Ghost Liberator": 15, + "Alma Negra": 16, + "Nature's Peace": 20, + "Ondal's Wisdom": 20, + Boneshade: 20, + "Demonhorn's Edge": 20, + "Ondal's Almighty": 20, + "M'avina's Embrace": 20, + "Seraph's Hymn": 25, + "Mara's Kaleidoscope": 30, + "Firelizard's Talons": 30, + "Sazabi's Cobalt Redeemer": 30, + "Aldur's Deception": 30, + "Taebaek's Glory": 30, + "Tal Rasha's Guardianship": 30, + "Trang-Oul's Guise": 30, + "Trang-Oul's Girth": 30, + Azurewrath: 40, + Eaglehorn: 40, + Doombringer: 40, + Warshrike: 40, + Cranebeak: 40, + Widowmaker: 40, + "Wraith Flight": 40, + "Tomb Reaver": 40, + Lacerator: 40, + "Horizon's Tornado": 50, + "Arkaine's Valor": 50, + "Head Hunter's Glory": 50, + "M'avina's Caster": 50, + "Medusa's Gaze": 50, + "Messerschmidt's Reaver": 50, + "Gut Siphon": 50, + Fleshripper: 50, + Frostwind: 50, + "Stone Crusher": 50, + "Bul-Kathos' Sacred Charge": 50, + "Bul-Kathos' Tribal Guardian": 50, + "Griswold's Valor": 50, + "Immortal King's Soul Cage": 50, + "M'avina's True Sight": 50, + "Natalya's Mark": 50, + Leviathan: 55, + "Wisp Projector": 60, + Metalgrid: 75, + "Giant Skull": 75, + "Steel Carapace": 75, + "Spirit Ward": 75, + "Spirit Keeper": 100, + Boneflame: 100, + "Halaberd's Reign": 100, + "Veil of Steel": 100, + "Nightwing's Veil": 100, + "Griswold's Redemption": 125, + "Death Cleaver": 125, + "Executioner's Justice": 125, + Windforce: 125, + Ghostflame: 125, + "Gargoyle's Bite": 125, + Stormspire: 125, + "Steel Pillar": 125, + "The Grandfather": 125, + "Griswold's Honor": 125, + "Crown of Ages": 150, + "Griffon's Eye": 150, + Steelrend: 150, + "Shadow Dancer": 150, + "Earth Shifter": 150, + "The Cranium Basher": 150, + Ravenlore: 175, + Dragonscale: 175, + "Templar's Might": 175, + "Death's Fathom": 200, + "Darkforce Spawn": 200, + Stormlash: 250, + "Schaefer's Hammer": 250, + "Astreon's Iron Ward": 350, + "Mang Song's Lesson": 350, + "Death's Web": 350, + "Tyrael's Might": 1000 +}; + +// fixes for old grail seed data +ItemScores["Crow Cow"] = ItemScores["Crow Caw"]; +ItemScores["Chance Gaurds"] = ItemScores["Chance Guards"]; +ItemScores["Shawdow Dancer"] = ItemScores["Shadow Dancer"]; +ItemScores["The Chieftan"] = ItemScores["The Chieftain"]; +ItemScores["General's Tan Do Li Ga"] = ItemScores["The General's Tan Do Li Ga"]; +ItemScores["Baranar's Star "] = ItemScores["Baranar's Star"]; +ItemScores["Demon Limb "] = ItemScores["Demon Limb"]; +ItemScores["Stormlash "] = ItemScores.Stormlash; +ItemScores["Horizon's Tornado "] = ItemScores["Horizon's Tornado"]; +ItemScores["Stone Crusher "] = ItemScores["Stone Crusher"]; +ItemScores["Schaefer's Hammer "] = ItemScores["Schaefer's Hammer"]; +ItemScores["Culwen's point"] = ItemScores["Culwen's Point"]; +ItemScores["Wraith's Flight"] = ItemScores["Wraith Flight"]; +ItemScores["Eye of Etlich"] = ItemScores["The Eye of Etlich"]; +ItemScores["Mahim-Oak Curio"] = ItemScores["The Mahim-Oak Curio"]; +ItemScores["Cat's Eye"] = ItemScores["The Cat's Eye"]; +ItemScores["Rising Sun"] = ItemScores["The Rising Sun"]; +ItemScores["Highlords Wrath"] = ItemScores["Highlord's Wrath"]; +ItemScores["Bloodraven's Charge"] = ItemScores["Blood Raven's Charge"]; +ItemScores["Sparkling Mail"] = ItemScores["Sparking Mail"]; +(ItemScores as any).Viscerataunt = ItemScores.Visceratuant; +(ItemScores as any).Steelshade = ItemScores["Steel Shade"]; + +ItemScores["Tal Rasha's Fine-Spun Cloth"] = + ItemScores["Tal Rasha's Fine Spun Cloth"]; +ItemScores["Haemosu's Adament"] = ItemScores["Haemosu's Adamant"]; diff --git a/server/src/controllers/GrailController.ts b/server/src/controllers/GrailController.ts index 152831c..c4c9072 100644 --- a/server/src/controllers/GrailController.ts +++ b/server/src/controllers/GrailController.ts @@ -4,6 +4,7 @@ import { ConfigManager } from "../ConfigManager"; import { IGrailCollection } from "../models/IGrailCollection"; import { IHolyGrail } from "../models/IHolyGrail"; import { MongoErrorCodes } from "../models/MongoErrorCodes"; +import { ItemScoreCalculator } from "../utils/ItemScoreCalculator"; export class GrailController { private get grailCollection(): Collection { @@ -72,6 +73,7 @@ export class GrailController { const grailData = req.body.grail; const ethGrailData = req.body.ethGrail; const runewordGrailData = req.body.runewordGrail; + const partyData = ItemScoreCalculator.formatGrailForParty(grailData); const token = req.body.token; if (!grailData) { @@ -84,6 +86,7 @@ export class GrailController { dataToSet.data = grailData; dataToSet.ethData = ethGrailData; dataToSet.runewordData = runewordGrailData; + dataToSet.partyData = partyData; return dataToSet; }); }; @@ -222,7 +225,7 @@ export class GrailController { return new Date().toISOString(); } - private static trimAndToLower(value: string): string { + public static trimAndToLower(value: string): string { return value ? value.toLowerCase().trim() : null; } } diff --git a/server/src/controllers/PartyController.ts b/server/src/controllers/PartyController.ts new file mode 100644 index 0000000..9e639de --- /dev/null +++ b/server/src/controllers/PartyController.ts @@ -0,0 +1,323 @@ +import { Request, Response } from "express"; +import { Db, Collection, MongoError, Cursor, UpdateQuery } from "mongodb"; +import { ConfigManager } from "../ConfigManager"; +import { MongoErrorCodes } from "../models/MongoErrorCodes"; +import { IParty } from "../models/IParty"; +import { IPartyData } from "../models/IPartyData"; +import { IGrailCollection } from "../models/IGrailCollection"; +import { GrailController } from "./GrailController"; + +export class PartyController { + private get partyCollection(): Collection { + return this.db.collection(ConfigManager.db.partyCollection); + } + + private get grailCollection(): Collection { + return this.db.collection( + ConfigManager.db.holyGrailCollection + ); + } + + public constructor(private db: Db) {} + + public add = async (req: Request, res: Response) => { + let newParty: IParty = req.body; + const originalAddress = newParty.address; + newParty.address = PartyController.trimAndToLower(newParty.address); + newParty.token = PartyController.getToken(); + newParty.created = newParty.modified = new Date(); + newParty.userlist = []; + newParty.pendingUserlist = []; + try { + const result = await this.partyCollection.insertOne(newParty); + const party = await this.partyCollection.findOne({ + _id: result.insertedId + }); + const partyData = await this.getPartyData(party); + PartyController.mapAndReturnPartyData( + originalAddress, + res, + party, + partyData + ); + } catch (err) { + const mongoError = err as MongoError; + if (mongoError.code === MongoErrorCodes.DuplicateKey) { + res + .status(400) + .send({ type: "duplicateKey", address: originalAddress }); + return; + } + PartyController.sendUnknownError(res, err); + } + }; + + public get = async (req: Request, res: Response) => { + const address = GrailController.trimAndToLower(req.params.address); + await this.getByAddress(address, res, async party => + PartyController.mapAndReturnPartyData( + address, + res, + party, + await this.getPartyData(party) + ) + ); + }; + + private getPartyData = async (party: IParty): Promise => { + const grails = await this.grailCollection + .find({ + address: { + $in: party.userlist + } + }) + .project({ + address: true, + partyData: true + }) + .toArray(); + + return this.mapGrailsToPartyData(grails); + }; + + private mapGrailsToPartyData = (grails: IGrailCollection[]) => { + let partyData = { + users: [] + }; + grails.forEach(grail => { + partyData.users.push({ + username: grail.address, + data: grail.partyData + }); + }); + return partyData; + }; + + public validatePassword = async (req: Request, res: Response) => { + const address = GrailController.trimAndToLower(req.params.address); + const password = req.body.password; + + if (!password && address) { + res.json(false); + return; + } + + const party = await this.partyCollection.findOne({ + address: PartyController.trimAndToLower(address) + }); + if (!party) { + res.status(404).send({ type: "notFound", address }); + } else { + res.json(party.password === password); + } + }; + + public updatePartyUser = async (req: Request, res: Response) => { + try { + const method = req.body.method; + const address = GrailController.trimAndToLower(req.body.address); + const password = req.body.password; + const token = req.body.token; + const user = GrailController.trimAndToLower(req.body.user); + + switch (method) { + case "accept": + await this.update( + res, + address, + password, + token, + dataToSet => dataToSet, + { + $pull: { pendingUserlist: user }, + $addToSet: { userlist: user } + } + ); + break; + case "deny": + await this.update( + res, + address, + password, + token, + dataToSet => dataToSet, + { + $pull: { pendingUserlist: user } + } + ); + break; + case "remove": + await this.update( + res, + address, + password, + token, + dataToSet => dataToSet, + { + $pull: { userlist: user } + } + ); + break; + case "join": + await this.addUserToParty(req, res); + break; + default: + res.status(404).send({ type: "methodUnknown", method }); + } + } catch (err) { + PartyController.sendUnknownError(res, err); + } + }; + + private addUserToParty = async (req: Request, res: Response) => { + const grailAddress = GrailController.trimAndToLower(req.body.user); + const partyAddress = GrailController.trimAndToLower(req.body.address); + const result = await this.grailCollection.findOne({ + address: GrailController.trimAndToLower(grailAddress) + }); + + if (!result) { + res.status(404).send({ type: "userNotFound", grailAddress }); + return; + } + + const party = await this.partyCollection.findOne({ + address: GrailController.trimAndToLower(partyAddress) + }); + + if (!party) { + res.status(404).send({ type: "partyNotFound", partyAddress }); + return; + } + if ( + party.userlist.indexOf(grailAddress) !== -1 || + party.pendingUserlist.indexOf(grailAddress) !== -1 + ) { + res.status(409).send({ type: "conflict", grailAddress }); + return; + } + await this.update( + res, + party.address, + party.password, + party.token, + dataToSet => dataToSet, + { + $addToSet: { pendingUserlist: grailAddress } + } + ); + }; + + private handleDbError = async ( + address: string, + password: string, + token: string, + res: Response + ) => { + await this.getByAddress(address, res, existingParty => { + if (existingParty.password !== password) { + res.status(401).send({ type: "password", address }); + } else if (existingParty.token !== token) { + res.status(403).send({ + type: "token", + correctToken: existingParty.token, + specifiedToken: token, + address + }); + } else { + PartyController.sendUnknownError(res, "Database error"); + } + }); + }; + + private update = async ( + res: Response, + address: string, + password: string, + token: string, + modifyDataToSaveFunc: (data: Partial) => Partial, + optionalUpdates?: UpdateQuery + ) => { + try { + const updateQuery: UpdateQuery = optionalUpdates + ? optionalUpdates + : {}; + updateQuery.$set = modifyDataToSaveFunc({ + token: PartyController.getToken(), + modified: new Date() + }); + const result = await this.partyCollection.findOneAndUpdate( + { + address: PartyController.trimAndToLower(address), + password: password, + token: token + }, + updateQuery, + { returnOriginal: false } + ); + + if (result && result.ok && result.value) { + PartyController.mapAndReturnPartyData( + address, + res, + result.value, + await this.getPartyData(result.value) + ); + return; + } + + // we didn't receive a party, so either the address, password or token is wrong + await this.handleDbError(address, password, token, res); + } catch (err) { + PartyController.sendUnknownError(res, err); + } + }; + + private async getByAddress( + address: string, + res: Response, + onSuccess: (party) => any + ) { + try { + const party = await this.partyCollection.findOne({ + address: PartyController.trimAndToLower(address) + }); + + if (!party) { + res.status(404).send({ type: "notFound", address }); + return; + } + onSuccess(party); + } catch (err) { + PartyController.sendUnknownError(res, err); + } + } + + private static mapAndReturnPartyData( + originalAddress: string, + res: Response, + party: IParty, + data?: any + ) { + // important: never send the full data back directly, because the password is saved in there! + res.json({ + address: originalAddress, + userlist: party.userlist, + pendingUserlist: party.pendingUserlist, + token: party.token, + data: data + } as IPartyData); + } + + private static sendUnknownError(res: Response, error?: any) { + res.status(500).send({ type: "unknown", error }); + } + + private static getToken(): string { + return new Date().toISOString(); + } + + private static trimAndToLower(value: string): string { + return value ? value.toLowerCase().trim() : null; + } +} diff --git a/server/src/definitions/IItem.ts b/server/src/definitions/IItem.ts new file mode 100644 index 0000000..5facd5a --- /dev/null +++ b/server/src/definitions/IItem.ts @@ -0,0 +1,5 @@ +export interface IItem { + note?: string; + wasFound?: number; + isPerfect?: boolean; +} diff --git a/server/src/definitions/Item.ts b/server/src/definitions/Item.ts new file mode 100644 index 0000000..cf0f939 --- /dev/null +++ b/server/src/definitions/Item.ts @@ -0,0 +1,9 @@ +import { IItem } from "./IItem"; + +export class Item implements IItem { + public constructor( + public wasFound?: number, + public note?: string, + public isPerfect?: boolean + ) {} +} diff --git a/server/src/initializers/AppInitializer.ts b/server/src/initializers/AppInitializer.ts index f3cbb4e..12bf3b6 100644 --- a/server/src/initializers/AppInitializer.ts +++ b/server/src/initializers/AppInitializer.ts @@ -6,10 +6,11 @@ import * as path from "path"; import { Db } from "mongodb"; import { GrailController } from "../controllers/GrailController"; import { ItemsController } from "../controllers/ItemsController"; +import { PartyController } from "../controllers/PartyController"; function initializeExpressServer(express: expressServer.Express): void { - express.use(bodyParser.urlencoded({ extended: true, limit: '1mb' })); - express.use(bodyParser.json({ limit: '1mb' })); + express.use(bodyParser.urlencoded({ extended: true, limit: "1mb" })); + express.use(bodyParser.json({ limit: "1mb" })); express.use(cors()); } @@ -27,6 +28,7 @@ function initializeExpressServerForClient( function configureRoutes(db: Db, express: expressServer.Express): void { const grailController: GrailController = new GrailController(db); + const partyController: PartyController = new PartyController(db); express.route("/api/grail").post(grailController.add); @@ -50,6 +52,18 @@ function configureRoutes(db: Db, express: expressServer.Express): void { express .route("/api/runewords/:runewordName") .get(itemsController.getRuneword); + + express.route("/api/party").post(partyController.add); + + express.route("/api/party/:address").get(partyController.get); + + express + .route("/api/party/:address/manage/:method") + .put(partyController.updatePartyUser); + + express + .route("/api/party/:address/password/validate") + .put(partyController.validatePassword); } export function initializeApp(db: Db, rootDirectoryPath: string) { diff --git a/server/src/initializers/DbInitializer.ts b/server/src/initializers/DbInitializer.ts index c5e3ad4..29f0f60 100644 --- a/server/src/initializers/DbInitializer.ts +++ b/server/src/initializers/DbInitializer.ts @@ -1,8 +1,9 @@ import { IGrailCollection } from "../models/IGrailCollection"; import { ConfigManager } from "../ConfigManager"; import { MongoClient, Db } from "mongodb"; +import { IParty } from "../models/IParty"; -async function crateAddressIndex(db: Db) { +async function createAddressIndex(db: Db) { const holyGrailCollection = db.collection( ConfigManager.db.holyGrailCollection ); @@ -16,11 +17,26 @@ async function crateAddressIndex(db: Db) { ); } +async function createPartyAddressIndex(db: Db) { + const partyCollection = db.collection( + ConfigManager.db.partyCollection + ); + await partyCollection.createIndex( + { address: 1 }, + { + name: "address_idx", + unique: true, + collation: { locale: "en", strength: 2 } + } + ); +} + export async function initializeDb(): Promise { const mongoClient = await MongoClient.connect(ConfigManager.db.mongoUrl, { useNewUrlParser: true }); const db = mongoClient.db(); - await crateAddressIndex(db); + await createAddressIndex(db); + await createPartyAddressIndex(db); return db; } diff --git a/server/src/models/IGrailCollection.ts b/server/src/models/IGrailCollection.ts index 784c2a0..637d4e1 100644 --- a/server/src/models/IGrailCollection.ts +++ b/server/src/models/IGrailCollection.ts @@ -9,5 +9,6 @@ export interface IGrailCollection { data?: any; ethData?: any; runewordData?: any; + partyData?: any; settings?: any; } diff --git a/server/src/models/IHolyGrail.ts b/server/src/models/IHolyGrail.ts index a4ed772..be78ab6 100644 --- a/server/src/models/IHolyGrail.ts +++ b/server/src/models/IHolyGrail.ts @@ -6,5 +6,6 @@ export interface IHolyGrail { data?: any; ethData?: any; runewordData?: any; + partyData?: any; settings?: any; } diff --git a/server/src/models/IParty.ts b/server/src/models/IParty.ts new file mode 100644 index 0000000..f76049e --- /dev/null +++ b/server/src/models/IParty.ts @@ -0,0 +1,9 @@ +export interface IParty { + address: string; + password: string; + token: string; + created: Date; + modified: Date; + userlist?: any; + pendingUserlist?: any; +} diff --git a/server/src/models/IPartyData.ts b/server/src/models/IPartyData.ts new file mode 100644 index 0000000..4edd2e4 --- /dev/null +++ b/server/src/models/IPartyData.ts @@ -0,0 +1,7 @@ +export interface IPartyData { + address: string; + token: string; + userlist?: any; + pendingUserlist?: any; + data?: any; +} diff --git a/server/src/utils/ItemScoreCalculator.ts b/server/src/utils/ItemScoreCalculator.ts new file mode 100644 index 0000000..9392bc1 --- /dev/null +++ b/server/src/utils/ItemScoreCalculator.ts @@ -0,0 +1,121 @@ +import { IItem } from "../definitions/IItem"; +import { Item } from "../definitions/Item"; +import { ItemScores } from "../ItemScores"; + +export class MissingItems { + public missing: number = 0; + public score: number = 0; + public found: number = 0; + + public constructor() {} +} + +export class ItemScoreCalculator { + public constructor() {} + + public static formatGrailForParty = (data: any): any => { + let partyGrailData = { + uniqueArmor: { + missing: 123 + }, + uniqueWeapons: { + missing: 197 + }, + uniqueOther: { + missing: 59 + }, + sets: { + missing: 127 + }, + itemScore: 0 + }; + if (data && data.uniques) { + if (data.uniques.weapons) { + let missingWeps = ItemScoreCalculator.sumMissing( + () => data.uniques.weapons, + new MissingItems() + ); + partyGrailData.uniqueWeapons.missing = missingWeps.missing; + partyGrailData.itemScore += missingWeps.score; + } + if (data.uniques.armor) { + let missingArmor = ItemScoreCalculator.sumMissing( + () => data.uniques.armor, + new MissingItems() + ); + partyGrailData.uniqueArmor.missing = missingArmor.missing; + partyGrailData.itemScore += missingArmor.score; + } + if (data.uniques.other) { + let missingOther = ItemScoreCalculator.sumMissing( + () => data.uniques.other, + new MissingItems() + ); + partyGrailData.uniqueOther.missing = missingOther.missing; + partyGrailData.itemScore += missingOther.score; + } + } + if (data && data.sets) { + let missingSets = ItemScoreCalculator.sumMissing( + () => data.sets, + new MissingItems() + ); + partyGrailData.sets.missing = missingSets.missing; + partyGrailData.itemScore += missingSets.score; + } + return partyGrailData; + }; + + public static sumMissing = ( + dataFunc: () => any, + missing: MissingItems, + category?: string + ): MissingItems => { + let data = {}; + try { + data = dataFunc(); + } catch (e) { + // ignore error + } + + if (!data) { + return missing; + } + + Object.keys(data).forEach(key => { + const possibleItem = data[key] as IItem; + if (ItemScoreCalculator.isItem(possibleItem)) { + if (!possibleItem.wasFound) { + missing.missing++; + } else { + missing.found++; + let itemScore = ItemScores[key]; + if (!itemScore) { + // This is a facet + if (category === "all") { + // Using the original method, count each facet as two + itemScore = 2 * ItemScores["Rainbow Facet"]; + } else { + // using the new split facet system, count each as one + itemScore = ItemScores["Rainbow Facet"]; + } + } + missing.score += itemScore; + } + } else { + ItemScoreCalculator.sumMissing(() => possibleItem, missing, key); + } + }); + return missing; + }; + + public static isItem(data: any): boolean { + const itemProto = new Item(); + return ( + data && + typeof data === "object" && + (!Object.keys(data).length || + Object.keys(itemProto).some(k => data.hasOwnProperty(k))) + ); + } +}