Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/polls.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Gieling <github@dartcafe.de>2020-07-07 18:46:53 +0300
committerGitHub <noreply@github.com>2020-07-07 18:46:53 +0300
commit3e0c0ec6d616676928aca4eb321014499ca630f9 (patch)
tree7eec58c89cc36f5615af0418e7aa7648212cd20f
parentb0525cb7bcacb0a1eef0eaf4df5bf2f8d361180a (diff)
parent3c965b1ee1be622fb589299cbe3c032eaab4c619 (diff)
Merge branch 'master' into sharee-fix
-rw-r--r--appinfo/routes.php86
-rw-r--r--docs/API_v1.0.md167
-rw-r--r--l10n/br.js16
-rw-r--r--l10n/br.json14
-rw-r--r--l10n/de.js2
-rw-r--r--l10n/de.json2
-rw-r--r--l10n/de_DE.js2
-rw-r--r--l10n/de_DE.json2
-rw-r--r--l10n/es.js4
-rw-r--r--l10n/es.json4
-rw-r--r--l10n/nl.js16
-rw-r--r--l10n/nl.json16
-rw-r--r--l10n/pt_BR.js5
-rw-r--r--l10n/pt_BR.json5
-rw-r--r--l10n/ro.js4
-rw-r--r--l10n/ro.json4
-rw-r--r--l10n/ru.js40
-rw-r--r--l10n/ru.json40
-rw-r--r--l10n/tr.js6
-rw-r--r--l10n/tr.json6
-rw-r--r--lib/AppInfo/Application.php14
-rw-r--r--lib/Controller/CommentApiController.php120
-rw-r--r--lib/Controller/CommentController.php204
-rw-r--r--lib/Controller/OptionApiController.php144
-rw-r--r--lib/Controller/OptionController.php176
-rw-r--r--lib/Controller/PollApiController.php215
-rw-r--r--lib/Controller/PollController.php439
-rw-r--r--lib/Controller/ShareApiController.php141
-rw-r--r--lib/Controller/ShareController.php184
-rw-r--r--lib/Controller/SubscriptionApiController.php118
-rw-r--r--lib/Controller/SubscriptionController.php41
-rw-r--r--lib/Controller/SystemController.php5
-rw-r--r--lib/Controller/VoteApiController.php105
-rw-r--r--lib/Controller/VoteController.php143
-rw-r--r--lib/Db/OptionMapper.php22
-rw-r--r--lib/Db/Poll.php14
-rw-r--r--lib/Db/ShareMapper.php2
-rw-r--r--lib/Exceptions/EmptyTitleException.php40
-rw-r--r--lib/Exceptions/InvalidAccessException.php40
-rw-r--r--lib/Exceptions/InvalidPollTypeException.php40
-rw-r--r--lib/Exceptions/InvalidShowResultsException.php40
-rw-r--r--lib/Exceptions/InvalidUsername.php40
-rw-r--r--lib/Exceptions/NotAuthorizedException.php40
-rw-r--r--lib/Model/Acl.php33
-rw-r--r--lib/Service/CommentService.php144
-rw-r--r--lib/Service/MailService.php2
-rw-r--r--lib/Service/OptionService.php216
-rw-r--r--lib/Service/PollService.php308
-rw-r--r--lib/Service/ShareService.php226
-rw-r--r--lib/Service/SubscriptionService.php131
-rw-r--r--lib/Service/VoteService.php151
-rw-r--r--package-lock.json2076
-rw-r--r--package.json16
-rw-r--r--src/js/components/Comments/Comments.vue6
-rw-r--r--src/js/components/Create/CreateDlg.vue24
-rw-r--r--src/js/components/Navigation/Navigation.vue19
-rw-r--r--src/js/components/PollList/PollItem.vue29
-rw-r--r--src/js/components/SideBar/SideBarTabConfiguration.vue27
-rw-r--r--src/js/components/SideBar/SideBarTabShare.vue15
-rw-r--r--src/js/components/VoteTable/VoteHeaderPublic.vue2
-rw-r--r--src/js/store/modules/poll.js71
-rw-r--r--src/js/store/modules/polls.js41
-rw-r--r--src/js/store/modules/subModules/comments.js26
-rw-r--r--src/js/store/modules/subModules/options.js40
-rw-r--r--src/js/store/modules/subModules/shares.js15
-rw-r--r--src/js/store/modules/subModules/votes.js13
-rw-r--r--src/js/store/modules/subscription.js11
-rw-r--r--src/js/views/Vote.vue11
68 files changed, 4060 insertions, 2361 deletions
diff --git a/appinfo/routes.php b/appinfo/routes.php
index 658fa241..d7120e14 100644
--- a/appinfo/routes.php
+++ b/appinfo/routes.php
@@ -30,48 +30,80 @@ return [
['name' => 'page#vote_public', 'url' => '/s/{token}', 'verb' => 'GET', 'postfix' => 'public'],
['name' => 'page#vote_public', 'url' => '/poll/{token}', 'verb' => 'GET', 'postfix' => 'oldpublic'],
- ['name' => 'subscription#get', 'url' => '/subscription/get/{pollId}', 'verb' => 'GET'],
- ['name' => 'subscription#set', 'url' => '/subscription/set/', 'verb' => 'POST'],
+ ['name' => 'subscription#get', 'url' => '/subscription/{pollId}', 'verb' => 'GET'],
+ ['name' => 'subscription#set', 'url' => '/subscription', 'verb' => 'POST'],
- ['name' => 'comment#getByToken', 'url' => '/comments/get/s/{token}', 'verb' => 'GET'],
- ['name' => 'comment#writeByToken', 'url' => '/comment/write/s/', 'verb' => 'POST'],
- ['name' => 'comment#get', 'url' => '/comments/get/{pollId}', 'verb' => 'GET'],
- ['name' => 'comment#write', 'url' => '/comment/write/', 'verb' => 'POST'],
- ['name' => 'comment#delete', 'url' => '/comment/delete/', 'verb' => 'POST'],
- ['name' => 'comment#deleteByToken', 'url' => '/comment/delete/s/', 'verb' => 'POST'],
+ ['name' => 'comment#getByToken', 'url' => '/comments/s/{token}', 'verb' => 'GET'],
+ ['name' => 'comment#get', 'url' => '/comments/{pollId}', 'verb' => 'GET'],
+ ['name' => 'comment#add', 'url' => '/comment/add', 'verb' => 'POST'],
+ ['name' => 'comment#delete', 'url' => '/comment/delete', 'verb' => 'POST'],
['name' => 'vote#getByToken', 'url' => '/votes/get/s/{token}', 'verb' => 'GET'],
- ['name' => 'vote#setByToken', 'url' => '/vote/set/s/', 'verb' => 'POST'],
+ ['name' => 'vote#setByToken', 'url' => '/vote/set/s', 'verb' => 'POST'],
['name' => 'vote#get', 'url' => '/votes/get/{pollId}', 'verb' => 'GET'],
- ['name' => 'vote#set', 'url' => '/vote/set/', 'verb' => 'POST'],
- ['name' => 'vote#write', 'url' => '/vote/write/', 'verb' => 'POST'],
- ['name' => 'vote#delete', 'url' => '/votes/delete/', 'verb' => 'POST'],
+ ['name' => 'vote#set', 'url' => '/vote/set', 'verb' => 'POST'],
+ // ['name' => 'vote#write', 'url' => '/vote/write/', 'verb' => 'POST'],
+ ['name' => 'vote#delete', 'url' => '/votes/delete', 'verb' => 'POST'],
['name' => 'option#get', 'url' => '/options/get/{pollId}', 'verb' => 'GET'],
- ['name' => 'option#add', 'url' => '/option/add/', 'verb' => 'POST'],
- ['name' => 'option#update', 'url' => '/option/update/', 'verb' => 'POST'],
- ['name' => 'option#reorder', 'url' => '/option/reorder/', 'verb' => 'POST'],
- ['name' => 'option#remove', 'url' => '/option/remove/', 'verb' => 'POST'],
+ ['name' => 'option#add', 'url' => '/option/add', 'verb' => 'POST'],
+ ['name' => 'option#update', 'url' => '/option/update', 'verb' => 'POST'],
+ ['name' => 'option#reorder', 'url' => '/option/reorder', 'verb' => 'POST'],
+ ['name' => 'option#remove', 'url' => '/option/remove', 'verb' => 'POST'],
['name' => 'option#getByToken', 'url' => '/options/get/s/{token}', 'verb' => 'GET'],
- ['name' => 'poll#list', 'url' => '/polls/list/', 'verb' => 'GET'],
- ['name' => 'poll#get', 'url' => '/polls/get/{pollId}', 'verb' => 'GET'],
+ ['name' => 'poll#get', 'url' => '/polls/get/{pollId}', 'verb' => 'GET', 'postfix' => 'auth'],
+ ['name' => 'poll#get', 'url' => '/polls/get/s/{token}', 'verb' => 'GET', 'postfix' => 'public'],
+ ['name' => 'poll#add', 'url' => '/polls/add', 'verb' => 'POST'],
+ ['name' => 'poll#update', 'url' => '/polls/update/{pollId}', 'verb' => 'PUT'],
+
+ ['name' => 'poll#list', 'url' => '/polls/list', 'verb' => 'GET'],
['name' => 'poll#delete', 'url' => '/polls/delete/{pollId}', 'verb' => 'GET'],
['name' => 'poll#deletePermanently', 'url' => '/polls/delete/permanent/{pollId}', 'verb' => 'GET'],
- ['name' => 'poll#write', 'url' => '/polls/write/', 'verb' => 'POST'],
- ['name' => 'poll#clone', 'url' => '/polls/clone/{pollId}', 'verb' => 'get'],
- ['name' => 'poll#getByToken', 'url' => '/polls/get/s/{token}', 'verb' => 'GET'],
+ ['name' => 'poll#clone', 'url' => '/polls/clone/{pollId}', 'verb' => 'GET'],
+
+ ['name' => 'share#add', 'url' => '/share/add', 'verb' => 'POST'],
+ ['name' => 'share#delete', 'url' => '/share/delete', 'verb' => 'POST'],
+ ['name' => 'share#createPersonalShare', 'url' => '/share/create/s', 'verb' => 'POST'],
- ['name' => 'share#getShares', 'url' => '/shares/get/{pollId}', 'verb' => 'GET'],
- ['name' => 'share#write', 'url' => '/share/write/', 'verb' => 'POST'],
- ['name' => 'share#createPersonalShare', 'url' => '/share/create/s/', 'verb' => 'POST'],
- ['name' => 'share#remove', 'url' => '/share/remove/', 'verb' => 'POST'],
- ['name' => 'share#get', 'url' => '/share/get/{token}', 'verb' => 'GET'],
+ // ['name' => 'share#getShares', 'url' => '/shares/get/{pollId}', 'verb' => 'GET'],
+ // ['name' => 'share#get', 'url' => '/share/get/{token}', 'verb' => 'GET'],
['name' => 'acl#getByToken', 'url' => '/acl/get/s/{token}', 'verb' => 'GET'],
['name' => 'acl#get', 'url' => '/acl/get/{id}', 'verb' => 'GET'],
['name' => 'system#get_site_users_and_groups', 'url' => '/siteusers/get', 'verb' => 'POST'],
- ['name' => 'system#validate_public_username', 'url' => '/check/username', 'verb' => 'POST']
+ ['name' => 'system#validate_public_username', 'url' => '/check/username', 'verb' => 'POST'],
+
+ // REST-API calls
+ ['name' => 'poll_api#get', 'url' => '/api/v1.0/poll/{pollId}', 'verb' => 'GET'],
+ ['name' => 'poll_api#list', 'url' => '/api/v1.0/polls', 'verb' => 'GET'],
+ ['name' => 'poll_api#add', 'url' => '/api/v1.0/poll/add', 'verb' => 'POST'],
+ ['name' => 'poll_api#clone', 'url' => '/api/v1.0/poll/clone/{pollId}', 'verb' => 'POST'],
+ ['name' => 'poll_api#update', 'url' => '/api/v1.0/poll/{pollId}', 'verb' => 'PUT'],
+ ['name' => 'poll_api#delete', 'url' => '/api/v1.0/poll/{pollId}', 'verb' => 'DELETE'],
+ ['name' => 'poll_api#delete', 'url' => '/api/v1.0/poll/permanent/{pollId}', 'verb' => 'DELETE'],
+ ['name' => 'poll_api#enum', 'url' => '/api/v1.0/poll/enum', 'verb' => 'GET'],
+
+ ['name' => 'option_api#list', 'url' => '/api/v1.0/poll/{pollId}/options', 'verb' => 'GET'],
+ ['name' => 'option_api#add', 'url' => '/api/v1.0/option', 'verb' => 'POST'],
+ ['name' => 'option_api#update', 'url' => '/api/v1.0/option', 'verb' => 'PUT'],
+ ['name' => 'option_api#delete', 'url' => '/api/v1.0/option/{optionId}', 'verb' => 'DELETE'],
+
+ ['name' => 'comment_api#list', 'url' => '/api/v1.0/poll/{pollId}/comments', 'verb' => 'GET'],
+ ['name' => 'comment_api#add', 'url' => '/api/v1.0/comment', 'verb' => 'POST'],
+ ['name' => 'comment_api#delete', 'url' => '/api/v1.0/comment/{commentId}', 'verb' => 'DELETE'],
+
+ ['name' => 'share_api#list', 'url' => '/api/v1.0/poll/{pollId}/shares', 'verb' => 'GET'],
+ ['name' => 'share_api#get', 'url' => '/api/v1.0/share/{token}', 'verb' => 'GET'],
+ ['name' => 'share_api#add', 'url' => '/api/v1.0/share', 'verb' => 'POST'],
+ ['name' => 'share_api#delete', 'url' => '/api/v1.0/share/{token}', 'verb' => 'DELETE'],
+
+ ['name' => 'subscription_api#get', 'url' => '/api/v1.0/poll/{pollId}/subscription', 'verb' => 'GET'],
+ ['name' => 'subscription_api#subscribe', 'url' => '/api/v1.0/poll/{pollId}/subscription', 'verb' => 'PUT'],
+ ['name' => 'subscription_api#unsubscribe', 'url' => '/api/v1.0/poll/{pollId}/subscription', 'verb' => 'DELETE'],
+
+ ['name' => 'vote_api#list', 'url' => '/api/v1.0/poll/{pollId}/votes', 'verb' => 'GET'],
+ ['name' => 'vote_api#set', 'url' => '/api/v1.0/vote', 'verb' => 'POST'],
]
];
diff --git a/docs/API_v1.0.md b/docs/API_v1.0.md
new file mode 100644
index 00000000..2f1c3326
--- /dev/null
+++ b/docs/API_v1.0.md
@@ -0,0 +1,167 @@
+
+# DRAFT
+
+This documentation and the API are not final and may contain issues and bugs!
+Details may change!
+
+To act like a authenticated user, use username:password@ prefix in the URL
+Parameters in the body override the URL-parameter
+
+Base URL for all calls: /index.php/apps/polls
+Example calls:
+* Gets all comments of poll no. 1
+`https://username:password@nextcloud.local/index.php/apps/polls/api/1.0/poll/1/comments`
+```bash
+`curl -u username:password -X GET https://nextcloud.local/index.php/apps/polls/api/1.0/poll/1/comments`
+```
+
+# Poll
+| Method | Endpoint | Description | Return codes |
+| --------- | ----------------------------------- | ---------------------------- | ------------------ |
+| GET | /api/v1.0/polls | Get polls list as array | 200, 403, 404 |
+| GET | /api/v1.0/poll/{pollId} | Get poll with {pollId} | 200, 403, 404 |
+| POST | /api/v1.0/poll/add | Add new poll with payload | 201, 403, 404 |
+| POST | /api/v1.0/poll/clone/{pollId} | Clone poll {pollId} | 201, 403, 404 |
+| PUT | /api/v1.0/poll/{pollId} | Update poll | 200, 403, 404, 409 |
+| DELETE | /api/v1.0/poll/{pollId} | Delete poll logical | 200, 403, 404 |
+| DELETE | /api/v1.0/poll/permanent/{pollId} | Delete poll permanently | 200, 403, 404 |
+| GET | /api/v1.0/poll/enum | Get valid enums | 200, 403, 404 |
+
+## Add poll
+
+```json
+{
+ "type": "datePoll",
+ "title": "Test"
+}
+```
+
+## Update poll
+```json
+{
+ "poll": {
+ "title": "Changed Title",
+ "description": "Updated description",
+ "expire": 0,
+ "deleted": 0,
+ "access": "hidden",
+ "anonymous": 1,
+ "allowMaybe": 1,
+ "showResults": "never",
+ "adminAccess": 1
+ }
+}
+```
+
+### Keys and values
+| Key | Type | description |
+| ------- | ------- | -------------------|
+| expire | integer | unix timestamp |
+| deleted | integer | unix timestamp |
+
+
+
+# Options
+| Method | Endpoint | Description | Return codes |
+| --------- | ----------------------------------- | ---------------------------- | ------------------ |
+| GET | /api/v1.0/poll/{pollId}/options | Get options as array | 200, 403, 404 |
+| POST | /api/v1.0/option | Add new option with Payload | 201, 403, 404, 409 |
+| PUT | /api/v1.0/option | Update option with Payload | 200, 403, 404 |
+| DELETE | /api/v1.0/option/{optionId} | Delete option | 200, 403, 404 |
+
+## add option
+```json
+{
+ "pollId": 139,
+ "pollOptionText": "19-06-2020 17:00:00",
+ "timestamp": 0,
+}
+```
+
+## Update option
+```json
+{
+ "id": 17,
+ "pollId": 1,
+ "pollOptionText": "poll option",
+ "timestamp": 0,
+ "order": 1,
+ "confirmed": 1590762104
+},
+```
+
+### Keys and values
+| Key | Type | description |
+| -------------- | ------- | ------------------------------------- |
+| id | String | id overrides optionID if used |
+| pollOptionText | String | poll text or date option in UTC |
+| confirmed | Integer | unix timestamp |
+| timestamp | Integer | unix timestamp for date option |
+| order | Integer | position on option order for textpolls |
+
+* if timestamp is given in a date poll, the poll option text is ignored
+
+# Votes
+| Method | Endpoint | Description | Return codes |
+| --------- | ----------------------------------- | ---------------------------- | ------------------ |
+| GET | /api/v1.0/poll/{pollId}/votes | Get votes | 200, 403, 404 |
+| POST | /api/v1.0/vote | Set vote with Payload | 200, 403, 404 |
+
+## set vote
+```json
+{
+ "pollId": 1,
+ "pollOptionText": "Saturn",
+ "setTo" :"yes"
+}
+```
+
+# Comments
+| Method | Endpoint | Description | Return codes |
+| --------- | ----------------------------------- | ---------------------------- | ------------------ |
+| GET | /api/v1.0/poll/{pollId}/comments | Get comments | 200, 403, 404 |
+| POST | /api/v1.0/comment | Add new commen twith Payload | 201, 403, 404 |
+| DELETE | /api/v1.0/comment/{commentId} | Delete comment | 200, 403, 404 |
+
+# Add comment
+```json
+{
+ "pollId": 1,
+ "message": "Comment text"
+}
+```
+
+# Shares
+| Method | Endpoint | Description | Return codes |
+| --------- | ----------------------------------- | ---------------------------- | ------------------ |
+| GET | /api/v1.0/poll/{pollId}/shares | Get shares | 200, 403, 404 |
+| GET | /api/v1.0/share/{token} | Get share by token | 200, 403, 404 |
+| POST | /api/v1.0/share | Add new share with Payload | 201, 403, 404 |
+| DELETE | /api/v1.0/share/{token} | Delete share | 200, 404, 409 |
+
+# Add share
+
+## public share
+```json
+{
+ "type": "public",
+ "pollId": 1
+}
+```
+## user share
+tbd
+
+## email share
+tbd
+
+## contact share
+tbd
+
+
+
+# Subscription
+| Method | Endpoint | Description | Return codes |
+| --------- | ----------------------------------- | ---------------------------- | ------------------ |
+| GET | /api/v1.0/poll/{pollId}/subscription | Get subscription status | 200, 403, 404 |
+| PUT | /api/v1.0/poll/{pollId}/subscription | Subcribe | 201, 403 |
+| DELETE | /api/v1.0/poll/{pollId}/subscription | unsubscribe | 200, 403 |
diff --git a/l10n/br.js b/l10n/br.js
new file mode 100644
index 00000000..38dade71
--- /dev/null
+++ b/l10n/br.js
@@ -0,0 +1,16 @@
+OC.L10N.register(
+ "polls",
+ {
+ "Cancel" : "Arrest",
+ "OK" : "OK",
+ "Group" : "Stollad",
+ "Unknown user" : "Implijer dianv",
+ "Details" : "Munudoù",
+ "Configuration" : "Stumm",
+ "Shares" : "Rannañ",
+ "Expiration date" : "Deizad termen",
+ "Who are you?" : "Piv oc'h c'hwi ?",
+ "No" : "Nan",
+ "Yes" : "Ya"
+},
+"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);");
diff --git a/l10n/br.json b/l10n/br.json
new file mode 100644
index 00000000..c0aaa451
--- /dev/null
+++ b/l10n/br.json
@@ -0,0 +1,14 @@
+{ "translations": {
+ "Cancel" : "Arrest",
+ "OK" : "OK",
+ "Group" : "Stollad",
+ "Unknown user" : "Implijer dianv",
+ "Details" : "Munudoù",
+ "Configuration" : "Stumm",
+ "Shares" : "Rannañ",
+ "Expiration date" : "Deizad termen",
+ "Who are you?" : "Piv oc'h c'hwi ?",
+ "No" : "Nan",
+ "Yes" : "Ya"
+},"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"
+} \ No newline at end of file
diff --git a/l10n/de.js b/l10n/de.js
index 1c983ebf..765da2e5 100644
--- a/l10n/de.js
+++ b/l10n/de.js
@@ -126,7 +126,7 @@ OC.L10N.register(
"Receive notification email on activity" : "Erhalte E-Mail Benachrichtigungen bei Aktivitäten",
"Your personal link to this poll: %n" : "Ihr persönlicher Link zur Umfrage: %n",
"Who are you?" : "Wer bist Du?",
- "To participate, tell us how we can call you!" : "Um teilzunehmen, sage uns, wie wir Dich anrufen können!",
+ "To participate, tell us how we can call you!" : "Um teilzunehmen, sage uns wie wir Dich nennen dürfen!",
"Enter your name" : "Gib Deinen Namen ein",
"Please use at least 3 characters for your name." : "Bitte mindestens 3 Zeichen für den Namen verwenden.",
"This name is not valid, i.e. because it is already in use." : "Dieser Name ist nicht gültig, möglicherweise ist er bereits in Verwendung.",
diff --git a/l10n/de.json b/l10n/de.json
index da45d508..3113a485 100644
--- a/l10n/de.json
+++ b/l10n/de.json
@@ -124,7 +124,7 @@
"Receive notification email on activity" : "Erhalte E-Mail Benachrichtigungen bei Aktivitäten",
"Your personal link to this poll: %n" : "Ihr persönlicher Link zur Umfrage: %n",
"Who are you?" : "Wer bist Du?",
- "To participate, tell us how we can call you!" : "Um teilzunehmen, sage uns, wie wir Dich anrufen können!",
+ "To participate, tell us how we can call you!" : "Um teilzunehmen, sage uns wie wir Dich nennen dürfen!",
"Enter your name" : "Gib Deinen Namen ein",
"Please use at least 3 characters for your name." : "Bitte mindestens 3 Zeichen für den Namen verwenden.",
"This name is not valid, i.e. because it is already in use." : "Dieser Name ist nicht gültig, möglicherweise ist er bereits in Verwendung.",
diff --git a/l10n/de_DE.js b/l10n/de_DE.js
index 7692a879..3c9cd14b 100644
--- a/l10n/de_DE.js
+++ b/l10n/de_DE.js
@@ -126,7 +126,7 @@ OC.L10N.register(
"Receive notification email on activity" : "Erhalte E-Mail Benachrichtigungen bei Aktivitäten",
"Your personal link to this poll: %n" : "Ihr persönlicher Link zur Umfrage: %n",
"Who are you?" : "Wer sind Sie?",
- "To participate, tell us how we can call you!" : "Um teilzunehmen, sagen Sie uns, wie wir Sie anrufen können!",
+ "To participate, tell us how we can call you!" : "Um teilzunehmen, sagen Sie uns wie wir Sie nennen können!",
"Enter your name" : "Geben Sie Ihren Namen ein",
"Please use at least 3 characters for your name." : "Bitte mindestens 3 Zeichen für den Namen verwenden.",
"This name is not valid, i.e. because it is already in use." : "Dieser Name ist nicht gültig, möglicherweise ist er bereits in Verwendung.",
diff --git a/l10n/de_DE.json b/l10n/de_DE.json
index 09918efa..92121a41 100644
--- a/l10n/de_DE.json
+++ b/l10n/de_DE.json
@@ -124,7 +124,7 @@
"Receive notification email on activity" : "Erhalte E-Mail Benachrichtigungen bei Aktivitäten",
"Your personal link to this poll: %n" : "Ihr persönlicher Link zur Umfrage: %n",
"Who are you?" : "Wer sind Sie?",
- "To participate, tell us how we can call you!" : "Um teilzunehmen, sagen Sie uns, wie wir Sie anrufen können!",
+ "To participate, tell us how we can call you!" : "Um teilzunehmen, sagen Sie uns wie wir Sie nennen können!",
"Enter your name" : "Geben Sie Ihren Namen ein",
"Please use at least 3 characters for your name." : "Bitte mindestens 3 Zeichen für den Namen verwenden.",
"This name is not valid, i.e. because it is already in use." : "Dieser Name ist nicht gültig, möglicherweise ist er bereits in Verwendung.",
diff --git a/l10n/es.js b/l10n/es.js
index b5bcc539..41b5a7a6 100644
--- a/l10n/es.js
+++ b/l10n/es.js
@@ -32,8 +32,8 @@ OC.L10N.register(
"OK" : "OK",
"Week" : "Semana",
"Shift all date options" : "Cambiar todas las opciones de fechas",
- "Decrease unit" : "Unidad de disminución",
- "Increase unit" : "Unidad de incremento",
+ "Decrease unit" : "Disminuir unidad",
+ "Increase unit" : "Incrementar unidad",
"Shift" : "Cambiar",
"No Participants until now" : "No hay participantes hasta ahora",
"_%n Participant_::_%n Participants_" : ["%n participante","%n participantes"],
diff --git a/l10n/es.json b/l10n/es.json
index 13bd9327..e1439f7a 100644
--- a/l10n/es.json
+++ b/l10n/es.json
@@ -30,8 +30,8 @@
"OK" : "OK",
"Week" : "Semana",
"Shift all date options" : "Cambiar todas las opciones de fechas",
- "Decrease unit" : "Unidad de disminución",
- "Increase unit" : "Unidad de incremento",
+ "Decrease unit" : "Disminuir unidad",
+ "Increase unit" : "Incrementar unidad",
"Shift" : "Cambiar",
"No Participants until now" : "No hay participantes hasta ahora",
"_%n Participant_::_%n Participants_" : ["%n participante","%n participantes"],
diff --git a/l10n/nl.js b/l10n/nl.js
index 0bdc63fe..a943bc4e 100644
--- a/l10n/nl.js
+++ b/l10n/nl.js
@@ -38,6 +38,10 @@ OC.L10N.register(
"No Participants until now" : "Nog geen deelnemers",
"_%n Participant_::_%n Participants_" : ["%n deelnemer","%n deelnemers"],
"started this poll on %n. " : " startte deze peiling op %n. ",
+ "This poll expired on {dateString}. The confirmed options are marked below." : "Deze poll is vervallen op [dateString]. De bevestigde keuzes zijn hieronder aangeduid.",
+ "This poll expired on {dateString}, but there are no confirmed options until now." : "Deze poll is vervallen op [dateString], maar er zijn geen bevestigde keuzes tot nu toe.",
+ "You can confirm your favorites now in the options tab in the sidebar." : "Je kan je voorkeuren bevestigen in de instellingen tab in de zijbalk.",
+ "You can place your vote until {dateString}." : "Je kunt nu stemmen tot [dateString]. ",
"The names of other participants are hidden, as this is an anonymous poll. " : "Namen van andere stemmers zijn verborgen, dit is een anonieme peiling.",
"Results are hidden. " : "Resultaten zijn verborgen.",
"They will be revealed after the poll is expired. " : "Deze zullen bekend gemaakt worden nadat de peiling afgelopen is.",
@@ -103,6 +107,8 @@ OC.L10N.register(
"Available Options" : "Beschikbare opties",
"Delete option" : "Verwijder optie",
"Clone option" : "Klonen optie",
+ "Unconfirm option" : "Keuze ongedaan maken",
+ "Confirm option" : "Keuze bevestigen",
"There are no vote options specified." : "Er zijn geen keuzemogelijkheden opgegeven.",
"Add a new text option" : "Voeg een nieuwe tekst optie toe",
"Enter option text" : "Voer een optietekst in",
@@ -119,7 +125,12 @@ OC.L10N.register(
"Error while adding share" : "Fout bij toevoegen deellink",
"Receive notification email on activity" : "Ontvang email melding bij activiteit",
"Your personal link to this poll: %n" : "Je persoonlijke link naar deze peiling: %n",
+ "Who are you?" : "Wie ben je?",
+ "To participate, tell us how we can call you!" : "OM deel te nemen, geef aan hoe we je moeten noemen.",
"Enter your name" : "Geef je naam op",
+ "Please use at least 3 characters for your name." : "Gebruik aub. minstens 3 tekens voor je naam.",
+ "This name is not valid, i.e. because it is already in use." : "Deze naam is niet geldig, want deze is reeds in gebruik.",
+ "OK, we will call you {username}." : "OK, we zullen je {username} noemen.",
"You have an account? Log in here." : "heb je een account? Log dan hier in.",
"Please use at least 3 characters for your username!" : "Gebruik minimaal 3 tekens voor je gebruikersnaam!",
"This username can not be chosen." : "Deze gebruikersnaam kan niet worden gekozen.",
@@ -148,6 +159,11 @@ OC.L10N.register(
"Deleted" : "Verwijderd",
"There are no vote options, add some in the options section of the right sidebar." : "Er zijn geen keuzesopties, voeg een paar toe in de opties sectie in de rechter zijbalk.",
"There are no vote options. Maybe the owner did not provide some until now." : "Er zijn geen peilingsopties. Misschien heeft de eigenaar nog geen opties toegevoegd.",
+ "Switch to mobile view" : "Omschakelen naar mobiel beeld",
+ "Switch to desktop view" : "Omschakelen naar bureau beeld",
+ "Date order" : "Datum volgorde",
+ "Original order" : "Originele volgorde",
+ "Ranked order" : "Gerangschikte volgorde",
"Minute" : "Minuut",
"Hour" : "Uur",
"Day" : "Dag",
diff --git a/l10n/nl.json b/l10n/nl.json
index c672b3ba..652d5e2c 100644
--- a/l10n/nl.json
+++ b/l10n/nl.json
@@ -36,6 +36,10 @@
"No Participants until now" : "Nog geen deelnemers",
"_%n Participant_::_%n Participants_" : ["%n deelnemer","%n deelnemers"],
"started this poll on %n. " : " startte deze peiling op %n. ",
+ "This poll expired on {dateString}. The confirmed options are marked below." : "Deze poll is vervallen op [dateString]. De bevestigde keuzes zijn hieronder aangeduid.",
+ "This poll expired on {dateString}, but there are no confirmed options until now." : "Deze poll is vervallen op [dateString], maar er zijn geen bevestigde keuzes tot nu toe.",
+ "You can confirm your favorites now in the options tab in the sidebar." : "Je kan je voorkeuren bevestigen in de instellingen tab in de zijbalk.",
+ "You can place your vote until {dateString}." : "Je kunt nu stemmen tot [dateString]. ",
"The names of other participants are hidden, as this is an anonymous poll. " : "Namen van andere stemmers zijn verborgen, dit is een anonieme peiling.",
"Results are hidden. " : "Resultaten zijn verborgen.",
"They will be revealed after the poll is expired. " : "Deze zullen bekend gemaakt worden nadat de peiling afgelopen is.",
@@ -101,6 +105,8 @@
"Available Options" : "Beschikbare opties",
"Delete option" : "Verwijder optie",
"Clone option" : "Klonen optie",
+ "Unconfirm option" : "Keuze ongedaan maken",
+ "Confirm option" : "Keuze bevestigen",
"There are no vote options specified." : "Er zijn geen keuzemogelijkheden opgegeven.",
"Add a new text option" : "Voeg een nieuwe tekst optie toe",
"Enter option text" : "Voer een optietekst in",
@@ -117,7 +123,12 @@
"Error while adding share" : "Fout bij toevoegen deellink",
"Receive notification email on activity" : "Ontvang email melding bij activiteit",
"Your personal link to this poll: %n" : "Je persoonlijke link naar deze peiling: %n",
+ "Who are you?" : "Wie ben je?",
+ "To participate, tell us how we can call you!" : "OM deel te nemen, geef aan hoe we je moeten noemen.",
"Enter your name" : "Geef je naam op",
+ "Please use at least 3 characters for your name." : "Gebruik aub. minstens 3 tekens voor je naam.",
+ "This name is not valid, i.e. because it is already in use." : "Deze naam is niet geldig, want deze is reeds in gebruik.",
+ "OK, we will call you {username}." : "OK, we zullen je {username} noemen.",
"You have an account? Log in here." : "heb je een account? Log dan hier in.",
"Please use at least 3 characters for your username!" : "Gebruik minimaal 3 tekens voor je gebruikersnaam!",
"This username can not be chosen." : "Deze gebruikersnaam kan niet worden gekozen.",
@@ -146,6 +157,11 @@
"Deleted" : "Verwijderd",
"There are no vote options, add some in the options section of the right sidebar." : "Er zijn geen keuzesopties, voeg een paar toe in de opties sectie in de rechter zijbalk.",
"There are no vote options. Maybe the owner did not provide some until now." : "Er zijn geen peilingsopties. Misschien heeft de eigenaar nog geen opties toegevoegd.",
+ "Switch to mobile view" : "Omschakelen naar mobiel beeld",
+ "Switch to desktop view" : "Omschakelen naar bureau beeld",
+ "Date order" : "Datum volgorde",
+ "Original order" : "Originele volgorde",
+ "Ranked order" : "Gerangschikte volgorde",
"Minute" : "Minuut",
"Hour" : "Uur",
"Day" : "Dag",
diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js
index c13527f3..2657472c 100644
--- a/l10n/pt_BR.js
+++ b/l10n/pt_BR.js
@@ -125,7 +125,12 @@ OC.L10N.register(
"Error while adding share" : "Erro ao adicionar compartilhamento",
"Receive notification email on activity" : "Receber e-mail notificando atividade",
"Your personal link to this poll: %n" : "Seu link pessoal para esta enquete: %n",
+ "Who are you?" : "Quem é você?",
+ "To participate, tell us how we can call you!" : "Para participar, diga-nos como podemos chamá-lo!",
"Enter your name" : "Digite seu nome",
+ "Please use at least 3 characters for your name." : "Use pelo menos 3 caracteres para o nome.",
+ "This name is not valid, i.e. because it is already in use." : "Este nome é inválido pois já está em uso.",
+ "OK, we will call you {username}." : "OK, chamaremos você de {username}.",
"You have an account? Log in here." : "Já tem uma conta? Logue-se aqui.",
"Please use at least 3 characters for your username!" : "Use pelo menos 3 caracteres para o seu nome de usuário!",
"This username can not be chosen." : "Este nome de usuário não pode ser escolhido.",
diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json
index a05f4324..49076981 100644
--- a/l10n/pt_BR.json
+++ b/l10n/pt_BR.json
@@ -123,7 +123,12 @@
"Error while adding share" : "Erro ao adicionar compartilhamento",
"Receive notification email on activity" : "Receber e-mail notificando atividade",
"Your personal link to this poll: %n" : "Seu link pessoal para esta enquete: %n",
+ "Who are you?" : "Quem é você?",
+ "To participate, tell us how we can call you!" : "Para participar, diga-nos como podemos chamá-lo!",
"Enter your name" : "Digite seu nome",
+ "Please use at least 3 characters for your name." : "Use pelo menos 3 caracteres para o nome.",
+ "This name is not valid, i.e. because it is already in use." : "Este nome é inválido pois já está em uso.",
+ "OK, we will call you {username}." : "OK, chamaremos você de {username}.",
"You have an account? Log in here." : "Já tem uma conta? Logue-se aqui.",
"Please use at least 3 characters for your username!" : "Use pelo menos 3 caracteres para o seu nome de usuário!",
"This username can not be chosen." : "Este nome de usuário não pode ser escolhido.",
diff --git a/l10n/ro.js b/l10n/ro.js
index 6d74f383..7230c157 100644
--- a/l10n/ro.js
+++ b/l10n/ro.js
@@ -11,6 +11,7 @@ OC.L10N.register(
"Delete comment" : "Șterge comentariu",
"Title" : "Titlu",
"Apply" : "Aplică",
+ "Access" : "Acces",
"Owner" : "Proprietar",
"never" : "niciodată",
"Details" : "Detalii",
@@ -23,6 +24,7 @@ OC.L10N.register(
"Yes" : "a",
"Deleted" : "Șters",
"Day" : "Zi",
- "Month" : "Luna"
+ "Month" : "Luna",
+ "Access denied" : "Acces interzis"
},
"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));");
diff --git a/l10n/ro.json b/l10n/ro.json
index f94ed7fb..3e5039bf 100644
--- a/l10n/ro.json
+++ b/l10n/ro.json
@@ -9,6 +9,7 @@
"Delete comment" : "Șterge comentariu",
"Title" : "Titlu",
"Apply" : "Aplică",
+ "Access" : "Acces",
"Owner" : "Proprietar",
"never" : "niciodată",
"Details" : "Detalii",
@@ -21,6 +22,7 @@
"Yes" : "a",
"Deleted" : "Șters",
"Day" : "Zi",
- "Month" : "Luna"
+ "Month" : "Luna",
+ "Access denied" : "Acces interzis"
},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"
} \ No newline at end of file
diff --git a/l10n/ru.js b/l10n/ru.js
index 6b6c7456..e99b5225 100644
--- a/l10n/ru.js
+++ b/l10n/ru.js
@@ -32,10 +32,15 @@ OC.L10N.register(
"OK" : "OK",
"Week" : "На неделе",
"Shift all date options" : "Сдвиг дат",
+ "Decrease unit" : "Шаг уменьшения",
+ "Increase unit" : "Шаг увеличения",
"Shift" : "Сдвиг",
"No Participants until now" : "Пока нет ни одного участника",
"_%n Participant_::_%n Participants_" : ["%n участник","%n участников","%n участников","%n участников"],
"started this poll on %n. " : "открыл это голосование %n.",
+ "This poll expired on {dateString}. The confirmed options are marked below." : "Этот опрос завершён {dateString}. Подтверждённые варианты приведены ниже.",
+ "This poll expired on {dateString}, but there are no confirmed options until now." : "Этот опрос завершён {dateString}, но подтверждённые варианты отсутствуют.",
+ "You can place your vote until {dateString}." : "Вы можете проголосовать до {dateString}.",
"The names of other participants are hidden, as this is an anonymous poll. " : "Это анонимный опрос, имена его участников скрыты.",
"Results are hidden. " : "Результаты скрыты.",
"They will be revealed after the poll is expired. " : "Они будут показаны после завершения голосования.",
@@ -52,17 +57,17 @@ OC.L10N.register(
"Title" : "Название",
"Enter Title" : "Введите заголовок",
"Poll type" : "Тип опроса",
- "Date poll" : "Дата проведения опроса",
- "Text poll" : "Текстовый опрос",
+ "Date poll" : "Выбор даты",
+ "Text poll" : "Выбор текстовых вариантов",
"Apply" : "Применить",
"Poll \"%n\" added" : "Добавлен опрос «%n»",
"Error while creating Poll \"%n\"" : "Не удалось создать опрос «%n»",
"Add new Poll" : "Добавить опрос",
- "Relevant" : "Актуальный",
+ "Relevant" : "Актуальные",
"My polls" : "Мои опросы",
"Public polls" : "Открытые опросы",
"All polls" : "Все опросы",
- "Expired polls" : "Истекшие опросы",
+ "Expired polls" : "Завершённые опросы",
"Deleted polls" : "Удалённые опросы",
"Clone poll" : "Скопировать опрос",
"Delete poll" : "Удалить опрос",
@@ -71,7 +76,7 @@ OC.L10N.register(
"Access" : "Доступ",
"Owner" : "Владелец",
"Created" : "Создано",
- "Expires" : "Задать дату окончания",
+ "Expires" : "Завершение",
"No description provided" : "Описание отсуствует",
"Visible to other users" : "Видимый другим пользователям",
"Hidden to other users" : "Скрывать от других пользователей",
@@ -88,10 +93,10 @@ OC.L10N.register(
"Allow admins to edit this poll" : "Администраторы могут редактировать этот опрос",
"Allow \"maybe\" vote" : "Разрешить вариант «может быть»",
"Anonymous poll" : "Анонимный опрос",
- "Result display" : "Показать результаты",
- "Always show results" : "Всегда показывать результаты",
- "Hide results until poll is expired" : "Спрятать результаты до завершения голосования",
- "Never show results" : "Никогда не показывать результаты",
+ "Result display" : "Показ результатов",
+ "Always show results" : "Всегда показывать",
+ "Hide results until poll is expired" : "Скрывать до завершения голосования",
+ "Never show results" : "Никогда не показывать",
"Expiration date" : "Дата окончания",
"Writing poll" : "Запись опроса",
"Update poll" : "Обновить опрос",
@@ -101,7 +106,10 @@ OC.L10N.register(
"Available Options" : "Доступные варианты",
"Delete option" : "Удалить вариант",
"Clone option" : "Копировать вариант",
- "Add a new text option" : "Добавление текстового варианта",
+ "Unconfirm option" : "Неподтверждённый вариант",
+ "Confirm option" : "Подтверждённый вариант",
+ "There are no vote options specified." : "Варианты не заданы.",
+ "Add a new text option" : "Добавить текстовый вариант",
"Enter option text" : "Введите описание варианта",
"Invitations" : "Приглашения",
"Invited users will get informed immediately via email!" : "Приглашения немедленно рассылаются по электронной почте.",
@@ -116,7 +124,12 @@ OC.L10N.register(
"Error while adding share" : "Не удалось опубликовать опрос",
"Receive notification email on activity" : "Получать уведомления при изменении",
"Your personal link to this poll: %n" : "Ваша личная ссылка на этот опрос: %n",
+ "Who are you?" : "Представьтесь:",
+ "To participate, tell us how we can call you!" : "Укажите своё имя, которое будет использоваться в опросах.",
"Enter your name" : "Введите своё имя",
+ "Please use at least 3 characters for your name." : "Имя не может быть короче трёх символов.",
+ "This name is not valid, i.e. because it is already in use." : "Это имя не может быть использовано, возможно оно уже занято.",
+ "OK, we will call you {username}." : "Ваше имя: {username}.",
"You have an account? Log in here." : "Войдите в систему, если у вас уже есть учётная запись.",
"Please use at least 3 characters for your username!" : "Имя не может быть короче трёх символов.",
"This username can not be chosen." : "Это имя нельзя использовать.",
@@ -132,16 +145,21 @@ OC.L10N.register(
"Relevant polls" : "Актуальные опросы",
"Hidden polls" : "Скрытые опросы",
"My deleted polls" : "Мои удаленные опросы",
- "Participated by me" : "Я принимал участие",
+ "Participated by me" : "В которых я принял участие",
"Your polls (where you are the owner)." : "Ваши опросы (где вы владелец)",
+ "All polls which are relevant or important to you, because you are a participant or the owner or you are invited to. Without expired polls." : "Все опросы, за исключением завершённых, которые вы организовывали, в которых участвовали или в которые были приглашены.",
"A complete list with all public polls on this site, regardless who is the owner." : "Полный список всех открытых опросов на этом сайте, независимо от того, кто является владельцем.",
+ "All hidden polls, to which you have access." : "Все скрытые опросы, к которым у вас есть доступ.",
"The trash bin." : "Это просто корзина.",
"All polls, where you placed a vote." : "Все опросы, где вы проголосовали.",
"Polls which reached their expiry date." : "Опросы, срок действия которых истек.",
"All polls, where you have access to." : "Все опросы, где у вас есть доступ.",
"Toggle Sidebar" : "Скрыть или показать боковую панель",
"Deleted" : "Удалено",
+ "There are no vote options, add some in the options section of the right sidebar." : "Варианты голосования не указаны, используйте правую боковую панель для из создания.",
"There are no vote options. Maybe the owner did not provide some until now." : "Пока нет ни одного варианта для голосования, возможно, организатор опроса их ещё не добавил.",
+ "Switch to mobile view" : "Режим просмотра для мобильных устройств",
+ "Switch to desktop view" : "Режим просмотра для ПК",
"Minute" : "Минута",
"Hour" : "Час",
"Day" : "День",
diff --git a/l10n/ru.json b/l10n/ru.json
index 2595cf35..8a88f598 100644
--- a/l10n/ru.json
+++ b/l10n/ru.json
@@ -30,10 +30,15 @@
"OK" : "OK",
"Week" : "На неделе",
"Shift all date options" : "Сдвиг дат",
+ "Decrease unit" : "Шаг уменьшения",
+ "Increase unit" : "Шаг увеличения",
"Shift" : "Сдвиг",
"No Participants until now" : "Пока нет ни одного участника",
"_%n Participant_::_%n Participants_" : ["%n участник","%n участников","%n участников","%n участников"],
"started this poll on %n. " : "открыл это голосование %n.",
+ "This poll expired on {dateString}. The confirmed options are marked below." : "Этот опрос завершён {dateString}. Подтверждённые варианты приведены ниже.",
+ "This poll expired on {dateString}, but there are no confirmed options until now." : "Этот опрос завершён {dateString}, но подтверждённые варианты отсутствуют.",
+ "You can place your vote until {dateString}." : "Вы можете проголосовать до {dateString}.",
"The names of other participants are hidden, as this is an anonymous poll. " : "Это анонимный опрос, имена его участников скрыты.",
"Results are hidden. " : "Результаты скрыты.",
"They will be revealed after the poll is expired. " : "Они будут показаны после завершения голосования.",
@@ -50,17 +55,17 @@
"Title" : "Название",
"Enter Title" : "Введите заголовок",
"Poll type" : "Тип опроса",
- "Date poll" : "Дата проведения опроса",
- "Text poll" : "Текстовый опрос",
+ "Date poll" : "Выбор даты",
+ "Text poll" : "Выбор текстовых вариантов",
"Apply" : "Применить",
"Poll \"%n\" added" : "Добавлен опрос «%n»",
"Error while creating Poll \"%n\"" : "Не удалось создать опрос «%n»",
"Add new Poll" : "Добавить опрос",
- "Relevant" : "Актуальный",
+ "Relevant" : "Актуальные",
"My polls" : "Мои опросы",
"Public polls" : "Открытые опросы",
"All polls" : "Все опросы",
- "Expired polls" : "Истекшие опросы",
+ "Expired polls" : "Завершённые опросы",
"Deleted polls" : "Удалённые опросы",
"Clone poll" : "Скопировать опрос",
"Delete poll" : "Удалить опрос",
@@ -69,7 +74,7 @@
"Access" : "Доступ",
"Owner" : "Владелец",
"Created" : "Создано",
- "Expires" : "Задать дату окончания",
+ "Expires" : "Завершение",
"No description provided" : "Описание отсуствует",
"Visible to other users" : "Видимый другим пользователям",
"Hidden to other users" : "Скрывать от других пользователей",
@@ -86,10 +91,10 @@
"Allow admins to edit this poll" : "Администраторы могут редактировать этот опрос",
"Allow \"maybe\" vote" : "Разрешить вариант «может быть»",
"Anonymous poll" : "Анонимный опрос",
- "Result display" : "Показать результаты",
- "Always show results" : "Всегда показывать результаты",
- "Hide results until poll is expired" : "Спрятать результаты до завершения голосования",
- "Never show results" : "Никогда не показывать результаты",
+ "Result display" : "Показ результатов",
+ "Always show results" : "Всегда показывать",
+ "Hide results until poll is expired" : "Скрывать до завершения голосования",
+ "Never show results" : "Никогда не показывать",
"Expiration date" : "Дата окончания",
"Writing poll" : "Запись опроса",
"Update poll" : "Обновить опрос",
@@ -99,7 +104,10 @@
"Available Options" : "Доступные варианты",
"Delete option" : "Удалить вариант",
"Clone option" : "Копировать вариант",
- "Add a new text option" : "Добавление текстового варианта",
+ "Unconfirm option" : "Неподтверждённый вариант",
+ "Confirm option" : "Подтверждённый вариант",
+ "There are no vote options specified." : "Варианты не заданы.",
+ "Add a new text option" : "Добавить текстовый вариант",
"Enter option text" : "Введите описание варианта",
"Invitations" : "Приглашения",
"Invited users will get informed immediately via email!" : "Приглашения немедленно рассылаются по электронной почте.",
@@ -114,7 +122,12 @@
"Error while adding share" : "Не удалось опубликовать опрос",
"Receive notification email on activity" : "Получать уведомления при изменении",
"Your personal link to this poll: %n" : "Ваша личная ссылка на этот опрос: %n",
+ "Who are you?" : "Представьтесь:",
+ "To participate, tell us how we can call you!" : "Укажите своё имя, которое будет использоваться в опросах.",
"Enter your name" : "Введите своё имя",
+ "Please use at least 3 characters for your name." : "Имя не может быть короче трёх символов.",
+ "This name is not valid, i.e. because it is already in use." : "Это имя не может быть использовано, возможно оно уже занято.",
+ "OK, we will call you {username}." : "Ваше имя: {username}.",
"You have an account? Log in here." : "Войдите в систему, если у вас уже есть учётная запись.",
"Please use at least 3 characters for your username!" : "Имя не может быть короче трёх символов.",
"This username can not be chosen." : "Это имя нельзя использовать.",
@@ -130,16 +143,21 @@
"Relevant polls" : "Актуальные опросы",
"Hidden polls" : "Скрытые опросы",
"My deleted polls" : "Мои удаленные опросы",
- "Participated by me" : "Я принимал участие",
+ "Participated by me" : "В которых я принял участие",
"Your polls (where you are the owner)." : "Ваши опросы (где вы владелец)",
+ "All polls which are relevant or important to you, because you are a participant or the owner or you are invited to. Without expired polls." : "Все опросы, за исключением завершённых, которые вы организовывали, в которых участвовали или в которые были приглашены.",
"A complete list with all public polls on this site, regardless who is the owner." : "Полный список всех открытых опросов на этом сайте, независимо от того, кто является владельцем.",
+ "All hidden polls, to which you have access." : "Все скрытые опросы, к которым у вас есть доступ.",
"The trash bin." : "Это просто корзина.",
"All polls, where you placed a vote." : "Все опросы, где вы проголосовали.",
"Polls which reached their expiry date." : "Опросы, срок действия которых истек.",
"All polls, where you have access to." : "Все опросы, где у вас есть доступ.",
"Toggle Sidebar" : "Скрыть или показать боковую панель",
"Deleted" : "Удалено",
+ "There are no vote options, add some in the options section of the right sidebar." : "Варианты голосования не указаны, используйте правую боковую панель для из создания.",
"There are no vote options. Maybe the owner did not provide some until now." : "Пока нет ни одного варианта для голосования, возможно, организатор опроса их ещё не добавил.",
+ "Switch to mobile view" : "Режим просмотра для мобильных устройств",
+ "Switch to desktop view" : "Режим просмотра для ПК",
"Minute" : "Минута",
"Hour" : "Час",
"Day" : "День",
diff --git a/l10n/tr.js b/l10n/tr.js
index 3b9e067e..0d05d423 100644
--- a/l10n/tr.js
+++ b/l10n/tr.js
@@ -126,10 +126,10 @@ OC.L10N.register(
"Receive notification email on activity" : "İşlem yapıldığında e-posta bildirimi gönderilsin",
"Your personal link to this poll: %n" : "Bu anketin size özel bağlantısı: %n",
"Who are you?" : "Siz kimsiniz?",
- "To participate, tell us how we can call you!" : "Katılmak için bize size nasıl hitap edebileceğimizi söyleyiniz!",
+ "To participate, tell us how we can call you!" : "Katılmak için size nasıl hitap edeceğimizi söyleyin!",
"Enter your name" : "Adınızı yazın",
- "Please use at least 3 characters for your name." : "Lütfen isminiz için en az 3 harf giriniz.",
- "This name is not valid, i.e. because it is already in use." : "Bu isim geçerli değildir, örnek: zaten kullanımda olan.",
+ "Please use at least 3 characters for your name." : "Lütfen adınız için en az 3 karakter yazın.",
+ "This name is not valid, i.e. because it is already in use." : "Bu ad geçersiz. Zaten kullanılıyor olabilir.",
"OK, we will call you {username}." : "Tamam, size {username} olarak hitap edeceğiz.",
"You have an account? Log in here." : "Zaten bir hesabınız varsa buradan oturum açın.",
"Please use at least 3 characters for your username!" : "Lütfen kullanıcı adınız için en az 3 karakter yazın!",
diff --git a/l10n/tr.json b/l10n/tr.json
index 37030552..7ddd2eb7 100644
--- a/l10n/tr.json
+++ b/l10n/tr.json
@@ -124,10 +124,10 @@
"Receive notification email on activity" : "İşlem yapıldığında e-posta bildirimi gönderilsin",
"Your personal link to this poll: %n" : "Bu anketin size özel bağlantısı: %n",
"Who are you?" : "Siz kimsiniz?",
- "To participate, tell us how we can call you!" : "Katılmak için bize size nasıl hitap edebileceğimizi söyleyiniz!",
+ "To participate, tell us how we can call you!" : "Katılmak için size nasıl hitap edeceğimizi söyleyin!",
"Enter your name" : "Adınızı yazın",
- "Please use at least 3 characters for your name." : "Lütfen isminiz için en az 3 harf giriniz.",
- "This name is not valid, i.e. because it is already in use." : "Bu isim geçerli değildir, örnek: zaten kullanımda olan.",
+ "Please use at least 3 characters for your name." : "Lütfen adınız için en az 3 karakter yazın.",
+ "This name is not valid, i.e. because it is already in use." : "Bu ad geçersiz. Zaten kullanılıyor olabilir.",
"OK, we will call you {username}." : "Tamam, size {username} olarak hitap edeceğiz.",
"You have an account? Log in here." : "Zaten bir hesabınız varsa buradan oturum açın.",
"Please use at least 3 characters for your username!" : "Lütfen kullanıcı adınız için en az 3 karakter yazın!",
diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php
index 309c8f40..53922944 100644
--- a/lib/AppInfo/Application.php
+++ b/lib/AppInfo/Application.php
@@ -23,20 +23,6 @@
namespace OCA\Polls\AppInfo;
-// use OCA\Polls\Controller\PageController;
-// use OCA\Polls\Controller\ApiController;
-// use OCA\Polls\Controller\CommentController;
-// use OCA\Polls\Controller\PollController;
-// use OCA\Polls\Controller\NotificationController;
-// use OCA\Polls\Controller\OptionController;
-// use OCA\Polls\Controller\VoteController;
-// use OCA\Polls\Controller\ShareController;
-// use OCA\Polls\Db\CommentMapper;
-// use OCA\Polls\Db\OptionMapper;
-// use OCA\Polls\Db\PollMapper;
-// use OCA\Polls\Db\NotificationMapper;
-// use OCA\Polls\Db\VoteMapper;
-// use OCA\Polls\Db\ShareMapper;
use OCP\AppFramework\App;
use OCP\IContainer;
diff --git a/lib/Controller/CommentApiController.php b/lib/Controller/CommentApiController.php
new file mode 100644
index 00000000..6cc56bba
--- /dev/null
+++ b/lib/Controller/CommentApiController.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Controller;
+
+use Exception;
+use OCP\AppFramework\Db\DoesNotExistException;
+
+use OCP\IRequest;
+use \OCP\IURLGenerator;
+use OCP\AppFramework\ApiController;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+
+use OCA\Polls\Exceptions\NotAuthorizedException;
+
+use OCA\Polls\Service\CommentService;
+
+
+
+class CommentApiController extends ApiController {
+
+ private $commentService;
+ /**
+ * CommentApiController constructor.
+ * @param string $appName
+ * @param IRequest $request
+ * @param CommentService $commentService
+ */
+
+ public function __construct(
+ string $appName,
+ IRequest $request,
+ CommentService $commentService
+ ) {
+ parent::__construct($appName,
+ $request,
+ 'POST, GET, DELETE',
+ 'Authorization, Content-Type, Accept',
+ 1728000);
+ $this->commentService = $commentService;
+ }
+
+ /**
+ * get
+ * Read all comments of a poll based on the poll id and return list as array
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return DataResponse
+ */
+ public function list($pollId) {
+ try {
+ return new DataResponse(['comments' => $this->commentService->list($pollId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll with id ' . $pollId . ' not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * Write a new comment to the db and returns the new comment as array
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param int $pollId
+ * @param string $message
+ * @return DataResponse
+ */
+ public function add($pollId, $message) {
+ try {
+ return new DataResponse(['comment' => $this->commentService->add($pollId, $message)], Http::STATUS_CREATED);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll with id ' . $pollId . ' not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * Delete Comment
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param int $commentId
+ * @return DataResponse
+ */
+ public function delete($commentId) {
+ try {
+ return new DataResponse(['comment' => $this->commentService->delete($commentId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Comment id ' . $commentId . ' does not exist'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+}
diff --git a/lib/Controller/CommentController.php b/lib/Controller/CommentController.php
index 082bbbb3..6f240f05 100644
--- a/lib/Controller/CommentController.php
+++ b/lib/Controller/CommentController.php
@@ -26,68 +26,38 @@ namespace OCA\Polls\Controller;
use Exception;
use OCP\AppFramework\Db\DoesNotExistException;
-
use OCP\IRequest;
use OCP\ILogger;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
-use OCP\IGroupManager;
+use OCA\Polls\Exceptions\NotAuthorizedException;
-use OCA\Polls\Db\Poll;
-use OCA\Polls\Db\PollMapper;
-use OCA\Polls\Db\Comment;
-use OCA\Polls\Db\CommentMapper;
-use OCA\Polls\Service\AnonymizeService;
-use OCA\Polls\Model\Acl;
+use OCA\Polls\Service\CommentService;
class CommentController extends Controller {
- private $userId;
- private $mapper;
- private $logger;
-
- private $groupManager;
- private $pollMapper;
- private $anonymizer;
- private $acl;
+ private $commentService;
/**
* CommentController constructor.
* @param string $appName
- * @param $UserId
- * @param CommentMapper $mapper
- * @param IGroupManager $groupManager
- * @param PollMapper $pollMapper
- * @param AnonymizeService $anonymizer
- * @param Acl $acl
+ * @param IRequest $request
+ * @param CommentService $commentService
*/
public function __construct(
string $appName,
- $userId,
IRequest $request,
- ILogger $logger,
- CommentMapper $mapper,
- IGroupManager $groupManager,
- PollMapper $pollMapper,
- AnonymizeService $anonymizer,
- Acl $acl
+ CommentService $commentService
) {
parent::__construct($appName, $request);
- $this->userId = $userId;
- $this->mapper = $mapper;
- $this->logger = $logger;
- $this->groupManager = $groupManager;
- $this->pollMapper = $pollMapper;
- $this->anonymizer = $anonymizer;
- $this->acl = $acl;
+ $this->commentService = $commentService;
}
-
/**
* get
* Read all comments of a poll based on the poll id and return list as array
@@ -96,166 +66,56 @@ class CommentController extends Controller {
* @param integer $pollId
* @return DataResponse
*/
- public function get($pollId) {
-
- try {
- if (!$this->acl->getFoundByToken()) {
- $this->acl->setPollId($pollId);
- }
-
- if (!$this->acl->getAllowSeeUsernames()) {
- $this->anonymizer->set($pollId, $this->acl->getUserId());
- return new DataResponse((array) $this->anonymizer->getComments(), Http::STATUS_OK);
- } else {
- return new DataResponse((array) $this->mapper->findByPoll($pollId), Http::STATUS_OK);
- }
-
- } catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
-
- }
-
- /**
- * getByToken
- * Read all comments of a poll based on a share token and return list as array
- * @NoAdminRequired
- * @NoCSRFRequired
- * @PublicPage
- * @param string $token
- * @return DataResponse
- */
- public function getByToken($token) {
-
- try {
- $this->acl->setToken($token);
- } catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
-
- return $this->get($this->acl->getPollId());
-
+ public function list($pollId) {
+ return new DataResponse($this->commentService->list($pollId), Http::STATUS_OK);
}
+ // /**
+ // * Read all comments of a poll based on a share token and return list as array
+ // * @NoAdminRequired
+ // * @NoCSRFRequired
+ // * @PublicPage
+ // * @param string $token
+ // * @return DataResponse
+ // */
+ // public function getByToken($token) {
+ // return new DataResponse($this->commentService->get(0, $token), Http::STATUS_OK);
+ // }
+ //
/**
* Write a new comment to the db and returns the new comment as array
* @NoAdminRequired
- * @NoCSRFRequired
+ * @PublicPage
* @param int $pollId
- * @param string $userId
* @param string $message
- * @return DataResponse
- */
- public function write($pollId, $userId, $message) {
- if (!\OC::$server->getUserSession()->isLoggedIn() && !$this->acl->getFoundByToken()) {
- $this->logger->alert('not allowed ' . json_encode(\OC::$server->getUserSession()->isLoggedIn()));
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- if (!$this->acl->getFoundByToken()) {
- $this->acl->setPollId($pollId);
- }
-
- if ($this->acl->getAllowComment()) {
- $comment = new Comment();
- $comment->setPollId($pollId);
- $comment->setUserId($userId);
- $comment->setComment($message);
- $comment->setDt(date('Y-m-d H:i:s'));
-
-
- try {
- $comment = $this->mapper->insert($comment);
- } catch (\Exception $e) {
- $this->logger->alert('conflict ' . json_encode($e));
- return new DataResponse($e, Http::STATUS_CONFLICT);
- }
- } else {
- $this->logger->alert('unauthorized ');
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- return new DataResponse($comment, Http::STATUS_OK);
-
- }
-
- /**
- * writeByToken
- * @NoAdminRequired
- * @PublicPage
- * @NoCSRFRequired
- * @param Array $option
- * @param string $setTo
* @param string $token
* @return DataResponse
*/
- public function writeByToken($token, $message) {
-
+ public function add($pollId, $message, $token) {
try {
- $this->acl->setToken($token);
- return $this->write($this->acl->getPollId(), $this->acl->getUserId(), $message);
-
- } catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ return new DataResponse($this->commentService->add($pollId, $message, $token), Http::STATUS_OK);
+ } catch (Exception $e) {
+ return new DataResponse($e, Http::STATUS_UNAUTHORIZED);
}
-
-
}
-
/**
- * delete
* Delete Comment
- * @NoCSRFRequired
- * @NoAdminRequired
- * @param int $pollId
- * @param string $message
- * @return DataResponse
- */
- public function delete($comment) {
- if (!\OC::$server->getUserSession()->isLoggedIn() && !$this->acl->getFoundByToken()) {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- if (!$this->acl->getFoundByToken()) {
- $this->acl->setPollId($comment['pollId']);
- }
-
- try {
- if ($comment['userId'] === $this->acl->getUserId()) {
- $comment = $this->mapper->find($comment['id']);
- $comment = $this->mapper->delete($comment);
- }
- } catch (\Exception $e) {
- return new DataResponse($e, Http::STATUS_CONFLICT);
- }
-
- return new DataResponse(['comment' => $comment], Http::STATUS_OK);
-
- }
-
- /**
- * writeByToken
* @NoAdminRequired
* @PublicPage
- * @NoCSRFRequired
- * @param Array $option
- * @param string $setTo
+ * @param int $commentId
* @param string $token
* @return DataResponse
*/
- public function deleteByToken($token, $comment) {
-
+ public function delete($commentId, $token) {
try {
- $this->acl->setToken($token);
- return $this->delete($comment);
-
+ return new DataResponse($this->commentService->delete($commentId, $token), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse($e, Http::STATUS_FORBIDDEN);
} catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ return new DataResponse($e, Http::STATUS_OK);
}
-
-
}
}
diff --git a/lib/Controller/OptionApiController.php b/lib/Controller/OptionApiController.php
new file mode 100644
index 00000000..e3396a3e
--- /dev/null
+++ b/lib/Controller/OptionApiController.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Controller;
+
+use Exception;
+use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+
+use OCP\IRequest;
+use OCP\AppFramework\ApiController;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+
+
+use OCA\Polls\Service\OptionService;
+
+class OptionApiController extends ApiController {
+
+ private $optionService;
+
+ /**
+ * OptionApiController constructor.
+ * @param string $appName
+ * @param IRequest $request
+ * @param OptionService $optionService
+ */
+
+ public function __construct(
+ string $appName,
+ IRequest $request,
+ OptionService $optionService
+ ) {
+ parent::__construct($appName,
+ $request,
+ 'POST, PUT, GET, DELETE',
+ 'Authorization, Content-Type, Accept',
+ 1728000);
+ $this->optionService = $optionService;
+ }
+
+ /**
+ * Get all options of given poll
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return DataResponse
+ */
+ public function list($pollId) {
+ try {
+ return new DataResponse(['options' => $this->optionService->list($pollId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll with id ' . $pollId . ' not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+
+ /**
+ * Add a new Option to poll
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @param string $pollOptionText
+ * @param integer $timestamp
+ * @return DataResponse
+ */
+ public function add($pollId, $pollOptionText = '', $timestamp = 0) {
+ $option = [
+ 'pollId' => $pollId,
+ 'pollOptionText' => $pollOptionText,
+ 'timestamp' => $timestamp
+ ];
+
+ try {
+ return new DataResponse(['option' => $this->optionService->add($option)], Http::STATUS_CREATED);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll with id ' . $pollId . ' not found'], Http::STATUS_NOT_FOUND);
+ } catch (UniqueConstraintViolationException $e) {
+ return new DataResponse(['error' => 'Option exists'], Http::STATUS_CONFLICT);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+
+ /**
+ * Update poll option
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param array $option
+ * @return DataResponse
+ */
+ public function update($option) {
+ try {
+ return new DataResponse(['option' => $this->optionService->update($option)], Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * Remove a single option
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param integer $optionId
+ * @return DataResponse
+ */
+ public function delete($optionId) {
+ try {
+ return new DataResponse(['option' => $this->optionService->delete($optionId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Option does not exist'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+}
diff --git a/lib/Controller/OptionController.php b/lib/Controller/OptionController.php
index 0c20b768..0ec24092 100644
--- a/lib/Controller/OptionController.php
+++ b/lib/Controller/OptionController.php
@@ -24,98 +24,34 @@
namespace OCA\Polls\Controller;
use Exception;
-use OCP\AppFramework\Db\DoesNotExistException;
use OCP\IRequest;
-use OCP\ILogger;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
-use OCP\IGroupManager;
-use OCP\Security\ISecureRandom;
+use OCA\Polls\Exceptions\NotAuthorizedException;
-use OCA\Polls\Db\Poll;
-use OCA\Polls\Db\PollMapper;
-use OCA\Polls\Db\Option;
-use OCA\Polls\Db\OptionMapper;
-use OCA\Polls\Service\LogService;
-use OCA\Polls\Model\Acl;
+use OCA\Polls\Service\OptionService;
class OptionController extends Controller {
- private $userId;
- private $optionMapper;
- private $options;
- private $option;
- private $groupManager;
- private $pollMapper;
- private $logger;
- private $logService;
- private $acl;
+ private $optionService;
/**
* OptionController constructor.
* @param string $appName
- * @param $UserId
* @param IRequest $request
- * @param ILogger $logger
- * @param OptionMapper $optionMapper
- * @param IGroupManager $groupManager
- * @param PollMapper $pollMapper
- * @param LogService $logService
- * @param Acl $acl
+ * @param OptionService $optionService
*/
public function __construct(
string $appName,
- $UserId,
IRequest $request,
- OptionMapper $optionMapper,
- Option $option,
- IGroupManager $groupManager,
- PollMapper $pollMapper,
- ILogger $logger,
- LogService $logService,
- Acl $acl
+ OptionService $optionService
) {
parent::__construct($appName, $request);
- $this->userId = $UserId;
- $this->optionMapper = $optionMapper;
- $this->option = $option;
- $this->groupManager = $groupManager;
- $this->pollMapper = $pollMapper;
- $this->logger = $logger;
- $this->logService = $logService;
- $this->acl = $acl;
- }
-
- /**
- * Set properties from option array
- * @NoAdminRequired
- * @param integer $pollId
- * @return array Array of Option objects
- */
- private function set($option) {
-
- $this->option->setPollId($option['pollId']);
- $this->option->setPollOptionText(trim(htmlspecialchars($option['pollOptionText'])));
- $this->option->setTimestamp($option['timestamp']);
-
- if ($option['timestamp']) {
- $this->option->setOrder($option['timestamp']);
- } else {
- $this->option->setOrder($option['order']);
- }
-
- if ($option['confirmed']) {
- // do not update confirmation date, if option is already confirmed
- if (!$this->option->getConfirmed()) {
- $this->option->setConfirmed(time());
- }
- } else {
- $this->option->setConfirmed(0);
- }
+ $this->optionService = $optionService;
}
/**
@@ -123,22 +59,10 @@ class OptionController extends Controller {
* @NoAdminRequired
* @NoCSRFRequired
* @param integer $pollId
- * @return array Array of Option objects
+ * @return DataResponse
*/
- public function get($pollId) {
-
- try {
-
- if (!$this->acl->getFoundByToken()) {
- $this->acl->setPollId($pollId);
- }
-
- $this->options = $this->optionMapper->findByPoll($pollId);
-
- return new DataResponse($this->options, Http::STATUS_OK);
- } catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
+ public function list($pollId) {
+ return new DataResponse($this->optionService->list($pollId), Http::STATUS_OK);
}
@@ -152,64 +76,29 @@ class OptionController extends Controller {
* @return DataResponse
*/
public function getByToken($token) {
-
- try {
- $this->acl->setToken($token);
- // return $this->get($this->acl->getPollId());
- $this->options = $this->optionMapper->findByPoll($this->acl->getPollId());
- return new DataResponse($this->options, Http::STATUS_OK);
-
- } catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
+ return new DataResponse($this->optionService->list(0, $token), Http::STATUS_OK);
}
/**
* Add a new Option to poll
* @NoAdminRequired
* @NoCSRFRequired
- * @param Option $option
+ * @param array $option
* @return DataResponse
*/
public function add($option) {
-
- if (!$this->acl->setPollId($option['pollId'])->getAllowEdit()) {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- try {
- $this->option = new Option();
- $this->set($option);
- $this->optionMapper->insert($this->option);
- $this->logService->setLog($option['pollId'], 'addOption');
- return new DataResponse($this->option, Http::STATUS_OK);
- } catch (Exception $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
+ return new DataResponse($this->optionService->add($option), Http::STATUS_OK);
}
/**
* Update poll option
* @NoAdminRequired
* @NoCSRFRequired
- * @param Option $option
+ * @param array $option
* @return DataResponse
*/
public function update($option) {
-
- if (!$this->acl->setPollId($option['pollId'])->getAllowEdit()) {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- try {
- $this->option = $this->optionMapper->find($option['id']);
- $this->set($option);
- $this->optionMapper->update($this->option);
- $this->logService->setLog($option['pollId'], 'updateOption');
- return new DataResponse($this->option, Http::STATUS_OK);
- } catch (Exception $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
+ return new DataResponse($this->optionService->update($option), Http::STATUS_OK);
}
/**
@@ -220,49 +109,18 @@ class OptionController extends Controller {
* @return DataResponse
*/
public function remove($option) {
- try {
-
- if (!$this->acl->setPollId($option['pollId'])->getAllowEdit()) {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- $this->optionMapper->remove($option['id']);
- $this->logService->setLog($option['pollId'], 'deleteOption');
-
- return new DataResponse(array(
- 'action' => 'deleted',
- 'optionId' => $option['id']
- ), Http::STATUS_OK);
-
- } catch (Exception $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
-
+ return new DataResponse($this->optionService->delete($option['id']), Http::STATUS_OK);
}
/**
* Set order by order of the given array
* @NoAdminRequired
* @NoCSRFRequired
+ * @param integer $pollId
* @param Array $options
* @return DataResponse
*/
public function reorder($pollId, $options) {
- $i = 0;
-
- if (!$this->acl->setPollId($pollId)->getAllowEdit()) {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- foreach ($options as $option) {
- $this->option = $this->optionMapper->find($option['id']);
- if ($pollId === intval($this->option->getPollId())) {
- $this->option->setOrder(++$i);
- $this->optionMapper->update($this->option);
- }
- }
-
- return $this->get($pollId);
-
+ return new DataResponse($this->optionService->reorder($pollId, $options), Http::STATUS_OK);
}
}
diff --git a/lib/Controller/PollApiController.php b/lib/Controller/PollApiController.php
new file mode 100644
index 00000000..3c8acc9d
--- /dev/null
+++ b/lib/Controller/PollApiController.php
@@ -0,0 +1,215 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+ namespace OCA\Polls\Controller;
+
+ use Exception;
+ use OCP\AppFramework\Db\DoesNotExistException;
+ use OCA\Polls\Exceptions\EmptyTitleException;
+ use OCA\Polls\Exceptions\InvalidAccessException;
+ use OCA\Polls\Exceptions\InvalidShowResultsException;
+ use OCA\Polls\Exceptions\InvalidPollTypeException;
+ use OCA\Polls\Exceptions\NotAuthorizedException;
+
+ use OCP\IRequest;
+ use OCP\ILogger;
+ use OCP\AppFramework\ApiController;
+ use OCP\AppFramework\Http;
+ use OCP\AppFramework\Http\DataResponse;
+
+ use OCA\Polls\Service\PollService;
+
+ class PollApiController extends ApiController {
+
+ private $logger;
+ private $pollService;
+
+ /**
+ * PollController constructor.
+ * @param string $appName
+ * @param $userId
+ * @param IRequest $request
+ * @param ILogger $logger
+ * @param PollService $pollService
+ */
+
+ public function __construct(
+ string $appName,
+ IRequest $request,
+ ILogger $logger,
+ PollService $pollService
+ ) {
+ parent::__construct($appName, $request);
+ $this->logger = $logger;
+ $this->pollService = $pollService;
+ }
+
+
+ /**
+ * list
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @CORS
+ * @return DataResponse
+ */
+
+ public function list() {
+ try {
+ return new DataResponse(['polls' => $this->pollService->list()], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse([], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+
+ /**
+ * get
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return array
+ */
+ public function get($pollId) {
+ try {
+ return new DataResponse(['poll' => $this->pollService->get($pollId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * write
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param Array $poll
+ * @return DataResponse
+ */
+
+ public function add($type, $title) {
+ try {
+ return new DataResponse(['poll' => $this->pollService->add($type, $title)], Http::STATUS_CREATED);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (InvalidPollTypeException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (EmptyTitleException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * write
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param Array $poll
+ * @return DataResponse
+ */
+
+ public function update($pollId, $poll) {
+ try {
+ return new DataResponse(['poll' => $this->pollService->update($pollId, $poll)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (InvalidAccessException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (InvalidShowResultsException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (EmptyTitleException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * delete
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param Array $poll
+ * @return DataResponse
+ */
+
+ public function delete($pollId) {
+ try {
+ return new DataResponse(['poll' => $this->pollService->delete($pollId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * deletePermanently
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param Array $poll
+ * @return DataResponse
+ */
+
+ public function deletePermanently($pollId) {
+ try {
+ return new DataResponse(['poll' => $this->pollService->deletePermanently($pollId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+
+ }
+
+ /**
+ * clone
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return DataResponse
+ */
+ public function clone($pollId) {
+ try {
+ return new DataResponse(['poll' => $this->pollService->clone($pollId)], Http::STATUS_CREATED);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * enum
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param Array $poll
+ * @return DataResponse
+ */
+
+ public function enum() {
+ return new DataResponse($this->pollService->getValidEnum(), Http::STATUS_OK);
+ }
+
+
+}
diff --git a/lib/Controller/PollController.php b/lib/Controller/PollController.php
index b3494c4c..27f9c4be 100644
--- a/lib/Controller/PollController.php
+++ b/lib/Controller/PollController.php
@@ -23,107 +23,70 @@
namespace OCA\Polls\Controller;
- use Exception;
- use OCP\AppFramework\Db\DoesNotExistException;
-
- use OCP\IRequest;
- use OCP\ILogger;
- use OCP\IL10N;
- use OCP\AppFramework\Controller;
- use OCP\AppFramework\Http;
- use OCP\AppFramework\Http\DataResponse;
-
- use OCP\IGroupManager;
- use OCP\IUser;
- use OCP\IUserManager;
- use OCP\Security\ISecureRandom;
-
- use OCA\Polls\Db\Comment;
- use OCA\Polls\Db\CommentMapper;
- use OCA\Polls\Db\Poll;
- use OCA\Polls\Db\PollMapper;
- use OCA\Polls\Db\Option;
- use OCA\Polls\Db\OptionMapper;
- use OCA\Polls\Db\Share;
- use OCA\Polls\Db\ShareMapper;
- use OCA\Polls\Db\Vote;
- use OCA\Polls\Db\VoteMapper;
- use OCA\Polls\Service\LogService;
- use OCA\Polls\Service\MailService;
- use OCA\Polls\Service\AnonymizeService;
- use OCA\Polls\Model\Acl;
-
- class PollController extends Controller {
-
- private $userId;
- private $commentMapper;
- private $pollMapper;
- private $optionMapper;
- private $shareMapper;
- private $voteMapper;
- private $trans;
- private $logger;
- private $groupManager;
- private $userManager;
- private $poll;
- private $logService;
- private $mailService;
- private $anonymizer;
- private $acl;
+use Exception;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\EmptyTitleException;
+use OCA\Polls\Exceptions\InvalidAccessException;
+use OCA\Polls\Exceptions\InvalidShowResultsException;
+use OCA\Polls\Exceptions\InvalidPollTypeException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+
+use OCP\IRequest;
+use OCP\ILogger;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+
+use OCA\Polls\Service\PollService;
+use OCA\Polls\Service\CommentService;
+use OCA\Polls\Service\OptionService;
+use OCA\Polls\Service\ShareService;
+use OCA\Polls\Service\VoteService;
+use OCA\Polls\Model\Acl;
+
+class PollController extends Controller {
+
+ private $logger;
+ private $pollService;
+ private $commentService;
+ private $optionService;
+ private $shareService;
+ private $voteService;
+ private $acl;
/**
- * CommentController constructor.
+ * PollController constructor.
* @param string $appName
- * @param $userId
* @param IRequest $request
* @param ILogger $logger
- * @param IL10N $trans
- * @param OptionMapper $optionMapper
- * @param PollMapper $pollMapper
- * @param IGroupManager $groupManager
- * @param IUserManager $userManager
- * @param LogService $logService
- * @param MailService $mailService
- * @param AnonymizeService $anonymizer
- * @param Acl $acl
- */
+ * @param PollService $pollService
+ * @param CommentService $commentService
+ * @param OptionService $optionService
+ * @param ShareService $shareService
+ * @param VoteService $voteService
+ * @param Acl $acl
+ */
public function __construct(
- string $appName,
- $userId,
+ string $appName,
IRequest $request,
ILogger $logger,
- IL10N $trans,
- CommentMapper $commentMapper,
- OptionMapper $optionMapper,
- PollMapper $pollMapper,
- ShareMapper $shareMapper,
- VoteMapper $voteMapper,
- Poll $poll,
- IGroupManager $groupManager,
- IUserManager $userManager,
- LogService $logService,
- MailService $mailService,
- AnonymizeService $anonymizer,
- Acl $acl
- ) {
+ PollService $pollService,
+ CommentService $commentService,
+ OptionService $optionService,
+ ShareService $shareService,
+ VoteService $voteService,
+ Acl $acl
+ ) {
parent::__construct($appName, $request);
- $this->userId = $userId;
- $this->trans = $trans;
- $this->commentMapper = $commentMapper;
- $this->pollMapper = $pollMapper;
- $this->optionMapper = $optionMapper;
- $this->shareMapper = $shareMapper;
- $this->voteMapper = $voteMapper;
- $this->logger = $logger;
- $this->groupManager = $groupManager;
- $this->userManager = $userManager;
- $this->poll = $poll;
- $this->logService = $logService;
- $this->mailService = $mailService;
- $this->anonymizer = $anonymizer;
- $this->acl = $acl;
- }
+ $this->logger = $logger;
+ $this->pollService = $pollService;
+ $this->commentService = $commentService;
+ $this->optionService = $optionService;
+ $this->shareService = $shareService;
+ $this->voteService = $voteService;
+ $this->acl = $acl;
+ }
/**
@@ -134,29 +97,13 @@
*/
public function list() {
- if (\OC::$server->getUserSession()->isLoggedIn()) {
- $pollList = [];
-
- try {
-
- $polls = $this->pollMapper->findAll();
- // TODO: Not the elegant way. Improvement neccessary
- foreach ($polls as $poll) {
- $combinedPoll = (object) array_merge(
- (array) json_decode(json_encode($poll)), (array) json_decode(json_encode($this->acl->setPollId($poll->getId()))));
- if ($combinedPoll->allowView) {
- $pollList[] = $combinedPoll;
- }
- }
-
- return new DataResponse($pollList, Http::STATUS_OK);
- } catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
- } else {
- return new DataResponse([], Http::STATUS_OK);
+ try {
+ return new DataResponse($this->pollService->list(), Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse([], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
}
-
}
@@ -164,77 +111,61 @@
* get
* @NoAdminRequired
* @NoCSRFRequired
+ * @PublicPage
* @param integer $pollId
* @return array
*/
- public function get($pollId) {
-
- try {
- if (!$this->acl->getFoundByToken()) {
- $this->acl->setPollId($pollId);
- }
-
- $this->poll = $this->pollMapper->find($pollId);
-
- if (!$this->acl->getAllowView()) {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- $options = $this->optionMapper->findByPoll($pollId);
-
- if ($this->acl->getAllowEdit()) {
- $shares = $this->shareMapper->findByPoll($pollId);
+ public function get($pollId, $token) {
+ try {
+ if ($token) {
+ $poll = $this->pollService->getByToken($token);
+ $acl = $this->acl->setToken($token);
} else {
- $shares = [];
+ $poll = $this->pollService->get($pollId);
+ $acl = $this->acl->setPollId($pollId);
}
- if ($this->acl->getAllowSeeUsernames()) {
- $comments = $this->commentMapper->findByPoll($pollId);
-
- if ($this->acl->getAllowSeeResults()) {
- $votes = $this->voteMapper->findByPoll($pollId);
- } else {
- $votes = $this->voteMapper->findByPollAndUser($pollId, $this->acl->getUserId());
- }
- } else {
- $this->anonymizer->set($pollId, $this->acl->getUserId());
- $comments = $this->anonymizer->getComments();
- $votes = $this->anonymizer->getVotes();
+ // $this->poll = $this->pollService->get($pollId, $token);
+ // return new DataResponse($this->pollService->get($pollId, $token), Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
- }
+ try {
+ $comments = $this->commentService->list($this->acl->getPollId(), $token);
+ } catch (Exception $e) {
+ $comments = [];
+ }
- return new DataResponse([
- 'acl' => $this->acl,
- 'comments' => $comments,
- 'options' => $options,
- 'poll' => $this->poll,
- 'shares' => $shares,
- 'votes' => $votes
- ], Http::STATUS_OK);
+ try {
+ $options = $this->optionService->list($this->acl->getPollId(), $token);
+ } catch (Exception $e) {
+ $options = [];
+ }
- } catch (DoesNotExistException $e) {
- $this->logger->info('Poll ' . $pollId . ' not found!', ['app' => 'polls']);
- return new DataResponse(null, Http::STATUS_NOT_FOUND);
- }
- }
+ try {
+ $votes = $this->voteService->list($this->acl->getPollId(), $token);
+ } catch (Exception $e) {
+ $votes = [];
+ }
- /**
- * getByToken
- * Read all options of a poll based on a share token and return list as array
- * @NoAdminRequired
- * @PublicPage
- * @NoCSRFRequired
- * @param string $token
- * @return DataResponse
- */
- public function getByToken($token) {
try {
- return $this->get($this->acl->setToken($token)->getPollId());
- } catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ $shares = $this->shareService->list($this->acl->getPollId());
+ } catch (Exception $e) {
+ $shares = [];
}
- }
+ return new DataResponse([
+ 'acl' => $acl,
+ 'poll' => $poll,
+ 'comments' => $comments,
+ 'options' => $options,
+ 'shares' => $shares,
+ 'votes' => $votes
+ ], Http::STATUS_OK);
+ }
/**
* delete
@@ -245,29 +176,12 @@
*/
public function delete($pollId) {
-
try {
- // Find existing poll
- $this->poll = $this->pollMapper->find($pollId);
- $this->acl->setPollId($this->poll->getId());
-
- if (!$this->acl->getAllowEdit()) {
- $this->logger->alert('Unauthorized delete attempt from user ' . $this->userId);
- return new DataResponse(['message' => 'Unauthorized write attempt.'], Http::STATUS_UNAUTHORIZED);
- }
-
- if ($this->poll->getDeleted()) {
- $this->poll->setDeleted(0);
- } else {
- $this->poll->setDeleted(time());
- }
-
- $this->pollMapper->update($this->poll);
- $this->logService->setLog($this->poll->getId(), 'deletePoll');
- return new DataResponse(['deleted' => $pollId], Http::STATUS_OK);
-
- } catch (Exception $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ return new DataResponse($this->pollService->delete($pollId), Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
}
}
@@ -280,27 +194,34 @@
*/
public function deletePermanently($pollId) {
-
try {
- // Find existing poll
- $this->poll = $this->pollMapper->find($pollId);
- $this->acl->setPollId($this->poll->getId());
-
- if (!$this->acl->getAllowEdit()) {
- $this->logger->alert('Unauthorized delete attempt from user ' . $this->userId);
- return new DataResponse(['message' => 'Unauthorized write attempt.'], Http::STATUS_UNAUTHORIZED);
- }
+ return new DataResponse($this->pollService->deletePermanently($pollId), Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
- if (!$this->poll->getDeleted()) {
- $this->logger->alert('user ' . $this->userId . ' trying to permanently delete active poll');
- return new DataResponse(['message' => 'Permanent deletion of active poll.'], Http::STATUS_CONFLICT);
- }
- $this->pollMapper->delete($this->poll);
- return new DataResponse([], Http::STATUS_OK);
+ /**
+ * add
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param string $type
+ * @param string $title
+ * @return DataResponse
+ */
- } catch (Exception $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ public function add($type, $title) {
+ try {
+ return new DataResponse($this->pollService->add($type, $title), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (InvalidPollTypeException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (EmptyTitleException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
}
}
@@ -308,55 +229,24 @@
* write
* @NoAdminRequired
* @NoCSRFRequired
- * @param Array $poll
+ * @param integer $pollId
+ * @param array $poll
* @return DataResponse
*/
- public function write($poll) {
-
+ public function update($pollId, $poll) {
try {
- // Find existing poll
- $this->poll = $this->pollMapper->find($poll['id']);
- $this->acl->setPollId($this->poll->getId());
- if (!$this->acl->getAllowEdit()) {
- $this->logger->alert('Unauthorized write attempt from user ' . $this->userId);
- return new DataResponse(['message' => 'Unauthorized write attempt.'], Http::STATUS_UNAUTHORIZED);
- }
-
- } catch (Exception $e) {
- $this->poll = new Poll();
-
- $this->poll->setType($poll['type']);
- $this->poll->setOwner($this->userId);
- $this->poll->setCreated(time());
- } finally {
- $this->poll->setTitle($poll['title']);
- $this->poll->setDescription($poll['description']);
- $this->poll->setAccess($poll['access']);
- $this->poll->setExpire($poll['expire']);
- $this->poll->setAnonymous(intval($poll['anonymous']));
- $this->poll->setFullAnonymous(0);
- $this->poll->setAllowMaybe(intval($poll['allowMaybe']));
- $this->poll->setVoteLimit(intval($poll['voteLimit']));
- $this->poll->setSettings('');
- $this->poll->setOptions('');
- $this->poll->setShowResults($poll['showResults']);
- $this->poll->setDeleted($poll['deleted']);
- $this->poll->setAdminAccess($poll['adminAccess']);
-
- if ($this->poll->getId() > 0) {
- $this->pollMapper->update($this->poll);
- $this->logService->setLog($this->poll->getId(), 'updatePoll');
- } else {
- $this->pollMapper->insert($this->poll);
- $this->logService->setLog($this->poll->getId(), 'addPoll');
- }
- return $this->get($this->poll->getId());
- // $this->acl->setPollId($this->poll->getId());
- // return new DataResponse([
- // 'poll' => $this->poll,
- // 'acl' => $this->acl
- // ], Http::STATUS_OK);
+ return new DataResponse($this->pollService->update($pollId, $poll), Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (InvalidAccessException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (InvalidShowResultsException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (EmptyTitleException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
}
}
@@ -368,40 +258,13 @@
* @return DataResponse
*/
public function clone($pollId) {
- $this->poll = $this->pollMapper->find($pollId);
-
- $clonePoll = new Poll();
- $clonePoll->setOwner($this->userId);
- $clonePoll->setCreated(time());
- $clonePoll->setTitle('Clone of ' . $this->poll->getTitle());
- $clonePoll->setDeleted(0);
-
- $clonePoll->setType($this->poll->getType());
- $clonePoll->setDescription($this->poll->getDescription());
- $clonePoll->setAccess($this->poll->getAccess());
- $clonePoll->setExpire($this->poll->getExpire());
- $clonePoll->setAnonymous(intval($this->poll->getAnonymous()));
- $clonePoll->setFullAnonymous(0);
- $clonePoll->setAllowMaybe(intval($this->poll->getAllowMaybe()));
- $clonePoll->setVoteLimit(intval($this->poll->getVoteLimit()));
- $clonePoll->setSettings('');
- $clonePoll->setOptions('');
- $clonePoll->setShowResults($this->poll->getShowResults());
- $clonePoll->setAdminAccess($this->poll->getAdminAccess());
-
- $this->pollMapper->insert($clonePoll);
- $this->logService->setLog($clonePoll->getId(), 'addPoll');
-
- foreach ($this->optionMapper->findByPoll($pollId) as $option) {
- $newOption = new Option();
- $newOption->setPollId($clonePoll->getId());
- $newOption->setPollOptionText($option->getPollOptionText());
- $newOption->setTimestamp($option->getTimestamp());
-
- $this->optionMapper->insert($newOption);
+ try {
+ return new DataResponse($this->pollService->clone($pollId), Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Poll not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
}
- return new DataResponse(['pollId' => $clonePoll->getId()], Http::STATUS_OK);
-
}
}
diff --git a/lib/Controller/ShareApiController.php b/lib/Controller/ShareApiController.php
new file mode 100644
index 00000000..cceb7aa6
--- /dev/null
+++ b/lib/Controller/ShareApiController.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Controller;
+
+use Exception;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+use OCA\Polls\Exceptions\InvalidUsername;
+
+
+use OCP\IRequest;
+use OCP\AppFramework\ApiController;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+
+use OCA\Polls\Service\ShareService;
+
+class ShareApiController extends ApiController {
+
+ private $shareService;
+
+ /**
+ * ShareController constructor.
+ * @param string $appName
+ * @param string $userId
+ * @param IRequest $request
+ * @param ShareService $shareService
+ */
+ public function __construct(
+ string $appName,
+ IRequest $request,
+ ShareService $shareService
+ ) {
+ parent::__construct($appName,
+ $request,
+ 'POST, PUT, GET, DELETE',
+ 'Authorization, Content-Type, Accept',
+ 1728000);
+ $this->shareService = $shareService;
+ }
+
+ /**
+ * list
+ * Read all shares of a poll based on the poll id and return list as array
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return DataResponse
+ */
+ public function list($pollId) {
+ try {
+ return new DataResponse(['shares' => $this->shareService->list($pollId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'No shares for poll with id ' . $pollId . ' not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * get share by token
+ * Get pollId by token
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @CORS
+ * @param string $token
+ * @return DataResponse
+ */
+ public function get($token) {
+ try {
+ return new DataResponse(['share' => $this->shareService->get($token)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Token ' . $token . ' not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * Write a new share to the db and returns the new share as array
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param int $pollId
+ * @param string $type
+ * @param string $userId
+ * @param string $userEmail
+ * @return DataResponse
+ */
+ public function add($pollId, $type, $userId = '', $userEmail = '') {
+ try {
+ return new DataResponse(['share' => $this->shareService->add($pollId, $type, $userId, $userEmail)], Http::STATUS_CREATED);
+ } catch (\Exception $e) {
+ return new DataResponse(['error' => $e], Http::STATUS_CONFLICT);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+
+ }
+
+ /**
+ * delete share
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param string $token
+ * @return DataResponse
+ */
+
+ public function delete($token) {
+ try {
+ return new DataResponse(['share' => $this->shareService->remove($token)], Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (Exception $e) {
+ return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ }
+ }
+}
diff --git a/lib/Controller/ShareController.php b/lib/Controller/ShareController.php
index 99746a78..aa80cc3d 100644
--- a/lib/Controller/ShareController.php
+++ b/lib/Controller/ShareController.php
@@ -25,6 +25,8 @@ namespace OCA\Polls\Controller;
use Exception;
use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+use OCA\Polls\Exceptions\InvalidUsername;
use OCP\IRequest;
@@ -33,105 +35,36 @@ use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
-use OCP\Security\ISecureRandom;
-use OCA\Polls\Db\Poll;
use OCA\Polls\Model\Acl;
-use OCA\Polls\Db\PollMapper;
-use OCA\Polls\Db\Share;
-use OCA\Polls\Db\ShareMapper;
-use OCA\Polls\Service\MailService;
-// TODO: Change to Service
-use OCA\Polls\Controller\SystemController;
+use OCA\Polls\Service\ShareService;
class ShareController extends Controller {
private $logger;
- private $acl;
- private $mapper;
+ private $shareService;
private $userId;
- private $pollMapper;
- private $systemController;
- private $mailService;
-
/**
* ShareController constructor.
* @param string $appName
* @param string $userId
* @param IRequest $request
* @param ILogger $logger
- * @param ShareMapper $mapper
- * @param PollMapper $pollMapper
- * @param SystemController $systemController
- * @param MailService $mailService
- * @param Acl $acl
+ * @param ShareService $shareService
*/
public function __construct(
string $appName,
$userId,
IRequest $request,
ILogger $logger,
- ShareMapper $mapper,
- PollMapper $pollMapper,
- SystemController $systemController,
- MailService $mailService,
- Acl $acl
+ ShareService $shareService
) {
parent::__construct($appName, $request);
$this->logger = $logger;
$this->userId = $userId;
- $this->mapper = $mapper;
- $this->pollMapper = $pollMapper;
- $this->systemController = $systemController;
- $this->mailService = $mailService;
- $this->acl = $acl;
- }
-
- /**
- * getByToken
- * Get pollId by token
- * @NoAdminRequired
- * @NoCSRFRequired
- * @PublicPage
- * @param string $token
- * @return DataResponse
- */
- public function get($token) {
- try {
- $share = $this->mapper->findByToken($token);
- return new DataResponse($share, Http::STATUS_OK);
-
- } catch (DoesNotExistException $e) {
- return new DataResponse(null, Http::STATUS_NOT_FOUND);
- }
- }
-
- /**
- * get
- * Read all shares of a poll based on the poll id and return list as array
- * @NoAdminRequired
- * @NoCSRFRequired
- * @param integer $pollId
- * @return DataResponse
- */
- public function getShares($pollId) {
- if ($this->acl->setPollId($pollId)->getAllowEdit()) {
- try {
- $shares = $this->mapper->findByPoll($pollId);
- return new DataResponse((array) $shares, Http::STATUS_OK);
-
- } catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
- }
-
- } else {
- $this->logger->alert('no access');
-
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
+ $this->shareService = $shareService;
}
/**
@@ -139,36 +72,20 @@ class ShareController extends Controller {
* @NoAdminRequired
* @NoCSRFRequired
* @param int $pollId
- * @param string $message
+ * @param Array $share
* @return DataResponse
*/
- public function write($pollId, $share) {
- $this->acl->setPollId($pollId);
- if (!$this->acl->getAllowEdit()) {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
- $newShare = new Share();
- $newShare->setType($share['type']);
- $newShare->setPollId($share['pollId']);
- $newShare->setUserId($share['userId']);
- $newShare->setUserEmail(isset($share['userEmail']) ? $share['userEmail'] : '');
- $newShare->setToken(\OC::$server->getSecureRandom()->generate(
- 16,
- ISecureRandom::CHAR_DIGITS .
- ISecureRandom::CHAR_LOWER .
- ISecureRandom::CHAR_UPPER
- ));
-
+ public function add($pollId, $share) {
try {
- $newShare = $this->mapper->insert($newShare);
- $sendResult = $this->mailService->sendInvitationMail($newShare->getToken());
-
- return new DataResponse([
- 'share' => $newShare,
- 'sendResult' => $sendResult
- ], Http::STATUS_OK);
-
+ $return = $this->shareService->write(
+ $pollId,
+ $share['type'],
+ $share['userId'],
+ isset($share['userEmail']) ? $share['userEmail'] : ''
+ );
+ return new DataResponse($return, Http::STATUS_CREATED);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
} catch (\Exception $e) {
return new DataResponse($e, Http::STATUS_CONFLICT);
}
@@ -181,50 +98,18 @@ class ShareController extends Controller {
* @NoAdminRequired
* @PublicPage
* @NoCSRFRequired
- * @param int $pollId
- * @param string $message
+ * @param string $token
+ * @param string $userName
* @return DataResponse
*/
public function createPersonalShare($token, $userName) {
try {
- $publicShare = $this->mapper->findByToken($token);
-
- // Return of validatePublicUsername is a DataResponse
- $checkUsername = $this->systemController->validatePublicUsername($publicShare->getPollId(), $userName, $token);
-
- // if status is not 200, return DataResponse from validatePublicUsername
- if ($checkUsername->getStatus() !== 200) {
- return $checkUsername;
- }
-
- if ($publicShare->getType() === 'public') {
-
- $userShare = new Share();
- $userShare->setToken(\OC::$server->getSecureRandom()->generate(
- 16,
- ISecureRandom::CHAR_DIGITS .
- ISecureRandom::CHAR_LOWER .
- ISecureRandom::CHAR_UPPER
- ));
- $userShare->setType('external');
- $userShare->setPollId($publicShare->getPollId());
- $userShare->setUserId($userName);
- $userShare->setUserEmail('');
- $userShare = $this->mapper->insert($userShare);
- return new DataResponse($userShare, Http::STATUS_OK);
-
- } elseif ($publicShare->getType() === 'email') {
-
- $publicShare->setType('external');
- $publicShare->setUserId($userName);
- $this->mapper->update($publicShare);
- return new DataResponse($publicShare, Http::STATUS_OK);
-
- } else {
- return new DataResponse(['message'=> 'Wrong share type: ' . $publicShare->getType()], Http::STATUS_FORBIDDEN);
- }
-
+ return new DataResponse($this->shareService->createPersonalShare($token, $userName), Http::STATUS_CREATED);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ } catch (InvalidUsername $e) {
+ return new DataResponse(['error' => $userName . ' is not valid'], Http::STATUS_CONFLICT);
} catch (DoesNotExistException $e) {
// return forbidden in all not catched error cases
return new DataResponse($e, Http::STATUS_FORBIDDEN);
@@ -240,19 +125,14 @@ class ShareController extends Controller {
* @return DataResponse
*/
- public function remove($share) {
+ public function delete($share) {
try {
- if ($this->acl->setPollId($share['pollId'])->getAllowEdit()) {
- $this->mapper->remove($share['id']);
-
- return new DataResponse(array(
- 'action' => 'deleted',
- 'shareId' => $share['id']
- ), Http::STATUS_OK);
- } else {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
+ return new DataResponse(array(
+ 'action' => 'deleted',
+ 'shareId' => $this->shareService->remove($share['token'])->getId()
+ ), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
} catch (Exception $e) {
return new DataResponse($e, Http::STATUS_NOT_FOUND);
}
diff --git a/lib/Controller/SubscriptionApiController.php b/lib/Controller/SubscriptionApiController.php
new file mode 100644
index 00000000..3a23d403
--- /dev/null
+++ b/lib/Controller/SubscriptionApiController.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Controller;
+
+use Exception;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+
+use OCP\IRequest;
+use OCP\ILogger;
+
+use OCP\AppFramework\ApiController;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+
+use OCA\Polls\Service\SubscriptionService;
+
+class SubscriptionApiController extends ApiController {
+
+ private $userId;
+ private $subscriptionService;
+ private $logger;
+
+ /**
+ * SubscriptionController constructor.
+ * @param string $appName
+ * @param $UserId
+ * @param SubscriptionService $subscriptionService
+ * @param IRequest $request
+ * @param ILogger $logger
+ */
+
+ public function __construct(
+ string $appName,
+ $userId,
+ SubscriptionService $subscriptionService,
+ IRequest $request,
+ ILogger $logger
+
+ ) {
+ parent::__construct($appName,
+ $request,
+ 'PUT, GET, DELETE',
+ 'Authorization, Content-Type, Accept',
+ 1728000);
+ $this->userId = $userId;
+ $this->subscriptionService = $subscriptionService;
+ $this->logger = $logger;
+ }
+
+ /**
+ * @NoAdminRequired
+ * CORS
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return DataResponse
+ */
+ public function get($pollId) {
+ try {
+ $this->subscriptionService->get($pollId);
+ return new DataResponse(['status' => 'Subscribed to poll ' . $pollId], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['status' => 'Not subscribed to poll ' . $pollId], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param integer $pollId
+ */
+ public function subscribe($pollId) {
+ try {
+ $this->subscriptionService->set($pollId, true);
+ return new DataResponse(['status' => 'Subscribed to poll ' . $pollId], Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+ /**
+ * @NoAdminRequired
+ * @CORS
+ * @NoCSRFRequired
+ * @param integer $pollId
+ */
+ public function unsubscribe($pollId) {
+ try {
+ $this->subscriptionService->set($pollId, false);
+ return new DataResponse(['status' => 'Unsubscribed from poll ' . $pollId], Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+}
diff --git a/lib/Controller/SubscriptionController.php b/lib/Controller/SubscriptionController.php
index 8a5bf445..e90f4a66 100644
--- a/lib/Controller/SubscriptionController.php
+++ b/lib/Controller/SubscriptionController.php
@@ -25,29 +25,27 @@ namespace OCA\Polls\Controller;
use Exception;
use OCP\AppFramework\Db\DoesNotExistException;
-use OCP\AppFramework\Db\MultipleObjectsReturnedException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
use OCP\IRequest;
use OCP\ILogger;
-
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
-use OCA\Polls\Db\Subscription;
-use OCA\Polls\Db\SubscriptionMapper;
+use OCA\Polls\Service\SubscriptionService;
class SubscriptionController extends Controller {
private $userId;
- private $mapper;
+ private $subscriptionService;
private $logger;
/**
* SubscriptionController constructor.
* @param string $appName
* @param $UserId
- * @param SubscriptionMapper $mapper
+ * @param SubscriptionService $subscriptionService
* @param IRequest $request
* @param ILogger $logger
*/
@@ -55,14 +53,14 @@ class SubscriptionController extends Controller {
public function __construct(
string $appName,
$userId,
- SubscriptionMapper $mapper,
+ SubscriptionService $subscriptionService,
IRequest $request,
ILogger $logger
) {
parent::__construct($appName, $request);
$this->userId = $userId;
- $this->mapper = $mapper;
+ $this->subscriptionService = $subscriptionService;
$this->logger = $logger;
}
@@ -73,19 +71,13 @@ class SubscriptionController extends Controller {
* @return DataResponse
*/
public function get($pollId) {
-
- if (!\OC::$server->getUserSession()->isLoggedIn()) {
- return new DataResponse(null, Http::STATUS_UNAUTHORIZED);
- }
-
try {
- $this->mapper->findByUserAndPoll($pollId, $this->userId);
- } catch (MultipleObjectsReturnedException $e) {
- // should not happen, but who knows
+ return new DataResponse($this->subscriptionService->get($pollId), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
} catch (DoesNotExistException $e) {
- return new DataResponse(null, Http::STATUS_NOT_FOUND);
+ return new DataResponse(['status' => 'Not subscribed'], Http::STATUS_NOT_FOUND);
}
- return new DataResponse(null, Http::STATUS_OK);
}
/**
@@ -94,15 +86,10 @@ class SubscriptionController extends Controller {
* @param integer $pollId
*/
public function set($pollId, $subscribed) {
- if ($subscribed) {
- $subscription = new Subscription();
- $subscription->setPollId($pollId);
- $subscription->setUserId($this->userId);
- $this->mapper->insert($subscription);
- return true;
- } else {
- $this->mapper->unsubscribe($pollId, $this->userId);
- return false;
+ try {
+ return new DataResponse($this->subscriptionService->set($pollId, $subscribed), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
}
}
}
diff --git a/lib/Controller/SystemController.php b/lib/Controller/SystemController.php
index 9c8326cf..d4c15963 100644
--- a/lib/Controller/SystemController.php
+++ b/lib/Controller/SystemController.php
@@ -148,8 +148,9 @@ class SystemController extends Controller {
}
if ($getUsers) {
- foreach ($this->userManager->searchDisplayName($query) as $user) {
- if (!in_array($user->getUID(), $skipUsers)) {
+ $users = $this->userManager->searchDisplayName($query);
+ foreach ($users as $user) {
+ if (!in_array($user->getUID(), $skipUsers) && $user->isEnabled()) {
$list[] = [
'id' => $user->getUID(),
'user' => $user->getUID(),
diff --git a/lib/Controller/VoteApiController.php b/lib/Controller/VoteApiController.php
new file mode 100644
index 00000000..21d7762d
--- /dev/null
+++ b/lib/Controller/VoteApiController.php
@@ -0,0 +1,105 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Controller;
+
+use Exception;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+
+use OCP\IRequest;
+use OCP\ILogger;
+use OCP\AppFramework\ApiController;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\Http\DataResponse;
+
+use OCA\Polls\Service\VoteService;
+
+class VoteApiController extends ApiController {
+
+ private $logger;
+ private $voteService;
+
+ /**
+ * VoteController constructor.
+ * @param string $appName
+ * @param IRequest $request
+ * @param ILogger $logger
+ * @param VoteService $voteService
+ */
+ public function __construct(
+ string $appName,
+ IRequest $request,
+ ILogger $logger,
+ VoteService $voteService
+ ) {
+ parent::__construct($appName,
+ $request,
+ 'PUT, GET, DELETE',
+ 'Authorization, Content-Type, Accept',
+ 1728000);
+ $this->voteService = $voteService;
+ $this->logger = $logger;
+ }
+
+ /**
+ * Get all votes of given poll
+ * Read all votes of a poll based on the poll id and return list as array
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @CORS
+ * @param integer $pollId
+ * @return DataResponse
+ */
+ public function list($pollId) {
+ try {
+ return new DataResponse(['votes' => $this->voteService->list($pollId)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'No votes'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+ }
+
+ /**
+ * set
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @CORS
+ * @param integer $pollId
+ * @param Array $option
+ * @param string $userId
+ * @param string $setTo
+ * @return DataResponse
+ */
+ public function set($pollId, $pollOptionText, $setTo) {
+ try {
+ return new DataResponse(['vote' => $this->voteService->set($pollId, $pollOptionText, $setTo)], Http::STATUS_OK);
+ } catch (DoesNotExistException $e) {
+ return new DataResponse(['error' => 'Option not found'], Http::STATUS_NOT_FOUND);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
+ }
+
+ }
+}
diff --git a/lib/Controller/VoteController.php b/lib/Controller/VoteController.php
index ad8936bd..f666c004 100644
--- a/lib/Controller/VoteController.php
+++ b/lib/Controller/VoteController.php
@@ -23,77 +23,41 @@
namespace OCA\Polls\Controller;
-use Exception;
+// use Exception;
use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
-
-use OCP\IRequest;
use OCP\ILogger;
+use OCP\IRequest;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\DataResponse;
-use OCP\IGroupManager;
+use OCA\Polls\Service\VoteService;
-use OCA\Polls\Db\Poll;
-use OCA\Polls\Db\PollMapper;
-use OCA\Polls\Db\Vote;
-use OCA\Polls\Db\VoteMapper;
-use OCA\Polls\Db\Share;
-use OCA\Polls\Db\ShareMapper;
-use OCA\Polls\Service\AnonymizeService;
-use OCA\Polls\Service\LogService;
-use OCA\Polls\Model\Acl;
class VoteController extends Controller {
- private $userId;
+ private $voteService;
private $logger;
- private $mapper;
- private $groupManager;
- private $pollMapper;
- private $shareMapper;
- private $anonymizer;
- private $logService;
- private $acl;
/**
* VoteController constructor.
* @param string $appName
- * @param $userId
* @param IRequest $request
* @param ILogger $logger
- * @param VoteMapper $mapper
- * @param IGroupManager $groupManager
- * @param PollMapper $pollMapper
- * @param ShareMapper $shareMapper
- * @param AnonymizeService $anonymizer
- * @param LogService $logService
- * @param Acl $acl
+ * @param VoteService $voteService
+
*/
public function __construct(
string $appName,
- $UserId,
- IRequest $request,
ILogger $logger,
- VoteMapper $mapper,
- IGroupManager $groupManager,
- PollMapper $pollMapper,
- ShareMapper $shareMapper,
- AnonymizeService $anonymizer,
- LogService $logService,
- Acl $acl
+ IRequest $request,
+ VoteService $voteService
) {
parent::__construct($appName, $request);
- $this->userId = $UserId;
- $this->mapper = $mapper;
$this->logger = $logger;
- $this->groupManager = $groupManager;
- $this->pollMapper = $pollMapper;
- $this->shareMapper = $shareMapper;
- $this->anonymizer = $anonymizer;
- $this->logService = $logService;
- $this->acl = $acl;
+ $this->voteService = $voteService;
}
/**
@@ -105,26 +69,13 @@ class VoteController extends Controller {
* @return DataResponse
*/
public function get($pollId) {
-
try {
-
- if (!$this->acl->getFoundByToken()) {
- $this->acl->setPollId($pollId);
- }
-
- if (!$this->acl->getAllowSeeResults()) {
- return new DataResponse((array) $this->mapper->findByPollAndUser($pollId, $this->acl->getUserId()), Http::STATUS_OK);
- } elseif (!$this->acl->getAllowSeeUsernames()) {
- $this->anonymizer->set($pollId, $this->acl->getUserId());
- return new DataResponse((array) $this->anonymizer->getVotes(), Http::STATUS_OK);
- } else {
- return new DataResponse((array) $this->mapper->findByPoll($pollId), Http::STATUS_OK);
- }
-
+ return new DataResponse($this->voteService->list($pollId), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
} catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ return new DataResponse(['error' => 'No votes'], Http::STATUS_NOT_FOUND);
}
-
}
/**
@@ -137,28 +88,13 @@ class VoteController extends Controller {
* @param string $setTo
* @return DataResponse
*/
- public function set($pollId, $option, $userId, $setTo) {
-
+ public function set($pollId, $option, $setTo) {
try {
- $vote = $this->mapper->findSingleVote($pollId, $option['pollOptionText'], $userId);
- $vote->setVoteAnswer($setTo);
- $this->mapper->update($vote);
-
+ return new DataResponse($this->voteService->set($pollId, $option['pollOptionText'], $setTo), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
} catch (DoesNotExistException $e) {
- // Vote does not exist, insert as new Vote
- $vote = new Vote();
-
- $vote->setPollId($pollId);
- $vote->setUserId($userId);
- $vote->setVoteOptionText($option['pollOptionText']);
- $vote->setVoteOptionId($option['id']);
- $vote->setVoteAnswer($setTo);
-
- $this->mapper->insert($vote);
-
- } finally {
- $this->logService->setLog($vote->getPollId(), 'setVote', $vote->getUserId());
- return new DataResponse($vote, Http::STATUS_OK);
+ return new DataResponse(['error' => 'Option not found'], Http::STATUS_NOT_FOUND);
}
}
@@ -172,27 +108,13 @@ class VoteController extends Controller {
* @param integer $pollId
* @return DataResponse
*/
- public function delete($voteId = 0, $userId = '', $pollId = 0) {
- $this->logger->alert('Deleting vote no. ' . $voteId);
-
+ public function delete($userId, $pollId) {
try {
- if ($voteId) {
- $vote = $this->mapper->delete($voteId);
- $this->logger->alert('Deleting vote no. ' . $voteId);
- return new DataResponse(null, Http::STATUS_OK);
- } elseif ($pollId && $userId) {
- $votes = $this->mapper->deleteByPollAndUser($pollId, $userId);
- $this->logger->alert('Deleting votes from ' . $userId . ' in poll ' . $pollId);
- return new DataResponse(null, Http::STATUS_OK);
- } elseif ($pollId) {
- $votes = $this->mapper->deleteByPoll($pollId);
- $this->logger->alert('Deleting all votes in poll ' . $pollId);
- return new DataResponse(null, Http::STATUS_OK);
- } else {
- return DataResponse(null, Http::STATUS_NOT_FOUND);
- }
+ return new DataResponse($this->voteService->delete($pollId, $userId), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
} catch (DoesNotExistException $e) {
- return DataResponse(null, Http::STATUS_NOT_FOUND);
+ return new DataResponse(['error' => ''], Http::STATUS_NOT_FOUND);
}
}
@@ -212,13 +134,13 @@ class VoteController extends Controller {
*/
public function setByToken($option, $setTo, $token) {
try {
- $this->acl->setToken($token);
+ return new DataResponse($this->voteService->set(0, $option['pollOptionText'], $setTo, $token), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
} catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ return new DataResponse(['error' => 'Option not found'], Http::STATUS_NOT_FOUND);
}
- return $this->set($this->acl->getPollId(), $option, $this->acl->getUserId(), $setTo);
-
}
/**
@@ -231,15 +153,14 @@ class VoteController extends Controller {
* @return DataResponse
*/
public function getByToken($token) {
-
try {
- $this->acl->setToken($token);
+ return new DataResponse($this->voteService->list(null, $token), Http::STATUS_OK);
+ } catch (NotAuthorizedException $e) {
+ return new DataResponse(['error' => $e->getMessage()], $e->getStatus());
} catch (DoesNotExistException $e) {
- return new DataResponse($e, Http::STATUS_NOT_FOUND);
+ return new DataResponse(['error' => 'No votes'], Http::STATUS_NOT_FOUND);
}
- return $this->get($this->acl->getPollId());
-
}
}
diff --git a/lib/Db/OptionMapper.php b/lib/Db/OptionMapper.php
index 07f024d9..3044c90c 100644
--- a/lib/Db/OptionMapper.php
+++ b/lib/Db/OptionMapper.php
@@ -76,6 +76,28 @@ class OptionMapper extends QBMapper {
}
/**
+ * @param int $pollId
+ * @throws \OCP\AppFramework\Db\DoesNotExistException if not found
+ * @return array
+ */
+
+ public function findByPollAndText($pollId, $pollOptionText) {
+ $qb = $this->db->getQueryBuilder();
+
+ $qb->select('*')
+ ->from($this->getTableName())
+ ->where(
+ $qb->expr()->eq('poll_id', $qb->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))
+ )
+ ->andWhere(
+ $qb->expr()->eq('poll_option_text', $qb->createNamedParameter($pollOptionText, IQueryBuilder::PARAM_STR))
+ )
+ ->orderBy('order', 'ASC');
+
+ return $this->findEntity($qb);
+ }
+
+ /**
* @param int $optionId
*/
public function remove($optionId) {
diff --git a/lib/Db/Poll.php b/lib/Db/Poll.php
index 55b12fa2..8fa2d056 100644
--- a/lib/Db/Poll.php
+++ b/lib/Db/Poll.php
@@ -135,6 +135,20 @@ class Poll extends Entity implements JsonSerializable {
];
}
+ public function deserializeArray($array) {
+ $this->setTitle(isset($array['title']) ? $array['title'] : $this->getTitle());
+ $this->setDescription(isset($array['description']) ? $array['description'] : $this->getDescription());
+ $this->setAccess(isset($array['access']) ? $array['access'] : $this->getAccess());
+ $this->setExpire(isset($array['expire']) ? $array['expire'] : $this->getExpire());
+ $this->setAnonymous(isset($array['anonymous']) ? $array['anonymous'] : $this->getAnonymous());
+ $this->setAllowMaybe(isset($array['allowMaybe']) ? $array['allowMaybe'] : $this->getAllowMaybe());
+ $this->setVoteLimit(isset($array['voteLimit']) ? $array['voteLimit'] : $this->getVoteLimit());
+ $this->setShowResults(isset($array['showResults']) ? $array['showResults'] : $this->getShowResults());
+ $this->setDeleted(isset($array['deleted']) ? $array['deleted'] : $this->getDeleted());
+ $this->setAdminAccess(isset($array['adminAccess']) ? $array['adminAccess'] : $this->getAdminAccess());
+ return $this;
+ }
+
private function getDisplayName() {
if (\OC::$server->getUserManager()->get($this->owner) instanceof IUser) {
diff --git a/lib/Db/ShareMapper.php b/lib/Db/ShareMapper.php
index 7de17583..3a4408f3 100644
--- a/lib/Db/ShareMapper.php
+++ b/lib/Db/ShareMapper.php
@@ -31,7 +31,7 @@ use OCP\AppFramework\Db\QBMapper;
class ShareMapper extends QBMapper {
/**
- * CommentMapper constructor.
+ * ShareMapper constructor.
* @param IDBConnection $db
*/
public function __construct(IDBConnection $db) {
diff --git a/lib/Exceptions/EmptyTitleException.php b/lib/Exceptions/EmptyTitleException.php
new file mode 100644
index 00000000..acfc4c57
--- /dev/null
+++ b/lib/Exceptions/EmptyTitleException.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2020 René Gieling <github@dartcafe.de>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Exceptions;
+
+use OCP\AppFramework\Http;
+
+class EmptyTitleException extends \Exception {
+ /**
+ * EmptyTitleException Constructor
+ * @param string $e exception message
+ */
+ public function __construct($message = 'Poll title must not be empty') {
+ parent::__construct($message);
+ }
+ public function getStatus() {
+ return Http::STATUS_CONFLICT;
+ }
+
+}
diff --git a/lib/Exceptions/InvalidAccessException.php b/lib/Exceptions/InvalidAccessException.php
new file mode 100644
index 00000000..c5bfd69a
--- /dev/null
+++ b/lib/Exceptions/InvalidAccessException.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2020 René Gieling <github@dartcafe.de>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Exceptions;
+
+use OCP\AppFramework\Http;
+
+class InvalidAccessException extends \Exception {
+ /**
+ * InvalidAccessException Constructor
+ * @param string $e exception message
+ */
+ public function __construct($message = 'Invalid access value') {
+ parent::__construct($message);
+ }
+ public function getStatus() {
+ return Http::STATUS_CONFLICT;
+ }
+
+}
diff --git a/lib/Exceptions/InvalidPollTypeException.php b/lib/Exceptions/InvalidPollTypeException.php
new file mode 100644
index 00000000..bef690f3
--- /dev/null
+++ b/lib/Exceptions/InvalidPollTypeException.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2020 René Gieling <github@dartcafe.de>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Exceptions;
+
+use OCP\AppFramework\Http;
+
+class InvalidPollTypeException extends \Exception {
+ /**
+ * InvalidPollTypeException Constructor
+ * @param string $e exception message
+ */
+ public function __construct($message = 'Invalid pollType value') {
+ parent::__construct($message);
+ }
+ public function getStatus() {
+ return Http::STATUS_CONFLICT;
+ }
+
+}
diff --git a/lib/Exceptions/InvalidShowResultsException.php b/lib/Exceptions/InvalidShowResultsException.php
new file mode 100644
index 00000000..67b18a49
--- /dev/null
+++ b/lib/Exceptions/InvalidShowResultsException.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2020 René Gieling <github@dartcafe.de>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Exceptions;
+
+use OCP\AppFramework\Http;
+
+class InvalidShowResultsException extends \Exception {
+ /**
+ * InvalidShowResultsException Constructor
+ * @param string $e exception message
+ */
+ public function __construct($message = 'Invalid showResults value') {
+ parent::__construct($message);
+ }
+ public function getStatus() {
+ return Http::STATUS_CONFLICT;
+ }
+
+}
diff --git a/lib/Exceptions/InvalidUsername.php b/lib/Exceptions/InvalidUsername.php
new file mode 100644
index 00000000..b75c8ea0
--- /dev/null
+++ b/lib/Exceptions/InvalidUsername.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2020 René Gieling <github@dartcafe.de>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Exceptions;
+
+use OCP\AppFramework\Http;
+
+class InvalidUsername extends \Exception {
+ /**
+ * InvalidUsername Constructor
+ * @param string $e exception message
+ */
+ public function __construct($e = 'Invalid username') {
+ parent::__construct($e);
+ }
+ public function getStatus() {
+ return Http::STATUS_CONFLICT;
+ }
+
+}
diff --git a/lib/Exceptions/NotAuthorizedException.php b/lib/Exceptions/NotAuthorizedException.php
new file mode 100644
index 00000000..9486790f
--- /dev/null
+++ b/lib/Exceptions/NotAuthorizedException.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @copyright Copyright (c) 2020 René Gieling <github@dartcafe.de>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Exceptions;
+
+use OCP\AppFramework\Http;
+
+class NotAuthorizedException extends \Exception {
+ /**
+ * NotAuthorizedException Constructor
+ * @param string $e exception message
+ */
+ public function __construct($e = 'Unauthorized') {
+ parent::__construct($e);
+ }
+ public function getStatus() {
+ return Http::STATUS_FORBIDDEN;
+ }
+
+}
diff --git a/lib/Model/Acl.php b/lib/Model/Acl.php
index 2c42980a..ebc998f2 100644
--- a/lib/Model/Acl.php
+++ b/lib/Model/Acl.php
@@ -136,6 +136,37 @@ class Acl implements JsonSerializable {
}
}
+
+ /**
+ * @NoAdminRequired
+ * @return boolean
+ */
+ public function setPollIdOrToken($pollId = 0, $token = '') {
+
+ if ($token) {
+ $this->setToken($token);
+ } elseif ($pollId) {
+ $this->setPollId($pollId);
+ }
+
+ return $this;
+ }
+
+ /**
+ * @NoAdminRequired
+ * @return boolean
+ */
+ public function checkAuthorize($pollId = 0, $token = '') {
+
+ if ($token) {
+ $this->setToken($token);
+ } elseif ($pollId) {
+ $this->setPollId($pollId);
+ }
+
+ return ($this->userId && $this->poll->getId());
+ }
+
/**
* @NoAdminRequired
* @return string
@@ -372,12 +403,14 @@ class Acl implements JsonSerializable {
* @return string
*/
public function setToken(string $token): Acl {
+ $this->logger->debug('Share PollId' . $token);
try {
$this->token = $token;
$share = $this->shareMapper->findByToken($token);
$this->foundByToken = true;
$this->setPollId($share->getPollId());
+ $this->logger->debug('Share PollId' . $share->getPollId());
if (($share->getType() === 'group' || $share->getType() === 'user') && !\OC::$server->getUserSession()->isLoggedIn()) {
// User must be logged in for shareType user and group
diff --git a/lib/Service/CommentService.php b/lib/Service/CommentService.php
new file mode 100644
index 00000000..a1cd7131
--- /dev/null
+++ b/lib/Service/CommentService.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Service;
+
+use \Exception;
+use OCP\ILogger;
+
+use OCA\Polls\Exceptions\NotAuthorizedException;
+use OCA\Polls\Db\Comment;
+use OCA\Polls\Db\CommentMapper;
+use OCA\Polls\Model\Acl;
+use OCA\Polls\Service\AnonymizeService;
+
+
+
+class CommentService {
+
+ private $comment;
+ private $commentMapper;
+ private $logger;
+ private $anonymizer;
+ private $acl;
+
+ /**
+ * CommentService constructor.
+ * @param ILogger $logger
+ * @param CommentMapper $commentMapper
+ * @param Comment $comment
+ * @param AnonymizeService $anonymizer
+ * @param Acl $acl
+ */
+
+ public function __construct(
+ ILogger $logger,
+ CommentMapper $commentMapper,
+ Comment $comment,
+ AnonymizeService $anonymizer,
+ Acl $acl
+ ) {
+ $this->commentMapper = $commentMapper;
+ $this->comment = $comment;
+ $this->logger = $logger;
+ $this->anonymizer = $anonymizer;
+ $this->acl = $acl;
+ }
+
+ /**
+ * get
+ * Read all comments of a poll based on the poll id and return list as array
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @param string $token
+ * @return Array
+ */
+ public function list($pollId = 0, $token = '') {
+
+ if (!$this->acl->setPollIdOrToken($pollId, $token)->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+
+ if (!$this->acl->getAllowSeeUsernames()) {
+ $this->anonymizer->set($this->acl->getPollId(), $this->acl->getUserId());
+ return $this->anonymizer->getComments();
+ } else {
+ return $this->commentMapper->findByPoll($this->acl->getPollId());
+ }
+ }
+
+ /**
+ * Write a new comment to the db and returns the new comment as array
+ * @NoAdminRequired
+ * @param string $message
+ * @param int $pollId
+ * @param string $token
+ * @return Comment
+ */
+ public function add($pollId = 0, $message, $token = '') {
+
+ if (!$this->acl->setPollIdOrToken($pollId, $token)->getAllowComment()) {
+ throw new NotAuthorizedException;
+ }
+
+ try {
+ if ($this->acl->getAllowComment()) {
+ $this->comment = new Comment();
+ $this->comment->setPollId($this->acl->getPollId());
+ $this->comment->setUserId($this->acl->getUserId());
+ $this->comment->setComment($message);
+ $this->comment->setDt(date('Y-m-d H:i:s'));
+ $this->comment = $this->commentMapper->insert($this->comment);
+ return $this->comment;
+ } else {
+ throw new NotAuthorizedException;
+ }
+
+ } catch (\Exception $e) {
+ $this->logger->alert('Error writing comment for pollId ' . $pollId . ': '. $e);
+ throw new NotAuthorizedException($e);
+ }
+
+ }
+
+ /**
+ * delete
+ * Delete Comment
+ * @NoAdminRequired
+ * @param int $commentId
+ * @param string $token
+ * @return Comment
+ */
+ public function delete($commentId, $token = '') {
+ $this->comment = $this->commentMapper->find($commentId);
+
+ if ($this->acl->setPollIdOrToken($this->comment->getPollId(), $token)->getUserId() !== $this->acl->getUserId()) {
+ throw new NotAuthorizedException;
+ }
+
+ $this->commentMapper->delete($this->comment);
+ return $this->comment;
+
+ }
+
+}
diff --git a/lib/Service/MailService.php b/lib/Service/MailService.php
index e95f8784..915632f6 100644
--- a/lib/Service/MailService.php
+++ b/lib/Service/MailService.php
@@ -352,7 +352,7 @@ class MailService {
foreach ($log as $logItem) {
if ($logItem->getPollId() === $subscription->getPollId()) {
- if ($poll->getAnonymous()) {
+ if ($poll->getAnonymous() || $poll->getShowResults() !== "always") {
$displayUser = "A user";
} elseif ($this->userManager->get($logItem->getUserId()) instanceof IUser) {
$displayUser = $this->userManager->get($logItem->getUserId())->getDisplayName();
diff --git a/lib/Service/OptionService.php b/lib/Service/OptionService.php
new file mode 100644
index 00000000..0afe4b8c
--- /dev/null
+++ b/lib/Service/OptionService.php
@@ -0,0 +1,216 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Service;
+
+use Exception;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+
+use OCA\Polls\Db\Option;
+use OCA\Polls\Db\OptionMapper;
+use OCA\Polls\Service\LogService;
+use OCA\Polls\Model\Acl;
+
+class OptionService {
+
+ private $optionMapper;
+ private $option;
+ private $logService;
+ private $acl;
+
+ /**
+ * OptionController constructor.
+ * @param OptionMapper $optionMapper
+ * @param Option $option
+ * @param LogService $logService
+ * @param Acl $acl
+ */
+
+ public function __construct(
+ OptionMapper $optionMapper,
+ Option $option,
+ LogService $logService,
+ Acl $acl
+ ) {
+ $this->optionMapper = $optionMapper;
+ $this->option = $option;
+ $this->logService = $logService;
+ $this->acl = $acl;
+ }
+
+ /**
+ * Set properties from option array
+ * @NoAdminRequired
+ * @param Array $option
+ */
+ private function set($option) {
+
+ $this->option->setPollId($option['pollId']);
+ $this->option->setPollOptionText(trim(htmlspecialchars($option['pollOptionText'])));
+ $this->option->setTimestamp($option['timestamp']);
+
+ if ($option['timestamp']) {
+ $this->option->setOrder($option['timestamp']);
+ } else {
+ $this->option->setOrder($option['order']);
+ }
+
+ if ($option['confirmed']) {
+ // do not update confirmation date, if option is already confirmed
+ if (!$this->option->getConfirmed()) {
+ $this->option->setConfirmed(time());
+ }
+ } else {
+ $this->option->setConfirmed(0);
+ }
+ }
+
+ /**
+ * Get all options of given poll
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @param string $token
+ * @return array Array of Option objects
+ */
+ public function list($pollId = 0, $token = '') {
+
+ if (!$this->acl->setPollIdOrToken($pollId, $token)->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+
+ return $this->optionMapper->findByPoll($pollId);
+
+ }
+
+
+ /**
+ * Add a new Option to poll
+ * @NoAdminRequired
+ * @param Array $option
+ * @return Option
+ */
+ public function add($option) {
+
+ if (!$this->acl->setPollId($option['pollId'])->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ $this->option = new Option();
+ $this->set($option);
+ $this->optionMapper->insert($this->option);
+ $this->logService->setLog($option['pollId'], 'addOption');
+
+ return $this->option;
+ }
+
+ /**
+ * Remove a single option
+ * @NoAdminRequired
+ * @param Option $option
+ * @return array Array of Option objects
+ */
+ public function delete($optionId) {
+ $this->option = $this->optionMapper->find($optionId);
+
+ if (!$this->acl->setPollId($this->option->getPollId())->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ $this->optionMapper->delete($this->option);
+
+ return $this->option;
+
+ }
+
+ /**
+ * Update poll option
+ * @NoAdminRequired
+ * @param array $option
+ * @return Option
+ */
+ public function update($option) {
+ if (!$this->acl->setPollId($option['pollId'])->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ try {
+ $this->option = $this->optionMapper->find($option['id']);
+ $this->set($option);
+ $this->optionMapper->update($this->option);
+ $this->logService->setLog($option['pollId'], 'updateOption');
+
+ return $this->option;
+ } catch (Exception $e) {
+ return new DoesNotExistException($e);
+ }
+
+ }
+
+ /**
+ * Set order by order of the given array
+ * @NoAdminRequired
+ * @param array $options
+ * @return array Array of Option objects
+ */
+ public function reorder($pollId, $options) {
+
+ if (!$this->acl->setPollId($pollId)->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ $i = 0;
+ foreach ($options as $option) {
+ $this->option = $this->optionMapper->find($option['id']);
+ if ($pollId === intval($this->option->getPollId())) {
+ $this->option->setOrder(++$i);
+ $this->optionMapper->update($this->option);
+ }
+ }
+
+ return $this->optionMapper->findByPoll($pollId);
+
+ }
+
+ /**
+ * Set order by order of the given array
+ * @NoAdminRequired
+ * @param integer $fromPollId
+ * @param integer $toPollId
+ * @return array Array of Option objects
+ */
+ public function clone($fromPollId, $toPollId) {
+
+ if (!$this->acl->setPollId($fromPollId)->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+
+ foreach ($this->optionMapper->findByPoll($fromPollId) as $option) {
+ $option->setPollId($toPollId);
+ $this->optionMapper->insert($option);
+ }
+
+ return $this->optionMapper->findByPoll($toPollId);
+
+ }
+}
diff --git a/lib/Service/PollService.php b/lib/Service/PollService.php
new file mode 100644
index 00000000..d23c8595
--- /dev/null
+++ b/lib/Service/PollService.php
@@ -0,0 +1,308 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+ namespace OCA\Polls\Service;
+
+ use Exception;
+ use OCP\AppFramework\Db\DoesNotExistException;
+ use OCA\Polls\Exceptions\EmptyTitleException;
+ use OCA\Polls\Exceptions\InvalidAccessException;
+ use OCA\Polls\Exceptions\InvalidShowResultsException;
+ use OCA\Polls\Exceptions\InvalidPollTypeException;
+ use OCA\Polls\Exceptions\NotAuthorizedException;
+
+ use OCP\ILogger;
+
+ use OCA\Polls\Db\PollMapper;
+ use OCA\Polls\Db\Poll;
+ use OCA\Polls\Service\LogService;
+ use OCA\Polls\Model\Acl;
+
+ class PollService {
+
+ private $logger;
+ private $pollMapper;
+ private $poll;
+ private $logService;
+ private $acl;
+
+ /**
+ * PollController constructor.
+ * @param ILogger $logger
+ * @param PollMapper $pollMapper
+ * @param Poll $poll
+ * @param LogService $logService
+ * @param Acl $acl
+ */
+
+ public function __construct(
+ ILogger $logger,
+ PollMapper $pollMapper,
+ Poll $poll,
+ LogService $logService,
+ Acl $acl
+ ) {
+ $this->logger = $logger;
+ $this->pollMapper = $pollMapper;
+ $this->poll = $poll;
+ $this->logService = $logService;
+ $this->acl = $acl;
+ }
+
+
+ /**
+ * list
+ * @NoAdminRequired
+ * @return array
+ */
+
+ public function list() {
+ if (!\OC::$server->getUserSession()->isLoggedIn()) {
+ throw new NotAuthorizedException;
+ }
+
+ $pollList = [];
+
+ $polls = $this->pollMapper->findAll();
+ // TODO: Not the elegant way. Improvement neccessary
+ foreach ($polls as $poll) {
+ $combinedPoll = (object) array_merge(
+ (array) json_decode(json_encode($poll)), (array) json_decode(json_encode($this->acl->setPollId($poll->getId()))));
+ if ($combinedPoll->allowView) {
+ $pollList[] = $combinedPoll;
+ }
+ }
+
+ return $pollList;
+ }
+
+ /**
+ * get
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @return array
+ */
+ public function get($pollId) {
+
+ if (!$this->acl->setPollId($pollId)->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+
+ return $this->pollMapper->find($pollId);
+
+ }
+
+ /**
+ * get
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @return array
+ */
+ public function getByToken($token) {
+
+ if (!$this->acl->setToken($token)->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+
+ return $this->pollMapper->find($this->acl->getPollId());
+
+ }
+
+ /**
+ * delete
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return Poll
+ */
+
+ public function delete($pollId) {
+ $this->poll = $this->pollMapper->find($pollId);
+
+ if (!$this->acl->setPollId($pollId)->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ if ($this->poll->getDeleted()) {
+ $this->poll->setDeleted(0);
+ } else {
+ $this->poll->setDeleted(time());
+ }
+
+ $this->poll = $this->pollMapper->update($this->poll);
+ $this->logService->setLog($this->poll->getId(), 'deletePoll');
+
+ return $this->poll;
+ }
+
+ /**
+ * deletePermanently
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return Poll
+ */
+
+ public function deletePermanently($pollId) {
+ $this->poll = $this->pollMapper->find($pollId);
+
+ if (!$this->acl->setPollId($pollId)->getAllowEdit() || !$this->poll->getDeleted()) {
+ throw new NotAuthorizedException;
+ }
+
+ return $this->pollMapper->delete($this->poll);
+ }
+
+ /**
+ * write
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param string $type
+ * @param string $title
+ * @return Poll
+ */
+
+ public function add($type, $title) {
+ if (!\OC::$server->getUserSession()->isLoggedIn()) {
+ throw new NotAuthorizedException;
+ }
+
+ // Validate valuess
+ if (!in_array($type, $this->getValidPollType())) {
+ throw new InvalidPollTypeException('Invalid poll type');
+ }
+
+ if (!$title) {
+ throw new EmptyTitleException('Title must not be empty');
+ }
+
+ $this->poll = new Poll();
+ $this->poll->setType($type);
+ $this->poll->setCreated(time());
+ $this->poll->setOwner(\OC::$server->getUserSession()->getUser()->getUID());
+ $this->poll->setTitle($title);
+ $this->poll->setDescription('');
+ $this->poll->setAccess('hidden');
+ $this->poll->setExpire(0);
+ $this->poll->setAnonymous(0);
+ $this->poll->setFullAnonymous(0);
+ $this->poll->setAllowMaybe(0);
+ $this->poll->setVoteLimit(0);
+ $this->poll->setSettings('');
+ $this->poll->setOptions('');
+ $this->poll->setShowResults('always');
+ $this->poll->setDeleted(0);
+ $this->poll->setAdminAccess(0);
+ $this->poll = $this->pollMapper->insert($this->poll);
+
+ $this->logService->setLog($this->poll->getId(), 'addPoll');
+
+ return $this->poll;
+ }
+
+ /**
+ * update
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param Array $poll
+ * @return Poll
+ */
+
+ public function update($pollId, $poll) {
+
+ $this->poll = $this->pollMapper->find($pollId);
+
+ if (!$this->acl->setPollId($this->poll->getId())->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ // Validate valuess
+ if (isset($poll['showResults']) && !in_array($poll['showResults'], $this->getValidShowResults())) {
+ throw new InvalidShowResultsException('Invalid value for prop showResults');
+ }
+
+ if (isset($poll['access']) && !in_array($poll['access'], $this->getValidAccess())) {
+ throw new InvalidAccessException('Invalid value for prop access '. $poll['access']);
+ }
+
+ if (isset($poll['title']) && !$poll['title']) {
+ throw new EmptyTitleException('Title must not be empty');
+ }
+ $this->poll->deserializeArray($poll);
+
+ $this->pollMapper->update($this->poll);
+ $this->logService->setLog($this->poll->getId(), 'updatePoll');
+
+ return $this->poll;
+ }
+
+ /**
+ * clone
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param integer $pollId
+ * @return Poll
+ */
+ public function clone($pollId) {
+
+ if (!$this->acl->setPollId($this->poll->getId())->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+
+ $this->poll = $this->pollMapper->find($pollId);
+
+ $this->poll->setCreated(time());
+ $this->poll->setOwner(\OC::$server->getUserSession()->getUser()->getUID());
+ $this->poll->setTitle('Clone of ' . $this->poll->getTitle());
+ $this->poll->setDeleted(0);
+ $this->poll->setId(0);
+
+ $this->poll = $this->pollMapper->insert($this->poll);
+ $this->logService->setLog($this->poll->getId(), 'addPoll');
+
+ $this->optionService->clone($pollId, $this->poll->getId());
+
+ return $this->poll;
+
+ }
+
+ public function getValidEnum() {
+ return [
+ 'pollType' => $this->getValidPollType(),
+ 'access' => $this->getValidAccess(),
+ 'showResults' => $this->getValidShowResults()
+ ];
+ }
+
+ private function getValidPollType() {
+ return ['datePoll', 'textPoll'];
+ }
+
+ private function getValidAccess() {
+ return ['hidden', 'public'];
+ }
+
+ private function getValidShowResults() {
+ return ['always', 'expired', 'never'];
+ }
+}
diff --git a/lib/Service/ShareService.php b/lib/Service/ShareService.php
new file mode 100644
index 00000000..a7cf144b
--- /dev/null
+++ b/lib/Service/ShareService.php
@@ -0,0 +1,226 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Service;
+
+use Exception;
+
+use OCP\Security\ISecureRandom;
+
+use OCA\Polls\Exceptions\NotAuthorizedException;
+use OCA\Polls\Exceptions\InvalidUsername;
+
+use OCA\Polls\Db\Share;
+use OCA\Polls\Db\ShareMapper;
+use OCA\Polls\Service\MailService;
+use OCA\Polls\Model\Acl;
+use OCA\Polls\Controller\SystemController;
+
+class ShareService {
+
+ private $shareMapper;
+ private $share;
+ private $systemController;
+ private $mailService;
+ private $acl;
+
+ /**
+ * ShareController constructor.
+ * @param ShareMapper $shareMapper
+ * @param Share $share
+ * @param SystemController $systemController
+ * @param MailService $mailService
+ * @param Acl $acl
+ */
+ public function __construct(
+ ShareMapper $shareMapper,
+ Share $share,
+ SystemController $systemController,
+ MailService $mailService,
+ Acl $acl
+ ) {
+ $this->shareMapper = $shareMapper;
+ $this->share = $share;
+ $this->systemController = $systemController;
+ $this->mailService = $mailService;
+ $this->acl = $acl;
+ }
+
+ /**
+ * get
+ * Read all shares of a poll based on the poll id and return list as array
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @return array
+ */
+ public function list($pollId) {
+ if (!$this->acl->setPollId($pollId)->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ return $this->shareMapper->findByPoll($pollId);
+
+ }
+
+ /**
+ * getByToken
+ * Get pollId by token
+ * @NoAdminRequired
+ * @param string $token
+ * @return Share
+ */
+ public function get($token) {
+ return $this->shareMapper->findByToken($token);
+ }
+
+ /**
+ * Write a new share to the db and returns the new share as array
+ * @NoAdminRequired
+ * @depricated
+ * @param int $pollId
+ * @param string $share
+ * @return array
+ */
+ // TODO: Replace with $this->add and separate sending invitations
+ public function write($pollId, $type, $userId, $userEmail = '') {
+
+ if (!$this->acl->setPollId($pollId)->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ $this->share = new Share();
+ $this->share->setType($type);
+ $this->share->setPollId($pollId);
+ $this->share->setUserId($userId);
+ $this->share->setUserEmail($userEmail);
+ $this->share->setToken(\OC::$server->getSecureRandom()->generate(
+ 16,
+ ISecureRandom::CHAR_DIGITS .
+ ISecureRandom::CHAR_LOWER .
+ ISecureRandom::CHAR_UPPER
+ ));
+
+ $this->share = $this->shareMapper->insert($this->share);
+ $sendResult = $this->mailService->sendInvitationMail($this->share->getToken());
+
+ return [
+ 'share' => $this->share,
+ 'sendResult' => $sendResult
+ ];
+ }
+
+ /**
+ * Write a new share to the db and returns the new share as array
+ * @NoAdminRequired
+ * @param int $pollId
+ * @param string $share
+ * @return array
+ */
+ public function add($pollId, $type, $userId, $userEmail = '') {
+
+ if (!$this->acl->setPollId($pollId)->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ $this->share = new Share();
+ $this->share->setType($type);
+ $this->share->setPollId($pollId);
+ $this->share->setUserId($userId);
+ $this->share->setUserEmail($userEmail);
+ $this->share->setToken(\OC::$server->getSecureRandom()->generate(
+ 16,
+ ISecureRandom::CHAR_DIGITS .
+ ISecureRandom::CHAR_LOWER .
+ ISecureRandom::CHAR_UPPER
+ ));
+
+ return $this->shareMapper->insert($this->share);
+
+ }
+
+ /**
+ * createPersonalShare
+ * Write a new share to the db and returns the new share as array
+ * @NoAdminRequired
+ * @param string $token
+ * @param string $userName
+ * @return Share
+ */
+ public function createPersonalShare($token, $userName) {
+ $publicShare = $this->shareMapper->findByToken($token);
+
+ // Return of validatePublicUsername is a DataResponse
+ $checkUsername = $this->systemController->validatePublicUsername($publicShare->getPollId(), $userName, $token);
+
+ // if status is not 200, return DataResponse from validatePublicUsername
+ if ($checkUsername->getStatus() !== 200) {
+ throw new InvalidUsername;
+ }
+
+ if ($publicShare->getType() === 'public') {
+
+
+ $this->share = new Share();
+ $this->share->setToken(\OC::$server->getSecureRandom()->generate(
+ 16,
+ ISecureRandom::CHAR_DIGITS .
+ ISecureRandom::CHAR_LOWER .
+ ISecureRandom::CHAR_UPPER
+ ));
+ $this->share->setType('external');
+ $this->share->setPollId($publicShare->getPollId());
+ $this->share->setUserId($userName);
+ $this->share->setUserEmail('');
+ return $this->shareMapper->insert($this->share);
+
+ } elseif ($publicShare->getType() === 'email') {
+
+ $publicShare->setType('external');
+ $publicShare->setUserId($userName);
+ return $this->shareMapper->update($publicShare);
+
+ } else {
+ throw new NotAuthorizedException;
+ }
+ }
+
+ /**
+ * remove
+ * remove share
+ * @NoAdminRequired
+ * @param string $token
+ * @return Share
+ */
+
+ public function remove($token) {
+ $this->share = $this->shareMapper->findByToken($token);
+ if (!$this->acl->setPollId($this->share->getPollId())->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ $this->shareMapper->delete($this->share);
+
+ return $this->share;
+
+ }
+}
diff --git a/lib/Service/SubscriptionService.php b/lib/Service/SubscriptionService.php
new file mode 100644
index 00000000..f378e476
--- /dev/null
+++ b/lib/Service/SubscriptionService.php
@@ -0,0 +1,131 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Service;
+
+use Exception;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+use OCP\AppFramework\Db\MultipleObjectsReturnedException;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCP\ILogger;
+
+use OCA\Polls\Db\Subscription;
+use OCA\Polls\Db\SubscriptionMapper;
+use OCA\Polls\Model\Acl;
+
+class SubscriptionService {
+
+ private $acl;
+ private $subscriptionMapper;
+ private $logger;
+
+ /**
+ * SubscriptionController constructor.
+ * @param SubscriptionMapper $subscriptionMapper
+ * @param ILogger $logger
+ * @param Acl $acl
+ */
+
+ public function __construct(
+ SubscriptionMapper $subscriptionMapper,
+ ILogger $logger,
+ Acl $acl
+ ) {
+ $this->subscriptionMapper = $subscriptionMapper;
+ $this->acl = $acl;
+ $this->logger = $logger;
+ }
+
+ /**
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @return array
+ */
+ public function get($pollId) {
+ if (!$this->acl->setPollId($pollId)->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+ try {
+ return $this->subscriptionMapper->findByUserAndPoll($pollId, $this->acl->getUserId());
+ } catch (MultipleObjectsReturnedException $e) {
+ // subscription should be unique. If duplicates are found resubscribe
+ // duplicates are removed in $this->set()
+ return $this->set($pollId, true);
+ }
+
+ }
+
+ /**
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @return array
+ */
+ public function set($pollId, $subscribed) {
+ if (!$this->acl->setPollId($pollId)->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+ try {
+ $subscription = $this->subscriptionMapper->findByUserAndPoll($pollId, $this->acl->getUserId());
+ if (!$subscribed) {
+ $this->subscriptionMapper->delete($subscription);
+ return ['status' => 'Unsubscribed from poll ' . $pollId];
+ } else {
+ // subscription already exists, just return the existing subscription
+ return ['status' => 'Subscribed to poll ' . $pollId];
+ }
+
+ } catch (DoesNotExistException $e){
+
+ if ($subscribed) {
+ $subscription = new Subscription();
+ $subscription->setPollId($pollId);
+ $subscription->setUserId($this->acl->getUserId());
+
+ $this->subscriptionMapper->insert($subscription);
+ return ['status' => 'Subscribed to poll ' . $pollId];
+ } else {
+ // subscription is not found, just approve the unsubscription
+ return ['status' => 'Unsubscribed from poll ' . $pollId];
+ }
+
+ } catch (MultipleObjectsReturnedException $e) {
+ // Duplicates should not exist but if found, fix it
+ // unsubscribe from all and resubscribe, if requested
+ $this->logger->debug('Multiple subscription (dulpicates) found');
+ $this->subscriptionMapper->unsubscribe($pollId, $this->acl->getUserId());
+ $this->logger->debug('Unsubscribed all for user ' . $this->acl->getUserId() . 'in poll' . $pollId);
+ if ($subscribed) {
+ $subscription = new Subscription();
+ $subscription->setPollId($pollId);
+ $subscription->setUserId($this->acl->getUserId());
+ $this->subscriptionMapper->insert($subscription);
+ $this->logger->debug('Added new subscription');
+ return $subscription;
+ } else {
+ return ['status' => 'Unsubscribed from poll ' . $pollId];
+ }
+
+ }
+
+ }
+}
diff --git a/lib/Service/VoteService.php b/lib/Service/VoteService.php
new file mode 100644
index 00000000..4df01c70
--- /dev/null
+++ b/lib/Service/VoteService.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
+ *
+ * @author René Gieling <github@dartcafe.de>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OCA\Polls\Service;
+
+use Exception;
+use OCP\AppFramework\Db\DoesNotExistException;
+use OCA\Polls\Exceptions\NotAuthorizedException;
+
+use OCA\Polls\Db\Vote;
+use OCA\Polls\Db\VoteMapper;
+use OCA\Polls\Db\OptionMapper;
+use OCA\Polls\Service\AnonymizeService;
+use OCA\Polls\Service\LogService;
+use OCA\Polls\Model\Acl;
+
+class VoteService {
+
+ private $voteMapper;
+ private $vote;
+ private $optionMapper;
+ private $anonymizer;
+ private $logService;
+ private $acl;
+
+ /**
+ * VoteController constructor.
+ * @param VoteMapper $voteMapper
+ * @param Vote $vote
+ * @param OptionMapper $optionMapper
+ * @param AnonymizeService $anonymizer
+ * @param LogService $logService
+ * @param Acl $acl
+ */
+ public function __construct(
+ VoteMapper $voteMapper,
+ Vote $vote,
+ OptionMapper $optionMapper,
+ AnonymizeService $anonymizer,
+ LogService $logService,
+ Acl $acl
+ ) {
+ $this->voteMapper = $voteMapper;
+ $this->vote = $vote;
+ $this->optionMapper = $optionMapper;
+ $this->anonymizer = $anonymizer;
+ $this->logService = $logService;
+ $this->acl = $acl;
+ }
+
+ /**
+ * Get all votes of given poll
+ * Read all votes of a poll based on the poll id and return list as array
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @param string $token
+ * @return Vote
+ */
+ public function list($pollId = 0, $token = '') {
+ if (!$this->acl->setPollIdOrToken($pollId, $token)->getAllowView()) {
+ throw new NotAuthorizedException;
+ }
+
+ if (!$this->acl->getAllowSeeResults()) {
+ return $this->voteMapper->findByPollAndUser($this->acl->getpollId(), $this->acl->getUserId());
+ } elseif (!$this->acl->getAllowSeeUsernames()) {
+ $this->anonymizer->set($this->acl->getpollId(), $this->acl->getUserId());
+ return $this->anonymizer->getVotes();
+ } else {
+ return $this->voteMapper->findByPoll($this->acl->getpollId());
+ }
+ }
+
+ /**
+ * set
+ * @NoAdminRequired
+ * @param integer $pollId
+ * @param Array $option
+ * @param string $setTo
+ * @param string $token
+ * @return Vote
+ */
+ public function set($pollId = 0, $pollOptionText, $setTo, $token = '') {
+
+ if (!$this->acl->setPollIdOrToken($pollId, $token)->getAllowVote()) {
+ throw new NotAuthorizedException;
+ }
+
+ $option = $this->optionMapper->findByPollAndText($this->acl->getpollId(), $pollOptionText);
+
+ try {
+ $this->vote = $this->voteMapper->findSingleVote($this->acl->getpollId(), $option->getPollOptionText(), $this->acl->getUserId());
+ $this->vote->setVoteAnswer($setTo);
+ $this->voteMapper->update($this->vote);
+
+ } catch (DoesNotExistException $e) {
+ // Vote does not exist, insert as new Vote
+ $this->vote = new Vote();
+
+ $this->vote->setPollId($this->acl->getpollId());
+ $this->vote->setUserId($this->acl->getUserId());
+ $this->vote->setVoteOptionText($option->getPollOptionText());
+ $this->vote->setVoteOptionId($option->getId());
+ $this->vote->setVoteAnswer($setTo);
+ $this->voteMapper->insert($this->vote);
+
+ } finally {
+ $this->logService->setLog($this->vote->getPollId(), 'setVote', $this->vote->getUserId());
+ return $this->vote;
+ }
+ }
+
+ /**
+ * delete
+ * @NoAdminRequired
+ * @NoCSRFRequired
+ * @param integer $voteId
+ * @param string $userId
+ * @param integer $pollId
+ * @return Vote
+ */
+ public function delete($pollId, $userId) {
+
+ if (!$this->acl->setPollId($pollId)->getAllowEdit()) {
+ throw new NotAuthorizedException;
+ }
+
+ $votes = $this->voteMapper->deleteByPollAndUser($pollId, $userId);
+ }
+
+}
diff --git a/package-lock.json b/package-lock.json
index 05e51541..22151867 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -29,9 +29,9 @@
}
},
"@babel/compat-data": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.1.tgz",
- "integrity": "sha512-CHvCj7So7iCkGKPRFUfryXIkU2gSBw7VSZFYLsqVhrS47269VK2Hfi9S/YcublPMW8k1u2bQBlbDruoQEm4fgw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.3.tgz",
+ "integrity": "sha512-BDIfJ9uNZuI0LajPfoYV28lX8kyCPMHY6uY4WH1lJdcicmAfxCK5ASzaeV0D/wsUaRH/cLk+amuxtC37sZ8TUg==",
"requires": {
"browserslist": "^4.12.0",
"invariant": "^2.2.4",
@@ -39,18 +39,18 @@
}
},
"@babel/core": {
- "version": "7.10.2",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.2.tgz",
- "integrity": "sha512-KQmV9yguEjQsXqyOUGKjS4+3K8/DlOCE2pZcq4augdQmtTy5iv5EHtmMSJ7V4c1BIPjuwtZYqYLCq9Ga+hGBRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.3.tgz",
+ "integrity": "sha512-5YqWxYE3pyhIi84L84YcwjeEgS+fa7ZjK6IBVGTjDVfm64njkR2lfDhVR5OudLk8x2GK59YoSyVv+L/03k1q9w==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.2",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
"@babel/helper-module-transforms": "^7.10.1",
"@babel/helpers": "^7.10.1",
- "@babel/parser": "^7.10.2",
- "@babel/template": "^7.10.1",
- "@babel/traverse": "^7.10.1",
- "@babel/types": "^7.10.2",
+ "@babel/parser": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/traverse": "^7.10.3",
+ "@babel/types": "^7.10.3",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.1",
@@ -62,40 +62,40 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.2",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz",
- "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.2",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-split-export-declaration": {
@@ -107,57 +107,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.2",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz",
- "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.2",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz",
- "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -197,16 +197,16 @@
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -214,25 +214,25 @@
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.1.tgz",
- "integrity": "sha512-cQpVq48EkYxUU0xozpGCLla3wlkdRRqLWu1ksFMXA9CM5KQmyyRpSEsYXbao7JUkOw/tAaYKCaYyZq6HOFYtyw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.3.tgz",
+ "integrity": "sha512-lo4XXRnBlU6eRM92FkiZxpo1xFLmv3VsPFk61zJKMm7XYJfwqXHsYJTY6agoc4a3L8QPw1HqWehO18coZgbT6A==",
"requires": {
- "@babel/helper-explode-assignable-expression": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-explode-assignable-expression": "^7.10.3",
+ "@babel/types": "^7.10.3"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -240,9 +240,9 @@
}
},
"@babel/helper-compilation-targets": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.1.tgz",
- "integrity": "sha512-YuF8IrgSmX/+MV2plPkjEnzlC2wf+gaok8ehMNN0jodF3/sejZauExqpEVGbJua62oaWoNYIXwz4RmAsVcGyHw==",
+ "version": "7.10.2",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.2.tgz",
+ "integrity": "sha512-hYgOhF4To2UTB4LTaZepN/4Pl9LD4gfbJx8A34mqoluT8TLbof1mhUlYuNWTEebONa8+UlCC4X0TEXu7AOUyGA==",
"requires": {
"@babel/compat-data": "^7.10.1",
"browserslist": "^4.12.0",
@@ -275,77 +275,77 @@
}
},
"@babel/helper-define-map": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.1.tgz",
- "integrity": "sha512-+5odWpX+OnvkD0Zmq7panrMuAGQBu6aPUgvMzuMGo4R+jUOvealEj2hiqI6WhxgKrTpFoFj0+VdsuA8KDxHBDg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.3.tgz",
+ "integrity": "sha512-bxRzDi4Sin/k0drWCczppOhov1sBSdBvXJObM1NLHQzjhXhwRtn7aRWGvLJWCYbuu2qUk3EKs6Ci9C9ps8XokQ==",
"requires": {
- "@babel/helper-function-name": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/helper-function-name": "^7.10.3",
+ "@babel/types": "^7.10.3",
"lodash": "^4.17.13"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -353,49 +353,49 @@
}
},
"@babel/helper-explode-assignable-expression": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.1.tgz",
- "integrity": "sha512-vcUJ3cDjLjvkKzt6rHrl767FeE7pMEYfPanq5L16GRtrXIoznc0HykNW2aEYkcnP76P0isoqJ34dDMFZwzEpJg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.3.tgz",
+ "integrity": "sha512-0nKcR64XrOC3lsl+uhD15cwxPvaB6QKUDlD84OT9C3myRbhJqTMYir69/RWItUvHpharv0eJ/wk7fl34ONSwZw==",
"requires": {
- "@babel/traverse": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/traverse": "^7.10.3",
+ "@babel/types": "^7.10.3"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.1.tgz",
- "integrity": "sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.1",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-split-export-declaration": {
@@ -407,57 +407,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -496,24 +496,24 @@
}
},
"@babel/helper-hoist-variables": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.1.tgz",
- "integrity": "sha512-vLm5srkU8rI6X3+aQ1rQJyfjvCBLXP8cAGeuw04zeAM2ItKb1e7pmVmLyHb4sDaAYnLL13RHOZPLEtcGZ5xvjg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.3.tgz",
+ "integrity": "sha512-9JyafKoBt5h20Yv1+BXQMdcXXavozI1vt401KBiRc2qzUepbVnd7ogVNymY1xkQN9fekGwfxtotH2Yf5xsGzgg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
},
"dependencies": {
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -732,52 +732,52 @@
}
},
"@babel/helper-remap-async-to-generator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.1.tgz",
- "integrity": "sha512-RfX1P8HqsfgmJ6CwaXGKMAqbYdlleqglvVtht0HGPMSsy2V6MqLlOJVF/0Qyb/m2ZCi2z3q3+s6Pv7R/dQuZ6A==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.3.tgz",
+ "integrity": "sha512-sLB7666ARbJUGDO60ZormmhQOyqMX/shKBXZ7fy937s+3ID8gSrneMvKSSb+8xIM5V7Vn6uNVtOY1vIm26XLtA==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.10.1",
"@babel/helper-wrap-function": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/traverse": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/template": "^7.10.3",
+ "@babel/traverse": "^7.10.3",
+ "@babel/types": "^7.10.3"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.1.tgz",
- "integrity": "sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.1",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-split-export-declaration": {
@@ -789,57 +789,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -954,40 +954,40 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.1.tgz",
- "integrity": "sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.1",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-split-export-declaration": {
@@ -999,57 +999,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -1080,40 +1080,40 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.2",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.2.tgz",
- "integrity": "sha512-AxfBNHNu99DTMvlUPlt1h2+Hn7knPpH5ayJ8OqDWSeLld+Fi2AYBTC/IejWDM9Edcii4UzZRCsbUt0WlSDsDsA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.2",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-split-export-declaration": {
@@ -1125,57 +1125,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.2",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.2.tgz",
- "integrity": "sha512-PApSXlNMJyB4JiGVhCOlzKIif+TKFTvu0aQAhnTvfP/z3vVSN6ZypH5bfUNwFXXjRQtUEBNFd2PtmCmG2Py3qQ=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.2",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.2.tgz",
- "integrity": "sha512-AD3AwWBSz0AWF0AkCN9VPiWrvldXq+/e3cHa4J89vo4ymjz1XwrBFFVZmkJTsQIPNk+ZVomPSXUJqq8yyjZsng==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -1211,19 +1211,19 @@
"integrity": "sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA=="
},
"@babel/plugin-proposal-async-generator-functions": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.1.tgz",
- "integrity": "sha512-vzZE12ZTdB336POZjmpblWfNNRpMSua45EYnRigE2XsZxcXcIyly2ixnTJasJE4Zq3U7t2d8rRF7XRUuzHxbOw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.3.tgz",
+ "integrity": "sha512-WUUWM7YTOudF4jZBAJIW9D7aViYC/Fn0Pln4RIHlQALyno3sXSjqmTA4Zy1TKC2D49RCR8Y/Pn4OIUtEypK3CA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.1",
- "@babel/helper-remap-async-to-generator": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.3",
+ "@babel/helper-remap-async-to-generator": "^7.10.3",
"@babel/plugin-syntax-async-generators": "^7.8.0"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1237,75 +1237,75 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.1.tgz",
- "integrity": "sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.1",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.1.tgz",
- "integrity": "sha512-bwhdehBJZt84HuPUcP1HaTLuc/EywVS8rc3FgsEPDcivg+DCW+SHuLHVkYOmcBA1ZfI+Z/oZjQc/+bPmIO7uAA==",
- "requires": {
- "@babel/helper-function-name": "^7.10.1",
- "@babel/helper-member-expression-to-functions": "^7.10.1",
- "@babel/helper-optimise-call-expression": "^7.10.1",
- "@babel/helper-plugin-utils": "^7.10.1",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.3.tgz",
+ "integrity": "sha512-iRT9VwqtdFmv7UheJWthGc/h2s7MqoweBF9RUj77NFZsg9VfISvBTum3k6coAhJ8RWv2tj3yUjA03HxPd0vfpQ==",
+ "requires": {
+ "@babel/helper-function-name": "^7.10.3",
+ "@babel/helper-member-expression-to-functions": "^7.10.3",
+ "@babel/helper-optimise-call-expression": "^7.10.3",
+ "@babel/helper-plugin-utils": "^7.10.3",
"@babel/helper-replace-supers": "^7.10.1",
"@babel/helper-split-export-declaration": "^7.10.1"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz",
- "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz",
+ "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz",
- "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz",
+ "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
},
"@babel/helper-replace-supers": {
"version": "7.10.1",
@@ -1327,57 +1327,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -1407,9 +1407,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1423,9 +1423,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1439,9 +1439,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1455,26 +1455,26 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.1.tgz",
- "integrity": "sha512-Z+Qri55KiQkHh7Fc4BW6o+QBuTagbOp9txE+4U1i79u9oWlf2npkiDx+Rf3iK3lbcHBuNy9UOkwuR5wOMH3LIQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.3.tgz",
+ "integrity": "sha512-ZZh5leCIlH9lni5bU/wB/UcjtcVLgR8gc+FAgW2OOY+m9h1II3ItTO1/cewNUcsIDZSYcSaz/rYVls+Fb0ExVQ==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.3",
"@babel/plugin-syntax-object-rest-spread": "^7.8.0",
"@babel/plugin-transform-parameters": "^7.10.1"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1488,25 +1488,25 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
"@babel/plugin-proposal-optional-chaining": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.1.tgz",
- "integrity": "sha512-dqQj475q8+/avvok72CF3AOSV/SGEcH29zT5hhohqqvvZ2+boQoOr7iGldBG5YXTO2qgCgc2B3WvVLUdbeMlGA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.3.tgz",
+ "integrity": "sha512-yyG3n9dJ1vZ6v5sfmIlMMZ8azQoqx/5/nZTSWX1td6L1H1bsjzA8TInDChpafCZiJkeOFzp/PtrfigAQXxI1Ng==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.3",
"@babel/plugin-syntax-optional-chaining": "^7.8.0"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1520,75 +1520,75 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.1.tgz",
- "integrity": "sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.1",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.1.tgz",
- "integrity": "sha512-bwhdehBJZt84HuPUcP1HaTLuc/EywVS8rc3FgsEPDcivg+DCW+SHuLHVkYOmcBA1ZfI+Z/oZjQc/+bPmIO7uAA==",
- "requires": {
- "@babel/helper-function-name": "^7.10.1",
- "@babel/helper-member-expression-to-functions": "^7.10.1",
- "@babel/helper-optimise-call-expression": "^7.10.1",
- "@babel/helper-plugin-utils": "^7.10.1",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.3.tgz",
+ "integrity": "sha512-iRT9VwqtdFmv7UheJWthGc/h2s7MqoweBF9RUj77NFZsg9VfISvBTum3k6coAhJ8RWv2tj3yUjA03HxPd0vfpQ==",
+ "requires": {
+ "@babel/helper-function-name": "^7.10.3",
+ "@babel/helper-member-expression-to-functions": "^7.10.3",
+ "@babel/helper-optimise-call-expression": "^7.10.3",
+ "@babel/helper-plugin-utils": "^7.10.3",
"@babel/helper-replace-supers": "^7.10.1",
"@babel/helper-split-export-declaration": "^7.10.1"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz",
- "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz",
+ "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz",
- "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz",
+ "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
},
"@babel/helper-replace-supers": {
"version": "7.10.1",
@@ -1610,57 +1610,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -1690,9 +1690,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1713,9 +1713,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1752,9 +1752,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1791,9 +1791,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1814,9 +1814,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1831,9 +1831,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1846,9 +1846,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -1862,84 +1862,84 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
"@babel/plugin-transform-classes": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.1.tgz",
- "integrity": "sha512-P9V0YIh+ln/B3RStPoXpEQ/CoAxQIhRSUn7aXqQ+FZJ2u8+oCtjIXR3+X0vsSD8zv+mb56K7wZW1XiDTDGiDRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.3.tgz",
+ "integrity": "sha512-irEX0ChJLaZVC7FvvRoSIxJlmk0IczFLcwaRXUArBKYHCHbOhe57aG8q3uw/fJsoSXvZhjRX960hyeAGlVBXZw==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.10.1",
- "@babel/helper-define-map": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
- "@babel/helper-optimise-call-expression": "^7.10.1",
- "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-define-map": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
+ "@babel/helper-optimise-call-expression": "^7.10.3",
+ "@babel/helper-plugin-utils": "^7.10.3",
"@babel/helper-replace-supers": "^7.10.1",
"@babel/helper-split-export-declaration": "^7.10.1",
"globals": "^11.1.0"
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.1.tgz",
- "integrity": "sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.1",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz",
- "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz",
+ "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz",
- "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz",
+ "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
},
"@babel/helper-replace-supers": {
"version": "7.10.1",
@@ -1961,57 +1961,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -2032,17 +2032,17 @@
}
},
"@babel/plugin-transform-computed-properties": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.1.tgz",
- "integrity": "sha512-mqSrGjp3IefMsXIenBfGcPXxJxweQe2hEIwMQvjtiDQ9b1IBvDUjkAtV/HMXX47/vXf14qDNedXsIiNd1FmkaQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.3.tgz",
+ "integrity": "sha512-GWzhaBOsdbjVFav96drOz7FzrcEW6AP5nax0gLIpstiFaI3LOb2tAg06TimaWU6YKOfUACK3FVrxPJ4GSc5TgA==",
"requires": {
- "@babel/helper-plugin-utils": "^7.10.1"
+ "@babel/helper-plugin-utils": "^7.10.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2055,9 +2055,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2071,9 +2071,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2086,9 +2086,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2102,9 +2102,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2117,9 +2117,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2133,72 +2133,72 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -2214,9 +2214,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2229,9 +2229,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2246,9 +2246,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2264,27 +2264,27 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.1.tgz",
- "integrity": "sha512-ewNKcj1TQZDL3YnO85qh9zo1YF1CHgmSTlRQgHqe63oTrMI85cthKtZjAiZSsSNjPQ5NCaYo5QkbYqEw1ZBgZA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.3.tgz",
+ "integrity": "sha512-GWXWQMmE1GH4ALc7YXW56BTh/AlzvDWhUNn9ArFF0+Cz5G8esYlVbXfdyHa1xaD1j+GnBoCeoQNlwtZTVdiG/A==",
"requires": {
- "@babel/helper-hoist-variables": "^7.10.1",
+ "@babel/helper-hoist-variables": "^7.10.3",
"@babel/helper-module-transforms": "^7.10.1",
- "@babel/helper-plugin-utils": "^7.10.1",
+ "@babel/helper-plugin-utils": "^7.10.3",
"babel-plugin-dynamic-import-node": "^2.3.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2298,16 +2298,16 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
- "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.3.tgz",
+ "integrity": "sha512-I3EH+RMFyVi8Iy/LekQm948Z4Lz4yKT7rK+vuCAeRm0kTa6Z5W7xuhRxDNJv0FPya/her6AUgrDITb70YHtTvA==",
"requires": {
"@babel/helper-create-regexp-features-plugin": "^7.8.3"
}
@@ -2321,9 +2321,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2337,62 +2337,62 @@
},
"dependencies": {
"@babel/code-frame": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.1.tgz",
- "integrity": "sha512-IGhtTmpjGbYzcEDOw7DcQtbQSXcG9ftmAXtWTu9V936vDye4xjjekktFAtgZsWpzTj/X01jocB46mTywm/4SZw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.3.tgz",
+ "integrity": "sha512-fDx9eNW0qz0WkUeqL6tXEXzVlPh6Y5aCDEZesl0xBGA8ndRukX91Uk44ZqnkECp01NAZUdCAl+aiQNGi0k88Eg==",
"requires": {
- "@babel/highlight": "^7.10.1"
+ "@babel/highlight": "^7.10.3"
}
},
"@babel/generator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.1.tgz",
- "integrity": "sha512-AT0YPLQw9DI21tliuJIdplVfLHya6mcGa8ctkv7n4Qv+hYacJrKmNWIteAK1P9iyLikFIAkwqJ7HAOqIDLFfgA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.3.tgz",
+ "integrity": "sha512-drt8MUHbEqRzNR0xnF8nMehbY11b1SDkRw03PSNH/3Rb2Z35oxkddVSi3rcaak0YJQ86PCuE7Qx1jSFhbLNBMA==",
"requires": {
- "@babel/types": "^7.10.1",
+ "@babel/types": "^7.10.3",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-function-name": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.1.tgz",
- "integrity": "sha512-fcpumwhs3YyZ/ttd5Rz0xn0TpIwVkN7X0V38B9TWNfVF42KEkhkAAuPCQ3oXmtTRtiPJrmZ0TrfS0GKF0eMaRQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.3.tgz",
+ "integrity": "sha512-FvSj2aiOd8zbeqijjgqdMDSyxsGHaMt5Tr0XjQsGKHD3/1FP3wksjnLAWzxw7lvXiej8W1Jt47SKTZ6upQNiRw==",
"requires": {
- "@babel/helper-get-function-arity": "^7.10.1",
- "@babel/template": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/helper-get-function-arity": "^7.10.3",
+ "@babel/template": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.1.tgz",
- "integrity": "sha512-u7XLXeM2n50gb6PWJ9hoO5oO7JFPaZtrh35t8RqKLT1jFKj9IWeD1zrcrYp1q1qiZTdEarfDWfTIP8nGsu0h5g==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.3.tgz",
+ "integrity": "sha512-q7+37c4EPLSjNb2NmWOjNwj0+BOyYlssuQ58kHEWk1Z78K5i8vTUsteq78HMieRPQSl/NtpQyJfdjt3qZ5V2vw==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.1.tgz",
- "integrity": "sha512-a0DjNS1prnBsoKx83dP2falChcs7p3i8VMzdrSbfLhuQra/2ENC4sbri34dz/rWmDADsmF1q5GbfaXydh0Jbjg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.3.tgz",
+ "integrity": "sha512-kT2R3VBH/cnSz+yChKpaKRJQJWxdGoc6SjioRId2wkeV3bK0wLLioFpJROrX0U4xr/NmxSSAWT/9Ih5snwIIzg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
},
"@babel/helper-replace-supers": {
"version": "7.10.1",
@@ -2414,57 +2414,57 @@
}
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/highlight": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.1.tgz",
- "integrity": "sha512-8rMof+gVP8mxYZApLF/JgNDAkdKa+aJt3ZYxF8z6+j/hpeXL7iMsKCPHa2jNMHu/qqBwzQF4OHNoYi8dMA/rYg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.3.tgz",
+ "integrity": "sha512-Ih9B/u7AtgEnySE2L2F0Xm0GaM729XqqLfHkalTsbjXGyqmf/6M0Cu0WpvqueUlW+xk88BHw9Nkpj49naU+vWw==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.1.tgz",
- "integrity": "sha512-AUTksaz3FqugBkbTZ1i+lDLG5qy8hIzCaAxEtttU6C0BtZZU9pkNZtWSVAht4EW9kl46YBiyTGMp9xTTGqViNg=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.3.tgz",
+ "integrity": "sha512-oJtNJCMFdIMwXGmx+KxuaD7i3b8uS7TTFYW/FNG2BT8m+fmGHoiPYoH0Pe3gya07WuFmM5FCDIr1x0irkD/hyA=="
},
"@babel/template": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.1.tgz",
- "integrity": "sha512-OQDg6SqvFSsc9A0ej6SKINWrpJiNonRIniYondK2ViKhB06i3c0s+76XUft71iqBEe9S1OKsHwPAjfHnuvnCig==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.3.tgz",
+ "integrity": "sha512-5BjI4gdtD+9fHZUsaxPHPNpwa+xRkDO7c7JbhYn2afvrkDu5SfAAbi9AIMXw2xEhO/BR35TqiW97IqNvCo/GqA==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1"
+ "@babel/code-frame": "^7.10.3",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3"
}
},
"@babel/traverse": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.1.tgz",
- "integrity": "sha512-C/cTuXeKt85K+p08jN6vMDz8vSV0vZcI0wmQ36o6mjbuo++kPMdpOYw23W2XH04dbRt9/nMEfA4W3eR21CD+TQ==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.3.tgz",
+ "integrity": "sha512-qO6623eBFhuPm0TmmrUFMT1FulCmsSeJuVGhiLodk2raUDFhhTECLd9E9jC4LBIWziqt4wgF6KuXE4d+Jz9yug==",
"requires": {
- "@babel/code-frame": "^7.10.1",
- "@babel/generator": "^7.10.1",
- "@babel/helper-function-name": "^7.10.1",
+ "@babel/code-frame": "^7.10.3",
+ "@babel/generator": "^7.10.3",
+ "@babel/helper-function-name": "^7.10.3",
"@babel/helper-split-export-declaration": "^7.10.1",
- "@babel/parser": "^7.10.1",
- "@babel/types": "^7.10.1",
+ "@babel/parser": "^7.10.3",
+ "@babel/types": "^7.10.3",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -2494,29 +2494,29 @@
},
"dependencies": {
"@babel/helper-get-function-arity": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.1.tgz",
- "integrity": "sha512-F5qdXkYGOQUb0hpRaPoetF9AnsXknKjWMZ+wmsIRsp5ge5sFh4c3h1eH2pRTTuy9KKAA2+TTYomGXAtEL2fQEw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.3.tgz",
+ "integrity": "sha512-iUD/gFsR+M6uiy69JA6fzM5seno8oE85IYZdbVVEuQaZlEzMO2MXblh+KSPJgsZAUx0EEbWXU0yJaW7C9CdAVg==",
"requires": {
- "@babel/types": "^7.10.1"
+ "@babel/types": "^7.10.3"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -2532,16 +2532,16 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.1.tgz",
- "integrity": "sha512-B3+Y2prScgJ2Bh/2l9LJxKbb8C8kRfsG4AdPT+n7ixBHIxJaIG8bi8tgjxUMege1+WqSJ+7gu1YeoMVO3gPWzw==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.3.tgz",
+ "integrity": "sha512-H5kNeW0u8mbk0qa1jVIVTeJJL6/TJ81ltD4oyPx0P499DhMJrTmmIFCmJ3QloGpQG8K9symccB7S7SJpCKLwtw==",
"requires": {
"regenerator-transform": "^0.14.2"
}
@@ -2555,9 +2555,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2570,9 +2570,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2585,9 +2585,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2601,25 +2601,25 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.1.tgz",
- "integrity": "sha512-t7B/3MQf5M1T9hPCRG28DNGZUuxAuDqLYS03rJrIk2prj/UV7Z6FOneijhQhnv/Xa039vidXeVbvjK2SK5f7Gg==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.3.tgz",
+ "integrity": "sha512-yaBn9OpxQra/bk0/CaA4wr41O0/Whkg6nqjqApcinxM7pro51ojhX6fv1pimAnVjVfDy14K0ULoRL70CA9jWWA==",
"requires": {
"@babel/helper-annotate-as-pure": "^7.10.1",
- "@babel/helper-plugin-utils": "^7.10.1"
+ "@babel/helper-plugin-utils": "^7.10.3"
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2632,9 +2632,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2657,9 +2657,9 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
@@ -2673,30 +2673,30 @@
},
"dependencies": {
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
}
}
},
"@babel/preset-env": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.1.tgz",
- "integrity": "sha512-bGWNfjfXRLnqbN2T4lB3pMfoic8dkRrmHpVZamSFHzGy5xklyHTobZ28TVUD2grhE5WDnu67tBj8oslIhkiOMQ==",
- "requires": {
- "@babel/compat-data": "^7.10.1",
- "@babel/helper-compilation-targets": "^7.10.1",
- "@babel/helper-module-imports": "^7.10.1",
- "@babel/helper-plugin-utils": "^7.10.1",
- "@babel/plugin-proposal-async-generator-functions": "^7.10.1",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.3.tgz",
+ "integrity": "sha512-jHaSUgiewTmly88bJtMHbOd1bJf2ocYxb5BWKSDQIP5tmgFuS/n0gl+nhSrYDhT33m0vPxp+rP8oYYgPgMNQlg==",
+ "requires": {
+ "@babel/compat-data": "^7.10.3",
+ "@babel/helper-compilation-targets": "^7.10.2",
+ "@babel/helper-module-imports": "^7.10.3",
+ "@babel/helper-plugin-utils": "^7.10.3",
+ "@babel/plugin-proposal-async-generator-functions": "^7.10.3",
"@babel/plugin-proposal-class-properties": "^7.10.1",
"@babel/plugin-proposal-dynamic-import": "^7.10.1",
"@babel/plugin-proposal-json-strings": "^7.10.1",
"@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1",
"@babel/plugin-proposal-numeric-separator": "^7.10.1",
- "@babel/plugin-proposal-object-rest-spread": "^7.10.1",
+ "@babel/plugin-proposal-object-rest-spread": "^7.10.3",
"@babel/plugin-proposal-optional-catch-binding": "^7.10.1",
- "@babel/plugin-proposal-optional-chaining": "^7.10.1",
+ "@babel/plugin-proposal-optional-chaining": "^7.10.3",
"@babel/plugin-proposal-private-methods": "^7.10.1",
"@babel/plugin-proposal-unicode-property-regex": "^7.10.1",
"@babel/plugin-syntax-async-generators": "^7.8.0",
@@ -2713,8 +2713,8 @@
"@babel/plugin-transform-async-to-generator": "^7.10.1",
"@babel/plugin-transform-block-scoped-functions": "^7.10.1",
"@babel/plugin-transform-block-scoping": "^7.10.1",
- "@babel/plugin-transform-classes": "^7.10.1",
- "@babel/plugin-transform-computed-properties": "^7.10.1",
+ "@babel/plugin-transform-classes": "^7.10.3",
+ "@babel/plugin-transform-computed-properties": "^7.10.3",
"@babel/plugin-transform-destructuring": "^7.10.1",
"@babel/plugin-transform-dotall-regex": "^7.10.1",
"@babel/plugin-transform-duplicate-keys": "^7.10.1",
@@ -2725,24 +2725,24 @@
"@babel/plugin-transform-member-expression-literals": "^7.10.1",
"@babel/plugin-transform-modules-amd": "^7.10.1",
"@babel/plugin-transform-modules-commonjs": "^7.10.1",
- "@babel/plugin-transform-modules-systemjs": "^7.10.1",
+ "@babel/plugin-transform-modules-systemjs": "^7.10.3",
"@babel/plugin-transform-modules-umd": "^7.10.1",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.3",
"@babel/plugin-transform-new-target": "^7.10.1",
"@babel/plugin-transform-object-super": "^7.10.1",
"@babel/plugin-transform-parameters": "^7.10.1",
"@babel/plugin-transform-property-literals": "^7.10.1",
- "@babel/plugin-transform-regenerator": "^7.10.1",
+ "@babel/plugin-transform-regenerator": "^7.10.3",
"@babel/plugin-transform-reserved-words": "^7.10.1",
"@babel/plugin-transform-shorthand-properties": "^7.10.1",
"@babel/plugin-transform-spread": "^7.10.1",
"@babel/plugin-transform-sticky-regex": "^7.10.1",
- "@babel/plugin-transform-template-literals": "^7.10.1",
+ "@babel/plugin-transform-template-literals": "^7.10.3",
"@babel/plugin-transform-typeof-symbol": "^7.10.1",
"@babel/plugin-transform-unicode-escapes": "^7.10.1",
"@babel/plugin-transform-unicode-regex": "^7.10.1",
"@babel/preset-modules": "^0.1.3",
- "@babel/types": "^7.10.1",
+ "@babel/types": "^7.10.3",
"browserslist": "^4.12.0",
"core-js-compat": "^3.6.2",
"invariant": "^2.2.2",
@@ -2750,22 +2750,30 @@
"semver": "^5.5.0"
},
"dependencies": {
+ "@babel/helper-module-imports": {
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.3.tgz",
+ "integrity": "sha512-Jtqw5M9pahLSUWA+76nhK9OG8nwYXzhQzVIGFoNaHnXF/r4l7kz4Fl0UAW7B6mqC5myoJiBP5/YQlXQTMfHI9w==",
+ "requires": {
+ "@babel/types": "^7.10.3"
+ }
+ },
"@babel/helper-plugin-utils": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.1.tgz",
- "integrity": "sha512-fvoGeXt0bJc7VMWZGCAEBEMo/HAjW2mP8apF5eXK0wSqwLAVHAISCWRoLMBMUs2kqeaG77jltVqu4Hn8Egl3nA=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.3.tgz",
+ "integrity": "sha512-j/+j8NAWUTxOtx4LKHybpSClxHoq6I91DQ/mKgAXn5oNUPIUiGppjPIX3TDtJWPrdfP9Kfl7e4fgVMiQR9VE/g=="
},
"@babel/helper-validator-identifier": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.1.tgz",
- "integrity": "sha512-5vW/JXLALhczRCWP0PnFDMCJAchlBvM7f4uk/jXritBnIa6E1KmqmtrS3yn1LAnxFBypQ3eneLuXjsnfQsgILw=="
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.3.tgz",
+ "integrity": "sha512-bU8JvtlYpJSBPuj1VUmKpFGaDZuLxASky3LhaKj3bmpSTY6VWooSM8msk+Z0CZoErFye2tlABF6yDkT3FOPAXw=="
},
"@babel/types": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.1.tgz",
- "integrity": "sha512-L2yqUOpf3tzlW9GVuipgLEcZxnO+96SzR6fjXMuxxNkIgFJ5+07mHCZ+HkHqaeZu8+3LKnNJJ1bKbjBETQAsrA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.3.tgz",
+ "integrity": "sha512-nZxaJhBXBQ8HVoIcGsf9qWep3Oh3jCENK54V4mRF7qaJabVsAYdbTtmSD8WmAp1R6ytPiu5apMwSXyxB1WlaBA==",
"requires": {
- "@babel/helper-validator-identifier": "^7.10.1",
+ "@babel/helper-validator-identifier": "^7.10.3",
"lodash": "^4.17.13",
"to-fast-properties": "^2.0.0"
}
@@ -2794,9 +2802,9 @@
}
},
"@babel/runtime": {
- "version": "7.10.1",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.1.tgz",
- "integrity": "sha512-nQbbCbQc9u/rpg1XCxoMYQTbSMVZjCDxErQ1ClCn9Pvcmv1lGads19ep0a2VsEiIJeHqjZley6EQGEC3Yo1xMA==",
+ "version": "7.10.3",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.3.tgz",
+ "integrity": "sha512-RzGO0RLSdokm9Ipe/YD+7ww8X2Ro79qiXZF3HU9ljrM+qnJmH1Vqth+hbiQZy761LnMJTMitHDuKVYTk3k4dLw==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
@@ -3612,20 +3620,26 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
"autoprefixer": {
- "version": "9.8.0",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.0.tgz",
- "integrity": "sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A==",
+ "version": "9.8.1",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.1.tgz",
+ "integrity": "sha512-zDw9+mkCdWZHloBIGrOgMq1tTUed4qy6ZgNAe2Ze2xERZA7CyTgW5Bw3XZbwSeJe8lfDHZIkw8Hwd/6hI3p0NQ==",
"dev": true,
"requires": {
"browserslist": "^4.12.0",
- "caniuse-lite": "^1.0.30001061",
- "chalk": "^2.4.2",
+ "caniuse-lite": "^1.0.30001084",
+ "kleur": "^4.0.1",
"normalize-range": "^0.1.2",
"num2fraction": "^1.2.2",
- "postcss": "^7.0.30",
+ "postcss": "^7.0.32",
"postcss-value-parser": "^4.1.0"
},
"dependencies": {
+ "caniuse-lite": {
+ "version": "1.0.30001084",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001084.tgz",
+ "integrity": "sha512-ftdc5oGmhEbLUuMZ/Qp3mOpzfZLCxPYKcvGv6v2dJJ+8EdqcvZRbAGOiLmkM/PV1QGta/uwBs8/nCl6sokDW6w==",
+ "dev": true
+ },
"postcss": {
"version": "7.0.32",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
@@ -5073,9 +5087,9 @@
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
},
"eslint": {
- "version": "7.3.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.0.tgz",
- "integrity": "sha512-dJMVXwfU5PT1cj2Nv2VPPrKahKTGdX+5Dh0Q3YuKt+Y2UhdL2YbzsVaBMyG9HC0tBismlv/r1+eZqs6SMIV38Q==",
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.3.1.tgz",
+ "integrity": "sha512-cQC/xj9bhWUcyi/RuMbRtC3I0eW8MH0jhRELSvpKYkWep3C6YZ2OkvcvJVUeO6gcunABmzptbXBuDoXsjHmfTA==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.0.0",
@@ -5620,66 +5634,6 @@
"safe-buffer": "^5.1.1"
}
},
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "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"
- },
- "dependencies": {
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "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"
- }
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
- "dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
"execall": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/execall/-/execall-2.0.0.tgz",
@@ -5827,9 +5781,9 @@
"dev": true
},
"fast-glob": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz",
- "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz",
+ "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==",
"dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
@@ -6724,15 +6678,6 @@
"integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
"dev": true
},
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
@@ -7215,9 +7160,9 @@
"dev": true
},
"interpret": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
- "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
"dev": true
},
"invariant": {
@@ -7423,12 +7368,6 @@
"integrity": "sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==",
"dev": true
},
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
- "dev": true
- },
"is-string": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
@@ -7629,6 +7568,12 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw=="
},
+ "kleur": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.0.1.tgz",
+ "integrity": "sha512-Qs6SqCLm63rd0kNVh+wO4XsWLU6kgfwwaPYsLiClWf0Tewkzsa6MvB21bespb8cz+ANS+2t3So1ge3gintzhlw==",
+ "dev": true
+ },
"known-css-properties": {
"version": "0.19.0",
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.19.0.tgz",
@@ -7840,15 +7785,6 @@
"semver": "^5.6.0"
}
},
- "map-age-cleaner": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
- "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
- "dev": true,
- "requires": {
- "p-defer": "^1.0.0"
- }
- },
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
@@ -7924,17 +7860,6 @@
"unist-util-visit": "^2.0.0"
}
},
- "mem": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
- "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^2.0.0",
- "p-is-promise": "^2.0.0"
- }
- },
"memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
@@ -8118,12 +8043,6 @@
"mime-db": "1.44.0"
}
},
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
"min-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -8289,9 +8208,9 @@
}
},
"moment": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/moment/-/moment-2.26.0.tgz",
- "integrity": "sha512-oIixUO+OamkUkwjhAVE18rAMfRJNsNe/Stid/gwHSOfHrOtw9EhAY2AHvdKZ/k/MggcYELFCJz/Sn2pL8b8JMw=="
+ "version": "2.27.0",
+ "resolved": "https://registry.npmjs.org/moment/-/moment-2.27.0.tgz",
+ "integrity": "sha512-al0MUK7cpIcglMv3YF13qSgdAIqxHTO7brRtaz3DlSULbqfazqkc5kEjNrLDOM7fsjshoFIihnU8snrP7zUvhQ=="
},
"move-concurrently": {
"version": "1.0.1",
@@ -8566,23 +8485,6 @@
"integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=",
"dev": true
},
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- },
- "dependencies": {
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
- "dev": true
- }
- }
- },
"npmlog": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
@@ -8753,24 +8655,6 @@
"os-tmpdir": "^1.0.0"
}
},
- "p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
- "dev": true
- },
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
- "dev": true
- },
- "p-is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
- "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
- "dev": true
- },
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
@@ -9425,9 +9309,9 @@
}
},
"regenerate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
- "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
+ "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A=="
},
"regenerate-unicode-properties": {
"version": "8.2.0",
@@ -10364,12 +10248,6 @@
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
- "dev": true
- },
"strip-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
@@ -10392,16 +10270,16 @@
"dev": true
},
"stylelint": {
- "version": "13.6.0",
- "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.6.0.tgz",
- "integrity": "sha512-55gG2pNjVr183JJM/tlr3KAua6vTVX7Ho/lgKKuCIWszTZ1gmrXjX4Wok53SI8wRYFPbwKAcJGULQ77OJxTcNw==",
+ "version": "13.6.1",
+ "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-13.6.1.tgz",
+ "integrity": "sha512-XyvKyNE7eyrqkuZ85Citd/Uv3ljGiuYHC6UiztTR6sWS9rza8j3UeQv/eGcQS9NZz/imiC4GKdk1EVL3wst5vw==",
"dev": true,
"requires": {
"@stylelint/postcss-css-in-js": "^0.37.1",
"@stylelint/postcss-markdown": "^0.36.1",
"autoprefixer": "^9.8.0",
"balanced-match": "^1.0.0",
- "chalk": "^4.0.0",
+ "chalk": "^4.1.0",
"cosmiconfig": "^6.0.0",
"debug": "^4.1.1",
"execall": "^2.0.0",
@@ -10899,9 +10777,9 @@
}
},
"stylelint-scss": {
- "version": "3.17.2",
- "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.17.2.tgz",
- "integrity": "sha512-e0dmxqsofy/HZj4urcGSJw4S6yHDJxiQdT20/1ciCsd5lomisa7YM4+Qtt1EG4hsqEG1dbEeF855tec1UyqcSA==",
+ "version": "3.18.0",
+ "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-3.18.0.tgz",
+ "integrity": "sha512-LD7+hv/6/ApNGt7+nR/50ft7cezKP2HM5rI8avIdGaUWre3xlHfV4jKO/DRZhscfuN+Ewy9FMhcTq0CcS0C/SA==",
"dev": true,
"requires": {
"lodash": "^4.17.15",
@@ -11653,9 +11531,9 @@
}
},
"v8-compile-cache": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
- "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
+ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
"dev": true
},
"validate-npm-package-license": {
@@ -11789,9 +11667,9 @@
"dev": true
},
"vue-loader": {
- "version": "15.9.2",
- "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.2.tgz",
- "integrity": "sha512-oXBubaY//CYEISBlHX+c2YPJbmOH68xXPXjFv4MAgPqQvUsnjrBAjCJi8HXZ/r/yfn0tPL5VZj1Zcp8mJPI8VA==",
+ "version": "15.9.3",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.9.3.tgz",
+ "integrity": "sha512-Y67VnGGgVLH5Voostx8JBZgPQTlDQeOVBLOEsjc2cXbCYBKexSKEpOA56x0YZofoDOTszrLnIShyOX1p9uCEHA==",
"dev": true,
"requires": {
"@vue/component-compiler-utils": "^3.1.0",
@@ -12023,35 +11901,24 @@
}
},
"webpack-cli": {
- "version": "3.3.11",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz",
- "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==",
+ "version": "3.3.12",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
+ "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
"dev": true,
"requires": {
- "chalk": "2.4.2",
- "cross-spawn": "6.0.5",
- "enhanced-resolve": "4.1.0",
- "findup-sync": "3.0.0",
- "global-modules": "2.0.0",
- "import-local": "2.0.0",
- "interpret": "1.2.0",
- "loader-utils": "1.2.3",
- "supports-color": "6.1.0",
- "v8-compile-cache": "2.0.3",
- "yargs": "13.2.4"
+ "chalk": "^2.4.2",
+ "cross-spawn": "^6.0.5",
+ "enhanced-resolve": "^4.1.1",
+ "findup-sync": "^3.0.0",
+ "global-modules": "^2.0.0",
+ "import-local": "^2.0.0",
+ "interpret": "^1.4.0",
+ "loader-utils": "^1.4.0",
+ "supports-color": "^6.1.0",
+ "v8-compile-cache": "^2.1.1",
+ "yargs": "^13.3.2"
},
"dependencies": {
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
"cross-spawn": {
"version": "6.0.5",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
@@ -12065,142 +11932,12 @@
"which": "^1.2.9"
}
},
- "emoji-regex": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
- "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
- "dev": true
- },
- "emojis-list": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",
- "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
- "dev": true
- },
- "enhanced-resolve": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
- "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "tapable": "^1.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true
- },
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
- "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
- "dev": true
- },
- "json5": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
- "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
- "dev": true,
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
- "loader-utils": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",
- "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^2.0.0",
- "json5": "^1.0.1"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "os-locale": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
- "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- }
- },
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
- "dev": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
- "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
- "dev": true
- },
"path-key": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
"integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
"dev": true
},
- "require-main-filename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
- "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
- "dev": true
- },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
@@ -12216,17 +11953,6 @@
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"dev": true
},
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
"supports-color": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
@@ -12237,9 +11963,9 @@
}
},
"v8-compile-cache": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
- "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
+ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
"dev": true
},
"which": {
@@ -12250,58 +11976,6 @@
"requires": {
"isexe": "^2.0.0"
}
- },
- "which-module": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- },
- "y18n": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
- "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
- "dev": true
- },
- "yargs": {
- "version": "13.2.4",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
- "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
- "dev": true,
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "os-locale": "^3.1.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.0"
- }
- },
- "yargs-parser": {
- "version": "13.1.2",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
- "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
}
}
},
diff --git a/package.json b/package.json
index 01a45620..f8116ba3 100644
--- a/package.json
+++ b/package.json
@@ -43,7 +43,7 @@
"@nextcloud/vue": "^2.0.0",
"core-js": "^3.6.5",
"lodash": "^4.17.15",
- "moment": "^2.26.0",
+ "moment": "^2.27.0",
"v-click-outside": "^3.0.0",
"vue": "^2.6.11",
"vue-clipboard2": "^0.3.1",
@@ -61,14 +61,14 @@
"node": ">=10.0.0"
},
"devDependencies": {
- "@babel/core": "^7.10.2",
- "@babel/preset-env": "^7.10.1",
+ "@babel/core": "^7.10.3",
+ "@babel/preset-env": "^7.10.3",
"@nextcloud/eslint-plugin": "^1.4.0",
"babel-eslint": "^10.0.3",
"babel-loader": "^8.0.6",
"cross-env": "^7.0.0",
"css-loader": "^3.6.0",
- "eslint": "^7.3.0",
+ "eslint": "^7.3.1",
"eslint-config-standard": "^14.1.0",
"eslint-loader": "^4.0.2",
"eslint-plugin-import": "^2.21.2",
@@ -79,15 +79,15 @@
"file-loader": "^6.0.0",
"node-sass": "^4.14.1",
"sass-loader": "^8.0.2",
- "stylelint": "^13.6.0",
+ "stylelint": "^13.6.1",
"stylelint-config-recommended-scss": "^4.2.0",
- "stylelint-scss": "^3.17.2",
+ "stylelint-scss": "^3.18.0",
"terser-webpack-plugin": "^3.0.6",
- "vue-loader": "^15.9.2",
+ "vue-loader": "^15.9.3",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.11",
"webpack": "^4.43.0",
- "webpack-cli": "^3.3.11",
+ "webpack-cli": "^3.3.12",
"webpack-merge": "^4.1.5"
}
}
diff --git a/src/js/components/Comments/Comments.vue b/src/js/components/Comments/Comments.vue
index 369734db..18ced5a4 100644
--- a/src/js/components/Comments/Comments.vue
+++ b/src/js/components/Comments/Comments.vue
@@ -94,10 +94,12 @@ export default {
methods: {
deleteComment(comment) {
- this.$store.dispatch({ type: 'poll/comments/delete', comment: comment })
+ this.$store
+ .dispatch({ type: 'poll/comments/delete', comment: comment })
.then(() => {
OC.Notification.showTemporary(t('polls', 'Comment deleted'), { type: 'success' })
- }, (error) => {
+ })
+ .catch((error) => {
OC.Notification.showTemporary(t('polls', 'Error while deleting the comment'), { type: 'error' })
console.error(error.response)
})
diff --git a/src/js/components/Create/CreateDlg.vue b/src/js/components/Create/CreateDlg.vue
index 10c387fd..5cd03f30 100644
--- a/src/js/components/Create/CreateDlg.vue
+++ b/src/js/components/Create/CreateDlg.vue
@@ -62,7 +62,7 @@
</template>
<script>
-import { mapState, mapMutations, mapActions } from 'vuex'
+import { mapState } from 'vuex'
import { emit } from '@nextcloud/event-bus'
import ConfigBox from '../Base/ConfigBox'
@@ -92,14 +92,6 @@ export default {
},
methods: {
- ...mapMutations({
- setPollProperty: 'poll/setProperty',
- }),
-
- ...mapActions({
- resetPoll: 'poll/reset',
- }),
-
cancel() {
this.title = ''
this.type = 'datePoll'
@@ -107,19 +99,15 @@ export default {
},
confirm() {
- this.resetPoll()
- this.setPollProperty({ id: 0 })
- this.setPollProperty({ title: this.title })
- this.setPollProperty({ type: this.type })
- this.$store.dispatch('poll/write')
- .then(() => {
+ this.$store.dispatch('poll/add', { title: this.title, type: this.type })
+ .then((response) => {
emit('update-polls')
this.cancel()
- OC.Notification.showTemporary(t('polls', 'Poll "%n" added', 1, this.poll.title), { type: 'success' })
- this.$router.push({ name: 'vote', params: { id: this.poll.id } })
+ OC.Notification.showTemporary(t('polls', 'Poll "%n" added', 1, response.data.id), { type: 'success' })
+ this.$router.push({ name: 'vote', params: { id: response.data.id } })
})
.catch(() => {
- OC.Notification.showTemporary(t('polls', 'Error while creating Poll "%n"', 1, this.poll.title), { type: 'error' })
+ OC.Notification.showTemporary(t('polls', 'Error while creating Poll "%n"', 1, this.title), { type: 'error' })
})
},
diff --git a/src/js/components/Navigation/Navigation.vue b/src/js/components/Navigation/Navigation.vue
index a7a88fd2..3934a52a 100644
--- a/src/js/components/Navigation/Navigation.vue
+++ b/src/js/components/Navigation/Navigation.vue
@@ -140,26 +140,32 @@ export default {
clonePoll(pollId) {
this.$store
- .dispatch('polls/clone', { pollId: pollId })
+ .dispatch('poll/clone', { pollId: pollId })
.then((response) => {
emit('update-polls')
this.$router.push({ name: 'vote', params: { id: response.pollId } })
})
+ .error(() => {
+ OC.Notification.showTemporary(t('polls', 'Error cloning poll.'), { type: 'error' })
+ })
},
switchDeleted(pollId) {
this.$store
- .dispatch('polls/switchDeleted', { pollId: pollId })
- .then((response) => {
+ .dispatch('poll/switchDeleted', { pollId: pollId })
+ .then(() => {
emit('update-polls')
})
+ .catch(() => {
+ OC.Notification.showTemporary(t('polls', 'Error deleting poll.'), { type: 'error' })
+ })
},
deletePermanently(pollId) {
this.$store
- .dispatch('polls/delete', { pollId: pollId })
- .then((response) => {
+ .dispatch('poll/delete', { pollId: pollId })
+ .then(() => {
// if we permanently delete current selected poll,
// reload deleted polls route
if (this.$route.params.id && this.$route.params.id === pollId) {
@@ -167,6 +173,9 @@ export default {
}
emit('update-polls')
})
+ .catch(() => {
+ OC.Notification.showTemporary(t('polls', 'Error deleting poll.'), { type: 'error' })
+ })
},
},
diff --git a/src/js/components/PollList/PollItem.vue b/src/js/components/PollList/PollItem.vue
index b5627e1b..88fe996c 100644
--- a/src/js/components/PollList/PollItem.vue
+++ b/src/js/components/PollList/PollItem.vue
@@ -183,8 +183,9 @@ export default {
methods: {
loadPoll() {
- this.$store.dispatch({ type: 'poll/load', pollId: this.poll.id })
- .then((response) => {
+ this.$store
+ .dispatch({ type: 'poll/get', pollId: this.poll.id })
+ .then(() => {
emit('toggle-sidebar', { open: true })
})
.catch((error) => {
@@ -203,26 +204,38 @@ export default {
},
switchDeleted() {
- this.$store.dispatch('polls/switchDeleted', { pollId: this.poll.id })
- .then((response) => {
+ this.$store
+ .dispatch('poll/switchDeleted', { pollId: this.poll.id })
+ .then(() => {
emit('update-polls')
})
+ .catch(() => {
+ OC.Notification.showTemporary(t('polls', 'Error deleting poll.'), { type: 'error' })
+ })
this.hideMenu()
},
deletePermanently() {
- this.$store.dispatch('polls/delete', { pollId: this.poll.id })
- .then((response) => {
+ this.$store
+ .dispatch('poll/delete', { pollId: this.poll.id })
+ .then(() => {
emit('update-polls')
})
+ .catch(() => {
+ OC.Notification.showTemporary(t('polls', 'Error deleting poll.'), { type: 'error' })
+ })
this.hideMenu()
},
clonePoll() {
- this.$store.dispatch('polls/clone', { pollId: this.poll.id })
- .then((response) => {
+ this.$store
+ .dispatch('poll/clone', { pollId: this.poll.id })
+ .then(() => {
emit('update-polls')
})
+ .catch(() => {
+ OC.Notification.showTemporary(t('polls', 'Error cloning poll.'), { type: 'error' })
+ })
this.hideMenu()
},
},
diff --git a/src/js/components/SideBar/SideBarTabConfiguration.vue b/src/js/components/SideBar/SideBarTabConfiguration.vue
index 324988a1..8ca279dc 100644
--- a/src/js/components/SideBar/SideBarTabConfiguration.vue
+++ b/src/js/components/SideBar/SideBarTabConfiguration.vue
@@ -275,7 +275,7 @@ export default {
writeValue(e) {
this.$store.commit('poll/setProperty', e)
this.writingPoll = true
- this.writePoll()
+ this.updatePoll()
},
switchDeleted() {
@@ -290,31 +290,32 @@ export default {
deletePermanently() {
if (!this.poll.deleted) return
- this.$store.dispatch('polls/delete', { pollId: this.poll.id })
- .then((response) => {
+ this.$store
+ .dispatch('poll/delete', { pollId: this.poll.id })
+ .then(() => {
emit('update-polls')
})
+ .catch(() => {
+ OC.Notification.showTemporary(t('polls', 'Error deleting poll.'), { type: 'error' })
+ })
},
- writePoll() {
+ updatePoll() {
if (this.titleEmpty) {
OC.Notification.showTemporary(t('polls', 'Title must not be empty!'), { type: 'success' })
} else {
- this.$store.dispatch('poll/write')
- .then(() => {
- OC.Notification.showTemporary(t('polls', '%n successfully saved', 1, this.poll.title), { type: 'success' })
+ this.$store.dispatch('poll/update')
+ .then((response) => {
+ OC.Notification.showTemporary(t('polls', '%n successfully saved', 1, response.data.title), { type: 'success' })
emit('update-polls')
})
+ .catch(() => {
+ OC.Notification.showTemporary(t('polls', 'Error writing poll'), { type: 'error' })
+ })
this.writingPoll = false
}
},
- write() {
- if (this.acl.allowEdit) {
- this.writePoll()
- }
-
- },
},
}
</script>
diff --git a/src/js/components/SideBar/SideBarTabShare.vue b/src/js/components/SideBar/SideBarTabShare.vue
index 12ba4314..095a1ecf 100644
--- a/src/js/components/SideBar/SideBarTabShare.vue
+++ b/src/js/components/SideBar/SideBarTabShare.vue
@@ -150,20 +150,21 @@ export default {
.then((response) => {
this.users = response.data.siteusers
this.isLoading = false
- }, (error) => {
+ })
+ .catch((error) => {
console.error(error.response)
})
},
copyLink(payload) {
- this.$copyText(window.location.origin + payload.url).then(
- function() {
+ this
+ .$copyText(window.location.origin + payload.url)
+ .then(() => {
OC.Notification.showTemporary(t('polls', 'Link copied to clipboard'), { type: 'success' })
- },
- function() {
+ })
+ .catch(() => {
OC.Notification.showTemporary(t('polls', 'Error while copying link to clipboard'), { type: 'error' })
- }
- )
+ })
},
shareUrl(share) {
diff --git a/src/js/components/VoteTable/VoteHeaderPublic.vue b/src/js/components/VoteTable/VoteHeaderPublic.vue
index 50afa011..2d2f56f0 100644
--- a/src/js/components/VoteTable/VoteHeaderPublic.vue
+++ b/src/js/components/VoteTable/VoteHeaderPublic.vue
@@ -189,7 +189,7 @@ export default {
this.$store.dispatch('poll/shares/addPersonal', { token: this.$route.params.token, userName: this.userName })
.then((response) => {
if (this.$route.params.token === response.token) {
- this.$store.dispatch({ type: 'poll/load', pollId: this.$route.params.id, token: this.$route.params.token })
+ this.$store.dispatch({ type: 'poll/get', pollId: this.$route.params.id, token: this.$route.params.token })
} else {
this.token = response.token
this.redirecting = true
diff --git a/src/js/store/modules/poll.js b/src/js/store/modules/poll.js
index 17cfd7a9..653a55c4 100644
--- a/src/js/store/modules/poll.js
+++ b/src/js/store/modules/poll.js
@@ -126,12 +126,12 @@ const actions = {
context.commit('reset')
},
- load(context, payload) {
- let endPoint = 'apps/polls/polls/get/'
+ get(context, payload) {
+ let endPoint = 'apps/polls/polls/get'
if (payload.token) {
- endPoint = endPoint.concat('s/', payload.token)
+ endPoint = endPoint.concat('/s/', payload.token)
} else if (payload.pollId) {
- endPoint = endPoint.concat(payload.pollId)
+ endPoint = endPoint.concat('/', payload.pollId)
} else {
context.commit('reset')
context.commit('acl/reset')
@@ -159,18 +159,67 @@ const actions = {
})
},
- write(context) {
- const endPoint = 'apps/polls/polls/write/'
- return axios.post(generateUrl(endPoint), { poll: state })
+ add(context, payload) {
+ const endPoint = 'apps/polls/polls/add'
+ return axios.post(generateUrl(endPoint), { title: payload.title, type: payload.type })
.then((response) => {
- context.commit('set', response.data)
- return response.data.poll
- }, (error) => {
- console.error('Error writing poll:', { error: error.response }, { state: state })
+ return response
+ })
+ .catch((error) => {
+ console.error('Error adding poll:', { error: error.response }, { state: state })
throw error
})
},
+
+ clone(context, payload) {
+ const endPoint = 'apps/polls/polls/clone'
+ return axios.get(generateUrl(endPoint.concat('/', payload.pollId)))
+ .then((response) => {
+ return response.data
+ })
+ .catch((error) => {
+ console.error('Error cloning poll', { error: error.response }, { payload: payload })
+ })
+
+ },
+
+ update(context) {
+ const endPoint = 'apps/polls/polls/update'
+ return axios.put(generateUrl(endPoint.concat('/', state.id)), { poll: state })
+ .then((response) => {
+ context.commit('set', { poll: response.data })
+ return response
+ })
+ .catch((error) => {
+ console.error('Error updating poll:', { error: error.response }, { poll: state })
+ throw error
+ })
+
+ },
+
+ switchDeleted(context, payload) {
+ const endPoint = 'apps/polls/polls/delete'
+ return axios.get(generateUrl(endPoint.concat('/', payload.pollId)))
+ .then((response) => {
+ return response
+ })
+ .catch((error) => {
+ console.error('Error deleting poll', { error: error.response }, { payload: payload })
+ })
+ },
+
+ delete(context, payload) {
+ const endPoint = 'apps/polls/polls/delete'
+ return axios.get(generateUrl(endPoint.concat('/permanent/', payload.pollId)))
+ .then((response) => {
+ return response
+ })
+ .catch((error) => {
+ console.error('Error deleting poll', { error: error.response }, { payload: payload })
+ })
+ },
+
}
export default { namespaced, state, mutations, getters, actions, modules }
diff --git a/src/js/store/modules/polls.js b/src/js/store/modules/polls.js
index f32ca08a..e52a4c00 100644
--- a/src/js/store/modules/polls.js
+++ b/src/js/store/modules/polls.js
@@ -71,52 +71,17 @@ const getters = {
const actions = {
load(context) {
- const endPoint = 'apps/polls/polls/list/'
+ const endPoint = 'apps/polls/polls/list'
return axios.get(generateUrl(endPoint))
.then((response) => {
context.commit('set', { list: response.data })
- }, (error) => {
+ })
+ .catch((error) => {
OC.Notification.showTemporary(t('polls', 'Error loading polls'), { type: 'error' })
console.error('Error loading polls', { error: error.response })
})
},
-
- switchDeleted(context, payload) {
- const endPoint = 'apps/polls/polls/delete/'
- return axios.get(generateUrl(endPoint + payload.pollId))
- .then((response) => {
- return response
- }, (error) => {
- OC.Notification.showTemporary(t('polls', 'Error deleting poll.'), { type: 'error' })
- console.error('Error deleting poll', { error: error.response }, { payload: payload })
- })
- },
-
- delete(context, payload) {
- const endPoint = 'apps/polls/polls/delete/permanent/'
- return axios.get(generateUrl(endPoint + payload.pollId))
- .then((response) => {
- OC.Notification.showTemporary(t('polls', 'Deleted poll permanently.'), { type: 'success' })
- return response
- }, (error) => {
- OC.Notification.showTemporary(t('polls', 'Error deleting poll.'), { type: 'error' })
- console.error('Error deleting poll', { error: error.response }, { payload: payload })
- })
- },
-
- clone(context, payload) {
- const endPoint = 'apps/polls/polls/clone/'
- return axios.get(generateUrl(endPoint + payload.pollId))
- .then((response) => {
- return response.data
- }, (error) => {
- OC.Notification.showTemporary(t('polls', 'Error cloning poll.'), { type: 'error' })
- console.error('Error cloning poll', { error: error.response }, { payload: payload })
- })
-
- },
-
}
export default { namespaced, state, mutations, getters, actions }
diff --git a/src/js/store/modules/subModules/comments.js b/src/js/store/modules/subModules/comments.js
index b49c42d8..739acc40 100644
--- a/src/js/store/modules/subModules/comments.js
+++ b/src/js/store/modules/subModules/comments.js
@@ -63,42 +63,34 @@ const getters = {
const actions = {
add(context, payload) {
- let endPoint = 'apps/polls/comment/write/'
-
- if (context.rootState.poll.acl.foundByToken) {
- endPoint = endPoint.concat('s/')
- }
-
+ const endPoint = 'apps/polls/comment/add'
return axios.post(generateUrl(endPoint), {
+ message: payload.message,
pollId: context.rootState.poll.id,
token: context.rootState.poll.acl.token,
- message: payload.message,
- userId: context.rootState.poll.acl.userId,
})
.then((response) => {
context.commit('add', response.data)
return response.data
- }, (error) => {
+ })
+ .catch((error) => {
console.error('Error writing comment', { error: error.response }, { payload: payload })
throw error
})
},
delete(context, payload) {
- let endPoint = 'apps/polls/comment/delete/'
-
- if (context.rootState.poll.acl.foundByToken) {
- endPoint = endPoint.concat('s/')
- }
-
+ const endPoint = 'apps/polls/comment/delete'
+ context.commit('delete', { comment: payload.comment })
return axios.post(generateUrl(endPoint), {
token: context.rootState.poll.acl.token,
- comment: payload.comment,
+ commentId: payload.comment.id,
})
.then((response) => {
context.commit('delete', { comment: response.data.comment })
return response.data
- }, (error) => {
+ })
+ .catch((error) => {
console.error('Error deleting comment', { error: error.response }, { payload: payload })
throw error
})
diff --git a/src/js/store/modules/subModules/options.js b/src/js/store/modules/subModules/options.js
index e102d98d..d152c3d3 100644
--- a/src/js/store/modules/subModules/options.js
+++ b/src/js/store/modules/subModules/options.js
@@ -105,26 +105,15 @@ const actions = {
return axios.post(generateUrl(endPoint), { pollId: context.rootState.poll.id, options: payload })
.then((response) => {
context.commit('set', { options: response.data })
- }, (error) => {
- console.error('Error reordering option', { error: error.response }, { payload: payload })
- throw error
})
- },
-
- update(context, payload) {
- const endPoint = 'apps/polls/option/update'
-
- return axios.post(generateUrl(endPoint), { option: payload.option })
- .then((response) => {
- context.commit('setItem', { option: response.data })
- }, (error) => {
- console.error('Error updating option', { error: error.response }, { payload: payload })
+ .catch((error) => {
+ console.error('Error reordering option', { error: error.response }, { payload: payload })
throw error
})
},
add(context, payload) {
- const endPoint = 'apps/polls/option/add/'
+ const endPoint = 'apps/polls/option/add'
const option = {}
option.id = 0
@@ -148,19 +137,34 @@ const actions = {
return axios.post(generateUrl(endPoint), { option: option })
.then((response) => {
context.commit('setItem', { option: response.data })
- }, (error) => {
- console.error('Error adding option', { error: error.response }, { payload: payload })
+ })
+ .catch((error) => {
+ console.error('Error adding option', { error: error.response }, { payload: option })
+ throw error
+ })
+ },
+
+ update(context, payload) {
+ const endPoint = 'apps/polls/option/update'
+
+ return axios.post(generateUrl(endPoint), { option: payload.option })
+ .then((response) => {
+ context.commit('setItem', { option: response.data })
+ })
+ .catch((error) => {
+ console.error('Error updating option', { error: error.response }, { payload: payload })
throw error
})
},
delete(context, payload) {
- const endPoint = 'apps/polls/option/remove/'
+ const endPoint = 'apps/polls/option/remove'
return axios.post(generateUrl(endPoint), { option: payload.option })
.then(() => {
context.commit('delete', { option: payload.option })
- }, (error) => {
+ })
+ .catch((error) => {
console.error('Error removing option', { error: error.response }, { payload: payload })
throw error
})
diff --git a/src/js/store/modules/subModules/shares.js b/src/js/store/modules/subModules/shares.js
index 644e836f..e235b7f0 100644
--- a/src/js/store/modules/subModules/shares.js
+++ b/src/js/store/modules/subModules/shares.js
@@ -74,7 +74,7 @@ const getters = {
const actions = {
add(context, payload) {
- const endPoint = 'apps/polls/share/write/'
+ const endPoint = 'apps/polls/share/add'
payload.share.pollId = context.rootState.poll.id
return axios.post(generateUrl(endPoint), { pollId: context.rootState.poll.id, share: payload.share })
.then((response) => {
@@ -107,30 +107,33 @@ const actions = {
OC.Notification.showTemporary(t('polls', 'Error sending invitation mail to %n.', 1, errorList.join(', ')), { type: 'error' })
}
return response.data
- }, (error) => {
+ })
+ .catch((error) => {
console.error('Error writing share', { error: error.response }, { payload: payload })
throw error
})
},
delete(context, payload) {
- const endPoint = 'apps/polls/share/remove/'
+ const endPoint = 'apps/polls/share/delete'
return axios.post(generateUrl(endPoint), { share: payload.share })
.then(() => {
context.commit('delete', { share: payload.share })
- }, (error) => {
+ })
+ .catch((error) => {
console.error('Error removing share', { error: error.response }, { payload: payload })
throw error
})
},
addPersonal(context, payload) {
- const endPoint = 'apps/polls/share/create/s/'
+ const endPoint = 'apps/polls/share/create/s'
return axios.post(generateUrl(endPoint), { token: payload.token, userName: payload.userName })
.then((response) => {
return { token: response.data.token }
- }, (error) => {
+ })
+ .catch((error) => {
console.error('Error writing share', { error: error.response }, { payload: payload })
throw error
})
diff --git a/src/js/store/modules/subModules/votes.js b/src/js/store/modules/subModules/votes.js
index 591a585a..06da10cd 100644
--- a/src/js/store/modules/subModules/votes.js
+++ b/src/js/store/modules/subModules/votes.js
@@ -115,7 +115,7 @@ const getters = {
const actions = {
delete(context, payload) {
- const endPoint = 'apps/polls/votes/delete/'
+ const endPoint = 'apps/polls/votes/delete'
return axios.post(generateUrl(endPoint), {
pollId: context.rootState.poll.id,
voteId: 0,
@@ -124,19 +124,19 @@ const actions = {
.then(() => {
context.commit('deleteVotes', payload)
OC.Notification.showTemporary(t('polls', 'User {userId} removed', payload), { type: 'success' })
- }, (error) => {
+ })
+ .catch((error) => {
console.error('Error deleting votes', { error: error.response }, { payload: payload })
throw error
})
},
set(context, payload) {
- let endPoint = 'apps/polls/vote/set/'
+ let endPoint = 'apps/polls/vote/set'
if (context.rootState.poll.acl.foundByToken) {
- endPoint = endPoint.concat('s/')
+ endPoint = endPoint.concat('/s')
}
-
return axios.post(generateUrl(endPoint), {
pollId: context.rootState.poll.id,
token: context.rootState.poll.acl.token,
@@ -147,7 +147,8 @@ const actions = {
.then((response) => {
context.commit('setItem', { option: payload.option, pollId: context.rootState.poll.id, vote: response.data })
return response.data
- }, (error) => {
+ })
+ .catch((error) => {
console.error('Error setting vote', { error: error.response }, { payload: payload })
throw error
})
diff --git a/src/js/store/modules/subscription.js b/src/js/store/modules/subscription.js
index 3b7da8a0..02861a45 100644
--- a/src/js/store/modules/subscription.js
+++ b/src/js/store/modules/subscription.js
@@ -41,8 +41,11 @@ const mutations = {
}
const actions = {
+
getSubscription(context, payload) {
- axios.get(generateUrl('apps/polls/subscription/get/' + payload.pollId))
+ const endPoint = 'apps/polls/subscription'
+
+ return axios.get(generateUrl(endPoint.concat('/', payload.pollId)))
.then(() => {
context.commit('setSubscription', true)
})
@@ -52,9 +55,11 @@ const actions = {
},
writeSubscriptionPromise(context, payload) {
- return axios.post(generateUrl('apps/polls/subscription/set/'), { pollId: payload.pollId, subscribed: state.subscribed })
+ const endPoint = 'apps/polls/subscription'
+ return axios.post(generateUrl(endPoint), { pollId: payload.pollId, subscribed: state.subscribed })
.then(() => {
- }, (error) => {
+ })
+ .catch((error) => {
console.error(error.response)
})
},
diff --git a/src/js/views/Vote.vue b/src/js/views/Vote.vue
index ed0d57cb..ee87aa3a 100644
--- a/src/js/views/Vote.vue
+++ b/src/js/views/Vote.vue
@@ -201,14 +201,11 @@ export default {
loadPoll() {
this.isLoading = true
- this.$store.dispatch({ type: 'poll/load', pollId: this.$route.params.id, token: this.$route.params.token })
+ this.$store
+ .dispatch({ type: 'poll/get', pollId: this.$route.params.id, token: this.$route.params.token })
.then((response) => {
- if (response.status === 200) {
- this.isLoading = false
- window.document.title = this.windowTitle
- } else {
- this.$router.replace({ name: 'notfound' })
- }
+ this.isLoading = false
+ window.document.title = this.windowTitle
})
.catch((error) => {
console.error(error)