From 0b9aa74ae80273d927c72c993d2c4b44bcbca310 Mon Sep 17 00:00:00 2001
From: Abhishek Pathak <16938826+akpx@users.noreply.github.com>
Date: Sun, 3 Feb 2019 23:33:27 -0500
Subject: [PATCH] Update (#1)
* update background-jobs documentation
* Fix chatInput focussing
* Fix sending plaintext messages
* Remove unnecessary double-read of attached media
* Resolve React warnings
* Fix creating new DM thread
* Revert "Fix creating new DM thread"
This reverts commit d8e9cc83d4c4896fea61f9dd5c145143e5f3ac17.
* Fix flow
* Update background-jobs.md
* Don't include the req path in the datadog key
This is an anti-pattern, as it'll blow up our DataDog storage costs.
Instead, we should be using a logging service like Splunk to dig into
specific slow requests after noticing abnormalities in the
metrics. Will tackle that next most likely, but this should be a good start!
Thanks to the folks in #observability for pointing that out!
* Dont track connection pool size in DataDog, track query response times and sizes
* Properly flow-type statsd
* Add statsd logging in dev
* Log instance hostname
* Upgrade apollo-cache-inmemory
* Better network disabled styling on input
* Fix styling if quote-replying and uploading media at same time
* Dont use alpha version of new apollo inmemory
* Add codesandbox to explore
* Add codesandbox url regex for better embeds
* Add packages for deploys
* Add the rest
* Update react-modal to version 3.8.1
* Update electron-builder to version 20.38.4
* Focus chatinput on quote message click
* Fix media messages arriving after text messages
* Handle websocket connection states
* Track job queue metrics
* Update react-transition-group to version 2.5.2
* Eliminate warning in console due to incorrect html element nesting
* Update debug to version 4.1.1
* Update debug to version 4.1.1
* Update debug to version 4.1.1
* Update debug to version 4.1.1
* Update debug to version 4.1.1
* Update debug to version 4.1.1
* Update debug to version 4.1.1
* Update validator to version 10.10.0
* Update serialize-javascript to version 1.6.1
* Remove use of Google+ APIs
* Downrank watercooler threads in digests
* Nicer reputation string in digest emails
* Add function to check if localStorage is allowed
* Trigger login modal in the joinChannel upsell if no currentUser
* Remove localStorage check
* Make logged out users sign in before seeing chat input
* Remove unused timeInUTC variable
* Fix e2e tests
* Better string, fix test snapshots
* Update rimraf to version 2.6.3
* Update aws-sdk to version 2.383.0
* Update aws-sdk to version 2.383.0
* Update aws-sdk to version 2.383.0
* Update aws-sdk to version 2.383.0
* Update aws-sdk to version 2.383.0
* Add missing username property in onValidationResult object
`onValidationResult` function takes an object with prop error, success
and username.
* Make username optional
* Fix flow
* Remove unused variables from chatInput
* Explicitly target chat input from e2e tests
* Move data-cy="chat-input" to actual input
* Use .clear() instead of .type() in e2e tests
* Remove .only in thread_spec, fix /new/thread tests
* Upgrade to draft-js-import-markdown@latest to fix code blocks
* Make plaintext message editing work
* edit in plaintext on the frontend
* Fix flow
* Fix editing e2e test
* Match input font weight to rendered message font weight
* Remove invalid dataCy dom node property
* Change editor to allow multiline messages
* Remove empty line while editing
* Fix incorrect focussing on chat input while editing message
* Make single line breaks work!
* Upgrade to apollo-server-express@2.4.0-alpha.0
This implements query parsing and validation caching, reference
https://github.com/apollographql/apollo-server/pull/2111, and should
thusly provide a nice speedup for our frontend's queries!
* add delete cover feature to edit community form
* add coverphoto flow type
* Add extra checks at send time for valid user recipient
* Async await
* Remove unnecessary code
The code block for the `SET_SEARCH_VALUE` type and the `SET_SEARCH_VALUE_FOR_SERVER
` type are indentical. And, the `SET_SEARCH_VALUE` type isnt used in any action in the codebase.
* Better keycode management
* Enable flow in keycodes file
* Fix flow
* Focus the edit message input when edit message button is clicked
* Move keycodes.js to src/helpers
* Update source-map-support to version 0.5.10
* Update view error message
* Fenced code blocks while editing
* WIP: Implement GraphQL Rate Limiting
* Make graphql-rate-limit work!
* Show rate limit errors to end users
* Adjust createChannel/createCommunity rate limits
* Make flow happy
* Use the job queue redis instance for rate limit data
* Log rate limit errors to sentry in prod
* Update to new version of gql-rate-limit, use string syntax
* Make flow happy
* Add flow stub for request-ip
* Update react-transition-group to version 2.5.3
* Remove draftjs block type validation in messages
This is confusing now that we have the plaintext input, and doesn't add
anything as invalid blocks are treated as text blocks anyway on the
frontend.
* Disable rate limiting unless in prod
* Gender-neutral rate limit error message, better addMessage rate limit
* Update electron-builder to version 20.38.5
* Support hyperlinks in messages
* Make flow happy
* Update validator to version 10.11.0
* WIP: Add mention suggestions to chat input
* add delete cover feature to createCommunityForm
* Update validate-draft-js-input.js
* Stop submitting message during IME is composing
* Fix oopsie
* Search users on type
* It works!
* Fix flow
* Cleanup unnecessary code changes
* Fix mentionsuggestions props
* Fix dm chatinput onfocus and onblur handlers
* Fix typo
* Upgrade graphql-rate-limit
This fixes a critical bug that is preventing some folks from posting
messages
* Update bull to version 3.5.3
* Update bull to version 3.5.3
* Update bull to version 3.5.3
* Update bull to version 3.5.3
* Update bull to version 3.6.0
* Update bull to version 3.6.0
* Update bull to version 3.6.0
* Update bull to version 3.6.0
* Hotfix Android thread creation
* Fix hyperion memory leak
Closes #4573
* Polish styles and prepopulate suggestions box
* Update moment to version 2.24.0
* Update immutability-helper to version 2.9.1
* Show participants and search results in mention suggestions
1. Enter `@`
2. Participants are shown
3. Enter `@b`
4. Participants filtered and sorted by whether they have a `b` in them are shown
5. In the background, we do an API req
6. If there are users that come back from the API, we append them to the list of suggestions
This is a much nicer experience than hiding the participants if you just want to filter them
* Fix bug with null participant
* Update graphql-tools to version 4.0.4
* Fix login redirects
* Only show 10 suggestions, make sure suggestions have usernames
* Pass participants to chatinput for SSR views
* Darker shadow for contrast
* Return original participants if user removes search query
* If switched thread has no messages, remove participant suggestions
* Ensure author is a suggested participant
* Better styling, fewer suggestion results
* Improves suggestion sort to factor in name
* Fix capitalization for rendering and filtering
* Fix flow
* Ensure that local results will appear even if no remote results exist
* Fix the default sort if search query isn't at the 0 index
* Properly transform author username suggestion
* Refactor to only perform suggestion transformations in one place
* Provide transformation function in DM sorting
* Fix flow
* Workaround react-mentions bug with markup option
Ideally, we would fix mentions by setting `markup="@__display__"` for
the `MentionInput`. Unfortunately due to a bug in react-mentions, this
doesn't work: https://github.com/signavio/react-mentions/pull/299
This works around the issue by inserting `@[username]` into the value,
and then removing the brackets before sending to the server!
Closes #4587
* Add component
* Fix dataCy passthrough to mentionsinput
* Update graphql-cost-analysis to version 1.0.3
* Update draft-js-export-markdown to fix escaped code chars
* Update draft-js-import-markdown to fix link swallowing
* Update draft-js-import-markdown to version 1.3.0
* Update highlight.js to version 9.14.1
* Update graphql-rate-limit to version 1.2.3
* Update aws-sdk to version 2.395.0
* Update aws-sdk to version 2.395.0
* Update aws-sdk to version 2.395.0
* Update slate to version 0.44.10
---
.circleci/config.yml | 113 +-
.editorconfig | 13 -
.eslintignore | 4 -
.eslintrc.js | 23 +-
.eslintrc.json | 33 -
.flowconfig | 22 +-
.github/PULL_REQUEST_TEMPLATE.md | 8 +-
.gitignore | 11 +-
.npmignore | 46 +
.prettierignore | 2 +
.prettierrc | 4 +
README.md | 78 +-
admin/README.md | 40 +-
admin/package.json | 10 +-
admin/src/components/globals/index.js | 4 +-
admin/src/index.js | 2 +-
.../communities/components/search/index.js | 25 +-
.../views/users/components/search/index.js | 32 +-
admin/yarn.lock | 4270 +++++--
analytics/index.js | 35 +
analytics/models/channel.js | 10 +
analytics/models/community.js | 10 +
analytics/models/message.js | 10 +
analytics/models/notification.js | 12 +
analytics/models/reaction.js | 18 +
analytics/models/thread.js | 10 +
analytics/models/usersChannels.js | 26 +
analytics/models/usersCommunities.js | 25 +
analytics/models/usersThreads.js | 17 +
analytics/package.json | 29 +
analytics/queues/constants.js | 3 +
analytics/queues/identify-analytics.js | 29 +
analytics/queues/track-analytics.js | 32 +
analytics/utils/amplitude.js | 15 +
analytics/utils/getContext.js | 254 +
analytics/utils/hash.js | 4 +
analytics/utils/identify.js | 21 +
analytics/utils/index.js | 9 +
analytics/utils/track.js | 39 +
analytics/utils/transformations.js | 244 +
analytics/yarn.lock | 732 ++
api/apollo-server.js | 125 +
api/authentication.js | 55 +-
api/index.js | 117 +-
api/loaders/channel.js | 11 +-
api/loaders/community.js | 14 +-
api/loaders/create-loader.js | 3 +-
api/loaders/directMessageThread.js | 6 +-
api/loaders/index.js | 26 +-
api/loaders/message.js | 14 +
api/loaders/reaction.js | 6 +-
api/loaders/stripe.js | 7 -
api/loaders/thread.js | 5 -
api/loaders/threadReaction.js | 14 +
api/loaders/types.js | 2 +-
api/loaders/user.js | 9 +-
.../20180411183454-lowercase-all-the-slugs.js | 27 +
...180428001543-reset-slack-import-records.js | 14 +
...80504003702-encrypt-existing-slack-data.js | 67 +
...180517180716-enable-private-communities.js | 17 +
...15503-add-ispending-to-userscommunities.js | 17 +
...add-join-settings-to-community-settings.js | 20 +
.../20180621001409-thread-likes-table.js | 22 +
...823115847-add-users-communities-indexes.js | 61 +
...1061156-thread-metadata-denormalization.js | 57 +
...4151-fix-thread-metadata-message-counts.js | 29 +
.../20181002060237-remove-payments.js | 57 +
...hread-reactions-useridandthreadid-index.js | 13 +
...rmalize-channel-community-member-counts.js | 52 +
...fications-useridandnotificationid-index.js | 16 +
...ers-notifications-userIdAndIsSeen-index.js | 13 +
...60027-update-denormalized-member-counts.js | 39 +
.../20181024173616-indexes-for-digests.js | 31 +
...52-remove-attachments-from-thread-model.js | 13 +
...02025454-fix-old-image-urls-in-messages.js | 33 +
...102040518-fix-old-image-urls-in-threads.js | 71 +
...44407-fix-old-image-urls-in-communities.js | 73 +
...81102045821-fix-old-image-urls-in-users.js | 76 +
...523-fix-aws-static-url-community-photos.js | 54 +
...-add-terms-last-accepted-field-to-users.js | 17 +
...21054300-resync-community-member-counts.js | 39 +
...users-communities-useridandmember-index.js | 13 +
.../20181126094455-users-channels-roles.js | 59 +
...27090014-communities-member-count-index.js | 13 +
...05171559-remove-old-users-notifications.js | 61 +
...rsthreads-user-id-and-participant-index.js | 19 +
api/migrations/config.js | 22 +-
api/migrations/seed/default/channels.js | 22 +
api/migrations/seed/default/communities.js | 21 +
api/migrations/seed/default/constants.js | 4 +
.../seed/default/directMessageThreads.js | 6 +
api/migrations/seed/default/index.js | 10 +-
api/migrations/seed/default/messages.js | 13 -
api/migrations/seed/default/notifications.js | 35 +
api/migrations/seed/default/reactions.js | 13 +
api/migrations/seed/default/threads.js | 130 +-
api/migrations/seed/default/usersChannels.js | 39 +-
.../seed/default/usersCommunities.js | 40 +
.../seed/default/usersDirectMessageThreads.js | 20 +-
.../seed/default/usersNotifications.js | 15 +
api/migrations/seed/default/usersSettings.js | 33 +
api/migrations/seed/generate.js | 2 -
api/migrations/seed/index.js | 11 +-
api/models/channel.js | 364 +-
api/models/channelSettings.js | 154 +-
api/models/community.js | 454 +-
api/models/communitySettings.js | 394 +-
api/models/curatedContent.js | 7 +-
api/models/db.js | 52 -
api/models/directMessageThread.js | 38 +-
api/models/expo-push-subscription.js | 34 -
api/models/invoice.js | 86 -
api/models/message.js | 268 +-
api/models/meta.js | 7 +-
api/models/notification.js | 32 +-
api/models/reaction.js | 136 +-
api/models/recurringPayment.js | 126 -
api/models/reputationEvents.js | 9 +-
api/models/search.js | 88 +-
api/models/session.js | 8 +-
api/models/slackImport.js | 47 +-
api/models/stripeCustomers.js | 90 -
api/models/stripeInvoices.js | 20 -
api/models/stripeSources.js | 29 -
api/models/stripeSubscriptions.js | 21 -
.../test/__snapshots__/channel.test.js.snap | 201 +
api/models/test/channel.test.js | 175 +
api/models/thread.js | 439 +-
api/models/threadReaction.js | 162 +
api/models/user.js | 469 -
api/models/usersChannels.js | 456 +-
api/models/usersCommunities.js | 568 +-
api/models/usersDirectMessageThreads.js | 43 +-
api/models/usersNotifications.js | 174 -
api/models/usersSettings.js | 127 +-
api/models/usersThreads.js | 144 +-
api/models/utils.js | 19 +-
api/models/web-push-subscription.js | 8 +-
api/mutations/channel/archiveChannel.js | 100 +-
api/mutations/channel/createChannel.js | 116 +-
api/mutations/channel/deleteChannel.js | 116 +-
.../channel/disableChannelTokenJoin.js | 51 +-
api/mutations/channel/editChannel.js | 83 +-
.../channel/enableChannelTokenJoin.js | 53 +-
api/mutations/channel/index.js | 2 +
api/mutations/channel/joinChannelWithToken.js | 92 +-
.../channel/resetChannelJoinToken.js | 54 +-
api/mutations/channel/restoreChannel.js | 89 +-
.../channel/sendChannelEmailInvites.js | 61 -
.../channel/toggleChannelNotifications.js | 69 +-
.../channel/toggleChannelSubscription.js | 102 +-
api/mutations/channel/togglePendingUser.js | 166 +-
api/mutations/channel/unblockUser.js | 90 +-
.../channel/updateChannelSlackBotLinks.js | 38 +
api/mutations/community/addPaymentSource.js | 79 -
api/mutations/community/cancelSubscription.js | 69 -
api/mutations/community/createCommunity.js | 158 +-
api/mutations/community/deleteCommunity.js | 76 +-
.../community/disableBrandedLogin.js | 40 +-
.../community/disableCommunityAnalytics.js | 43 -
.../community/disableCommunityTokenJoin.js | 41 +
api/mutations/community/editCommunity.js | 65 +-
api/mutations/community/enableBrandedLogin.js | 42 +-
.../community/enableCommunityAnalytics.js | 43 -
.../community/enableCommunityTokenJoin.js | 41 +
api/mutations/community/importSlackMembers.js | 50 +
api/mutations/community/index.js | 20 +-
.../community/makePaymentSourceDefault.js | 67 -
api/mutations/community/pinThread.js | 78 +-
.../community/removePaymentSource.js | 71 -
.../community/resetCommunityJoinToken.js | 41 +
.../community/saveBrandedLoginSettings.js | 56 +-
api/mutations/community/sendEmailInvites.js | 77 +-
api/mutations/community/sendSlackInvites.js | 133 +-
.../community/updateAdministratorEmail.js | 38 +-
.../communityMember/addCommunityMember.js | 81 +-
.../addCommunityMemberWithToken.js | 115 +
.../communityMember/addCommunityMembers.js | 65 +
.../communityMember/addCommunityModerator.js | 120 +-
.../addPendingCommunityMember.js | 145 +
.../approvePendingCommunityMember.js | 141 +
.../communityMember/blockCommunityMember.js | 145 +-
.../blockPendingCommunityMember.js | 144 +
api/mutations/communityMember/index.js | 12 +
.../communityMember/removeCommunityMember.js | 110 +-
.../removeCommunityModerator.js | 148 +-
.../removePendingCommunityMember.js | 58 +
.../communityMember/unblockCommunityMember.js | 128 +-
.../createDirectMessageThread.js | 202 +-
.../directMessageThread/setLastSeen.js | 13 +-
api/mutations/message/addMessage.js | 256 +-
api/mutations/message/deleteMessage.js | 111 +-
api/mutations/message/editMessage.js | 130 +
api/mutations/message/index.js | 2 +
api/mutations/notification/index.js | 2 -
.../notification/markAllNotificationsRead.js | 10 -
.../notification/markAllNotificationsSeen.js | 14 +-
.../markDirectMessageNotificationsSeen.js | 14 +-
.../markSingleNotificationSeen.js | 14 +-
api/mutations/reaction/toggleReaction.js | 22 +-
.../recurringPayment/downgradeCommunity.js | 112 -
.../recurringPayment/downgradeFromPro.js | 76 -
api/mutations/recurringPayment/index.js | 14 -
.../recurringPayment/upgradeCommunity.js | 141 -
.../recurringPayment/upgradeToPro.js | 124 -
api/mutations/recurringPayment/utils.js | 107 -
api/mutations/thread/addThreadReaction.js | 36 +
api/mutations/thread/deleteThread.js | 53 +-
api/mutations/thread/editThread.js | 170 +-
api/mutations/thread/index.js | 4 +
api/mutations/thread/moveThread.js | 90 +-
api/mutations/thread/publishThread.js | 519 +-
api/mutations/thread/removeThreadReaction.js | 40 +
api/mutations/thread/setThreadLock.js | 66 +-
.../thread/toggleThreadNotifications.js | 35 +-
api/mutations/user/banUser.js | 69 +
api/mutations/user/deleteCurrentUser.js | 25 +
api/mutations/user/editUser.js | 106 +-
api/mutations/user/index.js | 6 +
api/mutations/user/reportUser.js | 64 +
api/mutations/user/subscribeExpoPush.js | 21 -
api/mutations/user/subscribeWebPush.js | 30 +-
.../user/toggleNotificationSettings.js | 48 +-
api/mutations/user/unsubscribeWebPush.js | 28 +-
api/mutations/user/updateUserEmail.js | 23 +-
api/package.json | 143 +-
api/queries/channel/blockedUsers.js | 21 +-
api/queries/channel/channelPermissions.js | 46 +-
api/queries/channel/community.js | 22 +-
api/queries/channel/communityPermissions.js | 31 +-
api/queries/channel/index.js | 2 +
api/queries/channel/isArchived.js | 2 +-
api/queries/channel/joinSettings.js | 16 +-
api/queries/channel/memberConnection.js | 14 +-
api/queries/channel/memberCount.js | 14 +-
api/queries/channel/metaData.js | 56 +-
api/queries/channel/moderators.js | 10 +-
api/queries/channel/owners.js | 10 +-
api/queries/channel/pendingUsers.js | 35 +-
api/queries/channel/rootChannel.js | 25 +-
api/queries/channel/slackSettings.js | 18 +
api/queries/channel/threadConnection.js | 17 +-
api/queries/channelSlackSettings/botLinks.js | 11 +
api/queries/channelSlackSettings/index.js | 8 +
api/queries/community/billingSettings.js | 58 -
api/queries/community/brandedLogin.js | 2 +-
api/queries/community/channelConnection.js | 35 +-
api/queries/community/communityPermissions.js | 27 +-
api/queries/community/conversationGrowth.js | 45 +-
api/queries/community/coverPhoto.js | 9 +
api/queries/community/hasChargeableSource.js | 25 -
api/queries/community/hasFeatures.js | 50 -
api/queries/community/index.js | 38 +-
api/queries/community/invoices.js | 13 -
api/queries/community/isPro.js | 13 -
api/queries/community/joinSettings.js | 18 +
api/queries/community/memberConnection.js | 30 +-
api/queries/community/memberGrowth.js | 19 +-
api/queries/community/members.js | 62 +-
api/queries/community/metaData.js | 96 +-
api/queries/community/pinnedThread.js | 20 +-
api/queries/community/profilePhoto.js | 9 +
api/queries/community/recurringPayments.js | 42 -
.../community/rootSearchCommunities.js | 2 +-
.../community/rootSearchCommunityThreads.js | 2 +-
api/queries/community/slackSettings.js | 18 +
api/queries/community/threadConnection.js | 31 +-
api/queries/community/topAndNewThreads.js | 75 +-
api/queries/community/topMembers.js | 25 +-
api/queries/community/watercooler.js | 11 +-
api/queries/communityMember/roles.js | 8 +-
.../communitySlackSettings/hasSentInvites.js | 11 +
api/queries/communitySlackSettings/index.js | 18 +
.../communitySlackSettings/invitesSentAt.js | 11 +
.../communitySlackSettings/isConnected.js | 11 +
.../communitySlackSettings/memberCount.js | 11 +
.../slackChannelList.js | 22 +
.../communitySlackSettings/teamName.js | 14 +
api/queries/directMessageThread/index.js | 2 +
.../directMessageThread/messageConnection.js | 4 +-
.../directMessageThread/participants.js | 22 +-
.../rootDirectMessageThread.js | 4 +-
.../rootDirectMessageThreadByUserId.js | 21 +
api/queries/directMessageThread/snippet.js | 10 +-
api/queries/directMessageThread/utils.js | 19 -
api/queries/message/content.js | 9 +
api/queries/message/index.js | 4 +
api/queries/message/parent.js | 12 +
api/queries/message/rootMessage.js | 4 +-
api/queries/meta/isAdmin.js | 2 +-
api/queries/search/search.js | 2 +-
api/queries/search/searchCommunities.js | 18 +-
api/queries/search/searchCommunityMembers.js | 18 +-
api/queries/search/searchThreads.js | 145 +-
api/queries/search/searchUsers.js | 24 +-
api/queries/thread/attachments.js | 14 +-
api/queries/thread/content.js | 12 +
api/queries/thread/index.js | 11 +-
api/queries/thread/messageConnection.js | 17 +-
api/queries/thread/messageCount.js | 9 -
api/queries/thread/metaImage.js | 24 +
api/queries/thread/reactions.js | 36 +
api/queries/thread/rootSearchThreads.js | 2 +-
api/queries/thread/rootThread.js | 42 +-
api/queries/user/communityConnection.js | 40 +-
api/queries/user/coverPhoto.js | 15 +-
api/queries/user/email.js | 7 +-
api/queries/user/everything.js | 2 +-
api/queries/user/index.js | 15 +-
api/queries/user/invoices.js | 12 -
api/queries/user/isPro.js | 14 -
api/queries/user/profilePhoto.js | 15 +-
api/queries/user/recurringPayments.js | 31 -
api/queries/user/rootCurrentUser.js | 8 +-
api/queries/user/rootSearchUsers.js | 2 +-
api/queries/user/settings.js | 11 +-
api/routes/api/email.js | 69 +-
api/routes/api/export-user-data.js | 25 +
api/routes/api/graphiql.js | 9 -
api/routes/api/graphql.js | 34 -
api/routes/api/index.js | 20 +-
api/routes/api/slackImporter.js | 90 +-
api/routes/api/stripe.js | 76 -
api/routes/auth/create-signin-routes.js | 30 +-
api/routes/auth/github.js | 1 +
api/routes/auth/google.js | 5 +-
api/routes/auth/logout.js | 2 +-
api/routes/create-subscription-server.js | 30 +-
api/routes/middlewares/index.js | 57 +-
api/routes/webhooks/index.js | 41 -
api/schema.js | 78 +-
api/subscriptions/directMessageThread.js | 4 +-
api/subscriptions/message.js | 3 +-
api/subscriptions/notification.js | 5 +-
api/subscriptions/thread.js | 6 +-
api/test/__snapshots__/community.test.js.snap | 20 +-
.../channel/mutations/deleteChannel.test.js | 23 +-
.../__snapshots__/blockedUsers.test.js.snap | 76 +-
.../memberConnection.test.js.snap | 12 +-
.../__snapshots__/pendingUsers.test.js.snap | 75 +-
.../__snapshots__/slackSettings.test.js.snap | 74 +
api/test/channel/queries/blockedUsers.test.js | 131 +-
.../channel/queries/channelSettings.test.js | 16 +-
api/test/channel/queries/pendingUsers.test.js | 133 +-
.../channel/queries/slackSettings.test.js | 128 +
api/test/community.test.js | 4 -
.../__snapshots__/slackSettings.test.js.snap | 77 +
.../community/queries/slackSettings.test.js | 138 +
api/test/utils.js | 11 +-
api/test/utils/__mocks__/debug.js | 15 +
...reate-graphql-error-formatter.test.js.snap | 37 +
.../create-graphql-error-formatter.test.js | 106 +
api/types/Channel.js | 263 +-
api/types/ChannelSlackSettings.js | 26 +
api/types/Community.js | 607 +-
api/types/CommunityMember.js | 48 +-
api/types/CommunitySlackSettings.js | 18 +
api/types/DirectMessageThread.js | 110 +-
api/types/Invoice.js | 15 +-
api/types/Message.js | 109 +-
api/types/Notification.js | 137 +-
api/types/Search.js | 18 +-
api/types/Thread.js | 237 +-
api/types/User.js | 343 +-
api/types/custom-scalars/LowercaseString.js | 23 +
api/types/general.js | 110 +-
api/types/scalars.js | 8 +-
api/utils/create-graphql-error-formatter.js | 51 +-
api/utils/file-storage.js | 27 +
api/utils/file-system.js | 40 +
.../generate-thread-meta-image-from-text.js | 78 +
api/utils/get-page-meta.js | 4 +-
api/utils/get-random-default-photo.js | 4 +-
api/utils/is-spectrum-url.js | 9 +-
api/utils/permissions.js | 237 +
api/utils/rate-limit-directive.js | 15 +
api/utils/s3.js | 59 +-
api/utils/session-store.js | 26 +-
api/utils/validate-draft-js-input.js | 13 +
api/yarn.lock | 6896 +++++++----
athena/index.js | 32 +-
athena/models/channel.js | 2 +-
athena/models/channelSettings.js | 13 +
athena/models/community.js | 2 +-
athena/models/communitySettings.js | 73 +
athena/models/db.js | 30 -
athena/models/directMessageThread.js | 2 +-
athena/models/message.js | 2 +-
athena/models/notification.js | 13 +-
athena/models/recurringPayment.js | 16 -
athena/models/slackImports.js | 39 -
athena/models/thread.js | 2 +-
athena/models/user.js | 37 -
athena/models/usersChannels.js | 27 +-
athena/models/usersCommunities.js | 29 +-
athena/models/usersDirectMessageThreads.js | 2 +-
athena/models/usersNotifications.js | 74 -
athena/models/usersSettings.js | 2 +-
athena/models/usersThreads.js | 15 +-
athena/models/web-push-subscription.js | 2 +-
athena/package.json | 31 +-
athena/queues/channel-notification.js | 7 +-
athena/queues/community-invite.js | 27 +-
athena/queues/community-invoice-paid.js | 81 -
athena/queues/community-notification.js | 7 +-
athena/queues/constants.js | 19 +-
.../create-thread-notification-email.js | 30 +-
athena/queues/direct-message-notification.js | 28 +-
athena/queues/mention-notification.js | 79 +-
athena/queues/moderationEvents/message.js | 59 +-
athena/queues/moderationEvents/perspective.js | 9 +-
athena/queues/moderationEvents/spectrum.js | 34 -
athena/queues/moderationEvents/thread.js | 58 +-
.../new-message-in-thread/buffer-email.js | 416 +-
.../new-message-in-thread/format-data.js | 102 +-
.../new-message-in-thread/group-replies.js | 105 +-
athena/queues/new-message-in-thread/index.js | 66 +-
.../private-channel-request-approved.js | 52 +-
athena/queues/private-channel-request-sent.js | 69 +-
.../private-community-request-approved.js | 68 +
.../queues/private-community-request-sent.js | 92 +
athena/queues/pro-invoice-paid.js | 66 -
athena/queues/reaction-notification.js | 13 +-
athena/queues/send-push-notifications.js | 14 +-
athena/queues/send-slack-invitations.js | 119 +
athena/queues/slack-import.js | 55 -
athena/queues/thread-notification.js | 196 +-
athena/queues/thread-reaction-notification.js | 116 +
athena/queues/track-user-thread-last-seen.js | 30 +-
athena/utils/addQueue.js | 14 -
athena/utils/get-email-status.js | 5 +-
athena/utils/payloads.js | 4 +-
athena/utils/push-notifications/index.js | 29 +-
.../send-expo-push-notifications.js | 81 -
athena/utils/slack/index.js | 30 +
.../utils/truncateString.js | 3 +-
athena/utils/types.js | 2 +
athena/yarn.lock | 963 +-
.../adminActiveCommunityReport.html | 69 +
.../adminCommunityCreated.html | 59 +
.../adminSlackImportProcessed.html | 59 +
built-email-templates/adminToxicContent.html | 64 +
built-email-templates/adminUserReported.html | 53 +
.../adminUserSpammingThreadsNotification.html | 67 +
built-email-templates/communityInvite.html | 142 +
built-email-templates/mentionInMessage.html | 195 +
built-email-templates/mentionInThread.html | 190 +
.../newCommunityWelcome.html | 168 +
built-email-templates/newDirectMessage.html | 149 +
.../newRepliesInThreads.html | 232 +
.../newThreadNotification.html | 197 +
built-email-templates/newUserWelcome.html | 129 +
.../privateChannelRequestApproved.html | 142 +
.../privateChannelRequestSent.html | 154 +
.../privateCommunityRequestApproved.html | 141 +
.../privateCommunityRequestSent.html | 148 +
...alidate-community-administrator-email.html | 121 +
built-email-templates/validate-email.html | 123 +
built-email-templates/weeklyDigest.html | 225 +
cacert | 21 -
chronos/index.js | 72 +-
chronos/jobs/index.js | 87 +-
chronos/jobs/utils.js | 38 +-
chronos/models/channel.js | 9 -
chronos/models/community.js | 80 +-
chronos/models/coreMetrics.js | 118 +-
chronos/models/db.js | 30 -
chronos/models/message.js | 36 +-
chronos/models/reputationEvent.js | 8 +-
chronos/models/thread.js | 57 +-
chronos/models/usersChannels.js | 12 +-
chronos/models/usersCommunities.js | 26 +-
chronos/models/usersNotifications.js | 22 +
chronos/models/usersSettings.js | 46 +-
chronos/models/utils.js | 11 +
chronos/package.json | 30 +-
chronos/queues/constants.js | 17 +-
.../coreMetrics/activeCommunityAdminReport.js | 78 +-
chronos/queues/coreMetrics/index.js | 124 +-
chronos/queues/digests/dailyDigest.js | 15 +
chronos/queues/digests/getReputationString.js | 50 +
.../queues/digests/getUpsellCommunities.js | 23 +
chronos/queues/digests/index.js | 82 -
chronos/queues/digests/processDigest.js | 62 +
chronos/queues/digests/processDigestEmail.js | 85 -
.../queues/digests/processIndividualDigest.js | 90 +
chronos/queues/digests/processReputation.js | 33 -
chronos/queues/digests/processThreads.js | 224 +-
chronos/queues/digests/processUsers.js | 60 -
.../message-count-string.test.js.snap | 9 +
.../reputation-string.test.js.snap | 13 +
.../digests/test/message-count-string.test.js | 20 +
.../digests/test/reputation-string.test.js | 64 +
chronos/queues/digests/types.js | 60 -
chronos/queues/digests/weeklyDigest.js | 15 +
.../queues/remove-seen-usersNotifications.js | 70 +
chronos/types.js | 31 +
chronos/yarn.lock | 893 +-
config-overrides.js | 88 +-
cypress.json | 9 +-
cypress/integration/apps_page_spec.js | 11 +
.../channel/settings/create_spec.js | 19 +-
.../channel/settings/delete_spec.js | 27 +-
.../integration/channel/settings/edit_spec.js | 66 +-
.../channel/settings/members_spec.js | 48 +
.../settings/private_invite_link_spec.js | 56 +-
.../integration/channel/view/composer_spec.js | 23 +-
.../integration/channel/view/members_spec.js | 11 +-
.../channel/view/membership_spec.js | 74 +-
.../channel/view/notifications_spec.js | 28 +-
.../integration/channel/view/profile_spec.js | 91 +-
.../integration/channel/view/search_spec.js | 2 +-
.../integration/channel/view/threads_spec.js | 13 +-
.../community/settings/create_spec.js | 126 +
.../settings/private_invite_link_spec.js | 59 +
.../community/view/profile_spec.js | 284 +
.../community_settings_billing_spec.js | 277 -
.../community_settings_overview_spec.js | 49 +-
cypress/integration/community_spec.js | 40 -
cypress/integration/faq_page_spec.js | 12 +
cypress/integration/home_spec.js | 2 +-
cypress/integration/inbox_spec.js | 9 +-
cypress/integration/login_spec.js | 31 +-
cypress/integration/messages_spec.js | 160 +
cypress/integration/navbar_spec.js | 126 +
cypress/integration/pricing_spec.js | 38 -
cypress/integration/privacy_page_spec.js | 4 +-
cypress/integration/terms_page_spec.js | 4 +-
cypress/integration/thread/action_bar_spec.js | 171 +-
cypress/integration/thread/chat_input_spec.js | 105 +-
cypress/integration/thread/create_spec.js | 0
cypress/integration/thread/delete_spec.js | 0
cypress/integration/thread/edit_spec.js | 0
cypress/integration/thread/view_spec.js | 133 +-
cypress/integration/thread_spec.js | 464 +-
cypress/integration/user/delete_user_spec.js | 49 +
cypress/integration/user/edit_user_spec.js | 55 +
cypress/integration/user/me_redirect_spec.js | 39 +
cypress/integration/user_spec.js | 8 +-
cypress/plugins/index.js | 18 +-
cypress/support/commands.js | 10 +-
cypress/support/index.js | 15 +-
dangerfile.js | 57 -
desktop/README.md | 19 +
desktop/deployment.md | 25 +
desktop/package.json | 99 +
desktop/resources/background.tiff | Bin 0 -> 53084 bytes
desktop/resources/icons/mac/icon.icns | Bin 0 -> 1085991 bytes
desktop/resources/icons/png/icon-512x512.png | Bin 0 -> 143184 bytes
desktop/resources/icons/win/icon.ico | Bin 0 -> 64846 bytes
desktop/resources/release-notes.md | 12 +
desktop/src/autoUpdate.js | 7 +
desktop/src/config.js | 29 +
desktop/src/main.js | 108 +
desktop/src/menu.js | 203 +
desktop/src/preload.js | 33 +
desktop/yarn.lock | 3255 +++++
docs/admin/intro.md | 5 +
docs/api/graphql/fragments.md | 152 +
docs/api/graphql/intro.md | 31 +
docs/api/graphql/pagination.md | 104 +
docs/api/graphql/testing.md | 40 +
docs/api/graphql/tips-and-tricks.md | 20 +
docs/api/intro.md | 16 +
docs/backend/{graphql => api}/README.md | 0
docs/backend/{graphql => api}/fragments.md | 0
docs/backend/{graphql => api}/pagination.md | 0
docs/backend/{graphql => api}/testing.md | 0
.../{graphql => api}/tips-and-tricks.md | 2 +-
docs/backend/athena/README.md | 3 -
docs/backend/background-jobs.md | 7 -
docs/backend/chronos/README.md | 3 -
docs/backend/hermes/README.md | 3 -
docs/backend/hyperion/README.md | 3 -
docs/backend/mercury/README.md | 3 -
docs/backend/vulcan/README.md | 3 -
docs/deletingUsers.md | 54 -
.../{backend/deployment.md => deployments.md} | 218 +-
.../development.md} | 10 +-
.../hyperion (server side rendering)/intro.md | 10 +
.../importing-rethinkdb-backups.md} | 4 +-
docs/operations/intro.md | 8 +
docs/readme.md | 34 +-
docs/testing.md | 87 -
docs/testing/integration.md | 71 +
docs/testing/intro.md | 10 +
docs/testing/unit.md | 17 +
docs/workers/analytics/intro.md | 12 +
docs/workers/athena/intro.md | 9 +
docs/workers/background-jobs.md | 9 +
docs/workers/chronos/intro.md | 12 +
docs/workers/hermes/intro.md | 8 +
docs/{backend/README.md => workers/intro.md} | 31 +-
docs/workers/mercury/intro.md | 7 +
docs/workers/vulcan/intro.md | 7 +
email-template-scripts/README.md | 23 +
email-template-scripts/inline-html-emails.py | 43 +
email-template-scripts/send-test-emails.js | 118 +
email-template-scripts/sendgrid-sync.js | 114 +
.../admin-active-community-report.json | 14 +
.../admin-community-created-notification.json | 39 +
.../admin-slack-import-completed.json | 23 +
.../test-email-data/admin-toxic-content.json | 81 +
.../admin-user-reported-alert.json | 48 +
.../admin-user-spamming-threads-alert.json | 85 +
.../community-admin-email-validation.json | 20 +
.../test-email-data/community-created.json | 38 +
.../test-email-data/community-invitation.json | 48 +
.../test-email-data/digest.json | 49 +
.../direct-message-received.json | 45 +
.../test-email-data/mention-in-message.json | 145 +
.../test-email-data/mention-in-thread.json | 114 +
.../test-email-data/message-in-threads.json | 100 +
.../test-email-data/new-user-welcome.json | 21 +
.../private-channel-request-approved.json | 54 +
.../private-channel-request-sent.json | 77 +
.../private-community-request-approved.json | 46 +
.../private-community-request-sent.json | 68 +
.../test-email-data/thread-created.json | 101 +
.../user-email-validation.json | 4 +
.../adminActiveCommunityReport.html | 55 +-
email-templates/adminCommunityCreated.html | 19 +-
.../adminSlackImportProcessed.html | 19 +-
email-templates/adminToxicContent.html | 25 +-
email-templates/adminUserReported.html | 53 +
.../adminUserSpammingThreadsNotification.html | 78 +
.../communityCardExpiringWarning.html | 432 -
email-templates/communityInvite.html | 468 +-
email-templates/communityInvoiceReceipt.html | 459 -
email-templates/communityPaymentFailed.html | 432 -
.../communityPaymentSucceeded.html | 528 -
email-templates/mentionInMessage.html | 463 +-
email-templates/mentionInThread.html | 449 +-
email-templates/newCommunityWelcome.html | 381 +-
email-templates/newDirectMessage.html | 341 +-
email-templates/newRepliesInThreads.html | 516 +-
email-templates/newThreadNotification.html | 462 +-
email-templates/newUserWelcome.html | 461 +-
.../privateChannelRequestApproved.html | 310 +-
.../privateChannelRequestSent.html | 331 +-
.../privateCommunityRequestApproved.html | 431 +
.../privateCommunityRequestSent.html | 439 +
email-templates/proInvoiceReceipt.html | 459 -
...alidate-community-administrator-email.html | 448 +-
email-templates/validate-email.html | 452 +-
email-templates/weeklyDigest.html | 509 +-
flow-typed/npm/@sendgrid/mail_vx.x.x.js | 52 +
flow-typed/npm/amplitude_vx.x.x.js | 32 +
flow-typed/npm/apollo-link-schema_vx.x.x.js | 53 +
.../npm/apollo-server-express_vx.x.x.js | 53 +
flow-typed/npm/b2a_vx.x.x.js | 32 +
flow-typed/npm/bluebird_vx.x.x.js | 312 +
flow-typed/npm/cryptr_vx.x.x.js | 38 +
flow-typed/npm/datadog-metrics_vx.x.x.js | 59 +
flow-typed/npm/dataloader_vx.x.x.js | 33 +
flow-typed/npm/decode-uri-component_vx.x.x.js | 33 +
.../npm/draft-js-export-markdown_vx.x.x.js | 39 +
...x.x.js => electron-context-menu_vx.x.x.js} | 8 +-
flow-typed/npm/electron-is-dev_vx.x.x.js | 33 +
flow-typed/npm/electron-updater_vx.x.x.js | 186 +
...x.x.js => electron-window-state_vx.x.x.js} | 8 +-
flow-typed/npm/electron_vx.x.x.js | 45 +
flow-typed/npm/express-enforces-ssl_vx.x.x.js | 33 +
flow-typed/npm/express-hot-shots_vx.x.x.js | 53 +
flow-typed/npm/graphql-rate-limit_vx.x.x.js | 130 +
flow-typed/npm/helmet_vx.x.x.js | 33 +
flow-typed/npm/host-validation_vx.x.x.js | 45 +
flow-typed/npm/hot-shots_vx.x.x.js | 52 +
flow-typed/npm/hpp_vx.x.x.js | 32 +
flow-typed/npm/hsts_vx.x.x.js | 33 +
flow-typed/npm/idx_v2.x.x.js | 8 +
flow-typed/npm/ioredis_v3.x.x.js | 765 --
flow-typed/npm/ioredis_vx.x.x.js | 205 +-
flow-typed/npm/is-electron_vx.x.x.js | 33 +
flow-typed/npm/markdown-draft-js_vx.x.x.js | 95 +
flow-typed/npm/ms_vx.x.x.js | 33 +
flow-typed/npm/query-string_v5.x.x.js | 21 -
flow-typed/npm/query-string_vx.x.x.js | 33 +
flow-typed/npm/raf_vx.x.x.js | 52 +
flow-typed/npm/react-hot-loader_vx.x.x.js | 73 +
flow-typed/npm/react-image_vx.x.x.js | 88 +
flow-typed/npm/react-mentions_vx.x.x.js | 151 +
.../react-navigation-props-mapper_vx.x.x.js | 18 -
flow-typed/npm/react-popper_vx.x.x.js | 123 +
.../npm/react-visibility-sensor_vx.x.x.js | 116 +
flow-typed/npm/redis-tag-cache_vx.x.x.js | 36 +
flow-typed/npm/request-ip_vx.x.x.js | 32 +
flow-typed/npm/rethinkhaberdashery_vx.x.x.js | 480 +
flow-typed/npm/sanitize-filename_vx.x.x.js | 38 +
.../npm/{abab_vx.x.x.js => sha1_vx.x.x.js} | 26 +-
flow-typed/npm/string-similarity_vx.x.x.js | 46 +
flow-typed/react-native.js | 2 +-
hermes/README.md | 27 +-
hermes/events/index.js | 37 +
hermes/index.js | 94 +-
hermes/models/usersSettings.js | 32 +
hermes/package.json | 30 +-
hermes/queues/constants.js | 102 +-
...end-admin-active-community-report-email.js | 53 +-
.../send-admin-community-created-email.js | 25 +-
.../queues/send-admin-slack-import-email.js | 26 +-
.../queues/send-admin-toxic-content-email.js | 39 +-
.../queues/send-admin-user-reported-email.js | 47 +
...ser-spamming-threads-notification-email.js | 61 +
...nd-administrator-email-validation-email.js | 43 +-
...d-community-card-expiring-warning-email.js | 45 -
hermes/queues/send-community-invite-email.js | 53 +-
.../send-community-invoice-receipt-email.js | 32 -
.../send-community-payment-failed-email.js | 53 -
.../send-community-payment-succeeded-email.js | 115 -
hermes/queues/send-digest-email.js | 93 +-
hermes/queues/send-email-validation-email.js | 34 +-
hermes/queues/send-mention-message-email.js | 35 +-
hermes/queues/send-mention-thread-email.js | 34 +-
.../send-new-community-welcome-email.js | 17 +-
.../queues/send-new-direct-message-email.js | 53 +-
hermes/queues/send-new-message-email.js | 86 +-
hermes/queues/send-new-thread-email.js | 26 +-
...-private-channel-request-approved-email.js | 39 +-
...send-private-channel-request-sent-email.js | 43 +-
...rivate-community-request-approved-email.js | 48 +
...nd-private-community-request-sent-email.js | 50 +
.../queues/send-pro-invoice-receipt-email.js | 29 -
hermes/queues/send-user-welcome-email.js | 64 +-
hermes/queues/sendgrid-webhook-events.js | 32 +
hermes/send-email.js | 118 +-
hermes/user-can-receive-email.js | 38 +
hermes/utils/smarten-string.js | 9 +
hermes/yarn.lock | 1061 +-
hyperion/cache.js | 46 -
hyperion/create-cache-stream.js | 24 -
hyperion/index.js | 108 +-
hyperion/redis.js | 32 -
hyperion/renderer/browser-shim.js | 1 +
hyperion/renderer/html-template.js | 53 +-
hyperion/renderer/index.js | 80 +-
index.html | 54 -
jest.config.js | 3 +-
mercury/constants.js | 6 +
mercury/functions/processMessageCreated.js | 4 +-
mercury/functions/processMessageDeleted.js | 4 +-
mercury/functions/processReactionCreated.js | 4 +-
mercury/functions/processReactionDeleted.js | 4 +-
mercury/functions/processThreadCreated.js | 4 +-
mercury/functions/processThreadDeleted.js | 4 +-
.../processThreadDeletedByModeration.js | 5 +-
.../functions/processThreadReactionCreated.js | 24 +
.../functions/processThreadReactionDeleted.js | 24 +
mercury/functions/types.js | 6 -
mercury/index.js | 17 +-
mercury/models/db.js | 32 -
mercury/models/message.js | 2 +-
mercury/models/reaction.js | 2 +-
mercury/models/reputationEvent.js | 2 +-
mercury/models/thread.js | 98 +-
mercury/models/usersCommunities.js | 5 +-
mercury/package.json | 20 +-
mercury/queues/calculateThreadScore.js | 87 +
mercury/queues/processReputationEvent.js | 23 +-
mercury/yarn.lock | 472 +-
mobile/.expo/Exponent.app/.gitkeep | 0
mobile/.expo/settings.json | 7 -
mobile/.gitignore | 3 -
mobile/.idea/mobile.iml | 9 -
mobile/.idea/modules.xml | 8 -
mobile/.idea/workspace.xml | 180 -
mobile/App.js | 95 -
mobile/actions/authentication.js | 21 -
mobile/app.json | 37 -
mobile/assets/icon.png | Bin 2976 -> 0 bytes
mobile/assets/splash.png | Bin 7178 -> 0 bytes
mobile/components/.gitkeep | 0
mobile/components/Anchor/index.js | 32 -
mobile/components/Avatar/image.js | 191 -
.../components/Avatar/img/default_avatar.svg | 73 -
.../Avatar/img/default_community.svg | 34 -
mobile/components/Avatar/index.js | 44 -
mobile/components/Avatar/style.js | 48 -
mobile/components/Avatar/utils.js | 24 -
mobile/components/Codeblock/index.js | 15 -
mobile/components/IFrame/index.js | 18 -
mobile/components/InfiniteList/index.js | 101 -
mobile/components/Login/index.js | 56 -
mobile/components/Messages/index.js | 123 -
mobile/components/SafeAreaView/index.js | 18 -
mobile/components/Text/index.js | 44 -
mobile/components/ThreadContent/index.js | 13 -
mobile/components/ThreadContent/renderer.js | 92 -
mobile/components/ThreadFeed/index.js | 136 -
mobile/components/ThreadFeed/style.js | 0
mobile/components/ThreadItem/Facepile.js | 113 -
.../ThreadItem/ThreadCommunityInfo.js | 2 -
mobile/components/ThreadItem/index.js | 82 -
mobile/components/ThreadItem/style.js | 88 -
mobile/components/ViewNetworkHandler/index.js | 92 -
mobile/components/theme/index.js | 76 -
mobile/jest.config.js | 23 -
mobile/package.json | 57 -
mobile/reducers/authentication.js | 30 -
mobile/reducers/index.js | 11 -
mobile/rn-cli.config.js | 5 -
mobile/setupTests.js | 16 -
mobile/utils/get-push-notification-token.js | 29 -
mobile/utils/platform.js | 16 -
mobile/views/Channel/index.js | 83 -
mobile/views/Channel/style.js | 9 -
mobile/views/Community/index.js | 86 -
mobile/views/Community/style.js | 9 -
mobile/views/Notifications/index.js | 169 -
mobile/views/Splash/index.js | 51 -
mobile/views/Splash/style.js | 9 -
mobile/views/TabBar/BaseStack.js | 40 -
mobile/views/TabBar/HomeStack.js | 28 -
mobile/views/TabBar/NotificationsStack.js | 23 -
mobile/views/TabBar/index.js | 32 -
mobile/views/Thread/index.js | 71 -
mobile/views/Thread/style.js | 9 -
mobile/views/User/index.js | 107 -
mobile/views/User/style.js | 9 -
mobile/views/__e2e__/splash.spec.js | 13 -
mobile/views/__tests__/.gitkeep | 0
mobile/yarn.lock | 7135 -----------
now-secrets.example.json | 3 +-
now.json | 93 +-
package.json | 281 +-
pluto/changefeeds/analytics.js | 27 -
pluto/changefeeds/community.js | 72 -
pluto/changefeeds/index.js | 50 -
pluto/changefeeds/moderator.js | 29 -
pluto/changefeeds/openSourceStatus.js | 45 -
pluto/changefeeds/privateChannel.js | 102 -
pluto/changefeeds/support.js | 28 -
pluto/create-worker-with-express.js | 17 -
pluto/index.js | 160 -
pluto/models/channel.js | 10 -
pluto/models/community.js | 53 -
pluto/models/stripeCustomers.js | 27 -
pluto/models/usersCommunities.js | 11 -
pluto/models/utils.js | 65 -
pluto/package.json | 25 -
pluto/queues/constants.js | 64 -
.../processAdministratorEmailChanged.js | 52 -
pluto/queues/processAnalyticsAdded.js | 77 -
pluto/queues/processAnalyticsRemoved.js | 74 -
pluto/queues/processCardExpiringWarning.js | 78 -
pluto/queues/processCommunityCreated.js | 45 -
pluto/queues/processCommunityDeleted.js | 39 -
pluto/queues/processCommunityEdited.js | 44 -
pluto/queues/processModeratorAdded.js | 126 -
pluto/queues/processModeratorRemoved.js | 104 -
pluto/queues/processOssStatusActivated.js | 166 -
pluto/queues/processOssStatusDisabled.js | 176 -
pluto/queues/processOssStatusEnabled.js | 166 -
pluto/queues/processPaymentFailed.js | 87 -
pluto/queues/processPaymentSucceeded.js | 94 -
pluto/queues/processPrioritySupportAdded.js | 76 -
pluto/queues/processPrioritySupportRemoved.js | 75 -
pluto/queues/processPrivateChannelAdded.js | 131 -
pluto/queues/processPrivateChannelRemoved.js | 104 -
pluto/queues/processStripeChargeWebhook.js | 32 -
pluto/queues/processStripeCustomerWebhook.js | 57 -
pluto/queues/processStripeDiscountWebhook.js | 19 -
pluto/queues/processStripeInvoiceWebhook.js | 67 -
pluto/queues/processStripeSourceWebhook.js | 32 -
.../processStripeSubscriptionWebhook.js | 19 -
pluto/queues/removeAllPaidFeatures.js | 20 -
pluto/webhooks/index.js | 97 -
pluto/yarn.lock | 683 --
public/_redirects | 1 -
public/img/payment-methods/amex.svg | 11 -
public/img/payment-methods/diners-club.svg | 11 -
public/img/payment-methods/discover.svg | 12 -
public/img/payment-methods/jcb.svg | 15 -
public/img/payment-methods/mastercard.svg | 12 -
public/img/payment-methods/visa.svg | 11 -
public/img/slack_colored.png | Bin 0 -> 6141 bytes
public/img/stripe-logo.png | Bin 1170 -> 0 bytes
public/img/waterfall.png | Bin 0 -> 84634 bytes
public/index.html | 69 +-
shared/analytics/README.md | 66 +
shared/analytics/event-types/channel.js | 40 +
shared/analytics/event-types/community.js | 44 +
shared/analytics/event-types/directMessage.js | 10 +
.../event-types/directMessageThreads.js | 10 +
shared/analytics/event-types/emails.js | 3 +
shared/analytics/event-types/index.js | 52 +
shared/analytics/event-types/message.js | 11 +
shared/analytics/event-types/misc.js | 3 +
shared/analytics/event-types/navigation.js | 8 +
shared/analytics/event-types/notifications.js | 5 +
shared/analytics/event-types/page-apps.js | 11 +
shared/analytics/event-types/page-explore.js | 7 +
shared/analytics/event-types/page-features.js | 4 +
shared/analytics/event-types/page-home.js | 8 +
shared/analytics/event-types/page-inbox.js | 7 +
shared/analytics/event-types/page-login.js | 5 +
shared/analytics/event-types/page-support.js | 8 +
shared/analytics/event-types/pwa.js | 5 +
shared/analytics/event-types/reaction.js | 6 +
shared/analytics/event-types/search.js | 6 +
shared/analytics/event-types/thread.js | 48 +
.../analytics/event-types/threadReaction.js | 6 +
shared/analytics/event-types/user.js | 101 +
.../analytics/event-types/userOnboarding.js | 9 +
.../event-types/web-push-notification.js | 9 +
shared/analytics/index.js | 4 +
shared/bull/create-queue.js | 56 +-
shared/bull/create-worker.js | 39 +-
shared/bull/queues.js | 206 +-
shared/bull/types.js | 486 +-
shared/cache/redis.js | 13 +
shared/changefeed-utils/index.js | 12 +-
shared/clients/analytics/index.js | 29 +
shared/clients/analytics/setUser.js | 23 +
shared/clients/analytics/track.js | 29 +
shared/clients/analytics/transformations.js | 94 +
shared/clients/analytics/unsetUser.js | 23 +
.../clients/draft-js/links-decorator/core.js | 9 +-
.../draft-js/links-decorator/index.native.js | 3 -
.../draft-js/mentions-decorator/core.js | 45 +-
.../mentions-decorator/index.native.js | 26 -
.../draft-js/mentions-decorator/index.web.js | 2 +-
.../mentions-decorator/test/core.test.js | 36 +
.../clients/draft-js/message/renderer.web.js | 47 +-
.../test/__snapshots__/renderer.test.js.snap | 8 +-
.../draft-js/message/test/renderer.test.js | 8 +-
shared/clients/draft-js/message/types.js | 13 +
shared/clients/draft-js/utils/isShort.js | 14 +
shared/clients/group-messages.js | 18 +-
.../test/__snapshots__/messages.test.js.snap | 7 +-
shared/db/constants.js | 17 +
shared/db/create-query.js | 91 +
shared/db/db.js | 92 +
shared/db/index.js | 5 +
shared/db/queries/channel.js | 14 +
shared/db/queries/community.js | 26 +
shared/db/queries/message.js | 8 +
shared/db/queries/notifications.js | 11 +
shared/db/queries/thread.js | 8 +
shared/db/queries/user.js | 757 ++
shared/db/queries/usersNotifications.js | 179 +
shared/db/queries/utils/trackNotifications.js | 20 +
shared/db/query-cache.js | 24 +
shared/draft-utils.js | 5 +
shared/encryption/index.js | 34 +
shared/get-mentions.js | 5 +-
shared/graphql-cache-keys.js | 7 +
shared/graphql/constants.js | 10 +
.../channel/channelMemberConnection.js | 3 +-
.../fragments/channel/channelMetaData.js | 2 +
...unityChannelConnectionWithSlackSettings.js | 39 +
.../fragments/community/communityInfo.js | 4 +
.../fragments/community/communityMetaData.js | 2 +
.../fragments/community/communitySettings.js | 83 +-
.../community/communityThreadConnection.js | 2 +-
.../communityMember/communityMemberInfo.js | 2 +
.../directMessageThreadInfo.js | 18 +-
.../graphql/fragments/invoice/invoiceInfo.js | 22 -
.../fragments/message/directMessageInfo.js | 28 +
.../graphql/fragments/message/messageInfo.js | 26 +-
.../notification/notificationInfo.js | 11 +-
shared/graphql/fragments/thread/threadInfo.js | 23 +-
.../thread/threadMessageConnection.js | 2 +-
.../fragments/user/userCommunityConnection.js | 6 -
shared/graphql/fragments/user/userInfo.js | 4 +-
.../fragments/user/userRecurringPayments.js | 24 -
shared/graphql/index.js | 15 +-
.../mutations/channel/createChannel.js | 7 +
.../channel/toggleChannelSubscription.js | 6 +
.../channel/updateChannelSlackBotLinks.js | 48 +
.../mutations/channel/updateSlackSettings.js | 46 +
.../mutations/community/addPaymentSource.js | 45 -
.../mutations/community/cancelSubscription.js | 68 -
.../community/disableCommunityAnalytics.js | 90 -
.../community/disableCommunityTokenJoin.js | 48 +
.../mutations/community/downgradeCommunity.js | 53 -
.../community/enableCommunityAnalytics.js | 70 -
.../community/enableCommunityTokenJoin.js | 48 +
.../community/makePaymentSourceDefault.js | 48 -
.../community/removePaymentSource.js | 45 -
.../community/resetCommunityJoinToken.js | 48 +
.../mutations/community/sendSlackInvites.js | 47 +
.../community/updateAdministratorEmail.js | 8 -
.../mutations/community/upgradeCommunity.js | 55 -
.../communityMember/addCommunityMember.js | 6 +
.../addCommunityMemberWithToken.js | 43 +
.../communityMember/addCommunityMembers.js | 51 +
.../addPendingCommunityMember.js | 38 +
.../approvePendingCommunityMember.js | 39 +
.../blockPendingCommunityMember.js | 39 +
.../communityMember/removeCommunityMember.js | 6 +
.../removePendingCommunityMember.js | 40 +
.../createDirectMessageThread.js | 13 +-
.../mutations/message/deleteMessage.js | 9 +-
.../graphql/mutations/message/editMessage.js | 44 +
.../mutations/message/sendDirectMessage.js | 15 +-
.../graphql/mutations/message/sendMessage.js | 34 +-
.../mutations/reaction/toggleReaction.js | 63 +-
.../slackImport/sendSlackInvitations.js | 46 -
.../mutations/thread/addThreadReaction.js | 81 +
.../graphql/mutations/thread/publishThread.js | 39 +-
.../mutations/thread/removeThreadReaction.js | 78 +
shared/graphql/mutations/user/banUser.js | 27 +
.../mutations/user/deleteCurrentUser.js | 17 +
.../mutations/user/downgradeFromPro.js | 31 -
shared/graphql/mutations/user/editUser.js | 7 +
shared/graphql/mutations/user/reportUser.js | 27 +
.../mutations/user/subscribeExpoPush.js | 22 -
.../graphql/mutations/user/updateUserEmail.js | 2 +-
shared/graphql/mutations/user/upgradeToPro.js | 36 -
shared/graphql/queries/channel/getChannel.js | 18 +-
.../queries/channel/getChannelBlockedUsers.js | 2 +-
.../channel/getChannelMemberConnection.js | 7 +-
.../channel/getChannelThreadConnection.js | 5 +-
.../queries/community/getCommunities.js | 12 +-
.../graphql/queries/community/getCommunity.js | 8 +-
.../getCommunityChannelConnection.js | 6 -
.../getCommunityChannelsSlackSettings.js | 52 +
.../queries/community/getCommunityInvoices.js | 40 -
.../queries/community/getCommunityMembers.js | 2 +
.../getCommunityRecurringPayments.js | 50 -
.../queries/community/getCommunitySettings.js | 4 +-
.../community/getCommunitySlackSettings.js | 42 +
.../community/getCommunityThreadConnection.js | 28 +-
.../community/getCommunityTopAndNewThreads.js | 5 +-
.../community/getCommunityTopMembers.js | 32 +-
.../communityMember/getCommunityMember.js | 8 +-
.../getComposerCommunitiesAndChannels.js | 2 -
.../getCurrentUserDMThreadConnection.js | 110 +-
.../getDirectMessageThreadByUserId.js | 32 +
...getDirectMessageThreadMessageConnection.js | 15 +-
shared/graphql/queries/message/getMessage.js | 31 +
.../getDirectMessageNotifications.js | 6 +-
.../queries/notification/getNotifications.js | 3 +-
.../graphql/queries/search/searchThreads.js | 1 +
.../queries/slackImport/getSlackImport.js | 37 -
.../thread/getThreadMessageConnection.js | 59 +-
.../user/getCurrentUserEverythingFeed.js | 7 +-
.../queries/user/getCurrentUserInvoices.js | 40 -
.../user/getCurrentUserRecurringPayments.js | 27 -
shared/graphql/queries/user/getUser.js | 2 +-
.../user/getUserCommunityConnection.js | 1 -
.../queries/user/getUserThreadConnection.js | 21 +-
shared/graphql/schema.json | 15 +-
shared/imgix/getDefaultExpires.js | 17 +
shared/imgix/index.js | 24 +
shared/imgix/sign.js | 72 +
shared/imgix/signCommunity.js | 14 +
shared/imgix/signMessage.js | 18 +
shared/imgix/signThread.js | 51 +
shared/imgix/signUser.js | 21 +
shared/install-dependencies.js | 2 +-
shared/middlewares/cors.js | 17 +-
shared/middlewares/csrf.js | 30 +
shared/middlewares/error-handler.js | 21 +
shared/middlewares/logging.js | 6 +-
shared/middlewares/security.js | 134 +
shared/middlewares/session.js | 8 +-
shared/middlewares/statsd.js | 19 +
shared/middlewares/thread-param.js | 36 +-
shared/middlewares/toobusy.js | 13 +-
shared/normalize-url.js | 39 +-
.../notification-to-text.js | 57 +-
shared/only-contains-emoji.js | 45 +-
shared/raven/index.js | 20 +-
shared/regexps.js | 2 +-
shared/slug-blacklists.js | 11 +
shared/statsd.js | 100 +
shared/stripe/index.js | 5 -
shared/stripe/types/charge.js | 58 -
shared/stripe/types/chargeEvent.js | 11 -
shared/stripe/types/customer.js | 37 -
shared/stripe/types/customerEvent.js | 11 -
shared/stripe/types/discount.js | 17 -
shared/stripe/types/invoice.js | 45 -
shared/stripe/types/invoiceEvent.js | 11 -
shared/stripe/types/invoiceItem.js | 24 -
shared/stripe/types/plan.js | 15 -
shared/stripe/types/source.js | 46 -
shared/stripe/types/sourceEvent.js | 11 -
shared/stripe/types/subscription.js | 45 -
shared/stripe/types/subscriptionEvent.js | 11 -
shared/stripe/types/subscriptionItem.js | 11 -
shared/stripe/utils.js | 407 -
.../notification-to-text.test.js.snap | 24 +-
shared/test/encryption.test.js | 30 +
.../test/fixtures/CHANNEL_CREATED.json | 0
.../test/fixtures/COMMUNITY_INVITE.json | 0
.../test/fixtures/DIRECT_MESSAGE_CREATED.json | 0
.../test/fixtures/MEDIA_MESSAGE_CREATED.json | 28 +
.../test/fixtures/MENTION_MESSAGE.json | 0
.../test/fixtures/MENTION_THREAD.json | 0
.../test/fixtures/MESSAGE_CREATED.json | 0
.../test/fixtures/REACTION_CREATED.json | 0
.../test/fixtures/THREAD_CREATED.json | 0
.../fixtures/THREAD_REACTION_CREATED.json | 28 +
.../test/fixtures/USER_JOINED_COMMUNITY.json | 0
shared/test/get-mentions.test.js | 16 +
shared/test/normalize-url.test.js | 4 +
.../test/notification-to-text.test.js | 18 +-
shared/testing/data.js | 4 +
shared/testing/db.js | 2 +-
shared/testing/setup-test-framework.js | 2 +-
shared/testing/setup.js | 25 +-
shared/testing/teardown.js | 5 +-
{src/components => shared}/theme/index.js | 22 +-
shared/time-difference.js | 114 +-
shared/time-formatting.js | 49 +
shared/truthy-values.js | 9 +
shared/types.js | 143 +-
src/actions/authentication.js | 69 +-
src/actions/composer.js | 4 +-
src/actions/message.js | 16 +
src/actions/modals.js | 6 +-
src/actions/toasts.js | 3 +-
src/api/constants.js | 24 +-
src/components/appViewWrapper/index.js | 5 +-
src/components/avatar/communityAvatar.js | 77 +
src/components/avatar/hoverProfile.js | 154 -
src/components/avatar/image.js | 221 +-
src/components/avatar/index.js | 87 +-
src/components/avatar/style.js | 124 +-
src/components/avatar/userAvatar.js | 142 +
src/components/badges/index.js | 92 +-
src/components/badges/style.js | 52 +-
src/components/buttons/index.js | 32 +-
src/components/buttons/style.js | 11 +-
src/components/card/index.js | 3 +-
.../chatInput/components/mediaUploader.js | 74 +-
src/components/chatInput/components/style.js | 8 +-
src/components/chatInput/index.js | 751 +-
src/components/chatInput/input.js | 125 -
src/components/chatInput/style.js | 220 +-
src/components/composer/index.js | 282 +-
src/components/composer/style.js | 23 +-
src/components/conditionalWrap/index.js | 24 +
.../draft-js-plugins-editor/index.js | 97 +
src/components/dropdown/index.js | 3 +-
src/components/editForm/index.js | 23 -
src/components/editForm/style.js | 53 +-
src/components/emailInvitationForm/index.js | 22 +-
src/components/emailInvitationForm/style.js | 17 +-
src/components/error/ErrorBoundary.js | 43 +
src/components/error/SettingsFallback.js | 44 +
src/components/error/index.js | 5 +-
src/components/flyout/index.js | 11 +-
src/components/formElements/index.js | 81 +-
src/components/formElements/style.js | 74 +-
src/components/fullscreenView/index.js | 4 +-
src/components/fullscreenView/style.js | 4 +-
src/components/gallery/browser.js | 35 +-
src/components/gallery/index.js | 2 +-
src/components/gallery/style.js | 11 +-
src/components/githubProfile/index.js | 13 +-
src/components/globals/index.js | 92 +-
src/components/goop/index.js | 2 +-
src/components/granularUserProfile/index.js | 164 +-
src/components/granularUserProfile/style.js | 114 +-
src/components/head/index.js | 10 +-
.../hoverProfile/channelContainer.js | 123 +
src/components/hoverProfile/channelProfile.js | 121 +
.../hoverProfile/communityContainer.js | 133 +
.../hoverProfile/communityProfile.js | 115 +
src/components/hoverProfile/index.js | 6 +
.../hoverProfile/loadingHoverProfile.js | 23 +
src/components/hoverProfile/style.js | 139 +
src/components/hoverProfile/userContainer.js | 144 +
src/components/hoverProfile/userProfile.js | 109 +
src/components/icons/index.js | 309 +-
src/components/illustrations/index.js | 1414 ++-
.../infiniteScroll/deduplicateChildren.js | 11 +
src/components/infiniteScroll/index.js | 225 +-
.../infiniteScroll/tallViewports.js | 33 +
src/components/link/index.js | 35 -
src/components/linkPreview/index.js | 76 -
src/components/linkPreview/style.js | 188 -
src/components/listItems/channel/index.js | 38 +
src/components/listItems/channel/style.js | 56 +
src/components/listItems/index.js | 199 +-
src/components/listItems/style.js | 33 +-
src/components/loading/index.js | 247 +-
src/components/loading/style.js | 165 +-
src/components/loginButtonSet/github.js | 2 +-
src/components/loginButtonSet/index.js | 2 +
src/components/loginButtonSet/style.js | 69 +-
src/components/maintenance/index.js | 9 +-
src/components/mediaInput/style.js | 7 +-
src/components/mentionsInput/index.js | 141 +
.../mentionsInput/mentionSuggestion.js | 28 +
src/components/mentionsInput/style.js | 50 +
src/components/menu/index.js | 23 +-
src/components/menu/style.js | 34 +-
src/components/message/authorByline.js | 81 +
src/components/message/editingBody.js | 129 +
src/components/message/index.js | 452 +-
.../message/messageErrorFallback.js | 27 +
src/components/message/style.js | 539 +-
src/components/message/view.js | 194 +-
src/components/messageGroup/index.js | 277 +-
src/components/messageGroup/style.js | 75 +-
.../index.js | 135 -
.../style.js | 17 -
src/components/modals/BanUserModal/index.js | 149 +
src/components/modals/BanUserModal/style.js | 30 +
.../modals/ChangeChannelModal/index.js | 7 +-
.../modals/ChangeChannelModal/style.js | 5 +-
.../modals/ChatInputLoginModal/index.js | 36 +-
.../modals/ChatInputLoginModal/style.js | 18 +
.../modals/CreateChannelModal/index.js | 48 +-
.../modals/DeleteDoubleCheckModal/index.js | 59 +-
.../modals/RepExplainerModal/index.js | 31 +-
.../modals/RepExplainerModal/style.js | 17 +-
.../modals/ReportUserModal/index.js | 163 +
.../modals/ReportUserModal/style.js | 21 +
.../modals/RestoreChannelModal/index.js | 46 +-
.../modals/UpgradeAnalyticsModal/index.js | 119 -
.../modals/UpgradeAnalyticsModal/style.js | 24 -
src/components/modals/UpgradeModal/index.js | 166 -
src/components/modals/UpgradeModal/style.js | 186 -
.../modals/UpgradeModeratorSeatModal/index.js | 117 -
.../modals/UpgradeModeratorSeatModal/style.js | 24 -
.../modals/components/poweredByStripe.js | 23 -
src/components/modals/modalRoot.js | 16 +-
src/components/modals/styles.js | 42 +-
src/components/newActivityIndicator/index.js | 15 +-
src/components/nextPageButton/index.js | 2 +-
src/components/nextPageButton/style.js | 7 +-
src/components/outsideClickHandler/index.js | 10 +-
src/components/profile/channel.js | 256 -
src/components/profile/community.js | 291 +-
src/components/profile/coverPhoto.js | 15 +-
src/components/profile/index.js | 8 -
src/components/profile/style.js | 106 +-
src/components/profile/thread.js | 40 +-
src/components/profile/user.js | 204 +-
src/components/reaction/index.js | 107 +-
src/components/reaction/style.js | 130 +-
src/components/redirectHandler/index.js | 36 +
src/components/reputation/index.js | 13 +-
src/components/reputation/style.js | 5 +-
.../Embed.js | 21 +-
.../Image.js | 5 +-
.../rich-text-editor/LanguageSelect.js | 62 +
.../container.js} | 187 +-
src/components/rich-text-editor/index.js | 11 +
.../prism-theme.css | 0
.../style.js | 104 +-
.../toolbar.js | 13 +-
src/components/scrollRow/index.js | 2 +-
src/components/scrollRow/style.js | 18 +-
src/components/segmentedControl/index.js | 11 +-
src/components/settingsViews/header.js | 24 +-
src/components/settingsViews/style.js | 93 +-
src/components/settingsViews/subnav.js | 2 +-
src/components/stripeCardForm/form.js | 78 -
src/components/stripeCardForm/index.js | 88 -
src/components/stripeCardForm/modalWell.js | 144 -
src/components/stripeCardForm/style.js | 54 -
src/components/themedSection/index.js | 72 +-
.../thirdPartyContextSetting/index.js | 45 +
.../threadComposer/components/composer.js | 261 +-
.../threadComposer/components/placeholder.js | 3 +-
src/components/threadComposer/style.js | 37 +-
src/components/threadFeed/index.js | 258 +-
src/components/threadFeed/style.js | 27 +-
src/components/threadFeedCard/facePile.js | 49 -
.../threadFeedCard/formattedThreadLocation.js | 70 -
src/components/threadFeedCard/index.js | 95 -
src/components/threadFeedCard/style.js | 41 +-
src/components/threadLikes/index.js | 94 +
src/components/threadLikes/style.js | 54 +
src/components/toasts/index.js | 10 +-
src/components/toasts/style.js | 23 +-
.../toggleChannelMembership/index.js | 7 +-
.../toggleChannelNotifications/index.js | 3 +-
.../toggleCommunityMembership/index.js | 40 +-
src/components/upsell/index.js | 195 +-
src/components/upsell/joinChannel.js | 46 +-
src/components/upsell/newUserUpsell.js | 15 +-
src/components/upsell/newUserUpsellStyles.js | 7 +-
src/components/upsell/requestToJoinChannel.js | 15 +-
src/components/upsell/style.js | 120 +-
src/components/userEmailConfirmation/index.js | 6 +-
src/components/usernameSearch/index.js | 167 +
src/components/usernameSearch/style.js | 91 +
src/components/viewError/style.js | 7 +-
src/components/visuallyHidden/index.js | 12 +
src/components/withCurrentUser/index.js | 72 +
src/helpers/analytics/index.js | 16 +
src/helpers/consolidate-streamed-styles.js | 5 -
src/helpers/desktop-app-utils.js | 23 +
src/helpers/directMessageThreads.js | 1 +
src/helpers/events.js | 61 -
src/helpers/get-thread-link.js | 11 +
src/helpers/images.js | 19 -
src/helpers/is-admin.js | 9 +
src/helpers/is-os.js | 12 +
src/helpers/is-viewing-marketing-page.js | 25 +
src/helpers/keycodes.js | 9 +
src/helpers/localStorage.js | 6 +
src/helpers/notifications.js | 5 +-
src/helpers/realtimeThreads.js | 3 +-
src/helpers/regexps.js | 6 +-
.../render-text-with-markdown-links.js | 12 +
src/helpers/sentry-redux-middleware.js | 28 +-
src/helpers/signed-out-fallback.js | 38 +-
src/helpers/utils.js | 167 +-
src/hooks/useConnectionRestored.js | 54 +
src/hot-routes.js | 7 +
src/index.js | 107 +-
src/reducers/connectionStatus.js | 23 +-
src/reducers/dashboardFeed.js | 8 -
src/reducers/index.js | 9 +-
src/reducers/message.js | 25 +
src/reducers/newUserOnboarding.js | 2 +-
src/reducers/users.js | 16 -
src/reset.css.js | 31 +-
src/routes.js | 165 +-
src/store/index.js | 35 +-
src/subscribe-to-desktop-push.js | 54 +
src/views/authViewHandler/index.js | 96 +-
src/views/channel/components/memberGrid.js | 79 +-
.../channel/components/notificationsToggle.js | 2 +-
.../components/pendingUsersNotification.js | 2 +-
src/views/channel/components/search.js | 2 +-
src/views/channel/components/style.js | 5 +-
src/views/channel/index.js | 318 +-
src/views/channel/style.js | 117 +-
.../channelSettings/components/archiveForm.js | 41 +-
.../components/blockedUsers.js | 147 +-
.../components/channelMembers.js | 88 +-
.../components/editDropdown.js | 41 +
.../channelSettings/components/editForm.js | 59 +-
...nTokenSettings.js => joinTokenSettings.js} | 5 +-
...loginTokenToggle.js => joinTokenToggle.js} | 3 +-
.../channelSettings/components/overview.js | 78 +-
.../components/pendingUsers.js | 172 +-
.../components/resetJoinToken.js | 3 +-
src/views/channelSettings/index.js | 60 +-
src/views/channelSettings/style.js | 27 +-
src/views/community/components/channelList.js | 226 +-
src/views/community/components/memberGrid.js | 78 +-
.../community/components/moderatorList.js | 99 +-
.../components/requestToJoinCommunity.js | 121 +
src/views/community/components/search.js | 2 +-
src/views/community/index.js | 340 +-
src/views/community/style.js | 101 +-
.../components/analyticsUpsell/index.js | 127 -
.../components/analyticsUpsell/style.js | 109 -
.../components/threadListItem.js | 6 +-
.../components/topAndNewThreads.js | 19 +-
.../components/topMembers.js | 113 +-
src/views/communityAnalytics/index.js | 54 +-
src/views/communityAnalytics/style.js | 36 +-
.../components/administratorEmailForm.js | 146 -
.../components/editSourceDropdown.js | 137 -
.../communityBilling/components/invoice.js | 56 -
.../components/mutationWrapper.js | 70 -
.../communityBilling/components/source.js | 61 -
.../components/subscription.js | 282 -
src/views/communityBilling/index.js | 197 -
src/views/communityBilling/style.js | 141 -
src/views/communityBilling/utils.js | 23 -
src/views/communityLogin/index.js | 46 +-
src/views/communityLogin/style.js | 17 +-
.../components/communityMembers.js | 107 +-
.../components/editDropdown.js | 102 +-
.../components/importSlack.js | 297 -
.../components/joinTokenSettings.js | 103 +
.../components/joinTokenToggle.js | 72 +
.../components/mutationWrapper.js | 3 +-
.../components/resetJoinToken.js | 68 +
src/views/communityMembers/index.js | 56 +-
src/views/communityMembers/style.js | 69 +-
.../components/brandedLogin.js | 14 +-
.../components/brandedLoginToggle.js | 7 +-
.../components/channelList.js | 43 +-
.../communitySettings/components/editForm.js | 71 +-
.../communitySettings/components/overview.js | 25 +-
.../components/slack/channelConnection.js | 96 +
.../components/slack/channelSlackManager.js | 86 +
.../components/slack/connectSlack.js | 59 +
.../components/slack/index.js | 101 +
.../components/slack/sendInvitations.js | 135 +
.../components/slack/style.js | 54 +
src/views/communitySettings/index.js | 30 +-
src/views/communitySettings/style.js | 41 +-
src/views/compose/index.js | 20 -
src/views/compose/style.js | 10 -
.../dashboard/components/communityList.js | 106 +-
.../components/desktopAppUpsell/index.js | 83 +
.../components/desktopAppUpsell/style.js | 49 +
.../dashboard/components/emptyThreadFeed.js | 2 +-
.../dashboard/components/errorThreadFeed.js | 2 +-
src/views/dashboard/components/facepile.js | 98 -
src/views/dashboard/components/inboxThread.js | 248 -
.../components/inboxThread/activity.js | 33 +
.../components/inboxThread/header/index.js | 33 +
.../components/inboxThread/header/style.js | 145 +
.../inboxThread/header/threadHeader.js | 110 +
.../inboxThread/header/timestamp.js | 38 +
.../header/userProfileThreadHeader.js | 105 +
.../dashboard/components/inboxThread/index.js | 140 +
.../components/inboxThread/messageCount.js | 38 +
.../dashboard/components/inboxThread/style.js | 154 +
.../components/newActivityIndicator.js | 15 +-
.../dashboard/components/sidebarChannels.js | 117 +-
.../components/threadCommunityInfo.js | 73 -
src/views/dashboard/components/threadFeed.js | 332 +-
.../dashboard/components/threadSearch.js | 15 +-
.../components/threadSelectorHeader.js | 5 +-
.../components/upsellExploreCommunities.js | 22 +-
src/views/dashboard/index.js | 215 +-
src/views/dashboard/style.js | 485 +-
src/views/dashboardThread/index.js | 4 +-
src/views/dashboardThread/style.js | 7 +-
.../directMessages/components/avatars.js | 49 +-
src/views/directMessages/components/header.js | 12 +-
.../directMessages/components/loading.js | 2 +-
.../components/messageThreadListItem.js | 27 +-
.../directMessages/components/messages.js | 45 +-
src/views/directMessages/components/style.js | 72 +-
.../directMessages/components/threadsList.js | 197 +-
.../containers/existingThread.js | 107 +-
src/views/directMessages/containers/index.js | 87 +
.../directMessages/containers/newThread.js | 128 +-
src/views/directMessages/index.js | 190 +-
src/views/directMessages/style.js | 51 +-
src/views/explore/collections.js | 36 +-
.../components/communitySearchWrapper.js | 20 +-
src/views/explore/components/search.js | 132 +-
src/views/explore/index.js | 77 +-
src/views/explore/style.js | 71 +-
src/views/explore/view.js | 115 +-
src/views/login/index.js | 29 +-
src/views/login/style.js | 42 +-
src/views/navbar/components/messagesTab.js | 116 +-
.../navbar/components/notificationDropdown.js | 23 +-
.../navbar/components/notificationsTab.js | 91 +-
.../navbar/components/profileDropdown.js | 101 +-
src/views/navbar/index.js | 278 +-
src/views/navbar/style.js | 202 +-
.../components/createCommunityForm/index.js | 167 +-
.../components/createCommunityForm/style.js | 112 +-
.../components/editCommunityForm/index.js | 24 +-
.../newCommunity/components/share/index.js | 12 +-
.../newCommunity/components/share/style.js | 11 +-
.../newCommunity/components/stepper/style.js | 3 +-
src/views/newCommunity/index.js | 21 +-
src/views/newCommunity/style.js | 13 +-
.../components/appsUpsell/index.js | 60 +
.../components/appsUpsell/style.js | 13 +
.../components/communitySearch/index.js | 188 +-
.../components/communitySearch/style.js | 27 +-
.../components/discoverCommunities/index.js | 8 +
.../components/discoverCommunities/style.js | 13 +-
.../components/joinFirstCommunity/index.js | 18 +-
.../components/setUsername/index.js | 144 +-
.../components/setUsername/style.js | 89 +-
.../components/userInfo/index.js | 353 -
.../components/userInfo/style.js | 135 -
src/views/newUserOnboarding/index.js | 130 +-
src/views/newUserOnboarding/style.js | 19 +-
.../notifications/components/actorsRow.js | 12 +-
.../components/browserNotificationRequest.js | 2 +-
.../components/getCommunityMember.js | 25 +
.../components/mentionMessageNotification.js | 34 +-
.../components/newChannelNotification.js | 51 +-
.../components/newMessageNotification.js | 69 +-
.../components/newReactionNotification.js | 50 +-
.../components/newThreadNotification.js | 71 +-
.../newThreadReactionNotification.js | 106 +
.../components/notificationDropdownList.js | 204 +-
...ivateChannelRequestApprovedNotification.js | 10 +-
.../privateChannelRequestSentNotification.js | 14 +-
...ateCommunityRequestApprovedNotification.js | 111 +
...privateCommunityRequestSentNotification.js | 221 +
.../sortAndGroupNotificationMessages.js | 2 +-
src/views/notifications/index.js | 438 +-
src/views/notifications/style.js | 145 +-
src/views/notifications/utils.js | 91 +-
src/views/pages/apps/index.js | 62 +
src/views/pages/apps/style.js | 67 +
src/views/pages/components/footer.js | 88 +-
src/views/pages/components/nav.js | 91 +-
src/views/pages/faq/index.js | 81 +
src/views/pages/faq/style.js | 17 +
src/views/pages/features/index.js | 421 +-
src/views/pages/features/style.js | 301 +
src/views/pages/home/index.js | 5 +-
src/views/pages/index.js | 28 +-
.../pages/pricing/components/communityList.js | 164 -
.../pages/pricing/components/discount.js | 31 -
src/views/pages/pricing/components/faq.js | 57 -
src/views/pages/pricing/components/feature.js | 39 -
src/views/pages/pricing/components/intro.js | 60 -
src/views/pages/pricing/components/paid.js | 94 -
src/views/pages/pricing/index.js | 45 -
src/views/pages/pricing/style.js | 109 +-
src/views/pages/privacy/index.js | 560 +-
src/views/pages/style.js | 299 +-
src/views/pages/support/index.js | 30 +-
src/views/pages/terms/index.js | 62 +-
src/views/pages/terms/style.js | 3 +-
src/views/pages/view.js | 124 +-
src/views/privateChannelJoin/index.js | 16 +-
src/views/privateCommunityJoin/index.js | 109 +
src/views/search/searchInput.js | 1 -
src/views/search/style.js | 23 +-
src/views/status/index.js | 49 +-
src/views/thread/components/actionBar.js | 451 +-
.../components/desktopAppUpsell/index.js | 71 +
.../components/desktopAppUpsell/style.js | 38 +
src/views/thread/components/loading.js | 6 +-
src/views/thread/components/messages.js | 431 +-
src/views/thread/components/sidebar.js | 294 +-
src/views/thread/components/threadByline.js | 26 +-
.../components/threadCommunityBanner.js | 139 +-
src/views/thread/components/threadDetail.js | 296 +-
.../thread/components/watercoolerActionBar.js | 167 +
src/views/thread/container.js | 622 +
src/views/thread/index.js | 586 +-
src/views/thread/redirect-old-route.js | 36 +
src/views/thread/style.js | 308 +-
src/views/threadSlider/index.js | 87 +-
src/views/threadSlider/style.js | 13 +-
src/views/titlebar/index.js | 22 +-
src/views/titlebar/style.js | 16 +-
src/views/user/components/communityList.js | 18 +-
src/views/user/components/search.js | 2 +-
src/views/user/index.js | 220 +-
src/views/user/style.js | 39 +-
.../components/deleteAccountForm.js | 169 +
.../components/downloadDataForm.js | 58 +
.../userSettings/components/editForm.js} | 339 +-
.../userSettings/components/emailSettings.js | 44 +-
src/views/userSettings/components/invoices.js | 53 -
.../components/notificationSettings.js | 53 +-
src/views/userSettings/components/overview.js | 52 +
.../components/recurringPaymentsList.js | 83 -
src/views/userSettings/index.js | 164 +-
src/views/userSettings/style.js | 121 +-
vulcan/index.js | 80 +-
vulcan/models/community.js | 62 -
vulcan/models/db.js | 32 -
vulcan/models/message.js | 47 -
vulcan/models/thread.js | 118 -
vulcan/models/user.js | 82 -
vulcan/package.json | 30 +-
vulcan/queues/constants.js | 2 +
vulcan/queues/events/created.js | 47 +
vulcan/queues/events/deleted.js | 25 +
vulcan/queues/events/edited.js | 44 +
vulcan/queues/index.js | 28 +
vulcan/queues/types/community.js | 17 +
vulcan/queues/types/message.js | 17 +
vulcan/queues/types/thread/index.js | 17 +
vulcan/queues/types/thread/moved.js | 52 +
vulcan/queues/types/user.js | 19 +
vulcan/utils/get-queue-from-type.js | 20 +
vulcan/{models/utils.js => utils/index.js} | 18 +-
vulcan/{models => utils}/text-parsing.js | 0
vulcan/yarn.lock | 874 +-
yarn.lock | 10085 +++++++++++-----
1564 files changed, 82557 insertions(+), 58282 deletions(-)
delete mode 100644 .editorconfig
delete mode 100644 .eslintrc.json
create mode 100644 .npmignore
create mode 100644 .prettierrc
create mode 100644 analytics/index.js
create mode 100644 analytics/models/channel.js
create mode 100644 analytics/models/community.js
create mode 100644 analytics/models/message.js
create mode 100644 analytics/models/notification.js
create mode 100644 analytics/models/reaction.js
create mode 100644 analytics/models/thread.js
create mode 100644 analytics/models/usersChannels.js
create mode 100644 analytics/models/usersCommunities.js
create mode 100644 analytics/models/usersThreads.js
create mode 100644 analytics/package.json
create mode 100644 analytics/queues/constants.js
create mode 100644 analytics/queues/identify-analytics.js
create mode 100644 analytics/queues/track-analytics.js
create mode 100644 analytics/utils/amplitude.js
create mode 100644 analytics/utils/getContext.js
create mode 100644 analytics/utils/hash.js
create mode 100644 analytics/utils/identify.js
create mode 100644 analytics/utils/index.js
create mode 100644 analytics/utils/track.js
create mode 100644 analytics/utils/transformations.js
create mode 100644 analytics/yarn.lock
create mode 100644 api/apollo-server.js
create mode 100644 api/loaders/message.js
delete mode 100644 api/loaders/stripe.js
create mode 100644 api/loaders/threadReaction.js
create mode 100644 api/migrations/20180411183454-lowercase-all-the-slugs.js
create mode 100644 api/migrations/20180428001543-reset-slack-import-records.js
create mode 100644 api/migrations/20180504003702-encrypt-existing-slack-data.js
create mode 100644 api/migrations/20180517180716-enable-private-communities.js
create mode 100644 api/migrations/20180517215503-add-ispending-to-userscommunities.js
create mode 100644 api/migrations/20180518135040-add-join-settings-to-community-settings.js
create mode 100644 api/migrations/20180621001409-thread-likes-table.js
create mode 100644 api/migrations/20180823115847-add-users-communities-indexes.js
create mode 100644 api/migrations/20181001061156-thread-metadata-denormalization.js
create mode 100644 api/migrations/20181001064151-fix-thread-metadata-message-counts.js
create mode 100644 api/migrations/20181002060237-remove-payments.js
create mode 100644 api/migrations/20181003233411-thread-reactions-useridandthreadid-index.js
create mode 100644 api/migrations/20181004222636-denormalize-channel-community-member-counts.js
create mode 100644 api/migrations/20181005143053-users-notifications-useridandnotificationid-index.js
create mode 100644 api/migrations/20181005144259-users-notifications-userIdAndIsSeen-index.js
create mode 100644 api/migrations/20181023160027-update-denormalized-member-counts.js
create mode 100644 api/migrations/20181024173616-indexes-for-digests.js
create mode 100644 api/migrations/20181027050052-remove-attachments-from-thread-model.js
create mode 100644 api/migrations/20181102025454-fix-old-image-urls-in-messages.js
create mode 100644 api/migrations/20181102040518-fix-old-image-urls-in-threads.js
create mode 100644 api/migrations/20181102044407-fix-old-image-urls-in-communities.js
create mode 100644 api/migrations/20181102045821-fix-old-image-urls-in-users.js
create mode 100644 api/migrations/20181102054523-fix-aws-static-url-community-photos.js
create mode 100644 api/migrations/20181116173949-add-terms-last-accepted-field-to-users.js
create mode 100644 api/migrations/20181121054300-resync-community-member-counts.js
create mode 100644 api/migrations/20181122162921-users-communities-useridandmember-index.js
create mode 100644 api/migrations/20181126094455-users-channels-roles.js
create mode 100644 api/migrations/20181127090014-communities-member-count-index.js
create mode 100644 api/migrations/20181205171559-remove-old-users-notifications.js
create mode 100644 api/migrations/20181211181146-add-usersthreads-user-id-and-participant-index.js
create mode 100644 api/migrations/seed/default/notifications.js
create mode 100644 api/migrations/seed/default/reactions.js
create mode 100644 api/migrations/seed/default/usersNotifications.js
create mode 100644 api/migrations/seed/default/usersSettings.js
delete mode 100644 api/models/db.js
delete mode 100644 api/models/expo-push-subscription.js
delete mode 100644 api/models/invoice.js
delete mode 100644 api/models/recurringPayment.js
delete mode 100644 api/models/stripeCustomers.js
delete mode 100644 api/models/stripeInvoices.js
delete mode 100644 api/models/stripeSources.js
delete mode 100644 api/models/stripeSubscriptions.js
create mode 100644 api/models/test/__snapshots__/channel.test.js.snap
create mode 100644 api/models/test/channel.test.js
create mode 100644 api/models/threadReaction.js
delete mode 100644 api/models/user.js
delete mode 100644 api/models/usersNotifications.js
delete mode 100644 api/mutations/channel/sendChannelEmailInvites.js
create mode 100644 api/mutations/channel/updateChannelSlackBotLinks.js
delete mode 100644 api/mutations/community/addPaymentSource.js
delete mode 100644 api/mutations/community/cancelSubscription.js
delete mode 100644 api/mutations/community/disableCommunityAnalytics.js
create mode 100644 api/mutations/community/disableCommunityTokenJoin.js
delete mode 100644 api/mutations/community/enableCommunityAnalytics.js
create mode 100644 api/mutations/community/enableCommunityTokenJoin.js
create mode 100644 api/mutations/community/importSlackMembers.js
delete mode 100644 api/mutations/community/makePaymentSourceDefault.js
delete mode 100644 api/mutations/community/removePaymentSource.js
create mode 100644 api/mutations/community/resetCommunityJoinToken.js
create mode 100644 api/mutations/communityMember/addCommunityMemberWithToken.js
create mode 100644 api/mutations/communityMember/addCommunityMembers.js
create mode 100644 api/mutations/communityMember/addPendingCommunityMember.js
create mode 100644 api/mutations/communityMember/approvePendingCommunityMember.js
create mode 100644 api/mutations/communityMember/blockPendingCommunityMember.js
create mode 100644 api/mutations/communityMember/removePendingCommunityMember.js
create mode 100644 api/mutations/message/editMessage.js
delete mode 100644 api/mutations/notification/markAllNotificationsRead.js
delete mode 100644 api/mutations/recurringPayment/downgradeCommunity.js
delete mode 100644 api/mutations/recurringPayment/downgradeFromPro.js
delete mode 100644 api/mutations/recurringPayment/index.js
delete mode 100644 api/mutations/recurringPayment/upgradeCommunity.js
delete mode 100644 api/mutations/recurringPayment/upgradeToPro.js
delete mode 100644 api/mutations/recurringPayment/utils.js
create mode 100644 api/mutations/thread/addThreadReaction.js
create mode 100644 api/mutations/thread/removeThreadReaction.js
create mode 100644 api/mutations/user/banUser.js
create mode 100644 api/mutations/user/deleteCurrentUser.js
create mode 100644 api/mutations/user/reportUser.js
delete mode 100644 api/mutations/user/subscribeExpoPush.js
create mode 100644 api/queries/channel/slackSettings.js
create mode 100644 api/queries/channelSlackSettings/botLinks.js
create mode 100644 api/queries/channelSlackSettings/index.js
delete mode 100644 api/queries/community/billingSettings.js
create mode 100644 api/queries/community/coverPhoto.js
delete mode 100644 api/queries/community/hasChargeableSource.js
delete mode 100644 api/queries/community/hasFeatures.js
delete mode 100644 api/queries/community/invoices.js
delete mode 100644 api/queries/community/isPro.js
create mode 100644 api/queries/community/joinSettings.js
create mode 100644 api/queries/community/profilePhoto.js
delete mode 100644 api/queries/community/recurringPayments.js
create mode 100644 api/queries/community/slackSettings.js
create mode 100644 api/queries/communitySlackSettings/hasSentInvites.js
create mode 100644 api/queries/communitySlackSettings/index.js
create mode 100644 api/queries/communitySlackSettings/invitesSentAt.js
create mode 100644 api/queries/communitySlackSettings/isConnected.js
create mode 100644 api/queries/communitySlackSettings/memberCount.js
create mode 100644 api/queries/communitySlackSettings/slackChannelList.js
create mode 100644 api/queries/communitySlackSettings/teamName.js
create mode 100644 api/queries/directMessageThread/rootDirectMessageThreadByUserId.js
delete mode 100644 api/queries/directMessageThread/utils.js
create mode 100644 api/queries/message/content.js
create mode 100644 api/queries/message/parent.js
create mode 100644 api/queries/thread/content.js
delete mode 100644 api/queries/thread/messageCount.js
create mode 100644 api/queries/thread/metaImage.js
create mode 100644 api/queries/thread/reactions.js
delete mode 100644 api/queries/user/invoices.js
delete mode 100644 api/queries/user/isPro.js
delete mode 100644 api/queries/user/recurringPayments.js
create mode 100644 api/routes/api/export-user-data.js
delete mode 100644 api/routes/api/graphiql.js
delete mode 100644 api/routes/api/graphql.js
delete mode 100644 api/routes/api/stripe.js
delete mode 100644 api/routes/webhooks/index.js
create mode 100644 api/test/channel/queries/__snapshots__/slackSettings.test.js.snap
create mode 100644 api/test/channel/queries/slackSettings.test.js
create mode 100644 api/test/community/queries/__snapshots__/slackSettings.test.js.snap
create mode 100644 api/test/community/queries/slackSettings.test.js
create mode 100644 api/test/utils/__mocks__/debug.js
create mode 100644 api/test/utils/__snapshots__/create-graphql-error-formatter.test.js.snap
create mode 100644 api/test/utils/create-graphql-error-formatter.test.js
create mode 100644 api/types/ChannelSlackSettings.js
create mode 100644 api/types/CommunitySlackSettings.js
create mode 100644 api/types/custom-scalars/LowercaseString.js
create mode 100644 api/utils/file-storage.js
create mode 100644 api/utils/file-system.js
create mode 100644 api/utils/generate-thread-meta-image-from-text.js
create mode 100644 api/utils/rate-limit-directive.js
create mode 100644 api/utils/validate-draft-js-input.js
create mode 100644 athena/models/channelSettings.js
create mode 100644 athena/models/communitySettings.js
delete mode 100644 athena/models/db.js
delete mode 100644 athena/models/recurringPayment.js
delete mode 100644 athena/models/slackImports.js
delete mode 100644 athena/models/user.js
delete mode 100644 athena/models/usersNotifications.js
delete mode 100644 athena/queues/community-invoice-paid.js
delete mode 100644 athena/queues/moderationEvents/spectrum.js
create mode 100644 athena/queues/private-community-request-approved.js
create mode 100644 athena/queues/private-community-request-sent.js
delete mode 100644 athena/queues/pro-invoice-paid.js
create mode 100644 athena/queues/send-slack-invitations.js
delete mode 100644 athena/queues/slack-import.js
create mode 100644 athena/queues/thread-reaction-notification.js
delete mode 100644 athena/utils/addQueue.js
delete mode 100644 athena/utils/push-notifications/send-expo-push-notifications.js
create mode 100644 athena/utils/slack/index.js
rename mobile/components/ThreadItem/utils.js => athena/utils/truncateString.js (72%)
create mode 100644 built-email-templates/adminActiveCommunityReport.html
create mode 100644 built-email-templates/adminCommunityCreated.html
create mode 100644 built-email-templates/adminSlackImportProcessed.html
create mode 100644 built-email-templates/adminToxicContent.html
create mode 100644 built-email-templates/adminUserReported.html
create mode 100644 built-email-templates/adminUserSpammingThreadsNotification.html
create mode 100644 built-email-templates/communityInvite.html
create mode 100644 built-email-templates/mentionInMessage.html
create mode 100644 built-email-templates/mentionInThread.html
create mode 100644 built-email-templates/newCommunityWelcome.html
create mode 100644 built-email-templates/newDirectMessage.html
create mode 100644 built-email-templates/newRepliesInThreads.html
create mode 100644 built-email-templates/newThreadNotification.html
create mode 100644 built-email-templates/newUserWelcome.html
create mode 100644 built-email-templates/privateChannelRequestApproved.html
create mode 100644 built-email-templates/privateChannelRequestSent.html
create mode 100644 built-email-templates/privateCommunityRequestApproved.html
create mode 100644 built-email-templates/privateCommunityRequestSent.html
create mode 100644 built-email-templates/validate-community-administrator-email.html
create mode 100644 built-email-templates/validate-email.html
create mode 100644 built-email-templates/weeklyDigest.html
delete mode 100644 cacert
delete mode 100644 chronos/models/channel.js
delete mode 100644 chronos/models/db.js
create mode 100644 chronos/models/usersNotifications.js
create mode 100644 chronos/models/utils.js
create mode 100644 chronos/queues/digests/dailyDigest.js
create mode 100644 chronos/queues/digests/getReputationString.js
create mode 100644 chronos/queues/digests/getUpsellCommunities.js
delete mode 100644 chronos/queues/digests/index.js
create mode 100644 chronos/queues/digests/processDigest.js
delete mode 100644 chronos/queues/digests/processDigestEmail.js
create mode 100644 chronos/queues/digests/processIndividualDigest.js
delete mode 100644 chronos/queues/digests/processReputation.js
delete mode 100644 chronos/queues/digests/processUsers.js
create mode 100644 chronos/queues/digests/test/__snapshots__/message-count-string.test.js.snap
create mode 100644 chronos/queues/digests/test/__snapshots__/reputation-string.test.js.snap
create mode 100644 chronos/queues/digests/test/message-count-string.test.js
create mode 100644 chronos/queues/digests/test/reputation-string.test.js
delete mode 100644 chronos/queues/digests/types.js
create mode 100644 chronos/queues/digests/weeklyDigest.js
create mode 100644 chronos/queues/remove-seen-usersNotifications.js
create mode 100644 chronos/types.js
create mode 100644 cypress/integration/apps_page_spec.js
create mode 100644 cypress/integration/channel/settings/members_spec.js
create mode 100644 cypress/integration/community/settings/create_spec.js
create mode 100644 cypress/integration/community/settings/private_invite_link_spec.js
create mode 100644 cypress/integration/community/view/profile_spec.js
delete mode 100644 cypress/integration/community_settings_billing_spec.js
delete mode 100644 cypress/integration/community_spec.js
create mode 100644 cypress/integration/faq_page_spec.js
create mode 100644 cypress/integration/messages_spec.js
create mode 100644 cypress/integration/navbar_spec.js
delete mode 100644 cypress/integration/pricing_spec.js
delete mode 100644 cypress/integration/thread/create_spec.js
delete mode 100644 cypress/integration/thread/delete_spec.js
delete mode 100644 cypress/integration/thread/edit_spec.js
create mode 100644 cypress/integration/user/delete_user_spec.js
create mode 100644 cypress/integration/user/edit_user_spec.js
create mode 100644 cypress/integration/user/me_redirect_spec.js
delete mode 100644 dangerfile.js
create mode 100644 desktop/README.md
create mode 100644 desktop/deployment.md
create mode 100644 desktop/package.json
create mode 100644 desktop/resources/background.tiff
create mode 100644 desktop/resources/icons/mac/icon.icns
create mode 100644 desktop/resources/icons/png/icon-512x512.png
create mode 100644 desktop/resources/icons/win/icon.ico
create mode 100644 desktop/resources/release-notes.md
create mode 100644 desktop/src/autoUpdate.js
create mode 100644 desktop/src/config.js
create mode 100644 desktop/src/main.js
create mode 100644 desktop/src/menu.js
create mode 100644 desktop/src/preload.js
create mode 100644 desktop/yarn.lock
create mode 100644 docs/admin/intro.md
create mode 100644 docs/api/graphql/fragments.md
create mode 100644 docs/api/graphql/intro.md
create mode 100644 docs/api/graphql/pagination.md
create mode 100644 docs/api/graphql/testing.md
create mode 100644 docs/api/graphql/tips-and-tricks.md
create mode 100644 docs/api/intro.md
rename docs/backend/{graphql => api}/README.md (100%)
rename docs/backend/{graphql => api}/fragments.md (100%)
rename docs/backend/{graphql => api}/pagination.md (100%)
rename docs/backend/{graphql => api}/testing.md (100%)
rename docs/backend/{graphql => api}/tips-and-tricks.md (92%)
delete mode 100644 docs/backend/athena/README.md
delete mode 100644 docs/backend/background-jobs.md
delete mode 100644 docs/backend/chronos/README.md
delete mode 100644 docs/backend/hermes/README.md
delete mode 100644 docs/backend/hyperion/README.md
delete mode 100644 docs/backend/mercury/README.md
delete mode 100644 docs/backend/vulcan/README.md
delete mode 100644 docs/deletingUsers.md
rename docs/{backend/deployment.md => deployments.md} (92%)
rename docs/{backend/hyperion/server-side-rendering.md => hyperion (server side rendering)/development.md} (83%)
create mode 100644 docs/hyperion (server side rendering)/intro.md
rename docs/{rethinkdb.md => operations/importing-rethinkdb-backups.md} (83%)
create mode 100644 docs/operations/intro.md
delete mode 100644 docs/testing.md
create mode 100644 docs/testing/integration.md
create mode 100644 docs/testing/intro.md
create mode 100644 docs/testing/unit.md
create mode 100644 docs/workers/analytics/intro.md
create mode 100644 docs/workers/athena/intro.md
create mode 100644 docs/workers/background-jobs.md
create mode 100644 docs/workers/chronos/intro.md
create mode 100644 docs/workers/hermes/intro.md
rename docs/{backend/README.md => workers/intro.md} (50%)
create mode 100644 docs/workers/mercury/intro.md
create mode 100644 docs/workers/vulcan/intro.md
create mode 100644 email-template-scripts/README.md
create mode 100644 email-template-scripts/inline-html-emails.py
create mode 100644 email-template-scripts/send-test-emails.js
create mode 100644 email-template-scripts/sendgrid-sync.js
create mode 100644 email-template-scripts/test-email-data/admin-active-community-report.json
create mode 100644 email-template-scripts/test-email-data/admin-community-created-notification.json
create mode 100644 email-template-scripts/test-email-data/admin-slack-import-completed.json
create mode 100644 email-template-scripts/test-email-data/admin-toxic-content.json
create mode 100644 email-template-scripts/test-email-data/admin-user-reported-alert.json
create mode 100644 email-template-scripts/test-email-data/admin-user-spamming-threads-alert.json
create mode 100644 email-template-scripts/test-email-data/community-admin-email-validation.json
create mode 100644 email-template-scripts/test-email-data/community-created.json
create mode 100644 email-template-scripts/test-email-data/community-invitation.json
create mode 100644 email-template-scripts/test-email-data/digest.json
create mode 100644 email-template-scripts/test-email-data/direct-message-received.json
create mode 100644 email-template-scripts/test-email-data/mention-in-message.json
create mode 100644 email-template-scripts/test-email-data/mention-in-thread.json
create mode 100644 email-template-scripts/test-email-data/message-in-threads.json
create mode 100644 email-template-scripts/test-email-data/new-user-welcome.json
create mode 100644 email-template-scripts/test-email-data/private-channel-request-approved.json
create mode 100644 email-template-scripts/test-email-data/private-channel-request-sent.json
create mode 100644 email-template-scripts/test-email-data/private-community-request-approved.json
create mode 100644 email-template-scripts/test-email-data/private-community-request-sent.json
create mode 100644 email-template-scripts/test-email-data/thread-created.json
create mode 100644 email-template-scripts/test-email-data/user-email-validation.json
create mode 100644 email-templates/adminUserReported.html
create mode 100644 email-templates/adminUserSpammingThreadsNotification.html
delete mode 100644 email-templates/communityCardExpiringWarning.html
delete mode 100644 email-templates/communityInvoiceReceipt.html
delete mode 100644 email-templates/communityPaymentFailed.html
delete mode 100644 email-templates/communityPaymentSucceeded.html
create mode 100644 email-templates/privateCommunityRequestApproved.html
create mode 100644 email-templates/privateCommunityRequestSent.html
delete mode 100644 email-templates/proInvoiceReceipt.html
create mode 100644 flow-typed/npm/@sendgrid/mail_vx.x.x.js
create mode 100644 flow-typed/npm/amplitude_vx.x.x.js
create mode 100644 flow-typed/npm/apollo-link-schema_vx.x.x.js
create mode 100644 flow-typed/npm/apollo-server-express_vx.x.x.js
create mode 100644 flow-typed/npm/b2a_vx.x.x.js
create mode 100644 flow-typed/npm/bluebird_vx.x.x.js
create mode 100644 flow-typed/npm/cryptr_vx.x.x.js
create mode 100644 flow-typed/npm/datadog-metrics_vx.x.x.js
create mode 100644 flow-typed/npm/dataloader_vx.x.x.js
create mode 100644 flow-typed/npm/decode-uri-component_vx.x.x.js
create mode 100644 flow-typed/npm/draft-js-export-markdown_vx.x.x.js
rename flow-typed/npm/{react-navigation_vx.x.x.js => electron-context-menu_vx.x.x.js} (60%)
create mode 100644 flow-typed/npm/electron-is-dev_vx.x.x.js
create mode 100644 flow-typed/npm/electron-updater_vx.x.x.js
rename flow-typed/npm/{react-native-typography_vx.x.x.js => electron-window-state_vx.x.x.js} (59%)
create mode 100644 flow-typed/npm/electron_vx.x.x.js
create mode 100644 flow-typed/npm/express-enforces-ssl_vx.x.x.js
create mode 100644 flow-typed/npm/express-hot-shots_vx.x.x.js
create mode 100644 flow-typed/npm/graphql-rate-limit_vx.x.x.js
create mode 100644 flow-typed/npm/helmet_vx.x.x.js
create mode 100644 flow-typed/npm/host-validation_vx.x.x.js
create mode 100644 flow-typed/npm/hot-shots_vx.x.x.js
create mode 100644 flow-typed/npm/hpp_vx.x.x.js
create mode 100644 flow-typed/npm/hsts_vx.x.x.js
create mode 100644 flow-typed/npm/idx_v2.x.x.js
delete mode 100644 flow-typed/npm/ioredis_v3.x.x.js
create mode 100644 flow-typed/npm/is-electron_vx.x.x.js
create mode 100644 flow-typed/npm/markdown-draft-js_vx.x.x.js
create mode 100644 flow-typed/npm/ms_vx.x.x.js
delete mode 100644 flow-typed/npm/query-string_v5.x.x.js
create mode 100644 flow-typed/npm/query-string_vx.x.x.js
create mode 100644 flow-typed/npm/raf_vx.x.x.js
create mode 100644 flow-typed/npm/react-hot-loader_vx.x.x.js
create mode 100644 flow-typed/npm/react-image_vx.x.x.js
create mode 100644 flow-typed/npm/react-mentions_vx.x.x.js
delete mode 100644 flow-typed/npm/react-navigation-props-mapper_vx.x.x.js
create mode 100644 flow-typed/npm/react-popper_vx.x.x.js
create mode 100644 flow-typed/npm/react-visibility-sensor_vx.x.x.js
create mode 100644 flow-typed/npm/redis-tag-cache_vx.x.x.js
create mode 100644 flow-typed/npm/request-ip_vx.x.x.js
create mode 100644 flow-typed/npm/rethinkhaberdashery_vx.x.x.js
create mode 100644 flow-typed/npm/sanitize-filename_vx.x.x.js
rename flow-typed/npm/{abab_vx.x.x.js => sha1_vx.x.x.js} (50%)
create mode 100644 flow-typed/npm/string-similarity_vx.x.x.js
create mode 100644 hermes/events/index.js
create mode 100644 hermes/models/usersSettings.js
create mode 100644 hermes/queues/send-admin-user-reported-email.js
create mode 100644 hermes/queues/send-admin-user-spamming-threads-notification-email.js
delete mode 100644 hermes/queues/send-community-card-expiring-warning-email.js
delete mode 100644 hermes/queues/send-community-invoice-receipt-email.js
delete mode 100644 hermes/queues/send-community-payment-failed-email.js
delete mode 100644 hermes/queues/send-community-payment-succeeded-email.js
create mode 100644 hermes/queues/send-private-community-request-approved-email.js
create mode 100644 hermes/queues/send-private-community-request-sent-email.js
delete mode 100644 hermes/queues/send-pro-invoice-receipt-email.js
create mode 100644 hermes/queues/sendgrid-webhook-events.js
create mode 100644 hermes/user-can-receive-email.js
create mode 100644 hermes/utils/smarten-string.js
delete mode 100644 hyperion/cache.js
delete mode 100644 hyperion/create-cache-stream.js
delete mode 100644 hyperion/redis.js
delete mode 100644 index.html
create mode 100644 mercury/functions/processThreadReactionCreated.js
create mode 100644 mercury/functions/processThreadReactionDeleted.js
delete mode 100644 mercury/functions/types.js
delete mode 100644 mercury/models/db.js
create mode 100644 mercury/queues/calculateThreadScore.js
delete mode 100644 mobile/.expo/Exponent.app/.gitkeep
delete mode 100644 mobile/.expo/settings.json
delete mode 100644 mobile/.gitignore
delete mode 100644 mobile/.idea/mobile.iml
delete mode 100644 mobile/.idea/modules.xml
delete mode 100644 mobile/.idea/workspace.xml
delete mode 100644 mobile/App.js
delete mode 100644 mobile/actions/authentication.js
delete mode 100644 mobile/app.json
delete mode 100644 mobile/assets/icon.png
delete mode 100644 mobile/assets/splash.png
delete mode 100644 mobile/components/.gitkeep
delete mode 100644 mobile/components/Anchor/index.js
delete mode 100644 mobile/components/Avatar/image.js
delete mode 100644 mobile/components/Avatar/img/default_avatar.svg
delete mode 100644 mobile/components/Avatar/img/default_community.svg
delete mode 100644 mobile/components/Avatar/index.js
delete mode 100644 mobile/components/Avatar/style.js
delete mode 100644 mobile/components/Avatar/utils.js
delete mode 100644 mobile/components/Codeblock/index.js
delete mode 100644 mobile/components/IFrame/index.js
delete mode 100644 mobile/components/InfiniteList/index.js
delete mode 100644 mobile/components/Login/index.js
delete mode 100644 mobile/components/Messages/index.js
delete mode 100644 mobile/components/SafeAreaView/index.js
delete mode 100644 mobile/components/Text/index.js
delete mode 100644 mobile/components/ThreadContent/index.js
delete mode 100644 mobile/components/ThreadContent/renderer.js
delete mode 100644 mobile/components/ThreadFeed/index.js
delete mode 100644 mobile/components/ThreadFeed/style.js
delete mode 100644 mobile/components/ThreadItem/Facepile.js
delete mode 100644 mobile/components/ThreadItem/ThreadCommunityInfo.js
delete mode 100644 mobile/components/ThreadItem/index.js
delete mode 100644 mobile/components/ThreadItem/style.js
delete mode 100644 mobile/components/ViewNetworkHandler/index.js
delete mode 100644 mobile/components/theme/index.js
delete mode 100644 mobile/jest.config.js
delete mode 100644 mobile/package.json
delete mode 100644 mobile/reducers/authentication.js
delete mode 100644 mobile/reducers/index.js
delete mode 100644 mobile/rn-cli.config.js
delete mode 100644 mobile/setupTests.js
delete mode 100644 mobile/utils/get-push-notification-token.js
delete mode 100644 mobile/utils/platform.js
delete mode 100644 mobile/views/Channel/index.js
delete mode 100644 mobile/views/Channel/style.js
delete mode 100644 mobile/views/Community/index.js
delete mode 100644 mobile/views/Community/style.js
delete mode 100644 mobile/views/Notifications/index.js
delete mode 100644 mobile/views/Splash/index.js
delete mode 100644 mobile/views/Splash/style.js
delete mode 100644 mobile/views/TabBar/BaseStack.js
delete mode 100644 mobile/views/TabBar/HomeStack.js
delete mode 100644 mobile/views/TabBar/NotificationsStack.js
delete mode 100644 mobile/views/TabBar/index.js
delete mode 100644 mobile/views/Thread/index.js
delete mode 100644 mobile/views/Thread/style.js
delete mode 100644 mobile/views/User/index.js
delete mode 100644 mobile/views/User/style.js
delete mode 100644 mobile/views/__e2e__/splash.spec.js
delete mode 100644 mobile/views/__tests__/.gitkeep
delete mode 100644 mobile/yarn.lock
delete mode 100644 pluto/changefeeds/analytics.js
delete mode 100644 pluto/changefeeds/community.js
delete mode 100644 pluto/changefeeds/index.js
delete mode 100644 pluto/changefeeds/moderator.js
delete mode 100644 pluto/changefeeds/openSourceStatus.js
delete mode 100644 pluto/changefeeds/privateChannel.js
delete mode 100644 pluto/changefeeds/support.js
delete mode 100644 pluto/create-worker-with-express.js
delete mode 100644 pluto/index.js
delete mode 100644 pluto/models/channel.js
delete mode 100644 pluto/models/community.js
delete mode 100644 pluto/models/stripeCustomers.js
delete mode 100644 pluto/models/usersCommunities.js
delete mode 100644 pluto/models/utils.js
delete mode 100644 pluto/package.json
delete mode 100644 pluto/queues/constants.js
delete mode 100644 pluto/queues/processAdministratorEmailChanged.js
delete mode 100644 pluto/queues/processAnalyticsAdded.js
delete mode 100644 pluto/queues/processAnalyticsRemoved.js
delete mode 100644 pluto/queues/processCardExpiringWarning.js
delete mode 100644 pluto/queues/processCommunityCreated.js
delete mode 100644 pluto/queues/processCommunityDeleted.js
delete mode 100644 pluto/queues/processCommunityEdited.js
delete mode 100644 pluto/queues/processModeratorAdded.js
delete mode 100644 pluto/queues/processModeratorRemoved.js
delete mode 100644 pluto/queues/processOssStatusActivated.js
delete mode 100644 pluto/queues/processOssStatusDisabled.js
delete mode 100644 pluto/queues/processOssStatusEnabled.js
delete mode 100644 pluto/queues/processPaymentFailed.js
delete mode 100644 pluto/queues/processPaymentSucceeded.js
delete mode 100644 pluto/queues/processPrioritySupportAdded.js
delete mode 100644 pluto/queues/processPrioritySupportRemoved.js
delete mode 100644 pluto/queues/processPrivateChannelAdded.js
delete mode 100644 pluto/queues/processPrivateChannelRemoved.js
delete mode 100644 pluto/queues/processStripeChargeWebhook.js
delete mode 100644 pluto/queues/processStripeCustomerWebhook.js
delete mode 100644 pluto/queues/processStripeDiscountWebhook.js
delete mode 100644 pluto/queues/processStripeInvoiceWebhook.js
delete mode 100644 pluto/queues/processStripeSourceWebhook.js
delete mode 100644 pluto/queues/processStripeSubscriptionWebhook.js
delete mode 100644 pluto/queues/removeAllPaidFeatures.js
delete mode 100644 pluto/webhooks/index.js
delete mode 100644 pluto/yarn.lock
delete mode 100644 public/_redirects
delete mode 100644 public/img/payment-methods/amex.svg
delete mode 100644 public/img/payment-methods/diners-club.svg
delete mode 100644 public/img/payment-methods/discover.svg
delete mode 100644 public/img/payment-methods/jcb.svg
delete mode 100644 public/img/payment-methods/mastercard.svg
delete mode 100644 public/img/payment-methods/visa.svg
create mode 100644 public/img/slack_colored.png
delete mode 100644 public/img/stripe-logo.png
create mode 100644 public/img/waterfall.png
create mode 100644 shared/analytics/README.md
create mode 100644 shared/analytics/event-types/channel.js
create mode 100644 shared/analytics/event-types/community.js
create mode 100644 shared/analytics/event-types/directMessage.js
create mode 100644 shared/analytics/event-types/directMessageThreads.js
create mode 100644 shared/analytics/event-types/emails.js
create mode 100644 shared/analytics/event-types/index.js
create mode 100644 shared/analytics/event-types/message.js
create mode 100644 shared/analytics/event-types/misc.js
create mode 100644 shared/analytics/event-types/navigation.js
create mode 100644 shared/analytics/event-types/notifications.js
create mode 100644 shared/analytics/event-types/page-apps.js
create mode 100644 shared/analytics/event-types/page-explore.js
create mode 100644 shared/analytics/event-types/page-features.js
create mode 100644 shared/analytics/event-types/page-home.js
create mode 100644 shared/analytics/event-types/page-inbox.js
create mode 100644 shared/analytics/event-types/page-login.js
create mode 100644 shared/analytics/event-types/page-support.js
create mode 100644 shared/analytics/event-types/pwa.js
create mode 100644 shared/analytics/event-types/reaction.js
create mode 100644 shared/analytics/event-types/search.js
create mode 100644 shared/analytics/event-types/thread.js
create mode 100644 shared/analytics/event-types/threadReaction.js
create mode 100644 shared/analytics/event-types/user.js
create mode 100644 shared/analytics/event-types/userOnboarding.js
create mode 100644 shared/analytics/event-types/web-push-notification.js
create mode 100644 shared/analytics/index.js
create mode 100644 shared/cache/redis.js
create mode 100644 shared/clients/analytics/index.js
create mode 100644 shared/clients/analytics/setUser.js
create mode 100644 shared/clients/analytics/track.js
create mode 100644 shared/clients/analytics/transformations.js
create mode 100644 shared/clients/analytics/unsetUser.js
delete mode 100644 shared/clients/draft-js/links-decorator/index.native.js
delete mode 100644 shared/clients/draft-js/mentions-decorator/index.native.js
create mode 100644 shared/clients/draft-js/mentions-decorator/test/core.test.js
create mode 100644 shared/clients/draft-js/message/types.js
create mode 100644 shared/clients/draft-js/utils/isShort.js
create mode 100644 shared/db/constants.js
create mode 100644 shared/db/create-query.js
create mode 100644 shared/db/db.js
create mode 100644 shared/db/index.js
create mode 100644 shared/db/queries/channel.js
create mode 100644 shared/db/queries/community.js
create mode 100644 shared/db/queries/message.js
create mode 100644 shared/db/queries/notifications.js
create mode 100644 shared/db/queries/thread.js
create mode 100644 shared/db/queries/user.js
create mode 100644 shared/db/queries/usersNotifications.js
create mode 100644 shared/db/queries/utils/trackNotifications.js
create mode 100644 shared/db/query-cache.js
create mode 100644 shared/encryption/index.js
create mode 100644 shared/graphql-cache-keys.js
create mode 100644 shared/graphql/constants.js
create mode 100644 shared/graphql/fragments/community/communityChannelConnectionWithSlackSettings.js
delete mode 100644 shared/graphql/fragments/invoice/invoiceInfo.js
delete mode 100644 shared/graphql/fragments/user/userRecurringPayments.js
create mode 100644 shared/graphql/mutations/channel/updateChannelSlackBotLinks.js
create mode 100644 shared/graphql/mutations/channel/updateSlackSettings.js
delete mode 100644 shared/graphql/mutations/community/addPaymentSource.js
delete mode 100644 shared/graphql/mutations/community/cancelSubscription.js
delete mode 100644 shared/graphql/mutations/community/disableCommunityAnalytics.js
create mode 100644 shared/graphql/mutations/community/disableCommunityTokenJoin.js
delete mode 100644 shared/graphql/mutations/community/downgradeCommunity.js
delete mode 100644 shared/graphql/mutations/community/enableCommunityAnalytics.js
create mode 100644 shared/graphql/mutations/community/enableCommunityTokenJoin.js
delete mode 100644 shared/graphql/mutations/community/makePaymentSourceDefault.js
delete mode 100644 shared/graphql/mutations/community/removePaymentSource.js
create mode 100644 shared/graphql/mutations/community/resetCommunityJoinToken.js
create mode 100644 shared/graphql/mutations/community/sendSlackInvites.js
delete mode 100644 shared/graphql/mutations/community/upgradeCommunity.js
create mode 100644 shared/graphql/mutations/communityMember/addCommunityMemberWithToken.js
create mode 100644 shared/graphql/mutations/communityMember/addCommunityMembers.js
create mode 100644 shared/graphql/mutations/communityMember/addPendingCommunityMember.js
create mode 100644 shared/graphql/mutations/communityMember/approvePendingCommunityMember.js
create mode 100644 shared/graphql/mutations/communityMember/blockPendingCommunityMember.js
create mode 100644 shared/graphql/mutations/communityMember/removePendingCommunityMember.js
create mode 100644 shared/graphql/mutations/message/editMessage.js
delete mode 100644 shared/graphql/mutations/slackImport/sendSlackInvitations.js
create mode 100644 shared/graphql/mutations/thread/addThreadReaction.js
create mode 100644 shared/graphql/mutations/thread/removeThreadReaction.js
create mode 100644 shared/graphql/mutations/user/banUser.js
create mode 100644 shared/graphql/mutations/user/deleteCurrentUser.js
delete mode 100644 shared/graphql/mutations/user/downgradeFromPro.js
create mode 100644 shared/graphql/mutations/user/reportUser.js
delete mode 100644 shared/graphql/mutations/user/subscribeExpoPush.js
delete mode 100644 shared/graphql/mutations/user/upgradeToPro.js
create mode 100644 shared/graphql/queries/community/getCommunityChannelsSlackSettings.js
delete mode 100644 shared/graphql/queries/community/getCommunityInvoices.js
delete mode 100644 shared/graphql/queries/community/getCommunityRecurringPayments.js
create mode 100644 shared/graphql/queries/community/getCommunitySlackSettings.js
create mode 100644 shared/graphql/queries/directMessageThread/getDirectMessageThreadByUserId.js
create mode 100644 shared/graphql/queries/message/getMessage.js
delete mode 100644 shared/graphql/queries/slackImport/getSlackImport.js
delete mode 100644 shared/graphql/queries/user/getCurrentUserInvoices.js
delete mode 100644 shared/graphql/queries/user/getCurrentUserRecurringPayments.js
create mode 100644 shared/imgix/getDefaultExpires.js
create mode 100644 shared/imgix/index.js
create mode 100644 shared/imgix/sign.js
create mode 100644 shared/imgix/signCommunity.js
create mode 100644 shared/imgix/signMessage.js
create mode 100644 shared/imgix/signThread.js
create mode 100644 shared/imgix/signUser.js
create mode 100644 shared/middlewares/csrf.js
create mode 100644 shared/middlewares/error-handler.js
create mode 100644 shared/middlewares/security.js
create mode 100644 shared/middlewares/statsd.js
rename athena/utils/push-notifications/notification-formatting.js => shared/notification-to-text.js (84%)
create mode 100644 shared/statsd.js
delete mode 100644 shared/stripe/index.js
delete mode 100644 shared/stripe/types/charge.js
delete mode 100644 shared/stripe/types/chargeEvent.js
delete mode 100644 shared/stripe/types/customer.js
delete mode 100644 shared/stripe/types/customerEvent.js
delete mode 100644 shared/stripe/types/discount.js
delete mode 100644 shared/stripe/types/invoice.js
delete mode 100644 shared/stripe/types/invoiceEvent.js
delete mode 100644 shared/stripe/types/invoiceItem.js
delete mode 100644 shared/stripe/types/plan.js
delete mode 100644 shared/stripe/types/source.js
delete mode 100644 shared/stripe/types/sourceEvent.js
delete mode 100644 shared/stripe/types/subscription.js
delete mode 100644 shared/stripe/types/subscriptionEvent.js
delete mode 100644 shared/stripe/types/subscriptionItem.js
delete mode 100644 shared/stripe/utils.js
rename athena/utils/push-notifications/test/__snapshots__/notification-formatting.test.js.snap => shared/test/__snapshots__/notification-to-text.test.js.snap (72%)
create mode 100644 shared/test/encryption.test.js
rename {athena/utils/push-notifications => shared}/test/fixtures/CHANNEL_CREATED.json (100%)
rename {athena/utils/push-notifications => shared}/test/fixtures/COMMUNITY_INVITE.json (100%)
rename {athena/utils/push-notifications => shared}/test/fixtures/DIRECT_MESSAGE_CREATED.json (100%)
create mode 100644 shared/test/fixtures/MEDIA_MESSAGE_CREATED.json
rename {athena/utils/push-notifications => shared}/test/fixtures/MENTION_MESSAGE.json (100%)
rename {athena/utils/push-notifications => shared}/test/fixtures/MENTION_THREAD.json (100%)
rename {athena/utils/push-notifications => shared}/test/fixtures/MESSAGE_CREATED.json (100%)
rename {athena/utils/push-notifications => shared}/test/fixtures/REACTION_CREATED.json (100%)
rename {athena/utils/push-notifications => shared}/test/fixtures/THREAD_CREATED.json (100%)
create mode 100644 shared/test/fixtures/THREAD_REACTION_CREATED.json
rename {athena/utils/push-notifications => shared}/test/fixtures/USER_JOINED_COMMUNITY.json (100%)
rename athena/utils/push-notifications/test/notification-formatting.test.js => shared/test/notification-to-text.test.js (80%)
rename {src/components => shared}/theme/index.js (81%)
create mode 100644 shared/time-formatting.js
create mode 100644 shared/truthy-values.js
create mode 100644 src/actions/message.js
create mode 100644 src/components/avatar/communityAvatar.js
delete mode 100644 src/components/avatar/hoverProfile.js
create mode 100644 src/components/avatar/userAvatar.js
delete mode 100644 src/components/chatInput/input.js
create mode 100644 src/components/conditionalWrap/index.js
create mode 100644 src/components/draft-js-plugins-editor/index.js
delete mode 100644 src/components/editForm/index.js
create mode 100644 src/components/error/ErrorBoundary.js
create mode 100644 src/components/error/SettingsFallback.js
create mode 100644 src/components/hoverProfile/channelContainer.js
create mode 100644 src/components/hoverProfile/channelProfile.js
create mode 100644 src/components/hoverProfile/communityContainer.js
create mode 100644 src/components/hoverProfile/communityProfile.js
create mode 100644 src/components/hoverProfile/index.js
create mode 100644 src/components/hoverProfile/loadingHoverProfile.js
create mode 100644 src/components/hoverProfile/style.js
create mode 100644 src/components/hoverProfile/userContainer.js
create mode 100644 src/components/hoverProfile/userProfile.js
create mode 100644 src/components/infiniteScroll/deduplicateChildren.js
create mode 100644 src/components/infiniteScroll/tallViewports.js
delete mode 100644 src/components/link/index.js
delete mode 100644 src/components/linkPreview/index.js
delete mode 100644 src/components/linkPreview/style.js
create mode 100644 src/components/listItems/channel/index.js
create mode 100644 src/components/listItems/channel/style.js
create mode 100644 src/components/mentionsInput/index.js
create mode 100644 src/components/mentionsInput/mentionSuggestion.js
create mode 100644 src/components/mentionsInput/style.js
create mode 100644 src/components/message/authorByline.js
create mode 100644 src/components/message/editingBody.js
create mode 100644 src/components/message/messageErrorFallback.js
delete mode 100644 src/components/modals/AdminEmailAddressVerificationModal/index.js
delete mode 100644 src/components/modals/AdminEmailAddressVerificationModal/style.js
create mode 100644 src/components/modals/BanUserModal/index.js
create mode 100644 src/components/modals/BanUserModal/style.js
create mode 100644 src/components/modals/ReportUserModal/index.js
create mode 100644 src/components/modals/ReportUserModal/style.js
delete mode 100644 src/components/modals/UpgradeAnalyticsModal/index.js
delete mode 100644 src/components/modals/UpgradeAnalyticsModal/style.js
delete mode 100644 src/components/modals/UpgradeModal/index.js
delete mode 100644 src/components/modals/UpgradeModal/style.js
delete mode 100644 src/components/modals/UpgradeModeratorSeatModal/index.js
delete mode 100644 src/components/modals/UpgradeModeratorSeatModal/style.js
delete mode 100644 src/components/modals/components/poweredByStripe.js
delete mode 100644 src/components/profile/channel.js
create mode 100644 src/components/redirectHandler/index.js
rename src/components/{draftjs-editor => rich-text-editor}/Embed.js (91%)
rename src/components/{draftjs-editor => rich-text-editor}/Image.js (94%)
create mode 100644 src/components/rich-text-editor/LanguageSelect.js
rename src/components/{draftjs-editor/index.js => rich-text-editor/container.js} (67%)
create mode 100644 src/components/rich-text-editor/index.js
rename src/components/{draftjs-editor => rich-text-editor}/prism-theme.css (100%)
rename src/components/{draftjs-editor => rich-text-editor}/style.js (56%)
rename src/components/{draftjs-editor => rich-text-editor}/toolbar.js (87%)
delete mode 100644 src/components/stripeCardForm/form.js
delete mode 100644 src/components/stripeCardForm/index.js
delete mode 100644 src/components/stripeCardForm/modalWell.js
delete mode 100644 src/components/stripeCardForm/style.js
create mode 100644 src/components/thirdPartyContextSetting/index.js
delete mode 100644 src/components/threadFeedCard/facePile.js
delete mode 100644 src/components/threadFeedCard/formattedThreadLocation.js
delete mode 100644 src/components/threadFeedCard/index.js
create mode 100644 src/components/threadLikes/index.js
create mode 100644 src/components/threadLikes/style.js
create mode 100644 src/components/usernameSearch/index.js
create mode 100644 src/components/usernameSearch/style.js
create mode 100644 src/components/visuallyHidden/index.js
create mode 100644 src/components/withCurrentUser/index.js
create mode 100644 src/helpers/analytics/index.js
delete mode 100644 src/helpers/consolidate-streamed-styles.js
create mode 100644 src/helpers/desktop-app-utils.js
delete mode 100644 src/helpers/events.js
create mode 100644 src/helpers/get-thread-link.js
create mode 100644 src/helpers/is-admin.js
create mode 100644 src/helpers/is-os.js
create mode 100644 src/helpers/is-viewing-marketing-page.js
create mode 100644 src/helpers/keycodes.js
create mode 100644 src/helpers/render-text-with-markdown-links.js
create mode 100644 src/hooks/useConnectionRestored.js
create mode 100644 src/hot-routes.js
create mode 100644 src/reducers/message.js
delete mode 100644 src/reducers/users.js
create mode 100644 src/subscribe-to-desktop-push.js
create mode 100644 src/views/channelSettings/components/editDropdown.js
rename src/views/channelSettings/components/{loginTokenSettings.js => joinTokenSettings.js} (95%)
rename src/views/channelSettings/components/{loginTokenToggle.js => joinTokenToggle.js} (96%)
create mode 100644 src/views/community/components/requestToJoinCommunity.js
delete mode 100644 src/views/communityAnalytics/components/analyticsUpsell/index.js
delete mode 100644 src/views/communityAnalytics/components/analyticsUpsell/style.js
delete mode 100644 src/views/communityBilling/components/administratorEmailForm.js
delete mode 100644 src/views/communityBilling/components/editSourceDropdown.js
delete mode 100644 src/views/communityBilling/components/invoice.js
delete mode 100644 src/views/communityBilling/components/mutationWrapper.js
delete mode 100644 src/views/communityBilling/components/source.js
delete mode 100644 src/views/communityBilling/components/subscription.js
delete mode 100644 src/views/communityBilling/index.js
delete mode 100644 src/views/communityBilling/style.js
delete mode 100644 src/views/communityBilling/utils.js
delete mode 100644 src/views/communityMembers/components/importSlack.js
create mode 100644 src/views/communityMembers/components/joinTokenSettings.js
create mode 100644 src/views/communityMembers/components/joinTokenToggle.js
create mode 100644 src/views/communityMembers/components/resetJoinToken.js
create mode 100644 src/views/communitySettings/components/slack/channelConnection.js
create mode 100644 src/views/communitySettings/components/slack/channelSlackManager.js
create mode 100644 src/views/communitySettings/components/slack/connectSlack.js
create mode 100644 src/views/communitySettings/components/slack/index.js
create mode 100644 src/views/communitySettings/components/slack/sendInvitations.js
create mode 100644 src/views/communitySettings/components/slack/style.js
delete mode 100644 src/views/compose/index.js
delete mode 100644 src/views/compose/style.js
create mode 100644 src/views/dashboard/components/desktopAppUpsell/index.js
create mode 100644 src/views/dashboard/components/desktopAppUpsell/style.js
delete mode 100644 src/views/dashboard/components/facepile.js
delete mode 100644 src/views/dashboard/components/inboxThread.js
create mode 100644 src/views/dashboard/components/inboxThread/activity.js
create mode 100644 src/views/dashboard/components/inboxThread/header/index.js
create mode 100644 src/views/dashboard/components/inboxThread/header/style.js
create mode 100644 src/views/dashboard/components/inboxThread/header/threadHeader.js
create mode 100644 src/views/dashboard/components/inboxThread/header/timestamp.js
create mode 100644 src/views/dashboard/components/inboxThread/header/userProfileThreadHeader.js
create mode 100644 src/views/dashboard/components/inboxThread/index.js
create mode 100644 src/views/dashboard/components/inboxThread/messageCount.js
create mode 100644 src/views/dashboard/components/inboxThread/style.js
delete mode 100644 src/views/dashboard/components/threadCommunityInfo.js
create mode 100644 src/views/directMessages/containers/index.js
create mode 100644 src/views/newUserOnboarding/components/appsUpsell/index.js
create mode 100644 src/views/newUserOnboarding/components/appsUpsell/style.js
delete mode 100644 src/views/newUserOnboarding/components/userInfo/index.js
delete mode 100644 src/views/newUserOnboarding/components/userInfo/style.js
create mode 100644 src/views/notifications/components/getCommunityMember.js
create mode 100644 src/views/notifications/components/newThreadReactionNotification.js
create mode 100644 src/views/notifications/components/privateCommunityRequestApprovedNotification.js
create mode 100644 src/views/notifications/components/privateCommunityRequestSentNotification.js
create mode 100644 src/views/pages/apps/index.js
create mode 100644 src/views/pages/apps/style.js
create mode 100644 src/views/pages/faq/index.js
create mode 100644 src/views/pages/faq/style.js
delete mode 100644 src/views/pages/pricing/components/communityList.js
delete mode 100644 src/views/pages/pricing/components/discount.js
delete mode 100644 src/views/pages/pricing/components/faq.js
delete mode 100644 src/views/pages/pricing/components/feature.js
delete mode 100644 src/views/pages/pricing/components/intro.js
delete mode 100644 src/views/pages/pricing/components/paid.js
delete mode 100644 src/views/pages/pricing/index.js
create mode 100644 src/views/privateCommunityJoin/index.js
create mode 100644 src/views/thread/components/desktopAppUpsell/index.js
create mode 100644 src/views/thread/components/desktopAppUpsell/style.js
create mode 100644 src/views/thread/components/watercoolerActionBar.js
create mode 100644 src/views/thread/container.js
create mode 100644 src/views/thread/redirect-old-route.js
create mode 100644 src/views/userSettings/components/deleteAccountForm.js
create mode 100644 src/views/userSettings/components/downloadDataForm.js
rename src/{components/editForm/user.js => views/userSettings/components/editForm.js} (56%)
delete mode 100644 src/views/userSettings/components/invoices.js
create mode 100644 src/views/userSettings/components/overview.js
delete mode 100644 src/views/userSettings/components/recurringPaymentsList.js
delete mode 100644 vulcan/models/community.js
delete mode 100644 vulcan/models/db.js
delete mode 100644 vulcan/models/message.js
delete mode 100644 vulcan/models/thread.js
delete mode 100644 vulcan/models/user.js
create mode 100644 vulcan/queues/constants.js
create mode 100644 vulcan/queues/events/created.js
create mode 100644 vulcan/queues/events/deleted.js
create mode 100644 vulcan/queues/events/edited.js
create mode 100644 vulcan/queues/index.js
create mode 100644 vulcan/queues/types/community.js
create mode 100644 vulcan/queues/types/message.js
create mode 100644 vulcan/queues/types/thread/index.js
create mode 100644 vulcan/queues/types/thread/moved.js
create mode 100644 vulcan/queues/types/user.js
create mode 100644 vulcan/utils/get-queue-from-type.js
rename vulcan/{models/utils.js => utils/index.js} (92%)
rename vulcan/{models => utils}/text-parsing.js (100%)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 6a65eef7ea..6e4a0bcac2 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -12,14 +12,13 @@ aliases:
- &save-yarn-cache
paths:
- node_modules
- - mobile/node_modules
- ~/.cache/yarn
key: v1-yarn-{{ arch }}-{{ checksum "package.json" }}
- &yarn
|
yarn
- cd ./mobile && yarn && yarn setup
+ cd ./desktop && yarn && cd ..
- &install-rethinkdb
name: Install RethinkDB 2.3.5
@@ -36,16 +35,19 @@ aliases:
background: true
- &setup-and-build-web
- name: Setup and build
+ name: Setup and build web
command:
|
- node -e "const setup = require('./shared/testing/setup.js')().then(() => process.exit())"
+ cp now-secrets.example.json now-secrets.json
yarn run build:web
- yarn run build:api
+
+ - &build-api
+ name: Build API
+ command: yarn run build:api
- &start-api
name: Start the API in the background
- command: TEST_DB=true yarn run dev:api
+ command: yarn run start:api:test
background: true
- &start-web
@@ -61,11 +63,6 @@ js_defaults: &js_defaults
docker:
- image: circleci/node:8
-macos_defaults: &macos_defaults
- <<: *defaults
- macos:
- xcode: "9.2.0"
-
version: 2
jobs:
@@ -90,28 +87,53 @@ jobs:
- image: circleci/node:8-browsers
- image: redis:3.2.7
- image: cypress/base:6
+ - image: rethinkdb:2.3.5
environment:
TERM: xterm
steps:
- attach_workspace:
at: ~/spectrum
- - run: *install-rethinkdb
- - run: *start-rethinkdb
- - run: sleep 10
+ - run: yarn run db:migrate
+ - run: yarn run db:seed
+ - run:
+ name: Run Unit Tests
+ command: yarn run test:ci
- run: *setup-and-build-web
+ - run: *build-api
- run: *start-api
- run: *start-web
- - run: sleep 60
+ # Wait for the API and webserver to start
+ - run: ./node_modules/.bin/wait-on http://localhost:3000 http://localhost:3001
- run:
name: Run Unit Tests
command: yarn run test:ci
+ - run:
+ name: Install Cypress
+ command: yarn run cypress:install
- run:
name: Run E2E Tests
- command: yarn run test:e2e
+ command: test $CYPRESS_RECORD_KEY && yarn run test:e2e -- --record || yarn run test:e2e
- run:
- name: Danger
- when: always
- command: yarn run danger ci
+ name: Test desktop apps
+ command: yarn run test:desktop
+
+ # deploy_alpha:
+ # <<: *js_defaults
+ # docker:
+ # - image: circleci/node:8-browsers
+ # steps:
+ # - attach_workspace:
+ # at: ~/spectrum
+ # - run: *build-api
+ # - run:
+ # name: Deploy and alias API
+ # command: |
+ # cd build-api
+ # npx now-cd --alias "alpha=api.alpha.spectrum.chat" --team space-program
+ # cd ..
+ # - run:
+ # name: Deploy and alias Hyperion
+ # command: npx now-cd --alias "alpha=hyperion.alpha.spectrum.chat" --team space-program
# Run eslint, flow etc.
test_static_js:
@@ -126,57 +148,26 @@ jobs:
name: Run ESLint
command: yarn run lint
- # Tests js of the mobile app
- test_mobile_js:
- <<: *js_defaults
- steps:
- - attach_workspace:
- at: ~/spectrum
- - run: cd ./mobile && yarn test:unit
-
- # Tests native code of the mobile app
- test_mobile_native:
- <<: *macos_defaults
- steps:
- - attach_workspace:
- at: ~/spectrum
- - run:
- name: Install Expo CLI
- command: npm install -g exp
- - run:
- name: Install Detox dependencies
- command: |
- brew tap wix/brew
- brew install applesimutils --HEAD
- npm install -g detox-cli
- - run:
- name: Rebuild Detox frameworks
- command: |
- cd ./mobile
- detox clean-framework-cache
- detox build-framework-cache
- - run:
- name: Start Packager in the background
- command: cd ./mobile && exp start
- background: true
- - run: cd ./mobile && yarn test:e2e
-
workflows:
version: 2
test:
jobs:
- checkout_environment
- - test_mobile_js:
- requires:
- - checkout_environment
- # Disabled as Expo is fixing their critical issue with Detox
- # - test_mobile_native:
- # requires:
- # - checkout_environment
+
+ # Testing
- test_web:
requires:
- checkout_environment
- test_static_js:
requires:
- checkout_environment
+
+ # Deployment
+ # - deploy_alpha:
+ # requires:
+ # - test_static_js
+ # - test_web
+ # filters:
+ # branches:
+ # only: alpha
diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 952e3b9b7e..0000000000
--- a/.editorconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-
-root = true
-
-[*]
-indent_style = space
-indent_size = 2
-end_of_line = lf
-charset = utf-8
-trim_trailing_whitespace = true
-insert_final_newline = true
-
-[*.md]
-trim_trailing_whitespace = false
diff --git a/.eslintignore b/.eslintignore
index c214a50fe2..db347ab95e 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -7,7 +7,6 @@ npm-debug.log
build
.DS_Store
src/config/FirebaseConfig.js
-npm-debug.log
rethinkdb_data
debug
now-secrets.json
@@ -19,7 +18,6 @@ build-chronos
build-mercury
build-vulcan
build-hyperion
-build-pluto
package-lock.json
.vscode
dump.rdb
@@ -30,6 +28,4 @@ test-extend.js
stats.json
iris/.env
api/.env
-.expo
-mobile/.expo
test-results.json
diff --git a/.eslintrc.js b/.eslintrc.js
index 1383a7ba4f..a1e3ac97d4 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1,12 +1,25 @@
module.exports = {
- extends: 'react-app',
+ extends: 'eslint:recommended',
+ parser: 'babel-eslint',
env: {
- node: false,
+ es6: true,
+ node: true,
},
+ parserOptions: {
+ ecmaVersion: 6,
+ sourceType: 'module',
+ ecmaFeatures: {
+ jsx: true,
+ },
+ },
+ plugins: ['eslint-plugin-flowtype'],
rules: {
- 'no-unused-vars': 0,
'no-undef': 0,
- radix: 0,
- 'import/first': 0,
+ 'no-console': ['warn', { allow: ['warn', 'error'] }],
+ 'no-unused-vars': 0,
+ 'no-empty': 0,
+ 'no-useless-escape': 1,
+ 'no-fallthrough': 1,
+ 'no-extra-boolean-cast': 1,
},
};
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 510dfaf1d3..0000000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "env": {
- "browser": true,
- "commonjs": true,
- "es6": true,
- "node": true
- },
- "parserOptions": {
- "ecmaFeatures": {
- "jsx": true
- },
- "sourceType": "module"
- },
- "rules": {
- "no-const-assign": 1,
- "no-extra-semi": 0,
- "semi": 0,
- "no-fallthrough": 0,
- "no-empty": 0,
- "no-mixed-spaces-and-tabs": 0,
- "no-redeclare": 0,
- "no-this-before-super": 1,
- "no-undef": 0,
- "no-unreachable": 1,
- "no-unused-vars": 1,
- "no-use-before-define": 0,
- "constructor-super": 1,
- "curly": 0,
- "eqeqeq": 0,
- "func-names": 0,
- "valid-typeof": 1
- }
-}
\ No newline at end of file
diff --git a/.flowconfig b/.flowconfig
index 29cbf4e011..45bff64eb6 100644
--- a/.flowconfig
+++ b/.flowconfig
@@ -1,22 +1,22 @@
[ignore]
-.*/node_modules/.*
.*/build.*
.*/*.test.js
-.*/.expo
-
-[include]
-
-[libs]
+.*/node_modules/cypress
+.*/node_modules/draft-js
+.*/node_modules/graphql
+.*/node_modules/protobufjs-no-cli
+.*/node_modules/reqwest
+.*/node_modules/react-apollo
+.*/node_modules/dataloader
+/node_modules/*
+/email-template-scripts/*
[options]
suppress_comment=.*\\$FlowFixMe
suppress_comment=.*\\$FlowIssue
esproposal.class_instance_fields=enable
module.system.node.resolve_dirname=node_modules
-module.system.node.resolve_dirname=spectrum
-module.file_ext=.ios.js
-module.file_ext=.android.js
-module.file_ext=.native.js
+module.system.node.resolve_dirname=.
module.file_ext=.web.js
module.file_ext=.js
module.file_ext=.jsx
@@ -29,4 +29,4 @@ unclear-type=warn
unsafe-getters-setters=error
[version]
-0.66.0
+0.66.0
\ No newline at end of file
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 56f09d8c26..77970e62c4 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -7,12 +7,13 @@
**Deploy after merge (delete what needn't be deployed)**
- api
- hyperion (frontend)
+- desktop
- athena
- vulcan
- mercury
- hermes
- chronos
-- mobile
+- analytics
**Run database migrations (delete if no migration was added)**
YES
@@ -20,3 +21,8 @@ YES
**Release notes for users (delete if codebase-only change)**
-
+**Related issues (delete if you don't know of any)**
+Closes #
+
+
+
diff --git a/.gitignore b/.gitignore
index 0acb427541..405378a4f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@ build
.DS_Store
src/config/FirebaseConfig.js
npm-debug.log
+yarn-error.log
rethinkdb_data
debug
now-secrets.json
@@ -16,7 +17,8 @@ build-chronos
build-mercury
build-vulcan
build-hyperion
-build-pluto
+build-electron
+build-analytics
package-lock.json
.vscode
dump.rdb
@@ -27,6 +29,9 @@ test-extend.js
stats.json
iris/.env
api/.env
-.expo
-mobile/.expo
test-results.json
+desktop/release
+public/uploads
+cypress/screenshots/
+cypress/videos/
+cacert
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000000..032ff45d57
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,46 @@
+# This is used by now when deploying hyperion, replacing .gitignore
+# NOTE(@mxstbr): The important change is that `cacert` is NOT ignored!
+node_modules
+.sass-cache
+npm-debug.log
+build
+.DS_Store
+src/config/FirebaseConfig.js
+npm-debug.log
+yarn-error.log
+rethinkdb_data
+debug
+now-secrets.json
+build-iris
+build-api
+build-athena
+build-hermes
+build-chronos
+build-mercury
+build-vulcan
+build-hyperion
+build-electron
+build-analytics
+package-lock.json
+.vscode
+dump.rdb
+*.swp
+queries-by-response-size.js
+queries-by-time.js
+test-extend.js
+stats.json
+iris/.env
+api/.env
+test-results.json
+public/uploads
+cypress/screenshots/
+cypress/videos/
+
+# This is hyperion-now-specific, do not copy to .gitignore
+desktop
+docs
+cypress
+admin
+.circleci
+.github
+
diff --git a/.prettierignore b/.prettierignore
index c6417d938a..d70da09d9d 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1 +1,3 @@
flow-typed
+package.json
+shared/analytics/event-types/*
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000000..c1a6f66713
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,4 @@
+{
+ "singleQuote": true,
+ "trailingComma": "es5"
+}
diff --git a/README.md b/README.md
index f434f8de46..834b7a687a 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@
[![Spectrum](./public/img/media.png)](https://spectrum.chat)
### Simple, powerful online communities.
-
+
This is the main monorepo codebase of [Spectrum](https://spectrum.chat). Every single line of code that's not packaged into a reusable library is in this repository.
@@ -16,7 +16,7 @@ It is difficult to grow, manage and measure the impact of online communities. Co
Spectrum aims to be the best platform to build any kind of community online by combining the best of web 2.0 forums and real-time chat apps. With best-in-class moderation tooling, a single platform for all your communities, threaded conversations by default, community health monitoring (and much more to come), we think that we will be able to help more people start and grow the best online communities.
-> "[Spectrum] will take the place that Reddit used to have a long time ago for communities (especially tech) to freely share ideas and iteract. Except realtime and trolling-free."
+> "[Spectrum] will take the place that Reddit used to have a long time ago for communities (especially tech) to freely share ideas and interact. Except realtime and trolling-free."
>
> \- [Guillermo Rauch (@rauchg)](https://twitter.com/rauchg/status/930946768841228288)
@@ -39,17 +39,17 @@ Spectrum has been under full-time development since March, 2017. See [the roadma
- [First time setup](#first-time-setup)
- [Running the app locally](#running-the-app-locally)
- [Roadmap](https://github.com/withspectrum/spectrum/projects/19)
-- Technical
- - [Testing](docs/testing.md)
- - [Background Jobs](docs/backend/background-jobs.md)
- - [Deployment](docs/backend/deployment.md)
- - [GraphQL](docs/backend/api/)
+- [Technical](docs/)
+ - [Testing](docs/testing/intro.md)
+ - [Background Jobs](docs/workers/background-jobs.md)
+ - [Deployment](docs/deployments.md)
+ - [API](docs/backend/api/)
- [Fragments](docs/backend/api/fragments.md)
- [Pagination](docs/backend/api/pagination.md)
- [Testing](docs/backend/api/testing.md)
- [Tips and Tricks](docs/backend/api/tips-and-tricks.md)
-## Contributing
+## Contributing
**We heartily welcome any and all contributions that match [our product roadmap](https://github.com/withspectrum/spectrum/projects/19) and engineering standards!**
@@ -67,7 +67,7 @@ If you found a technical bug on Spectrum or have ideas for features we should im
#### Fixing a bug or implementing a new feature
-If you find a bug on Spectrum and open a PR that fixes it we'll review it as soon as possible to ensure it matches our engineering standards. If you want implement a new feature, open an issue first to discuss what it'd look like and to ensure it fits in [our roadmap](https://github.com/withspectrum/spectrum/projects/19) and plans for the app.
+If you find a bug on Spectrum and open a PR that fixes it we'll review it as soon as possible to ensure it matches our engineering standards. If you want to implement a new feature, open an issue first to discuss what it'd look like and to ensure it fits in [our roadmap](https://github.com/withspectrum/spectrum/projects/19) and plans for the app.
If you want to contribute but are unsure to start, we have [a "good first issue" label](https://github.com/withspectrum/spectrum/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) which is applied to newcomer-friendly issues. Take a look at [the full list of good first issues](https://github.com/withspectrum/spectrum/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) and pick something you like! There is also [an "open" channel in the Spectrum community on Spectrum](https://spectrum.chat/spectrum/open) (how meta), if you run into troubles while trying to contribute that is the best place to talk to us.
@@ -83,7 +83,7 @@ Want to fix a bug or implement an agreed-upon feature? Great, jump to the [local
With the ground rules out of the way, let's talk about the coarse architecture of this mono repo:
-- **Full-stack JavaScript**: We use Node.js to power our servers, and React to power our frontend and mobile apps. Almost all of the code you'll touch in this codebase will be JavaScript.
+- **Full-stack JavaScript**: We use Node.js to power our servers, and React to power our frontend apps. Almost all of the code you'll touch in this codebase will be JavaScript.
- **Background Jobs**: We leverage background jobs (powered by [`bull`](https://github.com/OptimalBits/bull) and Redis) a lot. These jobs are handled by a handful of small worker servers, each with its own purpose.
Here is a list of all the big technologies we use:
@@ -93,8 +93,7 @@ Here is a list of all the big technologies we use:
- **GraphQL**: API, powered by the entire Apollo toolchain
- **Flowtype**: Type-safe JavaScript
- **PassportJS**: Authentication
-- **React**: Frontend and mobile apps
-- **Expo**: Mobile apps
+- **React**: Frontend React app
- **DraftJS**: WYSIWYG writing experience on the web
#### Folder structure
@@ -104,13 +103,12 @@ spectrum/
├── api # API server
├── athena # Worker server (notifications and general processing)
├── chronos # Worker server (cron jobs)
+├── desktop # desktop apps (build with electron)
├── docs
├── email-templates
├── hermes # Worker server (email sending)
├── hyperion # Server rendering server
├── mercury # Worker server (reputation)
-├── mobile # Mobile apps
-├── pluto # Worker server (payments; syncing with Stripe)
├── public # Public files used on the frontend
├── shared # Shared JavaScript code
├── src # Frontend SPA
@@ -151,6 +149,11 @@ The first step to running Spectrum locally is downloading the code by cloning th
```sh
git clone git@github.com:withspectrum/spectrum.git
+```
+ If you get `Permission denied` error using `ssh` refer [here](https://help.github.com/articles/error-permission-denied-publickey/)
+or use `https` link as a fallback.
+```sh
+git clone https://github.com/withspectrum/spectrum.git
```
#### Installation
@@ -185,6 +188,19 @@ yarn run db:seed
# ⚠️ To empty the database (e.g. if there's faulty data) run yarn run db:drop
```
+There's a shortcut for dropping, migrating and seeding the database too:
+```sh
+yarn run db:reset
+```
+
+The `testing` database used in end to end tests is managed separately. It is built, migrated, and seeded when you run:
+
+```sh
+yarn run start:api:test
+```
+
+To drop the `testing` database, go to http://localhost:8080/#tables while `rethinkdb` is running, and click Delete Database on the appropriate database.
+
#### Getting the secrets
While the app will run without any secrets set up, you won't be able to sign in locally. To get that set up, copy the provided example secrets file to the real location:
@@ -225,38 +241,26 @@ yarn run dev:api
#### Develop the web UI
-To develop the frontend and web UI run
+To develop the frontend and web UI run
```
yarn run dev:web
```
-#### Develop the mobile apps
+#### Develop the desktop app
-To start the mobile apps run:
+To develop the desktop app you have to have the dev web server running in the background (`yarn run dev:web`) and then, in another terminal tab, run:
```
-yarn run dev:mobile
-```
-
-And then open either the iOS simulator or the Android simulator with
-
-```sh
-yarn run open:ios
-# or
-yarn run open:android
+yarn run dev:desktop
```
-Refer to [the Expo documentation on how to install the simulators](https://docs.expo.io/versions/v25.0.0/guides/debugging.html#using-a-simulator--emulator).
-
-> Note: If something didn't work or you ran into troubles please submit PRs to improve this doc and keep it up to date!
-
-
-
-
-
-
-## License
+> Note: If something didn't work or you ran into troubles please submit PRs to improve this doc and keep it up to date!
-BSD 3-Clause, see the [LICENSE](./LICENSE) file.
+
+
+
+
+## License
+BSD 3-Clause, see the [LICENSE](./LICENSE) file.
\ No newline at end of file
diff --git a/admin/README.md b/admin/README.md
index a04686c9ce..5971086785 100644
--- a/admin/README.md
+++ b/admin/README.md
@@ -213,8 +213,8 @@ To configure the syntax highlighting in your favorite text editor, head to the [
## Displaying Lint Output in the Editor
->Note: this feature is available with `react-scripts@0.2.0` and higher.
->It also only works with npm 3 or higher.
+> Note: this feature is available with `react-scripts@0.2.0` and higher.
+> It also only works with npm 3 or higher.
Some editors, including Sublime Text, Atom, and Visual Studio Code, provide plugins for ESLint.
@@ -464,7 +464,7 @@ Then in `package.json`, add the following lines to `scripts`:
"test": "react-scripts test --env=jsdom",
```
->Note: To use a different preprocessor, replace `build-css` and `watch-css` commands according to your preprocessor’s documentation.
+> Note: To use a different preprocessor, replace `build-css` and `watch-css` commands according to your preprocessor’s documentation.
Now you can rename `src/App.css` to `src/App.scss` and run `npm run watch-css`. The watcher will find every Sass file in `src` subdirectories, and create a corresponding CSS file next to it, in our case overwriting `src/App.css`. Since `src/App.js` still imports `src/App.css`, the styles become a part of your application. You can now edit `src/App.scss`, and `src/App.css` will be regenerated.
@@ -565,7 +565,7 @@ An alternative way of handling static assets is described in the next section.
## Using the `public` Folder
->Note: this feature is available with `react-scripts@0.5.0` and higher.
+> Note: this feature is available with `react-scripts@0.5.0` and higher.
### Changing the HTML
@@ -586,7 +586,7 @@ This mechanism provides a number of benefits:
However there is an **escape hatch** that you can use to add an asset outside of the module system.
-If you put a file into the `public` folder, it will **not** be processed by Webpack. Instead it will be copied into the build folder untouched. To reference assets in the `public` folder, you need to use a special variable called `PUBLIC_URL`.
+If you put a file into the `public` folder, it will **not** be processed by Webpack. Instead it will be copied into the build folder untouched. To reference assets in the `public` folder, you need to use a special variable called `PUBLIC_URL`.
Inside `index.html`, you can use it like this:
@@ -701,7 +701,7 @@ To learn more about Flow, check out [its documentation](https://flowtype.org/).
## Adding Custom Environment Variables
->Note: this feature is available with `react-scripts@0.2.3` and higher.
+> Note: this feature is available with `react-scripts@0.2.3` and higher.
Your project can consume variables declared in your environment as if they were declared locally in your JS files. By
default you will have `NODE_ENV` defined for you, and any other environment variables starting with
@@ -709,7 +709,7 @@ default you will have `NODE_ENV` defined for you, and any other environment vari
**The environment variables are embedded during the build time**. Since Create React App produces a static HTML/CSS/JS bundle, it can’t possibly read them at runtime. To read them at runtime, you would need to load HTML into memory on the server and replace placeholders in runtime, just like [described here](#injecting-data-from-the-server-into-the-page). Alternatively you can rebuild the app on the server anytime you change them.
->Note: You must create custom environment variables beginning with `REACT_APP_`. Any other variables except `NODE_ENV` will be ignored to avoid accidentally [exposing a private key on the machine that could have the same name](https://github.com/facebookincubator/create-react-app/issues/865#issuecomment-252199527). Changing any environment variables will require you to restart the development server if it is running.
+> Note: You must create custom environment variables beginning with `REACT_APP_`. Any other variables except `NODE_ENV` will be ignored to avoid accidentally [exposing a private key on the machine that could have the same name](https://github.com/facebookincubator/create-react-app/issues/865#issuecomment-252199527). Changing any environment variables will require you to restart the development server if it is running.
These environment variables will be defined for you on `process.env`. For example, having an environment
variable named `REACT_APP_SECRET_CODE` will be exposed in your JS as `process.env.REACT_APP_SECRET_CODE`.
@@ -764,7 +764,7 @@ When you compile the app with `npm run build`, the minification step will strip
### Referencing Environment Variables in the HTML
->Note: this feature is available with `react-scripts@0.9.0` and higher.
+> Note: this feature is available with `react-scripts@0.9.0` and higher.
You can also access the environment variables starting with `REACT_APP_` in the `public/index.html`. For example:
@@ -798,7 +798,7 @@ REACT_APP_SECRET_CODE=abcdef npm start
### Adding Development Environment Variables In `.env`
->Note: this feature is available with `react-scripts@0.5.0` and higher.
+> Note: this feature is available with `react-scripts@0.5.0` and higher.
To define permanent environment variables, create a file called `.env` in the root of your project:
@@ -810,7 +810,7 @@ REACT_APP_SECRET_CODE=abcdef
#### What other `.env` files are can be used?
->Note: this feature is **available with `react-scripts@1.0.0` and higher**.
+> Note: this feature is **available with `react-scripts@1.0.0` and higher**.
* `.env`: Default.
* `.env.local`: Local overrides. **This file is loaded for all environments except test.**
@@ -826,7 +826,7 @@ Files on the left have more priority than files on the right:
These variables will act as the defaults if the machine does not explicitly set them.
Please refer to the [dotenv documentation](https://github.com/motdotla/dotenv) for more details.
->Note: If you are defining environment variables for development, your CI and/or hosting platform will most likely need
+> Note: If you are defining environment variables for development, your CI and/or hosting platform will most likely need
these defined as well. Consult their documentation how to do this. For example, see the documentation for [Travis CI](https://docs.travis-ci.com/user/environment-variables/) or [Heroku](https://devcenter.heroku.com/articles/config-vars).
## Can I Use Decorators?
@@ -862,7 +862,7 @@ You can find the companion GitHub repository [here](https://github.com/fullstack
## Proxying API Requests in Development
->Note: this feature is available with `react-scripts@0.2.3` and higher.
+> Note: this feature is available with `react-scripts@0.2.3` and higher.
People often serve the front-end React app from the same host and port as their backend implementation.
For example, a production setup might look like this after the app is deployed:
@@ -904,7 +904,7 @@ When you enable the `proxy` option, you opt into a more strict set of host check
This shouldn’t affect you when developing on `localhost`, but if you develop remotely like [described here](https://github.com/facebookincubator/create-react-app/issues/2271), you will see this error in the browser after enabling the `proxy` option:
->Invalid Host header
+> Invalid Host header
To work around it, you can specify your public development host in a file called `.env.development` in the root of your project:
@@ -926,7 +926,7 @@ We don’t recommend this approach.
### Configuring the Proxy Manually
->Note: this feature is available with `react-scripts@1.0.0` and higher.
+> Note: this feature is available with `react-scripts@1.0.0` and higher.
If the `proxy` option is **not** flexible enough for you, you can specify an object in the following form (in `package.json`).
You may also specify any configuration value [`http-proxy-middleware`](https://github.com/chimurai/http-proxy-middleware#options) or [`http-proxy`](https://github.com/nodejitsu/node-http-proxy#options) supports.
@@ -984,7 +984,7 @@ You may also narrow down matches using `*` and/or `**`, to match the path exactl
## Using HTTPS in Development
->Note: this feature is available with `react-scripts@0.4.0` and higher.
+> Note: this feature is available with `react-scripts@0.4.0` and higher.
You may require the dev server to serve pages over HTTPS. One particular case where this could be useful is when using [the "proxy" feature](#proxying-api-requests-in-development) to proxy requests to an API server when that API server is itself serving HTTPS.
@@ -1049,7 +1049,7 @@ Then, on the server, you can replace `__SERVER_DATA__` with a JSON of real data
## Running Tests
->Note: this feature is available with `react-scripts@0.3.0` and higher.
+> Note: this feature is available with `react-scripts@0.3.0` and higher.
>[Read the migration guide to learn how to enable it in older projects!](https://github.com/facebookincubator/create-react-app/blob/master/CHANGELOG.md#migrating-from-023-to-030)
Create React App uses [Jest](https://facebook.github.io/jest/) as its test runner. To prepare for this integration, we did a [major revamp](https://facebook.github.io/jest/blog/2016/09/01/jest-15.html) of Jest so if you heard bad things about it years ago, give it another try.
@@ -1198,7 +1198,7 @@ and then use them in your tests like you normally do.
### Initializing Test Environment
->Note: this feature is available with `react-scripts@0.4.0` and higher.
+> Note: this feature is available with `react-scripts@0.4.0` and higher.
If your app uses a browser API that you need to mock in your tests or if you just need a global setup before running your tests, add a `src/setupTests.js` to your project. It will be automatically executed before running your tests.
@@ -1281,7 +1281,7 @@ CI=true npm run build
The test command will force Jest to run tests once instead of launching the watcher.
-> If you find yourself doing this often in development, please [file an issue](https://github.com/facebookincubator/create-react-app/issues/new) to tell us about your use case because we want to make watcher the best experience and are open to changing how it works to accommodate more workflows.
+> If you find yourself doing this often in development, please [file an issue](https://github.com/facebookincubator/create-react-app/issues/new) to tell us about your use case because we want to make watcher the best experience and are open to changing how it works to accommodate more workflows.
The build command will check for linter warnings and fail if any are found.
@@ -1561,7 +1561,7 @@ This will let Create React App correctly infer the root path to use in the gener
#### Serving the Same Build from Different Paths
->Note: this feature is available with `react-scripts@0.9.0` and higher.
+> Note: this feature is available with `react-scripts@0.9.0` and higher.
If you are not using the HTML5 `pushState` history API or not using client-side routing at all, it is unnecessary to specify the URL from which your app will be served. Instead, you can put this in your `package.json`:
@@ -1638,7 +1638,7 @@ For more information see [Add Firebase to your JavaScript Project](https://fireb
### GitHub Pages
->Note: this feature is available with `react-scripts@0.2.0` and higher.
+> Note: this feature is available with `react-scripts@0.2.0` and higher.
#### Step 1: Add `homepage` to `package.json`
diff --git a/admin/package.json b/admin/package.json
index ad9a021deb..2ce71dfe0f 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -25,7 +25,6 @@
"apollo-link-http": "^1.3.2",
"apollo-link-ws": "^1.0.4",
"apollo-upload-client": "6.x",
- "apollo-upload-server": "^2.0.4",
"apollo-utilities": "^1.0.4",
"d3-array": "^1.2.0",
"graphql": "^0.12.3",
@@ -44,11 +43,8 @@
"subscriptions-transport-ws": "^0.9.5"
},
"scripts": {
- "start": "react-scripts start",
- "build": "react-scripts build",
- "test": "react-scripts test --env=jsdom",
- "eject": "react-scripts eject",
- "predeploy": "npm run build",
- "deploy": "now build"
+ "start": "NODE_PATH=../ react-scripts start",
+ "build": "NODE_PATH=../ react-scripts build",
+ "test": "NODE_PATH=../ react-scripts test --env=jsdom"
}
}
diff --git a/admin/src/components/globals/index.js b/admin/src/components/globals/index.js
index 81aef7ae22..b4d054bc65 100644
--- a/admin/src/components/globals/index.js
+++ b/admin/src/components/globals/index.js
@@ -437,7 +437,7 @@ export const Tooltip = props => css`
&:hover:after,
&:hover:before {
opacity: 1;
- transition: all 0.1s ease-in 0.1s;
+ transition: opacity 0.1s ease-in 0.1s;
}
`;
@@ -487,7 +487,7 @@ export const Onboarding = props => css`
&:after,
&:before {
opacity: 1;
- transition: all 0.1s ease-in 0.1s;
+ transition: opacity 0.1s ease-in 0.1s;
}
`;
diff --git a/admin/src/index.js b/admin/src/index.js
index 6139b08a37..c57c23f537 100644
--- a/admin/src/index.js
+++ b/admin/src/index.js
@@ -5,7 +5,7 @@ import { Router } from 'react-router';
import { ApolloProvider } from 'react-apollo';
import { ThemeProvider } from 'styled-components';
import { Provider } from 'react-redux';
-import { theme } from './components/theme';
+import { theme } from 'shared/theme';
import { client } from './api';
import { initStore } from './store';
import Routes from './routes';
diff --git a/admin/src/views/communities/components/search/index.js b/admin/src/views/communities/components/search/index.js
index 8a082a34d2..68ff9f0c74 100644
--- a/admin/src/views/communities/components/search/index.js
+++ b/admin/src/views/communities/components/search/index.js
@@ -5,6 +5,7 @@ import pure from 'recompose/pure';
import { connect } from 'react-redux';
import { withApollo } from 'react-apollo';
import { withRouter } from 'react-router';
+import { ESC, BACKSPACE, ARROW_DOWN, ARROW_UP } from 'src/helpers/keycodes';
import { Spinner } from '../../../../components/globals';
import { throttle } from '../../../../helpers/utils';
import { SEARCH_COMMUNITIES_QUERY } from '../../../../api/queries';
@@ -99,7 +100,7 @@ class Search extends Component {
);
// if person presses esc, clear all results, stop loading
- if (e.keyCode === 27) {
+ if (e.keyCode === ESC) {
this.setState({
searchResults: [],
searchIsLoading: false,
@@ -108,14 +109,12 @@ class Search extends Component {
return;
}
- // backspace
- if (e.keyCode === 8) {
+ if (e.keyCode === BACKSPACE) {
if (searchString.length > 0) return;
return input && input.focus();
}
- //escape
- if (e.keyCode === 27) {
+ if (e.keyCode === ESC) {
this.setState({
searchResults: [],
searchIsLoading: false,
@@ -124,8 +123,7 @@ class Search extends Component {
return input && input.focus();
}
- // down
- if (e.keyCode === 40) {
+ if (e.keyCode === ARROW_DOWN) {
if (indexOfFocusedSearchResult === searchResults.length - 1) return;
if (searchResults.length === 1) return;
@@ -137,8 +135,7 @@ class Search extends Component {
return;
}
- // up
- if (e.keyCode === 38) {
+ if (e.keyCode === ARROW_UP) {
// 1
if (indexOfFocusedSearchResult === 0) return;
if (searchResults.length === 1) return;
@@ -151,8 +148,7 @@ class Search extends Component {
return;
}
- // enter
- if (e.keyCode === 13) {
+ if (e.keyCode === ENTER) {
if (!searchResults[indexOfFocusedSearchResult]) return;
return this.goToCommunity(searchResults[indexOfFocusedSearchResult].slug);
}
@@ -261,4 +257,9 @@ class Search extends Component {
}
}
-export default compose(withApollo, withRouter, connect(), pure)(Search);
+export default compose(
+ withApollo,
+ withRouter,
+ connect(),
+ pure
+)(Search);
diff --git a/admin/src/views/users/components/search/index.js b/admin/src/views/users/components/search/index.js
index 4f29d584e1..8dd7f9e72b 100644
--- a/admin/src/views/users/components/search/index.js
+++ b/admin/src/views/users/components/search/index.js
@@ -6,6 +6,13 @@ import pure from 'recompose/pure';
import { connect } from 'react-redux';
import { withApollo } from 'react-apollo';
import { withRouter } from 'react-router';
+import {
+ ESC,
+ BACKSPACE,
+ ENTER,
+ ARROW_DOWN,
+ ARROW_UP,
+} from 'src/helpers/keycodes';
import { Spinner } from '../../../../components/globals';
import { throttle } from '../../../../helpers/utils';
import { searchUsersQuery } from 'shared/graphql/queries/search/searchUsers';
@@ -104,8 +111,7 @@ class Search extends React.Component {
focusedSearchResult
);
- // if person presses esc, clear all results, stop loading
- if (e.keyCode === 27) {
+ if (e.keyCode === ESC) {
this.setState({
searchResults: [],
searchIsLoading: false,
@@ -114,15 +120,13 @@ class Search extends React.Component {
return;
}
- // backspace
- if (e.keyCode === 8) {
+ if (e.keyCode === BACKSPACE) {
if (searchString.length > 0) return;
// $FlowFixMe
return input && input.focus();
}
- //escape
- if (e.keyCode === 27) {
+ if (e.keyCode === ESC) {
this.setState({
searchResults: [],
searchIsLoading: false,
@@ -132,8 +136,7 @@ class Search extends React.Component {
return input && input.focus();
}
- // down
- if (e.keyCode === 40) {
+ if (e.keyCode === ARROW_DOWN) {
if (indexOfFocusedSearchResult === searchResults.length - 1) return;
if (searchResults.length === 1) return;
@@ -145,8 +148,7 @@ class Search extends React.Component {
return;
}
- // up
- if (e.keyCode === 38) {
+ if (e.keyCode === ARROW_UP) {
// 1
if (indexOfFocusedSearchResult === 0) return;
if (searchResults.length === 1) return;
@@ -159,8 +161,7 @@ class Search extends React.Component {
return;
}
- // enter
- if (e.keyCode === 13) {
+ if (e.keyCode === ENTER) {
if (!searchResults[indexOfFocusedSearchResult]) return;
return this.goToUser(searchResults[indexOfFocusedSearchResult].username);
}
@@ -269,4 +270,9 @@ class Search extends React.Component {
}
}
-export default compose(withApollo, withRouter, connect(), pure)(Search);
+export default compose(
+ withApollo,
+ withRouter,
+ connect(),
+ pure
+)(Search);
diff --git a/admin/yarn.lock b/admin/yarn.lock
index 148d316e8a..875affb37e 100644
--- a/admin/yarn.lock
+++ b/admin/yarn.lock
@@ -3,30 +3,34 @@
"@babel/polyfill@^7.0.0-beta.32":
- version "7.0.0-beta.38"
- resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0-beta.38.tgz#df9ca32ffe4f6de0b99ab495c197837f422bb12e"
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.0.0.tgz#c8ff65c9ec3be6a1ba10113ebd40e8750fb90bff"
+ integrity sha512-dnrMRkyyr74CRelJwvgnnSUDh2ge2NCTyHVwpOdvRMHtJUyxLtMAfhBN3s64pY41zdw0kgiLPh6S20eb1NcX6Q==
dependencies:
- core-js "^2.4.0"
+ core-js "^2.5.7"
regenerator-runtime "^0.11.1"
-"@babel/runtime@^7.0.0-beta.32", "@babel/runtime@^7.0.0-beta.37":
- version "7.0.0-beta.38"
- resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.0.0-beta.38.tgz#8b7f16245b1f86fc168a1846ab6d77a238f6d16c"
+"@babel/runtime@^7.0.0-beta.32", "@babel/runtime@^7.0.0-beta.37", "@babel/runtime@^7.1.2":
+ version "7.1.5"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.1.5.tgz#4170907641cf1f61508f563ece3725150cc6fe39"
+ integrity sha512-xKnPpXG/pvK1B90JkwwxSGii90rQGKtzcMt2gI5G6+M0REXaq6rOHsGC2ay6/d0Uje7zzvSzjEzfR3ENhFlrfA==
dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.11.1"
+ regenerator-runtime "^0.12.0"
-"@types/async@2.0.46":
- version "2.0.46"
- resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.46.tgz#f13a6c336a6582b95d0c0269e796b709488fd54d"
+"@types/async@2.0.50":
+ version "2.0.50"
+ resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.50.tgz#117540e026d64e1846093abbd5adc7e27fda7bcb"
+ integrity sha512-VMhZMMQgV1zsR+lX/0IBfAk+8Eb7dPVMWiQGFAt3qjo5x7Ml6b77jUo0e1C3ToD+XRDXqtrfw+6AB0uUsPEr3Q==
-"@types/zen-observable@0.5.3", "@types/zen-observable@^0.5.3":
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.3.tgz#91b728599544efbb7386d8b6633693a3c2e7ade5"
+"@types/zen-observable@^0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.8.0.tgz#8b63ab7f1aa5321248aad5ac890a485656dcea4d"
+ integrity sha512-te5lMAWii1uEJ4FwLjzdlbw3+n0FZNOvFXHxQDKeT0dilh7HOzdMzV2TrJVUzq8ep7J4Na8OUYPRLSQkJHAlrg==
"@vx/bounds@0.0.129":
version "0.0.129"
resolved "https://registry.yarnpkg.com/@vx/bounds/-/bounds-0.0.129.tgz#7ecbdfaa3f5041e3f87c851bf4981547e2d19ffe"
+ integrity sha1-fsvfqj9QQeP4fIUb9JgVR+LRn/4=
dependencies:
prop-types "^15.5.10"
react-dom "^15.0.0 || 15.x"
@@ -34,18 +38,21 @@
"@vx/curve@0.0.127", "@vx/curve@^0.0.127":
version "0.0.127"
resolved "https://registry.yarnpkg.com/@vx/curve/-/curve-0.0.127.tgz#f05ea9871a97e1e1d59129b847f216751ffb31c3"
+ integrity sha1-8F6phxqX4eHVkSm4R/IWdR/7McM=
dependencies:
d3-shape "^1.0.6"
"@vx/event@^0.0.127":
version "0.0.127"
resolved "https://registry.yarnpkg.com/@vx/event/-/event-0.0.127.tgz#8b0079a63cf0aeefd884123dd99ee18efef0af69"
+ integrity sha1-iwB5pjzwru/YhBI92Z7hjv7wr2k=
dependencies:
"@vx/point" "0.0.127"
"@vx/gradient@^0.0.129":
version "0.0.129"
resolved "https://registry.yarnpkg.com/@vx/gradient/-/gradient-0.0.129.tgz#2c6f6a41085533166ba6e1c9cdbb3e52d4dd7e85"
+ integrity sha1-LG9qQQhVMxZrpuHJzbs+UtTdfoU=
dependencies:
classnames "^2.2.5"
prop-types "^15.5.7"
@@ -53,6 +60,7 @@
"@vx/grid@^0.0.131":
version "0.0.131"
resolved "https://registry.yarnpkg.com/@vx/grid/-/grid-0.0.131.tgz#572885166f0a3e05769903f1a4002ef1ade9a252"
+ integrity sha1-VyiFFm8KPgV2mQPxpAAu8a3polI=
dependencies:
"@vx/group" "0.0.127"
"@vx/point" "0.0.127"
@@ -62,22 +70,26 @@
"@vx/group@0.0.127":
version "0.0.127"
resolved "https://registry.yarnpkg.com/@vx/group/-/group-0.0.127.tgz#d607c957119cdb787aa709818532f40e7e04eb8f"
+ integrity sha1-1gfJVxGc23h6pwmBhTL0Dn4E648=
dependencies:
classnames "^2.2.5"
"@vx/point@0.0.127":
version "0.0.127"
resolved "https://registry.yarnpkg.com/@vx/point/-/point-0.0.127.tgz#51ef7f648488feed758a6ec1cc8c71319602e3e7"
+ integrity sha1-Ue9/ZISI/u11im7BzIxxMZYC4+c=
"@vx/scale@^0.0.127":
version "0.0.127"
resolved "https://registry.yarnpkg.com/@vx/scale/-/scale-0.0.127.tgz#2f81530c89b1ad837be387aaccebedd507f16549"
+ integrity sha1-L4FTDImxrYN744eqzOvt1QfxZUk=
dependencies:
d3-scale "^1.0.5"
"@vx/shape@0.0.131", "@vx/shape@^0.0.131":
version "0.0.131"
resolved "https://registry.yarnpkg.com/@vx/shape/-/shape-0.0.131.tgz#38585e93319c9f958d317485b0b6520ff295f179"
+ integrity sha1-OFhekzGcn5WNMXSFsLZSD/KV8Xk=
dependencies:
"@vx/curve" "0.0.127"
"@vx/group" "0.0.127"
@@ -89,6 +101,7 @@
"@vx/tooltip@^0.0.134":
version "0.0.134"
resolved "https://registry.yarnpkg.com/@vx/tooltip/-/tooltip-0.0.134.tgz#8337f0876a98b3eec8e9636b4694126789eba60c"
+ integrity sha1-gzfwh2qYs+7I6WNrRpQSZ4nrpgw=
dependencies:
"@vx/bounds" "0.0.129"
classnames "^2.2.5"
@@ -97,79 +110,109 @@
abab@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e"
+ integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
+ integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
-accepts@~1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f"
+accepts@~1.3.4, accepts@~1.3.5:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
+ integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
dependencies:
- mime-types "~2.1.16"
+ mime-types "~2.1.18"
negotiator "0.6.1"
acorn-dynamic-import@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4"
+ integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=
dependencies:
acorn "^4.0.3"
acorn-globals@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
+ integrity sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=
dependencies:
acorn "^4.0.4"
acorn-jsx@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=
dependencies:
acorn "^3.0.4"
acorn@^3.0.4:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+ integrity sha1-ReN/s56No/JbruP/U2niu18iAXo=
acorn@^4.0.3, acorn@^4.0.4:
version "4.0.13"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787"
+ integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=
-acorn@^5.0.0, acorn@^5.2.1:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822"
+acorn@^5.0.0, acorn@^5.5.0:
+ version "5.7.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279"
+ integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==
add@^2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/add/-/add-2.0.6.tgz#248f0a9f6e5a528ef2295dbeec30532130ae2235"
+ integrity sha1-JI8Kn25aUo7yKV2+7DBTITCuIjU=
address@1.0.3, address@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9"
+ integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==
-ajv-keywords@^2.0.0, ajv-keywords@^2.1.0:
+ajv-keywords@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+ integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=
+
+ajv-keywords@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a"
+ integrity sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=
ajv@^4.9.1:
version "4.11.8"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=
dependencies:
co "^4.6.0"
json-stable-stringify "^1.0.1"
-ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3:
+ajv@^5.0.0, ajv@^5.1.5, ajv@^5.2.0:
version "5.5.2"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965"
+ integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=
dependencies:
co "^4.6.0"
fast-deep-equal "^1.0.0"
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0"
+ajv@^6.0.1, ajv@^6.5.5:
+ version "6.5.5"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.5.tgz#cf97cdade71c6399a92c6d6c4177381291b781a1"
+ integrity sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==
+ dependencies:
+ fast-deep-equal "^2.0.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
+ integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=
dependencies:
kind-of "^3.0.2"
longest "^1.0.1"
@@ -178,213 +221,265 @@ align-text@^0.1.1, align-text@^0.1.3:
alphanum-sort@^1.0.1, alphanum-sort@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
+ integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-align@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-1.1.0.tgz#2f0c1658829739add5ebb15e6b0c6e3423f016ba"
+ansi-align@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f"
+ integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=
dependencies:
- string-width "^1.0.1"
+ string-width "^2.0.0"
ansi-escapes@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+ integrity sha1-06ioOzGapneTZisT52HHkRQiMG4=
ansi-escapes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92"
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
+ integrity sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==
ansi-html@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
+ integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
ansi-regex@^2.0.0, ansi-regex@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+ integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8=
ansi-regex@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
+ integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=
ansi-styles@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+ integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=
-ansi-styles@^3.0.0, ansi-styles@^3.1.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
+ansi-styles@^3.0.0, ansi-styles@^3.2.1:
+ version "3.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
+ integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
dependencies:
color-convert "^1.9.0"
anymatch@^1.3.0:
version "1.3.2"
resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a"
+ integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==
dependencies:
micromatch "^2.1.5"
normalize-path "^2.0.0"
+anymatch@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb"
+ integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==
+ dependencies:
+ micromatch "^3.1.4"
+ normalize-path "^2.1.1"
+
apollo-cache-inmemory@^1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.1.5.tgz#74111367fd59caee120197ef663dcb2516971300"
+ version "1.3.10"
+ resolved "https://registry.yarnpkg.com/apollo-cache-inmemory/-/apollo-cache-inmemory-1.3.10.tgz#2e5375ad7ac0d30d59aaae3a2b5967673d0cf968"
+ integrity sha512-cJL8xxX2iytludvxY4goxYJ41n8avXirAjQkEwgSvGqrEzC0PG2DwtHZZh1QTnRRuM1rgj4MKiUiX/Ykhc5L+Q==
dependencies:
- apollo-cache "^1.1.0"
- apollo-utilities "^1.0.4"
- graphql-anywhere "^4.1.1"
+ apollo-cache "^1.1.20"
+ apollo-utilities "^1.0.25"
+ optimism "^0.6.6"
-apollo-cache@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.0.tgz#281b6a0fb6ca2c5bce69825642f685de92d05f3c"
+apollo-cache@1.1.20, apollo-cache@^1.1.20:
+ version "1.1.20"
+ resolved "https://registry.yarnpkg.com/apollo-cache/-/apollo-cache-1.1.20.tgz#6152cc4baf6a63e376efee79f75de4f5c84bf90e"
+ integrity sha512-+Du0/4kUSuf5PjPx0+pvgMGV12ezbHA8/hubYuqRQoy/4AWb4faa61CgJNI6cKz2mhDd9m94VTNKTX11NntwkQ==
dependencies:
- apollo-utilities "^1.0.4"
+ apollo-utilities "^1.0.25"
apollo-client@2.x:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.2.0.tgz#e22c4ba3a3c01aec6dc916a5dbc0f39c58d277fb"
+ version "2.4.6"
+ resolved "https://registry.yarnpkg.com/apollo-client/-/apollo-client-2.4.6.tgz#ba24a2def6ea9d487b41672652ca967cc7c05e4a"
+ integrity sha512-RsZVMYone7mu3Wj4sr7ehctN8pdaHsP4X1Sv6Ly4gZ/YDetCCVnhbmnk5q7kvDtfoo0jhhHblxgFyA3FLLImtA==
dependencies:
- "@types/zen-observable" "^0.5.3"
- apollo-cache "^1.1.0"
+ "@types/zen-observable" "^0.8.0"
+ apollo-cache "1.1.20"
apollo-link "^1.0.0"
apollo-link-dedup "^1.0.0"
- apollo-utilities "^1.0.4"
+ apollo-utilities "1.0.25"
symbol-observable "^1.0.2"
- zen-observable "^0.7.0"
+ zen-observable "^0.8.0"
optionalDependencies:
- "@types/async" "2.0.46"
+ "@types/async" "2.0.50"
-apollo-engine-binary-darwin@0.2018.01-17-g9c203510f:
- version "0.2018.1-17-g9c203510f"
- resolved "https://registry.yarnpkg.com/apollo-engine-binary-darwin/-/apollo-engine-binary-darwin-0.2018.1-17-g9c203510f.tgz#0a920de1af104a02a3d095baa49c01c2d18f60e4"
+apollo-engine-binary-darwin@0.2018.2-37-g678cbb68b:
+ version "0.2018.2-37-g678cbb68b"
+ resolved "https://registry.yarnpkg.com/apollo-engine-binary-darwin/-/apollo-engine-binary-darwin-0.2018.2-37-g678cbb68b.tgz#a7dbf5fd56d5090ebe955e28f9574228a10500fe"
+ integrity sha512-RyaZSEl4NV0BUuvq7Y2v2OyeYHIpvRGCHI/QTAgMh7XLZkxLeqKFR1HJh7SjnG/YU5PPsovPQ/YrFu3mUoBroA==
-apollo-engine-binary-linux@0.2018.01-17-g9c203510f:
- version "0.2018.1-17-g9c203510f"
- resolved "https://registry.yarnpkg.com/apollo-engine-binary-linux/-/apollo-engine-binary-linux-0.2018.1-17-g9c203510f.tgz#745b29887904f1a5e28cf68606817d8d723eac27"
+apollo-engine-binary-linux@0.2018.2-37-g678cbb68b:
+ version "0.2018.2-37-g678cbb68b"
+ resolved "https://registry.yarnpkg.com/apollo-engine-binary-linux/-/apollo-engine-binary-linux-0.2018.2-37-g678cbb68b.tgz#c348a89e0c3164f08687fa1701e71f378e862e57"
+ integrity sha512-nr/KJRwdGIeqjwRKA2JXAiHTNSCTrAxqSTYesaV+OcWGSk5I+G6Sto5XTIx75p+deIf5FDTj5Et46XBQkUWQ1Q==
-apollo-engine-binary-windows@0.2018.01-17-g9c203510f:
- version "0.2018.1-17-g9c203510f"
- resolved "https://registry.yarnpkg.com/apollo-engine-binary-windows/-/apollo-engine-binary-windows-0.2018.1-17-g9c203510f.tgz#89cde03a7d714c6f283310853b8bd2b81733ce0a"
+apollo-engine-binary-windows@0.2018.2-37-g678cbb68b:
+ version "0.2018.2-37-g678cbb68b"
+ resolved "https://registry.yarnpkg.com/apollo-engine-binary-windows/-/apollo-engine-binary-windows-0.2018.2-37-g678cbb68b.tgz#f6541b7b670b42b54efed4781abc724977009234"
+ integrity sha512-c+7ErUko4XbRFv8mCMUfQGzsw8Wg+qsjp2pngiAXmI/KBi90ZrshogpyEEWnbOMU78paEVoRulq+B30e0s294Q==
apollo-engine@^0.8.3:
- version "0.8.5"
- resolved "https://registry.yarnpkg.com/apollo-engine/-/apollo-engine-0.8.5.tgz#d5ac00cef4018d754969581dd2998b5ce173713f"
+ version "0.8.10"
+ resolved "https://registry.yarnpkg.com/apollo-engine/-/apollo-engine-0.8.10.tgz#1f57260fee31997eb4abed6bd3b6ac11a5c17340"
+ integrity sha512-o0ttX4uaCfOckX2F0qwBOIDTgl7MuXMtuIKOdnQYpLwC8OwROgoslTWBoW8zAlTSJmdqXWZ2xQPo2ibLmewiwQ==
dependencies:
request "^2.81.0"
stream-json "^0.5.2"
optionalDependencies:
- apollo-engine-binary-darwin "0.2018.01-17-g9c203510f"
- apollo-engine-binary-linux "0.2018.01-17-g9c203510f"
- apollo-engine-binary-windows "0.2018.01-17-g9c203510f"
+ apollo-engine-binary-darwin "0.2018.2-37-g678cbb68b"
+ apollo-engine-binary-linux "0.2018.2-37-g678cbb68b"
+ apollo-engine-binary-windows "0.2018.2-37-g678cbb68b"
apollo-link-dedup@^1.0.0:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/apollo-link-dedup/-/apollo-link-dedup-1.0.5.tgz#1c213d7ebbe48e74b016fffacd7e6a53dc309e32"
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/apollo-link-dedup/-/apollo-link-dedup-1.0.10.tgz#7b94589fe7f969777efd18a129043c78430800ae"
+ integrity sha512-tpUI9lMZsidxdNygSY1FxflXEkUZnvKRkMUsXXuQUNoSLeNtEvUX7QtKRAl4k9ubLl8JKKc9X3L3onAFeGTK8w==
+ dependencies:
+ apollo-link "^1.2.3"
+
+apollo-link-http-common@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/apollo-link-http-common/-/apollo-link-http-common-0.2.5.tgz#d094beb7971523203359bf830bfbfa7b4e7c30ed"
+ integrity sha512-6FV1wr5AqAyJ64Em1dq5hhGgiyxZE383VJQmhIoDVc3MyNcFL92TkhxREOs4rnH2a9X2iJMko7nodHSGLC6d8w==
dependencies:
- apollo-link "^1.0.7"
+ apollo-link "^1.2.3"
apollo-link-http@^1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.3.2.tgz#63537ee5ecf9c004efb0317f1222b7dbc6f21559"
+ version "1.5.5"
+ resolved "https://registry.yarnpkg.com/apollo-link-http/-/apollo-link-http-1.5.5.tgz#7dbe851821771ad67fa29e3900c57f38cbd80da8"
+ integrity sha512-C5N6N/mRwmepvtzO27dgMEU3MMtRKSqcljBkYNZmWwH11BxkUQ5imBLPM3V4QJXNE7NFuAQAB5PeUd4ligivTQ==
dependencies:
- apollo-link "^1.0.7"
+ apollo-link "^1.2.3"
+ apollo-link-http-common "^0.2.5"
apollo-link-ws@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.4.tgz#d0067aa0204470dbd3955aa5204f8dd72d389350"
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/apollo-link-ws/-/apollo-link-ws-1.0.9.tgz#e2198abd6d3900e83fd842fdee335a28b347ea2d"
+ integrity sha512-CtKwLE61bCJTW5jrucOMm5PubeAlCl/9i45pg4GKKlAbl0zR4i2dww8TJkYoIY6iCyj4qjKW/uqGD6v5/aVwhg==
dependencies:
- apollo-link "^1.0.7"
+ apollo-link "^1.2.3"
-apollo-link@^1.0.0, apollo-link@^1.0.7:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.0.7.tgz#42cd38a7378332fc3e41a214ff6a6e5e703a556f"
+apollo-link@^1.0.0, apollo-link@^1.0.7, apollo-link@^1.2.3:
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/apollo-link/-/apollo-link-1.2.3.tgz#9bd8d5fe1d88d31dc91dae9ecc22474d451fb70d"
+ integrity sha512-iL9yS2OfxYhigme5bpTbmRyC+Htt6tyo2fRMHT3K1XRL/C5IQDDz37OjpPy4ndx7WInSvfSZaaOTKFja9VWqSw==
dependencies:
- "@types/zen-observable" "0.5.3"
apollo-utilities "^1.0.0"
- zen-observable "^0.6.0"
+ zen-observable-ts "^0.8.10"
apollo-upload-client@6.x:
version "6.0.3"
resolved "https://registry.yarnpkg.com/apollo-upload-client/-/apollo-upload-client-6.0.3.tgz#9f3249910ede32b7336968b1ae9fa438ed48a247"
+ integrity sha512-gJSaLg1KWtzshwX6lnhN05M1oFVoW9h66IuwwEjbuoLHz6NpVNXbP5ZZ1IemJhlB3n91XBNAkQd2mRVDx+lHmA==
dependencies:
"@babel/polyfill" "^7.0.0-beta.32"
"@babel/runtime" "^7.0.0-beta.32"
extract-files "^2.0.1"
-apollo-upload-server@^2.0.4:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/apollo-upload-server/-/apollo-upload-server-2.0.4.tgz#5105081b6c061638ef7a04ef848758d30f3ba96b"
+apollo-utilities@1.0.25, apollo-utilities@^1.0.0, apollo-utilities@^1.0.25, apollo-utilities@^1.0.4:
+ version "1.0.25"
+ resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.25.tgz#899b00f5f990fb451675adf84cb3de82eb6372ea"
+ integrity sha512-AXvqkhni3Ir1ffm4SA1QzXn8k8I5BBl4PVKEyak734i4jFdp+xgfUyi2VCqF64TJlFTA/B73TRDUvO2D+tKtZg==
dependencies:
- formidable "^1.1.1"
- mkdirp "^0.5.1"
- object-path "^0.11.4"
-
-apollo-utilities@^1.0.0, apollo-utilities@^1.0.4:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/apollo-utilities/-/apollo-utilities-1.0.4.tgz#560009ea5541b9fdc4ee07ebb1714ee319a76c15"
+ fast-json-stable-stringify "^2.0.0"
append-transform@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
+ integrity sha1-126/jKlNJ24keja61EpLdKthGZE=
dependencies:
default-require-extensions "^1.0.0"
aproba@^1.0.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a"
+ integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==
are-we-there-yet@~1.1.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d"
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21"
+ integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==
dependencies:
delegates "^1.0.0"
readable-stream "^2.0.6"
argparse@^1.0.7:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+ integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
dependencies:
sprintf-js "~1.0.2"
aria-query@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24"
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.1.tgz#26cbb5aff64144b0a825be1846e0b16cfa00b11e"
+ integrity sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4=
dependencies:
ast-types-flow "0.0.7"
+ commander "^2.11.0"
arr-diff@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
+ integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=
dependencies:
arr-flatten "^1.0.1"
-arr-flatten@^1.0.1:
+arr-diff@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520"
+ integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=
+
+arr-flatten@^1.0.1, arr-flatten@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1"
+ integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==
+
+arr-union@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
+ integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
array-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
+ integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=
array-filter@~0.0.0:
version "0.0.1"
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
+ integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw=
array-find-index@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
+ integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
array-flatten@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
+ integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
array-flatten@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296"
+ integrity sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=
array-includes@^3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+ integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
dependencies:
define-properties "^1.1.2"
es-abstract "^1.7.0"
@@ -392,88 +487,124 @@ array-includes@^3.0.3:
array-map@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662"
+ integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=
array-reduce@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b"
+ integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=
array-union@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=
dependencies:
array-uniq "^1.0.1"
array-uniq@^1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+ integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=
array-unique@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
+ integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=
+
+array-unique@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
+ integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
arrify@^1.0.0, arrify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+ integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
asap@~2.0.3:
version "2.0.6"
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
+ integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=
asn1.js@^4.0.0:
- version "4.9.2"
- resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a"
+ version "4.10.1"
+ resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0"
+ integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==
dependencies:
bn.js "^4.0.0"
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
+ version "0.2.4"
+ resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
+ integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
+ dependencies:
+ safer-buffer "~2.1.0"
assert-plus@1.0.0, assert-plus@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
+ integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
assert-plus@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
+ integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ=
assert@^1.1.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
+ integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=
dependencies:
util "0.10.3"
+assign-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367"
+ integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=
+
ast-types-flow@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad"
+ integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0=
async-each@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
+ integrity sha1-GdOGodntxufByF04iu28xW0zYC0=
async-limiter@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
+ integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==
-async@^1.4.0, async@^1.5.2:
+async@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
+ integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
-async@^2.1.2, async@^2.1.4, async@^2.4.1:
- version "2.6.0"
- resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4"
+async@^2.1.2, async@^2.1.4, async@^2.4.1, async@^2.5.0:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610"
+ integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==
dependencies:
- lodash "^4.14.0"
+ lodash "^4.17.10"
asynckit@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+atob@^2.1.1:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
+ integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
autoprefixer@7.1.6:
version "7.1.6"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.1.6.tgz#fb933039f74af74a83e71225ce78d9fd58ba84d7"
+ integrity sha512-C9yv/UF3X+eJTi/zvfxuyfxmLibYrntpF3qoJYrMeQwgUJOZrZvpJiMG2FMQ3qnhWtF/be4pYONBBw95ZGe3vA==
dependencies:
browserslist "^2.5.1"
caniuse-lite "^1.0.30000748"
@@ -485,6 +616,7 @@ autoprefixer@7.1.6:
autoprefixer@^6.3.1:
version "6.7.7"
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014"
+ integrity sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=
dependencies:
browserslist "^1.7.6"
caniuse-db "^1.0.30000634"
@@ -496,32 +628,38 @@ autoprefixer@^6.3.1:
aws-sign2@~0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
+ integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8=
aws-sign2@~0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
+ integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
-aws4@^1.2.1, aws4@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
+aws4@^1.2.1, aws4@^1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f"
+ integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==
axobject-query@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0"
+ integrity sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=
dependencies:
ast-types-flow "0.0.7"
babel-code-frame@6.26.0, babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b"
+ integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=
dependencies:
chalk "^1.1.3"
esutils "^2.0.2"
js-tokens "^3.0.2"
-babel-core@6.26.0, babel-core@^6.0.0, babel-core@^6.26.0:
+babel-core@6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8"
+ integrity sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g=
dependencies:
babel-code-frame "^6.26.0"
babel-generator "^6.26.0"
@@ -543,9 +681,35 @@ babel-core@6.26.0, babel-core@^6.0.0, babel-core@^6.26.0:
slash "^1.0.0"
source-map "^0.5.6"
+babel-core@^6.0.0, babel-core@^6.26.0:
+ version "6.26.3"
+ resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207"
+ integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==
+ dependencies:
+ babel-code-frame "^6.26.0"
+ babel-generator "^6.26.0"
+ babel-helpers "^6.24.1"
+ babel-messages "^6.23.0"
+ babel-register "^6.26.0"
+ babel-runtime "^6.26.0"
+ babel-template "^6.26.0"
+ babel-traverse "^6.26.0"
+ babel-types "^6.26.0"
+ babylon "^6.18.0"
+ convert-source-map "^1.5.1"
+ debug "^2.6.9"
+ json5 "^0.5.1"
+ lodash "^4.17.4"
+ minimatch "^3.0.4"
+ path-is-absolute "^1.0.1"
+ private "^0.1.8"
+ slash "^1.0.0"
+ source-map "^0.5.7"
+
babel-eslint@7.2.3:
version "7.2.3"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827"
+ integrity sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=
dependencies:
babel-code-frame "^6.22.0"
babel-traverse "^6.23.1"
@@ -553,8 +717,9 @@ babel-eslint@7.2.3:
babylon "^6.17.0"
babel-generator@^6.18.0, babel-generator@^6.26.0:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5"
+ version "6.26.1"
+ resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90"
+ integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==
dependencies:
babel-messages "^6.23.0"
babel-runtime "^6.26.0"
@@ -562,12 +727,13 @@ babel-generator@^6.18.0, babel-generator@^6.26.0:
detect-indent "^4.0.0"
jsesc "^1.3.0"
lodash "^4.17.4"
- source-map "^0.5.6"
+ source-map "^0.5.7"
trim-right "^1.0.1"
babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664"
+ integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=
dependencies:
babel-helper-explode-assignable-expression "^6.24.1"
babel-runtime "^6.22.0"
@@ -576,6 +742,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1:
babel-helper-builder-react-jsx@^6.24.1:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0"
+ integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=
dependencies:
babel-runtime "^6.26.0"
babel-types "^6.26.0"
@@ -584,6 +751,7 @@ babel-helper-builder-react-jsx@^6.24.1:
babel-helper-call-delegate@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d"
+ integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=
dependencies:
babel-helper-hoist-variables "^6.24.1"
babel-runtime "^6.22.0"
@@ -593,6 +761,7 @@ babel-helper-call-delegate@^6.24.1:
babel-helper-define-map@^6.24.1:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f"
+ integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=
dependencies:
babel-helper-function-name "^6.24.1"
babel-runtime "^6.26.0"
@@ -602,6 +771,7 @@ babel-helper-define-map@^6.24.1:
babel-helper-explode-assignable-expression@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa"
+ integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo=
dependencies:
babel-runtime "^6.22.0"
babel-traverse "^6.24.1"
@@ -610,6 +780,7 @@ babel-helper-explode-assignable-expression@^6.24.1:
babel-helper-function-name@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9"
+ integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=
dependencies:
babel-helper-get-function-arity "^6.24.1"
babel-runtime "^6.22.0"
@@ -620,6 +791,7 @@ babel-helper-function-name@^6.24.1:
babel-helper-get-function-arity@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d"
+ integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=
dependencies:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
@@ -627,6 +799,7 @@ babel-helper-get-function-arity@^6.24.1:
babel-helper-hoist-variables@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76"
+ integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY=
dependencies:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
@@ -634,6 +807,7 @@ babel-helper-hoist-variables@^6.24.1:
babel-helper-optimise-call-expression@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257"
+ integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=
dependencies:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
@@ -641,6 +815,7 @@ babel-helper-optimise-call-expression@^6.24.1:
babel-helper-regex@^6.24.1:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72"
+ integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=
dependencies:
babel-runtime "^6.26.0"
babel-types "^6.26.0"
@@ -649,6 +824,7 @@ babel-helper-regex@^6.24.1:
babel-helper-remap-async-to-generator@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b"
+ integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=
dependencies:
babel-helper-function-name "^6.24.1"
babel-runtime "^6.22.0"
@@ -659,6 +835,7 @@ babel-helper-remap-async-to-generator@^6.24.1:
babel-helper-replace-supers@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a"
+ integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo=
dependencies:
babel-helper-optimise-call-expression "^6.24.1"
babel-messages "^6.23.0"
@@ -670,6 +847,7 @@ babel-helper-replace-supers@^6.24.1:
babel-helpers@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2"
+ integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=
dependencies:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
@@ -677,6 +855,7 @@ babel-helpers@^6.24.1:
babel-jest@20.0.3, babel-jest@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-20.0.3.tgz#e4a03b13dc10389e140fc645d09ffc4ced301671"
+ integrity sha1-5KA7E9wQOJ4UD8ZF0J/8TO0wFnE=
dependencies:
babel-core "^6.0.0"
babel-plugin-istanbul "^4.0.0"
@@ -685,6 +864,7 @@ babel-jest@20.0.3, babel-jest@^20.0.3:
babel-loader@7.1.2:
version "7.1.2"
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126"
+ integrity sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==
dependencies:
find-cache-dir "^1.0.0"
loader-utils "^1.0.2"
@@ -693,70 +873,85 @@ babel-loader@7.1.2:
babel-messages@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-check-es2015-constants@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a"
+ integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-dynamic-import-node@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-1.1.0.tgz#bd1d88ac7aaf98df4917c384373b04d971a2b37a"
+ integrity sha512-tTfZbM9Ecwj3GK50mnPrUpinTwA4xXmDiQGCk/aBYbvl1+X8YqldK86wZ1owVJ4u3mrKbRlXMma80J18qwiaTQ==
dependencies:
babel-plugin-syntax-dynamic-import "^6.18.0"
babel-template "^6.26.0"
babel-types "^6.26.0"
babel-plugin-istanbul@^4.0.0:
- version "4.1.5"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e"
+ version "4.1.6"
+ resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45"
+ integrity sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==
dependencies:
+ babel-plugin-syntax-object-rest-spread "^6.13.0"
find-up "^2.1.0"
- istanbul-lib-instrument "^1.7.5"
- test-exclude "^4.1.1"
+ istanbul-lib-instrument "^1.10.1"
+ test-exclude "^4.2.1"
babel-plugin-jest-hoist@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-20.0.3.tgz#afedc853bd3f8dc3548ea671fbe69d03cc2c1767"
+ integrity sha1-r+3IU70/jcNUjqZx++adA8wsF2c=
babel-plugin-syntax-async-functions@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95"
+ integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=
babel-plugin-syntax-class-properties@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de"
+ integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=
babel-plugin-syntax-dynamic-import@6.18.0, babel-plugin-syntax-dynamic-import@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da"
+ integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=
babel-plugin-syntax-exponentiation-operator@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de"
+ integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=
babel-plugin-syntax-flow@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d"
+ integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0=
babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946"
+ integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=
-babel-plugin-syntax-object-rest-spread@^6.8.0:
+babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0:
version "6.13.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5"
+ integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
babel-plugin-syntax-trailing-function-commas@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3"
+ integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=
babel-plugin-transform-async-to-generator@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761"
+ integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=
dependencies:
babel-helper-remap-async-to-generator "^6.24.1"
babel-plugin-syntax-async-functions "^6.8.0"
@@ -765,6 +960,7 @@ babel-plugin-transform-async-to-generator@^6.22.0:
babel-plugin-transform-class-properties@6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac"
+ integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=
dependencies:
babel-helper-function-name "^6.24.1"
babel-plugin-syntax-class-properties "^6.8.0"
@@ -774,18 +970,21 @@ babel-plugin-transform-class-properties@6.24.1:
babel-plugin-transform-es2015-arrow-functions@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221"
+ integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-block-scoped-functions@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141"
+ integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-block-scoping@^6.23.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f"
+ integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=
dependencies:
babel-runtime "^6.26.0"
babel-template "^6.26.0"
@@ -796,6 +995,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0:
babel-plugin-transform-es2015-classes@^6.23.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db"
+ integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=
dependencies:
babel-helper-define-map "^6.24.1"
babel-helper-function-name "^6.24.1"
@@ -810,6 +1010,7 @@ babel-plugin-transform-es2015-classes@^6.23.0:
babel-plugin-transform-es2015-computed-properties@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3"
+ integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=
dependencies:
babel-runtime "^6.22.0"
babel-template "^6.24.1"
@@ -817,12 +1018,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0:
babel-plugin-transform-es2015-destructuring@6.23.0, babel-plugin-transform-es2015-destructuring@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d"
+ integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e"
+ integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4=
dependencies:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
@@ -830,12 +1033,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0:
babel-plugin-transform-es2015-for-of@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691"
+ integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-function-name@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b"
+ integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=
dependencies:
babel-helper-function-name "^6.24.1"
babel-runtime "^6.22.0"
@@ -844,20 +1049,23 @@ babel-plugin-transform-es2015-function-name@^6.22.0:
babel-plugin-transform-es2015-literals@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e"
+ integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154"
+ integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=
dependencies:
babel-plugin-transform-es2015-modules-commonjs "^6.24.1"
babel-runtime "^6.22.0"
babel-template "^6.24.1"
babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1:
- version "6.26.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a"
+ version "6.26.2"
+ resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3"
+ integrity sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==
dependencies:
babel-plugin-transform-strict-mode "^6.24.1"
babel-runtime "^6.26.0"
@@ -867,6 +1075,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e
babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23"
+ integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=
dependencies:
babel-helper-hoist-variables "^6.24.1"
babel-runtime "^6.22.0"
@@ -875,6 +1084,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0:
babel-plugin-transform-es2015-modules-umd@^6.23.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468"
+ integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg=
dependencies:
babel-plugin-transform-es2015-modules-amd "^6.24.1"
babel-runtime "^6.22.0"
@@ -883,6 +1093,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0:
babel-plugin-transform-es2015-object-super@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d"
+ integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40=
dependencies:
babel-helper-replace-supers "^6.24.1"
babel-runtime "^6.22.0"
@@ -890,6 +1101,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0:
babel-plugin-transform-es2015-parameters@^6.23.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b"
+ integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=
dependencies:
babel-helper-call-delegate "^6.24.1"
babel-helper-get-function-arity "^6.24.1"
@@ -901,6 +1113,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0:
babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0"
+ integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=
dependencies:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
@@ -908,12 +1121,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0:
babel-plugin-transform-es2015-spread@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1"
+ integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-sticky-regex@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc"
+ integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw=
dependencies:
babel-helper-regex "^6.24.1"
babel-runtime "^6.22.0"
@@ -922,18 +1137,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0:
babel-plugin-transform-es2015-template-literals@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d"
+ integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-typeof-symbol@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372"
+ integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-es2015-unicode-regex@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9"
+ integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek=
dependencies:
babel-helper-regex "^6.24.1"
babel-runtime "^6.22.0"
@@ -942,6 +1160,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0:
babel-plugin-transform-exponentiation-operator@^6.22.0:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e"
+ integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=
dependencies:
babel-helper-builder-binary-assignment-operator-visitor "^6.24.1"
babel-plugin-syntax-exponentiation-operator "^6.8.0"
@@ -950,6 +1169,7 @@ babel-plugin-transform-exponentiation-operator@^6.22.0:
babel-plugin-transform-flow-strip-types@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf"
+ integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=
dependencies:
babel-plugin-syntax-flow "^6.18.0"
babel-runtime "^6.22.0"
@@ -957,6 +1177,7 @@ babel-plugin-transform-flow-strip-types@^6.22.0:
babel-plugin-transform-object-rest-spread@6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06"
+ integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=
dependencies:
babel-plugin-syntax-object-rest-spread "^6.8.0"
babel-runtime "^6.26.0"
@@ -964,18 +1185,21 @@ babel-plugin-transform-object-rest-spread@6.26.0:
babel-plugin-transform-react-constant-elements@6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-constant-elements/-/babel-plugin-transform-react-constant-elements-6.23.0.tgz#2f119bf4d2cdd45eb9baaae574053c604f6147dd"
+ integrity sha1-LxGb9NLN1F65uqrldAU8YE9hR90=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-react-display-name@^6.23.0:
version "6.25.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1"
+ integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-react-jsx-self@6.22.0, babel-plugin-transform-react-jsx-self@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e"
+ integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24=
dependencies:
babel-plugin-syntax-jsx "^6.8.0"
babel-runtime "^6.22.0"
@@ -983,6 +1207,7 @@ babel-plugin-transform-react-jsx-self@6.22.0, babel-plugin-transform-react-jsx-s
babel-plugin-transform-react-jsx-source@6.22.0, babel-plugin-transform-react-jsx-source@^6.22.0:
version "6.22.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6"
+ integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY=
dependencies:
babel-plugin-syntax-jsx "^6.8.0"
babel-runtime "^6.22.0"
@@ -990,6 +1215,7 @@ babel-plugin-transform-react-jsx-source@6.22.0, babel-plugin-transform-react-jsx
babel-plugin-transform-react-jsx@6.24.1, babel-plugin-transform-react-jsx@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3"
+ integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM=
dependencies:
babel-helper-builder-react-jsx "^6.24.1"
babel-plugin-syntax-jsx "^6.8.0"
@@ -998,18 +1224,21 @@ babel-plugin-transform-react-jsx@6.24.1, babel-plugin-transform-react-jsx@^6.24.
babel-plugin-transform-regenerator@6.26.0, babel-plugin-transform-regenerator@^6.22.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f"
+ integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=
dependencies:
regenerator-transform "^0.10.0"
babel-plugin-transform-runtime@6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
+ integrity sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=
dependencies:
babel-runtime "^6.22.0"
babel-plugin-transform-strict-mode@^6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758"
+ integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=
dependencies:
babel-runtime "^6.22.0"
babel-types "^6.24.1"
@@ -1017,6 +1246,7 @@ babel-plugin-transform-strict-mode@^6.24.1:
babel-preset-env@1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48"
+ integrity sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA==
dependencies:
babel-plugin-check-es2015-constants "^6.22.0"
babel-plugin-syntax-trailing-function-commas "^6.22.0"
@@ -1052,18 +1282,21 @@ babel-preset-env@1.6.1:
babel-preset-flow@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d"
+ integrity sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0=
dependencies:
babel-plugin-transform-flow-strip-types "^6.22.0"
babel-preset-jest@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-20.0.3.tgz#cbacaadecb5d689ca1e1de1360ebfc66862c178a"
+ integrity sha1-y6yq3stdaJyh4d4TYOv8ZoYsF4o=
dependencies:
babel-plugin-jest-hoist "^20.0.3"
babel-preset-react-app@^3.1.1:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-3.1.1.tgz#d3f06a79742f0e89d7afcb72e282d9809c850920"
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/babel-preset-react-app/-/babel-preset-react-app-3.1.2.tgz#49ba3681b917c4e5c73a5249d3ef4c48fae064e2"
+ integrity sha512-/sh5Qd5T08PYa6t4kuCdKh9tXp6/m/Jwyx7PJTqugsYMfsDUJMlBXOs5EwFODHprzjWrmQ0SydnMZu9FY4MZYg==
dependencies:
babel-plugin-dynamic-import-node "1.1.0"
babel-plugin-syntax-dynamic-import "6.18.0"
@@ -1082,6 +1315,7 @@ babel-preset-react-app@^3.1.1:
babel-preset-react@6.24.1:
version "6.24.1"
resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380"
+ integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A=
dependencies:
babel-plugin-syntax-jsx "^6.3.13"
babel-plugin-transform-react-display-name "^6.23.0"
@@ -1093,6 +1327,7 @@ babel-preset-react@6.24.1:
babel-register@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071"
+ integrity sha1-btAhFz4vy0htestFxgCahW9kcHE=
dependencies:
babel-core "^6.26.0"
babel-runtime "^6.26.0"
@@ -1105,6 +1340,7 @@ babel-register@^6.26.0:
babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe"
+ integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4=
dependencies:
core-js "^2.4.0"
regenerator-runtime "^0.11.0"
@@ -1112,6 +1348,7 @@ babel-runtime@6.26.0, babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtim
babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02"
+ integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=
dependencies:
babel-runtime "^6.26.0"
babel-traverse "^6.26.0"
@@ -1122,6 +1359,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0:
babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee"
+ integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=
dependencies:
babel-code-frame "^6.26.0"
babel-messages "^6.23.0"
@@ -1136,6 +1374,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-tr
babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0:
version "6.26.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497"
+ integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=
dependencies:
babel-runtime "^6.26.0"
esutils "^2.0.2"
@@ -1145,73 +1384,100 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24
babylon@^6.17.0, babylon@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3"
+ integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==
backo2@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
+ integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
balanced-match@^0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+ integrity sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=
balanced-match@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
+ integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
base64-js@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
+ integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+
+base@^0.11.1:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f"
+ integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==
+ dependencies:
+ cache-base "^1.0.1"
+ class-utils "^0.3.5"
+ component-emitter "^1.2.1"
+ define-property "^1.0.0"
+ isobject "^3.0.1"
+ mixin-deep "^1.2.0"
+ pascalcase "^0.1.1"
batch@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
+ integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
+ integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
dependencies:
tweetnacl "^0.14.3"
big.js@^3.1.3:
version "3.2.0"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e"
+ integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==
binary-extensions@^1.0.0:
- version "1.11.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205"
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
+ integrity sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==
block-stream@*:
version "0.0.9"
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
+ integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
dependencies:
inherits "~2.0.0"
bluebird@^3.4.7:
- version "3.5.1"
- resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
+ integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.8"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f"
+ integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==
-body-parser@1.18.2:
- version "1.18.2"
- resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454"
+body-parser@1.18.3:
+ version "1.18.3"
+ resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.3.tgz#5b292198ffdd553b3a0f20ded0592b956955c8b4"
+ integrity sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=
dependencies:
bytes "3.0.0"
content-type "~1.0.4"
debug "2.6.9"
- depd "~1.1.1"
- http-errors "~1.6.2"
- iconv-lite "0.4.19"
+ depd "~1.1.2"
+ http-errors "~1.6.3"
+ iconv-lite "0.4.23"
on-finished "~2.3.0"
- qs "6.5.1"
- raw-body "2.3.2"
- type-is "~1.6.15"
+ qs "6.5.2"
+ raw-body "2.3.3"
+ type-is "~1.6.16"
bonjour@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
+ integrity sha1-jokKGD2O6aI5OzhExpGkK897yfU=
dependencies:
array-flatten "^2.1.0"
deep-equal "^1.0.1"
@@ -1223,42 +1489,32 @@ bonjour@^3.5.0:
boolbase@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
+ integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24=
boom@2.x.x:
version "2.10.1"
resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
+ integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=
dependencies:
hoek "2.x.x"
-boom@4.x.x:
- version "4.3.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31"
- dependencies:
- hoek "4.x.x"
-
-boom@5.x.x:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02"
- dependencies:
- hoek "4.x.x"
-
-boxen@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/boxen/-/boxen-0.6.0.tgz#8364d4248ac34ff0ef1b2f2bf49a6c60ce0d81b6"
+boxen@^1.2.1:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b"
+ integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==
dependencies:
- ansi-align "^1.1.0"
- camelcase "^2.1.0"
- chalk "^1.1.1"
+ ansi-align "^2.0.0"
+ camelcase "^4.0.0"
+ chalk "^2.0.1"
cli-boxes "^1.0.0"
- filled-array "^1.0.0"
- object-assign "^4.0.1"
- repeating "^2.0.0"
- string-width "^1.0.1"
- widest-line "^1.0.0"
+ string-width "^2.0.0"
+ term-size "^1.2.0"
+ widest-line "^2.0.0"
brace-expansion@^1.0.0, brace-expansion@^1.1.7:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
+ version "1.1.11"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
+ integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
@@ -1266,24 +1522,44 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7:
braces@^1.8.2:
version "1.8.5"
resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
+ integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=
dependencies:
expand-range "^1.8.1"
preserve "^0.2.0"
repeat-element "^1.1.2"
+braces@^2.3.0, braces@^2.3.1:
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
+ integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==
+ dependencies:
+ arr-flatten "^1.1.0"
+ array-unique "^0.3.2"
+ extend-shallow "^2.0.1"
+ fill-range "^4.0.0"
+ isobject "^3.0.1"
+ repeat-element "^1.1.2"
+ snapdragon "^0.8.1"
+ snapdragon-node "^2.0.1"
+ split-string "^3.0.2"
+ to-regex "^3.0.1"
+
brorand@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
browser-resolve@^1.11.2:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
+ version "1.11.3"
+ resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6"
+ integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==
dependencies:
resolve "1.1.7"
browserify-aes@^1.0.0, browserify-aes@^1.0.4:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48"
+ integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==
dependencies:
buffer-xor "^1.0.3"
cipher-base "^1.0.0"
@@ -1293,24 +1569,28 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4:
safe-buffer "^5.0.1"
browserify-cipher@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0"
+ integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==
dependencies:
browserify-aes "^1.0.4"
browserify-des "^1.0.0"
evp_bytestokey "^1.0.0"
browserify-des@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c"
+ integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==
dependencies:
cipher-base "^1.0.1"
des.js "^1.0.0"
inherits "^2.0.1"
+ safe-buffer "^5.1.2"
browserify-rsa@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524"
+ integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=
dependencies:
bn.js "^4.1.0"
randombytes "^2.0.1"
@@ -1318,6 +1598,7 @@ browserify-rsa@^4.0.0:
browserify-sign@^4.0.0:
version "4.0.4"
resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298"
+ integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=
dependencies:
bn.js "^4.1.1"
browserify-rsa "^4.0.0"
@@ -1330,12 +1611,14 @@ browserify-sign@^4.0.0:
browserify-zlib@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f"
+ integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==
dependencies:
pako "~1.0.5"
browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
version "1.7.7"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9"
+ integrity sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=
dependencies:
caniuse-db "^1.0.30000639"
electron-to-chromium "^1.2.7"
@@ -1343,6 +1626,7 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6:
browserslist@^2.1.2, browserslist@^2.5.1:
version "2.11.3"
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2"
+ integrity sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==
dependencies:
caniuse-lite "^1.0.30000792"
electron-to-chromium "^1.3.30"
@@ -1350,34 +1634,45 @@ browserslist@^2.1.2, browserslist@^2.5.1:
bser@1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
+ integrity sha1-OBEWlwsqbe6lZG3RXdcnhES1YWk=
dependencies:
node-int64 "^0.4.0"
bser@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
+ integrity sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=
dependencies:
node-int64 "^0.4.0"
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
buffer-indexof@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c"
+ integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==
buffer-xor@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9"
+ integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=
buffer@^4.3.0:
version "4.9.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
dependencies:
base64-js "^1.0.2"
ieee754 "^1.1.4"
isarray "^1.0.0"
buffer@^5.0.3:
- version "5.0.8"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.0.8.tgz#84daa52e7cf2fa8ce4195bc5cf0f7809e0930b24"
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
+ integrity sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==
dependencies:
base64-js "^1.0.2"
ieee754 "^1.1.4"
@@ -1385,32 +1680,54 @@ buffer@^5.0.3:
builtin-modules@^1.0.0, builtin-modules@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+ integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=
builtin-status-codes@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
+ integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
+ integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=
+
+cache-base@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2"
+ integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==
+ dependencies:
+ collection-visit "^1.0.0"
+ component-emitter "^1.2.1"
+ get-value "^2.0.6"
+ has-value "^1.0.0"
+ isobject "^3.0.1"
+ set-value "^2.0.0"
+ to-object-path "^0.3.0"
+ union-value "^1.0.0"
+ unset-value "^1.0.0"
caller-path@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
dependencies:
callsites "^0.2.0"
callsites@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+ integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
callsites@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
+ integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=
camel-case@3.0.x:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
+ integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=
dependencies:
no-case "^2.2.0"
upper-case "^1.1.1"
@@ -1418,6 +1735,7 @@ camel-case@3.0.x:
camelcase-keys@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
+ integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
dependencies:
camelcase "^2.0.0"
map-obj "^1.0.0"
@@ -1425,22 +1743,27 @@ camelcase-keys@^2.0.0:
camelcase@^1.0.2:
version "1.2.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
+ integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=
-camelcase@^2.0.0, camelcase@^2.1.0:
+camelcase@^2.0.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
+ integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
camelcase@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
+ integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
-camelcase@^4.1.0:
+camelcase@^4.0.0, camelcase@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
+ integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=
caniuse-api@^1.5.2:
version "1.6.1"
resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c"
+ integrity sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=
dependencies:
browserslist "^1.3.6"
caniuse-db "^1.0.30000529"
@@ -1448,39 +1771,42 @@ caniuse-api@^1.5.2:
lodash.uniq "^4.5.0"
caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639:
- version "1.0.30000794"
- resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000794.tgz#bbe71104fa277ce4b362387d54905e8b88e52f35"
+ version "1.0.30000907"
+ resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000907.tgz#2b4b8dff95e0b284dae24ef76ac2d96aa42f42d6"
+ integrity sha512-OKtlTmEPR9GgCxnKMlvdHTT2QD6n4eIovcVqEnjoR8iB9l6rk4abKnjsDSyTD36an/ebgigl8T2CSdwSf4JoGw==
caniuse-lite@^1.0.30000748, caniuse-lite@^1.0.30000792:
- version "1.0.30000792"
- resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000792.tgz#d0cea981f8118f3961471afbb43c9a1e5bbf0332"
+ version "1.0.30000907"
+ resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000907.tgz#0b9899bde53fb1c30e214fb12402361e02ff5c42"
+ integrity sha512-No5sQ/OB2Nmka8MNOOM6nJx+Hxt6MQ6h7t7kgJFu9oTuwjykyKRSBP/+i/QAyFHxeHB+ddE0Da1CG5ihx9oehQ==
capture-stack-trace@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d"
+ integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==
case-sensitive-paths-webpack-plugin@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.1.tgz#3d29ced8c1f124bf6f53846fb3f5894731fdc909"
+ integrity sha1-PSnO2MHxJL9vU4Rvs/WJRzH9yQk=
caseless@~0.12.0:
version "0.12.0"
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
+ integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
center-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
+ integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60=
dependencies:
align-text "^0.1.3"
lazy-cache "^1.0.3"
-chain-function@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc"
-
-chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
+chalk@1.1.3, chalk@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=
dependencies:
ansi-styles "^2.2.1"
escape-string-regexp "^1.0.2"
@@ -1488,25 +1814,29 @@ chalk@1.1.3, chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"
-chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba"
+chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e"
+ integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==
dependencies:
- ansi-styles "^3.1.0"
+ ansi-styles "^3.2.1"
escape-string-regexp "^1.0.5"
- supports-color "^4.0.0"
+ supports-color "^5.3.0"
change-emitter@^0.1.2:
version "0.1.6"
resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515"
+ integrity sha1-6LL+PX8at9aaMhma/5HqaTFAlRU=
chardet@^0.4.0:
version "0.4.2"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+ integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
-chokidar@^1.6.0, chokidar@^1.7.0:
+chokidar@^1.6.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468"
+ integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=
dependencies:
anymatch "^1.3.0"
async-each "^1.0.0"
@@ -1519,13 +1849,40 @@ chokidar@^1.6.0, chokidar@^1.7.0:
optionalDependencies:
fsevents "^1.0.0"
-ci-info@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.2.tgz#03561259db48d0474c8bdc90f5b47b068b6bbfb4"
+chokidar@^2.0.2:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
+ integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==
+ dependencies:
+ anymatch "^2.0.0"
+ async-each "^1.0.0"
+ braces "^2.3.0"
+ glob-parent "^3.1.0"
+ inherits "^2.0.1"
+ is-binary-path "^1.0.0"
+ is-glob "^4.0.0"
+ lodash.debounce "^4.0.8"
+ normalize-path "^2.1.1"
+ path-is-absolute "^1.0.0"
+ readdirp "^2.0.0"
+ upath "^1.0.5"
+ optionalDependencies:
+ fsevents "^1.2.2"
+
+chownr@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494"
+ integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==
+
+ci-info@^1.5.0:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497"
+ integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==
cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
+ integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
dependencies:
inherits "^2.0.1"
safe-buffer "^5.0.1"
@@ -1533,40 +1890,58 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3:
circular-json@^0.3.1:
version "0.3.3"
resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66"
+ integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
clap@^1.0.9:
version "1.2.3"
resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51"
+ integrity sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==
dependencies:
chalk "^1.1.3"
-classnames@2.2.5, classnames@^2.2.5:
- version "2.2.5"
- resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
+class-utils@^0.3.5:
+ version "0.3.6"
+ resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
+ integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==
+ dependencies:
+ arr-union "^3.1.0"
+ define-property "^0.2.5"
+ isobject "^3.0.0"
+ static-extend "^0.1.1"
+
+classnames@^2.2.5, classnames@~2.2.5:
+ version "2.2.6"
+ resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
+ integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
-clean-css@4.1.x:
- version "4.1.9"
- resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301"
+clean-css@4.2.x:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
+ integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==
dependencies:
- source-map "0.5.x"
+ source-map "~0.6.0"
cli-boxes@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
+ integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
cli-cursor@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
+ integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=
dependencies:
restore-cursor "^2.0.0"
cli-width@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+ integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
cliui@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
+ integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=
dependencies:
center-align "^0.1.1"
right-align "^0.1.1"
@@ -1575,48 +1950,70 @@ cliui@^2.1.0:
cliui@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
+ integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
dependencies:
string-width "^1.0.1"
strip-ansi "^3.0.1"
wrap-ansi "^2.0.0"
clone@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f"
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+ integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
coa@~1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd"
+ integrity sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=
dependencies:
q "^1.1.2"
code-point-at@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+ integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=
+
+collection-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
+ integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=
+ dependencies:
+ map-visit "^1.0.0"
+ object-visit "^1.0.0"
color-convert@^1.3.0, color-convert@^1.9.0:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed"
+ version "1.9.3"
+ resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
+ integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
dependencies:
- color-name "^1.1.1"
+ color-name "1.1.3"
-color-name@^1.0.0, color-name@^1.1.1:
+color-name@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
+ integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
+
+color-name@^1.0.0:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+ integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
color-string@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991"
+ integrity sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=
dependencies:
color-name "^1.0.0"
color@^0.11.0:
version "0.11.4"
resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764"
+ integrity sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=
dependencies:
clone "^1.0.2"
color-convert "^1.3.0"
@@ -1625,6 +2022,7 @@ color@^0.11.0:
colormin@^1.0.5:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133"
+ integrity sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=
dependencies:
color "^0.11.0"
css-color-names "0.0.4"
@@ -1633,134 +2031,165 @@ colormin@^1.0.5:
colors@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"
+ integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM=
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
+combined-stream@^1.0.5, combined-stream@^1.0.6, combined-stream@~1.0.5, combined-stream@~1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
+ integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
dependencies:
delayed-stream "~1.0.0"
-commander@2.12.x:
- version "2.12.2"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555"
+commander@2.17.x, commander@~2.17.1:
+ version "2.17.1"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
+ integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
-commander@~2.13.0:
- version "2.13.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+commander@^2.11.0:
+ version "2.19.0"
+ resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
+ integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
commondir@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
+ integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=
+
+component-emitter@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
-compressible@~2.0.11:
- version "2.0.12"
- resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.12.tgz#c59a5c99db76767e9876500e271ef63b3493bd66"
+compressible@~2.0.14:
+ version "2.0.15"
+ resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212"
+ integrity sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==
dependencies:
- mime-db ">= 1.30.0 < 2"
+ mime-db ">= 1.36.0 < 2"
compression@^1.5.2:
- version "1.7.1"
- resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.1.tgz#eff2603efc2e22cf86f35d2eb93589f9875373db"
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db"
+ integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==
dependencies:
- accepts "~1.3.4"
+ accepts "~1.3.5"
bytes "3.0.0"
- compressible "~2.0.11"
+ compressible "~2.0.14"
debug "2.6.9"
on-headers "~1.0.1"
- safe-buffer "5.1.1"
+ safe-buffer "5.1.2"
vary "~1.1.2"
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+ integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
concat-stream@^1.6.0:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ version "1.6.2"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
+ integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
dependencies:
+ buffer-from "^1.0.0"
inherits "^2.0.3"
readable-stream "^2.2.2"
typedarray "^0.0.6"
-configstore@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/configstore/-/configstore-2.1.0.tgz#737a3a7036e9886102aa6099e47bb33ab1aba1a1"
+configstore@^3.0.0:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f"
+ integrity sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==
dependencies:
- dot-prop "^3.0.0"
+ dot-prop "^4.1.0"
graceful-fs "^4.1.2"
- mkdirp "^0.5.0"
- object-assign "^4.0.1"
- os-tmpdir "^1.0.0"
- osenv "^0.1.0"
- uuid "^2.0.1"
- write-file-atomic "^1.1.2"
- xdg-basedir "^2.0.0"
+ make-dir "^1.0.0"
+ unique-string "^1.0.0"
+ write-file-atomic "^2.0.0"
+ xdg-basedir "^3.0.0"
connect-history-api-fallback@^1.3.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
+ integrity sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=
console-browserify@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
+ integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
dependencies:
date-now "^0.1.4"
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
+ integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=
constants-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+ integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=
contains-path@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
content-disposition@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
+ integrity sha1-DPaLud318r55YcOoUXjLhdunjLQ=
content-type-parser@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7"
+ integrity sha512-lM4l4CnMEwOLHAHr/P6MEZwZFPJFtAAKgL6pogbXmVZggIqXhdB6RbBtPOTsw2FcXwYhehRGERJmRrjOiIB8pQ==
content-type@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
+ integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
-convert-source-map@^1.4.0, convert-source-map@^1.5.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5"
+convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20"
+ integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==
+ dependencies:
+ safe-buffer "~5.1.1"
cookie-signature@1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
+ integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
cookie@0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
-core-js@2.5.1:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b"
+copy-descriptor@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d"
+ integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
core-js@^1.0.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
+ integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=
-core-js@^2.4.0, core-js@^2.5.0:
- version "2.5.3"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e"
+core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0, core-js@^2.5.7, core-js@~2.5.1:
+ version "2.5.7"
+ resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
+ integrity sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==
core-util-is@1.0.2, core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
version "2.2.2"
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
+ integrity sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==
dependencies:
is-directory "^0.3.1"
js-yaml "^3.4.3"
@@ -1771,30 +2200,35 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
require-from-string "^1.1.0"
create-ecdh@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d"
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
+ integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==
dependencies:
bn.js "^4.1.0"
elliptic "^6.0.0"
-create-error-class@^3.0.1:
+create-error-class@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6"
+ integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=
dependencies:
capture-stack-trace "^1.0.0"
create-hash@^1.1.0, create-hash@^1.1.2:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
+ integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
dependencies:
cipher-base "^1.0.1"
inherits "^2.0.1"
- ripemd160 "^2.0.0"
+ md5.js "^1.3.4"
+ ripemd160 "^2.0.1"
sha.js "^2.4.0"
create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06"
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff"
+ integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==
dependencies:
cipher-base "^1.0.3"
create-hash "^1.1.0"
@@ -1806,6 +2240,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4:
cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0:
version "5.1.0"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=
dependencies:
lru-cache "^4.0.1"
shebang-command "^1.2.0"
@@ -1814,18 +2249,14 @@ cross-spawn@5.1.0, cross-spawn@^5.0.1, cross-spawn@^5.1.0:
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
+ integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=
dependencies:
boom "2.x.x"
-cryptiles@3.x.x:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe"
- dependencies:
- boom "5.x.x"
-
crypto-browserify@^3.11.0:
version "3.12.0"
resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec"
+ integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==
dependencies:
browserify-cipher "^1.0.0"
browserify-sign "^4.0.0"
@@ -1839,17 +2270,25 @@ crypto-browserify@^3.11.0:
randombytes "^2.0.0"
randomfill "^1.0.3"
+crypto-random-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
+ integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=
+
css-color-keywords@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
+ integrity sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=
css-color-names@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
+ integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=
css-loader@0.28.7:
version "0.28.7"
resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
+ integrity sha512-GxMpax8a/VgcfRrVy0gXD6yLd5ePYbXX/5zGgTVYp4wXtJklS8Z2VaUArJgc//f6/Dzil7BaJObdSv8eKKCPgg==
dependencies:
babel-code-frame "^6.11.0"
css-selector-tokenizer "^0.7.0"
@@ -1869,6 +2308,7 @@ css-loader@0.28.7:
css-select@^1.1.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
+ integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
dependencies:
boolbase "~1.0.0"
css-what "2.1"
@@ -1876,32 +2316,37 @@ css-select@^1.1.0:
nth-check "~1.0.1"
css-selector-tokenizer@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86"
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d"
+ integrity sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==
dependencies:
cssesc "^0.1.0"
fastparse "^1.1.1"
regexpu-core "^1.0.0"
css-to-react-native@^2.0.3:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.0.4.tgz#cf4cc407558b3474d4ba8be1a2cd3b6ce713101b"
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.2.2.tgz#c077d0f7bf3e6c915a539e7325821c9dd01f9965"
+ integrity sha512-w99Fzop1FO8XKm0VpbQp3y5mnTnaS+rtCvS+ylSEOK76YXO5zoHQx/QMB1N54Cp+Ya9jB9922EHrh14ld4xmmw==
dependencies:
css-color-keywords "^1.0.0"
fbjs "^0.8.5"
postcss-value-parser "^3.3.0"
css-what@2.1:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd"
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.2.tgz#c0876d9d0480927d7d4920dcd72af3595649554d"
+ integrity sha512-wan8dMWQ0GUeF7DGEPVjhHemVW/vy6xUYmFzRY8RYqgA0JtXC9rJmbScBjqSu6dg9q0lwPQy6ZAmJVr3PPTvqQ==
cssesc@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
+ integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
"cssnano@>=2.6.1 <4":
version "3.10.0"
resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
+ integrity sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=
dependencies:
autoprefixer "^6.3.1"
decamelize "^1.1.2"
@@ -1939,55 +2384,66 @@ cssesc@^0.1.0:
csso@~2.3.1:
version "2.3.2"
resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85"
+ integrity sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=
dependencies:
clap "^1.0.9"
source-map "^0.5.3"
cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
+ version "0.3.4"
+ resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797"
+ integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog==
"cssstyle@>= 0.2.37 < 0.3.0":
version "0.2.37"
resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
+ integrity sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=
dependencies:
cssom "0.3.x"
currently-unhandled@^0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
+ integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
dependencies:
array-find-index "^1.0.1"
d3-array@^1.2.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc"
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f"
+ integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==
d3-collection@1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2"
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e"
+ integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==
d3-color@1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b"
+ version "1.2.3"
+ resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.2.3.tgz#6c67bb2af6df3cc8d79efcc4d3a3e83e28c8048f"
+ integrity sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw==
d3-format@1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a"
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.3.2.tgz#6a96b5e31bcb98122a30863f7d92365c00603562"
+ integrity sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ==
-d3-interpolate@1, d3-interpolate@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6"
+d3-interpolate@1, d3-interpolate@~1.3.0:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.3.2.tgz#417d3ebdeb4bc4efcc8fd4361c55e4040211fd68"
+ integrity sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==
dependencies:
d3-color "1"
d3-path@1:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764"
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.7.tgz#8de7cd693a75ac0b5480d3abaccd94793e58aae8"
+ integrity sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA==
-d3-scale@1.0.6:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.6.tgz#bce19da80d3a0cf422c9543ae3322086220b34ed"
+d3-scale@^1.0.5:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d"
+ integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==
dependencies:
d3-array "^1.2.0"
d3-collection "1"
@@ -1997,102 +2453,157 @@ d3-scale@1.0.6:
d3-time "1"
d3-time-format "2"
-d3-scale@^1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d"
+d3-scale@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-2.1.2.tgz#4e932b7b60182aee9073ede8764c98423e5f9a94"
+ integrity sha512-bESpd64ylaKzCDzvULcmHKZTlzA/6DGSVwx7QSDj/EnX9cpSevsdiwdHFYI9ouo9tNBbV3v5xztHS2uFeOzh8Q==
dependencies:
d3-array "^1.2.0"
d3-collection "1"
- d3-color "1"
d3-format "1"
d3-interpolate "1"
d3-time "1"
d3-time-format "2"
-d3-shape@1.2.0, d3-shape@^1.0.6, d3-shape@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777"
+d3-shape@^1.0.6, d3-shape@^1.2.0, d3-shape@~1.2.0:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.2.tgz#f9dba3777a5825f9a8ce8bc928da08c17679e9a7"
+ integrity sha512-hUGEozlKecFZ2bOSNt7ENex+4Tk9uc/m0TtTEHBvitCBxUNjhzm5hS2GrrVRD/ae4IylSmxGeqX5tWC2rASMlQ==
dependencies:
d3-path "1"
d3-time-format@2:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31"
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.3.tgz#ae06f8e0126a9d60d6364eac5b1533ae1bac826b"
+ integrity sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==
dependencies:
d3-time "1"
d3-time@1:
- version "1.0.8"
- resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84"
+ version "1.0.10"
+ resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.10.tgz#8259dd71288d72eeacfd8de281c4bf5c7393053c"
+ integrity sha512-hF+NTLCaJHF/JqHN5hE8HVGAXPStEq6/omumPE/SxyHVrR7/qQxusFDo0t0c/44+sCGHthC7yNGFZIEgju0P8g==
d@1:
version "1.0.0"
resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+ integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=
dependencies:
es5-ext "^0.10.9"
damerau-levenshtein@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514"
+ integrity sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=
dashdash@^1.12.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
+ integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
dependencies:
assert-plus "^1.0.0"
date-now@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
+ integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
-debug@2.6.9, debug@^2.2.0, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
+debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies:
ms "2.0.0"
-debug@^3.0.1, debug@^3.1.0:
+debug@=3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
dependencies:
ms "2.0.0"
+debug@^3.0.1, debug@^3.1.0:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
+ integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=
+
+decimal.js-light@^2.4.1:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.0.tgz#ca7faf504c799326df94b0ab920424fdfc125348"
+ integrity sha512-b3VJCbd2hwUpeRGG3Toob+CRo8W22xplipNhP3tN7TSVB/cyMX71P1vM2Xjc9H74uV6dS2hDDmo/rHq8L87Upg==
+
+decode-uri-component@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
+ integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
deep-equal@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+ integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
-deep-extend@~0.4.0:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f"
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
deep-is@~0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
default-require-extensions@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
+ integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=
dependencies:
strip-bom "^2.0.0"
define-properties@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+define-property@^0.2.5:
+ version "0.2.5"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116"
+ integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=
+ dependencies:
+ is-descriptor "^0.1.0"
+
+define-property@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6"
+ integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY=
+ dependencies:
+ is-descriptor "^1.0.0"
+
+define-property@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d"
+ integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==
dependencies:
- foreach "^2.0.5"
- object-keys "^1.0.8"
+ is-descriptor "^1.0.2"
+ isobject "^3.0.1"
defined@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
+ integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=
-del@^2.0.2, del@^2.2.2:
+del@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+ integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=
dependencies:
globby "^5.0.0"
is-path-cwd "^1.0.0"
@@ -2105,6 +2616,7 @@ del@^2.0.2, del@^2.2.2:
del@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
+ integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=
dependencies:
globby "^6.1.0"
is-path-cwd "^1.0.0"
@@ -2116,22 +2628,22 @@ del@^3.0.0:
delayed-stream@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
+ integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
-depd@1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359"
-
-depd@~1.1.1:
+depd@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
+ integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
des.js@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc"
+ integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=
dependencies:
inherits "^2.0.1"
minimalistic-assert "^1.0.0"
@@ -2139,35 +2651,42 @@ des.js@^1.0.0:
destroy@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+ integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
detect-indent@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
+ integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg=
dependencies:
repeating "^2.0.0"
detect-libc@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
+ integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
detect-node@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127"
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
+ integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
-detect-port-alt@1.1.5:
- version "1.1.5"
- resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.5.tgz#a1aa8fc805a4a5df9b905b7ddc7eed036bcce889"
+detect-port-alt@1.1.6:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275"
+ integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==
dependencies:
address "^1.0.1"
debug "^2.6.0"
diff@^3.2.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c"
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
+ integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
diffie-hellman@^5.0.0:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e"
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875"
+ integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==
dependencies:
bn.js "^4.1.0"
miller-rabin "^4.0.0"
@@ -2176,10 +2695,12 @@ diffie-hellman@^5.0.0:
dns-equal@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d"
+ integrity sha1-s55/HabrCnW6nBcySzR1PEfgZU0=
-dns-packet@^1.0.1:
+dns-packet@^1.3.1:
version "1.3.1"
resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a"
+ integrity sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==
dependencies:
ip "^1.1.0"
safe-buffer "^5.0.1"
@@ -2187,12 +2708,14 @@ dns-packet@^1.0.1:
dns-txt@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6"
+ integrity sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=
dependencies:
buffer-indexof "^1.0.0"
doctrine@1.5.0:
version "1.5.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
dependencies:
esutils "^2.0.2"
isarray "^1.0.0"
@@ -2200,22 +2723,28 @@ doctrine@1.5.0:
doctrine@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
dependencies:
esutils "^2.0.2"
-dom-converter@~0.1:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b"
+dom-converter@~0.2:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
+ integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==
dependencies:
- utila "~0.3"
+ utila "~0.4"
-dom-helpers@^3.2.0:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6"
+dom-helpers@^3.3.1:
+ version "3.4.0"
+ resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
+ integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
+ dependencies:
+ "@babel/runtime" "^7.1.2"
dom-serializer@0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82"
+ integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=
dependencies:
domelementtype "~1.1.1"
entities "~1.1.1"
@@ -2223,81 +2752,96 @@ dom-serializer@0:
dom-urls@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/dom-urls/-/dom-urls-1.1.0.tgz#001ddf81628cd1e706125c7176f53ccec55d918e"
+ integrity sha1-AB3fgWKM0ecGElxxdvU8zsVdkY4=
dependencies:
urijs "^1.16.1"
domain-browser@^1.1.1:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
+ integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
domelementtype@1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2"
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.2.1.tgz#578558ef23befac043a1abb0db07635509393479"
+ integrity sha512-SQVCLFS2E7G5CRCMdn6K9bIhRj1bS6QBWZfF0TUPh4V/BbqrQ619IdSS3/izn0FZ+9l+uODzaZjb08fjOfablA==
domelementtype@~1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b"
+ integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=
domhandler@2.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
+ integrity sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=
dependencies:
domelementtype "1"
domutils@1.1:
version "1.1.6"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
+ integrity sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=
dependencies:
domelementtype "1"
domutils@1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
+ integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=
dependencies:
dom-serializer "0"
domelementtype "1"
-dot-prop@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177"
+dot-prop@^4.1.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
+ integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==
dependencies:
is-obj "^1.0.0"
dotenv-expand@4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-4.0.1.tgz#68fddc1561814e0a10964111057ff138ced7d7a8"
+ integrity sha1-aP3cFWGBTgoQlkERBX/xOM7X16g=
dotenv@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d"
+ integrity sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=
-duplexer2@^0.1.4:
+duplexer3@^0.1.4:
version "0.1.4"
- resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1"
- dependencies:
- readable-stream "^2.0.2"
+ resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2"
+ integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=
duplexer@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1"
+ integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=
ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
+ integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
dependencies:
jsbn "~0.1.0"
+ safer-buffer "^2.1.0"
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+ integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30:
- version "1.3.31"
- resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.31.tgz#00d832cba9fe2358652b0c48a8816c8e3a037e9f"
+ version "1.3.84"
+ resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.84.tgz#2e55df59e818f150a9f61b53471ebf4f0feecc65"
+ integrity sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==
elliptic@^6.0.0:
- version "6.4.0"
- resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df"
+ version "6.4.1"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a"
+ integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==
dependencies:
bn.js "^4.4.0"
brorand "^1.0.1"
@@ -2310,24 +2854,29 @@ elliptic@^6.0.0:
emoji-regex@^6.1.0:
version "6.5.1"
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2"
+ integrity sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==
emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
+ integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k=
-encodeurl@~1.0.1:
+encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
+ integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
encoding@^0.1.11:
version "0.1.12"
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
+ integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=
dependencies:
iconv-lite "~0.4.13"
enhanced-resolve@^3.4.0:
version "3.4.1"
resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e"
+ integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=
dependencies:
graceful-fs "^4.1.2"
memory-fs "^0.4.0"
@@ -2335,24 +2884,28 @@ enhanced-resolve@^3.4.0:
tapable "^0.2.7"
entities@~1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
+ integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
-errno@^0.1.3, errno@^0.1.4:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.6.tgz#c386ce8a6283f14fc09563b71560908c9bf53026"
+errno@^0.1.3, errno@~0.1.7:
+ version "0.1.7"
+ resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
+ integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
dependencies:
prr "~1.0.1"
error-ex@^1.2.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
+ integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
dependencies:
is-arrayish "^0.2.1"
es-abstract@^1.7.0:
- version "1.10.0"
- resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864"
+ version "1.12.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165"
+ integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==
dependencies:
es-to-primitive "^1.1.1"
function-bind "^1.1.1"
@@ -2361,23 +2914,27 @@ es-abstract@^1.7.0:
is-regex "^1.0.4"
es-to-primitive@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377"
+ integrity sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==
dependencies:
- is-callable "^1.1.1"
+ is-callable "^1.1.4"
is-date-object "^1.0.1"
- is-symbol "^1.0.1"
+ is-symbol "^1.0.2"
es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14:
- version "0.10.38"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.38.tgz#fa7d40d65bbc9bb8a67e1d3f9cc656a00530eed3"
+ version "0.10.46"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.46.tgz#efd99f67c5a7ec789baa3daa7f79870388f7f572"
+ integrity sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==
dependencies:
es6-iterator "~2.0.3"
es6-symbol "~3.1.1"
+ next-tick "1"
es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
+ integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
dependencies:
d "1"
es5-ext "^0.10.35"
@@ -2386,6 +2943,7 @@ es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3:
es6-map@^0.1.3:
version "0.1.5"
resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+ integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=
dependencies:
d "1"
es5-ext "~0.10.14"
@@ -2395,12 +2953,14 @@ es6-map@^0.1.3:
event-emitter "~0.3.5"
es6-promise@^4.0.5:
- version "4.2.4"
- resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29"
+ version "4.2.5"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.5.tgz#da6d0d5692efb461e082c14817fe2427d8f5d054"
+ integrity sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==
es6-set@~0.1.5:
version "0.1.5"
resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+ integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=
dependencies:
d "1"
es5-ext "~0.10.14"
@@ -2411,6 +2971,7 @@ es6-set@~0.1.5:
es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+ integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=
dependencies:
d "1"
es5-ext "~0.10.14"
@@ -2418,6 +2979,7 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1:
es6-weak-map@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+ integrity sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=
dependencies:
d "1"
es5-ext "^0.10.14"
@@ -2427,25 +2989,29 @@ es6-weak-map@^2.0.1:
escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+ integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+ integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escodegen@^1.6.1:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852"
+ version "1.11.0"
+ resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589"
+ integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw==
dependencies:
esprima "^3.1.3"
estraverse "^4.2.0"
esutils "^2.0.2"
optionator "^0.8.1"
optionalDependencies:
- source-map "~0.5.6"
+ source-map "~0.6.1"
escope@^3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=
dependencies:
es6-map "^0.1.3"
es6-weak-map "^2.0.1"
@@ -2455,10 +3021,12 @@ escope@^3.6.0:
eslint-config-react-app@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-2.1.0.tgz#23c909f71cbaff76b945b831d2d814b8bde169eb"
+ integrity sha512-8QZrKWuHVC57Fmu+SsKAVxnI9LycZl7NFQ4H9L+oeISuCXhYdXqsOOIVSjQFW6JF5MXZLFE+21Syhd7mF1IRZQ==
eslint-import-resolver-node@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
+ integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
dependencies:
debug "^2.6.9"
resolve "^1.5.0"
@@ -2466,6 +3034,7 @@ eslint-import-resolver-node@^0.3.1:
eslint-loader@1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13"
+ integrity sha512-40aN976qSNPyb9ejTqjEthZITpls1SVKtwguahmH1dzGCwQU/vySE+xX33VZmD8csU0ahVNCtFlsPgKqRBiqgg==
dependencies:
loader-fs-cache "^1.0.0"
loader-utils "^1.0.2"
@@ -2474,8 +3043,9 @@ eslint-loader@1.9.0:
rimraf "^2.6.1"
eslint-module-utils@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449"
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746"
+ integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=
dependencies:
debug "^2.6.8"
pkg-dir "^1.0.0"
@@ -2483,12 +3053,14 @@ eslint-module-utils@^2.1.1:
eslint-plugin-flowtype@2.39.1:
version "2.39.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.39.1.tgz#b5624622a0388bcd969f4351131232dcb9649cd5"
+ integrity sha512-RiQv+7Z9QDJuzt+NO8sYgkLGT+h+WeCrxP7y8lI7wpU41x3x/2o3PGtHk9ck8QnA9/mlbNcy/hG0eKvmd7npaA==
dependencies:
lodash "^4.15.0"
eslint-plugin-import@2.8.0:
version "2.8.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894"
+ integrity sha512-Rf7dfKJxZ16QuTgVv1OYNxkZcsu/hULFnC+e+w0Gzi6jMC3guQoWQgxYxc54IDRinlb6/0v5z/PxxIKmVctN+g==
dependencies:
builtin-modules "^1.1.1"
contains-path "^0.1.0"
@@ -2504,6 +3076,7 @@ eslint-plugin-import@2.8.0:
eslint-plugin-jsx-a11y@5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1"
+ integrity sha512-5I9SpoP7gT4wBFOtXT8/tXNPYohHBVfyVfO17vkbC7r9kEIxYJF12D3pKqhk8+xnk12rfxKClS3WCFpVckFTPQ==
dependencies:
aria-query "^0.7.0"
array-includes "^3.0.3"
@@ -2516,6 +3089,7 @@ eslint-plugin-jsx-a11y@5.1.1:
eslint-plugin-react@7.4.0:
version "7.4.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a"
+ integrity sha512-tvjU9u3VqmW2vVuYnE8Qptq+6ji4JltjOjJ9u7VAOxVYkUkyBZWRvNYKbDv5fN+L6wiA+4we9+qQahZ0m63XEA==
dependencies:
doctrine "^2.0.0"
has "^1.0.1"
@@ -2523,8 +3097,9 @@ eslint-plugin-react@7.4.0:
prop-types "^15.5.10"
eslint-scope@^3.7.1:
- version "3.7.1"
- resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8"
+ version "3.7.3"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.3.tgz#bb507200d3d17f60247636160b4826284b108535"
+ integrity sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==
dependencies:
esrecurse "^4.1.0"
estraverse "^4.1.1"
@@ -2532,6 +3107,7 @@ eslint-scope@^3.7.1:
eslint@4.10.0:
version "4.10.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7"
+ integrity sha512-MMVl8P/dYUFZEvolL8PYt7qc5LNdS2lwheq9BYa5Y07FblhcZqFyaUqlS8TW5QITGex21tV4Lk0a3fK8lsJIkA==
dependencies:
ajv "^5.2.0"
babel-code-frame "^6.22.0"
@@ -2572,90 +3148,101 @@ eslint@4.10.0:
text-table "~0.2.0"
espree@^3.5.1:
- version "3.5.2"
- resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca"
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.4.tgz#b0f447187c8a8bed944b815a660bddf5deb5d1a7"
+ integrity sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==
dependencies:
- acorn "^5.2.1"
+ acorn "^5.5.0"
acorn-jsx "^3.0.0"
esprima@^2.6.0:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+ integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=
esprima@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+ integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=
esprima@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+ integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
esquery@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+ integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
dependencies:
estraverse "^4.0.0"
esrecurse@^4.1.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
+ integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==
dependencies:
estraverse "^4.1.0"
- object-assign "^4.0.1"
estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+ integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=
esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+ integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=
etag@~1.8.1:
version "1.8.1"
resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
+ integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
event-emitter@~0.3.5:
version "0.3.5"
resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
dependencies:
d "1"
es5-ext "~0.10.14"
-eventemitter3@1.x.x:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508"
-
-eventemitter3@^2.0.3:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-2.0.3.tgz#b5e1079b59fb5e1ba2771c0a993be060a58c99ba"
+eventemitter3@^3.0.0, eventemitter3@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163"
+ integrity sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==
events@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
eventsource@0.1.6:
version "0.1.6"
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232"
+ integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=
dependencies:
original ">=0.0.5"
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02"
+ integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==
dependencies:
md5.js "^1.3.4"
safe-buffer "^5.1.1"
exec-sh@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38"
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"
+ integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==
dependencies:
- merge "^1.1.3"
+ merge "^1.2.0"
execa@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
+ integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
dependencies:
cross-spawn "^5.0.1"
get-stream "^3.0.0"
@@ -2668,63 +3255,97 @@ execa@^0.7.0:
expand-brackets@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
+ integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=
dependencies:
is-posix-bracket "^0.1.0"
+expand-brackets@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
+ integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI=
+ dependencies:
+ debug "^2.3.3"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ posix-character-classes "^0.1.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
expand-range@^1.8.1:
version "1.8.2"
resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
+ integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=
dependencies:
fill-range "^2.1.0"
expand-tilde@^2.0.0, expand-tilde@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=
dependencies:
homedir-polyfill "^1.0.1"
express@^4.13.3:
- version "4.16.2"
- resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c"
+ version "4.16.4"
+ resolved "https://registry.yarnpkg.com/express/-/express-4.16.4.tgz#fddef61926109e24c515ea97fd2f1bdbf62df12e"
+ integrity sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==
dependencies:
- accepts "~1.3.4"
+ accepts "~1.3.5"
array-flatten "1.1.1"
- body-parser "1.18.2"
+ body-parser "1.18.3"
content-disposition "0.5.2"
content-type "~1.0.4"
cookie "0.3.1"
cookie-signature "1.0.6"
debug "2.6.9"
- depd "~1.1.1"
- encodeurl "~1.0.1"
+ depd "~1.1.2"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
- finalhandler "1.1.0"
+ finalhandler "1.1.1"
fresh "0.5.2"
merge-descriptors "1.0.1"
methods "~1.1.2"
on-finished "~2.3.0"
parseurl "~1.3.2"
path-to-regexp "0.1.7"
- proxy-addr "~2.0.2"
- qs "6.5.1"
+ proxy-addr "~2.0.4"
+ qs "6.5.2"
range-parser "~1.2.0"
- safe-buffer "5.1.1"
- send "0.16.1"
- serve-static "1.13.1"
+ safe-buffer "5.1.2"
+ send "0.16.2"
+ serve-static "1.13.2"
setprototypeof "1.1.0"
- statuses "~1.3.1"
- type-is "~1.6.15"
+ statuses "~1.4.0"
+ type-is "~1.6.16"
utils-merge "1.0.1"
vary "~1.1.2"
-extend@~3.0.0, extend@~3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
+extend-shallow@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
+ integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=
+ dependencies:
+ is-extendable "^0.1.0"
+
+extend-shallow@^3.0.0, extend-shallow@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8"
+ integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=
+ dependencies:
+ assign-symbols "^1.0.0"
+ is-extendable "^1.0.1"
+
+extend@~3.0.0, extend@~3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
external-editor@^2.0.4:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48"
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+ integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
dependencies:
chardet "^0.4.0"
iconv-lite "^0.4.17"
@@ -2733,18 +3354,35 @@ external-editor@^2.0.4:
extglob@^0.3.1:
version "0.3.2"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
+ integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=
dependencies:
is-extglob "^1.0.0"
+extglob@^2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
+ integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==
+ dependencies:
+ array-unique "^0.3.2"
+ define-property "^1.0.0"
+ expand-brackets "^2.1.4"
+ extend-shallow "^2.0.1"
+ fragment-cache "^0.2.1"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
+
extract-files@^2.0.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-2.1.1.tgz#3e76eaeeccb5789fc369bfc22bdf9c0e6c5d8b1b"
+ integrity sha512-dijx+TFYPeI9RbDUj54D+jE7emaxCKXWinkzxrW7EiaGDhm46SPlQRH3n6MksCON3p1T6vprO33kzCa5U0ZzOA==
dependencies:
"@babel/runtime" "^7.0.0-beta.37"
extract-text-webpack-plugin@3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7"
+ integrity sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==
dependencies:
async "^2.4.1"
loader-utils "^1.1.0"
@@ -2754,54 +3392,75 @@ extract-text-webpack-plugin@3.0.2:
extsprintf@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
+ integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
extsprintf@^1.2.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
+ integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
fast-deep-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff"
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614"
+ integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=
+
+fast-deep-equal@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
+ integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
fast-json-stable-stringify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+ integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
fast-levenshtein@~2.0.4:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
fastparse@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9"
+ integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==
faye-websocket@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
+ integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=
dependencies:
websocket-driver ">=0.5.1"
faye-websocket@~0.11.0:
version "0.11.1"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
+ integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=
dependencies:
websocket-driver ">=0.5.1"
fb-watchman@^1.8.0:
version "1.9.2"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383"
+ integrity sha1-okz0eCf4LTj7Waaa1wt247auc4M=
dependencies:
bser "1.0.2"
fb-watchman@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
+ integrity sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=
dependencies:
bser "^2.0.0"
+fbjs-css-vars@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.1.tgz#836d876e887d702f45610f5ebd2fbeef649527fc"
+ integrity sha512-IM+v/C40MNZWqsLErc32e0TyIk/NhkkQZL0QmjBh6zi1eXv0/GeVKmKmueQX7nn9SXQBQbTUcB8zuexIF3/88w==
+
fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.5, fbjs@^0.8.9:
- version "0.8.16"
- resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db"
+ version "0.8.17"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
+ integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=
dependencies:
core-js "^1.0.0"
isomorphic-fetch "^2.1.1"
@@ -2809,17 +3468,33 @@ fbjs@^0.8.1, fbjs@^0.8.16, fbjs@^0.8.5, fbjs@^0.8.9:
object-assign "^4.1.0"
promise "^7.1.1"
setimmediate "^1.0.5"
- ua-parser-js "^0.7.9"
+ ua-parser-js "^0.7.18"
+
+fbjs@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-1.0.0.tgz#52c215e0883a3c86af2a7a776ed51525ae8e0a5a"
+ integrity sha512-MUgcMEJaFhCaF1QtWGnmq9ZDRAzECTCRAF7O6UZIlAlkTs1SasiX9aP0Iw7wfD2mJ7wDTNfg2w7u5fSCwJk1OA==
+ dependencies:
+ core-js "^2.4.1"
+ fbjs-css-vars "^1.0.0"
+ isomorphic-fetch "^2.1.1"
+ loose-envify "^1.0.0"
+ object-assign "^4.1.0"
+ promise "^7.1.1"
+ setimmediate "^1.0.5"
+ ua-parser-js "^0.7.18"
figures@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
+ integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=
dependencies:
escape-string-regexp "^1.0.5"
file-entry-cache@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
dependencies:
flat-cache "^1.2.1"
object-assign "^4.0.1"
@@ -2827,6 +3502,7 @@ file-entry-cache@^2.0.0:
file-loader@1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa"
+ integrity sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==
dependencies:
loader-utils "^1.0.2"
schema-utils "^0.3.0"
@@ -2834,10 +3510,12 @@ file-loader@1.1.5:
filename-regex@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26"
+ integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=
fileset@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
+ integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=
dependencies:
glob "^7.0.3"
minimatch "^3.0.3"
@@ -2845,36 +3523,46 @@ fileset@^2.0.2:
filesize@3.5.11:
version "3.5.11"
resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.5.11.tgz#1919326749433bb3cf77368bd158caabcc19e9ee"
+ integrity sha512-ZH7loueKBoDb7yG9esn1U+fgq7BzlzW6NRi5/rMdxIZ05dj7GFD/Xc5rq2CDt5Yq86CyfSYVyx4242QQNZbx1g==
fill-range@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565"
+ integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==
dependencies:
is-number "^2.1.0"
isobject "^2.0.0"
- randomatic "^1.1.3"
+ randomatic "^3.0.0"
repeat-element "^1.1.2"
repeat-string "^1.5.2"
-filled-array@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/filled-array/-/filled-array-1.1.0.tgz#c3c4f6c663b923459a9aa29912d2d031f1507f84"
+fill-range@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7"
+ integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+ to-regex-range "^2.1.0"
-finalhandler@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5"
+finalhandler@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105"
+ integrity sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==
dependencies:
debug "2.6.9"
- encodeurl "~1.0.1"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
on-finished "~2.3.0"
parseurl "~1.3.2"
- statuses "~1.3.1"
+ statuses "~1.4.0"
unpipe "~1.0.0"
find-cache-dir@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9"
+ integrity sha1-yN765XyKUqinhPnjHFfHQumToLk=
dependencies:
commondir "^1.0.1"
mkdirp "^0.5.1"
@@ -2883,6 +3571,7 @@ find-cache-dir@^0.1.1:
find-cache-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f"
+ integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=
dependencies:
commondir "^1.0.1"
make-dir "^1.0.0"
@@ -2891,6 +3580,7 @@ find-cache-dir@^1.0.0:
find-up@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=
dependencies:
path-exists "^2.0.0"
pinkie-promise "^2.0.0"
@@ -2898,75 +3588,93 @@ find-up@^1.0.0:
find-up@^2.0.0, find-up@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c=
dependencies:
locate-path "^2.0.0"
flat-cache@^1.2.1:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481"
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+ integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
dependencies:
circular-json "^0.3.1"
- del "^2.0.2"
graceful-fs "^4.1.2"
+ rimraf "~2.6.2"
write "^0.2.1"
flatten@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
+ integrity sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=
flow-bin@^0.57.3:
version "0.57.3"
resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.57.3.tgz#843fb80a821b6d0c5847f7bb3f42365ffe53b27b"
+ integrity sha512-bbB7KLR1bLS0CvHSsKseOGFF6iI2N9ocL14EQv8Hng28ZksD0gNRzR2JopqA3WGrQYJukDU1W4ZuKoBaRuElFA==
-for-in@^1.0.1:
+follow-redirects@^1.0.0:
+ version "1.5.9"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.9.tgz#c9ed9d748b814a39535716e531b9196a845d89c6"
+ integrity sha512-Bh65EZI/RU8nx0wbYF9shkFZlqLP+6WT/5FnA3cE/djNSuKNHJEinGGZgu/cQEkeeb2GdFOgenAmn8qaqYke2w==
+ dependencies:
+ debug "=3.1.0"
+
+for-in@^1.0.1, for-in@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
+ integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=
for-own@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
+ integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=
dependencies:
for-in "^1.0.1"
-foreach@^2.0.5:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
-
forever-agent@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
+ integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
form-data@~2.1.1:
version "2.1.4"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1"
+ integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.5"
mime-types "^2.1.12"
-form-data@~2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf"
+form-data@~2.3.2:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
dependencies:
asynckit "^0.4.0"
- combined-stream "^1.0.5"
+ combined-stream "^1.0.6"
mime-types "^2.1.12"
-formidable@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.1.1.tgz#96b8886f7c3c3508b932d6bd70c4d3a88f35f1a9"
-
forwarded@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
+ integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
+
+fragment-cache@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
+ integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=
+ dependencies:
+ map-cache "^0.2.2"
fresh@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
+ integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
fs-extra@3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
+ integrity sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=
dependencies:
graceful-fs "^4.1.2"
jsonfile "^3.0.0"
@@ -2975,6 +3683,7 @@ fs-extra@3.0.1:
fs-extra@^0.30.0:
version "0.30.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0"
+ integrity sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=
dependencies:
graceful-fs "^4.1.2"
jsonfile "^2.1.0"
@@ -2982,27 +3691,38 @@ fs-extra@^0.30.0:
path-is-absolute "^1.0.0"
rimraf "^2.2.8"
+fs-minipass@^1.2.5:
+ version "1.2.5"
+ resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d"
+ integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==
+ dependencies:
+ minipass "^2.2.1"
+
fs.realpath@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+ integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
fsevents@1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4"
+ integrity sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==
dependencies:
nan "^2.3.0"
node-pre-gyp "^0.6.36"
-fsevents@^1.0.0:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8"
+fsevents@^1.0.0, fsevents@^1.2.2:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
+ integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==
dependencies:
- nan "^2.3.0"
- node-pre-gyp "^0.6.39"
+ nan "^2.9.2"
+ node-pre-gyp "^0.10.0"
fstream-ignore@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
+ integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=
dependencies:
fstream "^1.0.0"
inherits "2"
@@ -3011,23 +3731,27 @@ fstream-ignore@^1.0.5:
fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2:
version "1.0.11"
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
+ integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=
dependencies:
graceful-fs "^4.1.2"
inherits "~2.0.0"
mkdirp ">=0.5 0"
rimraf "2"
-function-bind@^1.0.2, function-bind@^1.1.1:
+function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+ integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
functional-red-black-tree@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
+ integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=
dependencies:
aproba "^1.0.3"
console-control-strings "^1.0.0"
@@ -3039,26 +3763,36 @@ gauge@~2.7.3:
wide-align "^1.1.0"
get-caller-file@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
+ integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==
get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+ integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
get-stream@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
+ integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=
+
+get-value@^2.0.3, get-value@^2.0.6:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28"
+ integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=
getpass@^0.1.1:
version "0.1.7"
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
+ integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
dependencies:
assert-plus "^1.0.0"
glob-base@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
+ integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=
dependencies:
glob-parent "^2.0.0"
is-glob "^2.0.0"
@@ -3066,12 +3800,22 @@ glob-base@^0.3.0:
glob-parent@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
+ integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=
dependencies:
is-glob "^2.0.0"
+glob-parent@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae"
+ integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=
+ dependencies:
+ is-glob "^3.1.0"
+ path-dirname "^1.0.0"
+
glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
- version "7.1.2"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ version "7.1.3"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
+ integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
@@ -3080,9 +3824,17 @@ glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-dirs@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=
+ dependencies:
+ ini "^1.3.4"
+
global-modules@1.0.0, global-modules@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
dependencies:
global-prefix "^1.0.1"
is-windows "^1.0.1"
@@ -3091,6 +3843,7 @@ global-modules@1.0.0, global-modules@^1.0.0:
global-prefix@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=
dependencies:
expand-tilde "^2.0.2"
homedir-polyfill "^1.0.1"
@@ -3101,10 +3854,12 @@ global-prefix@^1.0.1:
globals@^9.17.0, globals@^9.18.0:
version "9.18.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a"
+ integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==
globby@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+ integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=
dependencies:
array-union "^1.0.1"
arrify "^1.0.0"
@@ -3116,6 +3871,7 @@ globby@^5.0.0:
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
+ integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=
dependencies:
array-union "^1.0.1"
glob "^7.0.3"
@@ -3123,161 +3879,199 @@ globby@^6.1.0:
pify "^2.0.0"
pinkie-promise "^2.0.0"
-got@^5.0.0:
- version "5.7.1"
- resolved "https://registry.yarnpkg.com/got/-/got-5.7.1.tgz#5f81635a61e4a6589f180569ea4e381680a51f35"
+got@^6.7.1:
+ version "6.7.1"
+ resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0"
+ integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=
dependencies:
- create-error-class "^3.0.1"
- duplexer2 "^0.1.4"
+ create-error-class "^3.0.0"
+ duplexer3 "^0.1.4"
+ get-stream "^3.0.0"
is-redirect "^1.0.0"
is-retry-allowed "^1.0.0"
is-stream "^1.0.0"
lowercase-keys "^1.0.0"
- node-status-codes "^1.0.0"
- object-assign "^4.0.1"
- parse-json "^2.1.0"
- pinkie-promise "^2.0.0"
- read-all-stream "^3.0.0"
- readable-stream "^2.0.5"
- timed-out "^3.0.0"
- unzip-response "^1.0.2"
+ safe-buffer "^5.0.1"
+ timed-out "^4.0.0"
+ unzip-response "^2.0.1"
url-parse-lax "^1.0.0"
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-graphql-anywhere@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/graphql-anywhere/-/graphql-anywhere-4.1.1.tgz#67924b67b053d1a23bc30d0e4c8db943c1d791a8"
- dependencies:
- apollo-utilities "^1.0.4"
+ version "4.1.15"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00"
+ integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==
graphql-tag@^2.6.1:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.6.1.tgz#4788d509f6e29607d947fc47a40c4e18f736d34a"
+ version "2.10.0"
+ resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.10.0.tgz#87da024be863e357551b2b8700e496ee2d4353ae"
+ integrity sha512-9FD6cw976TLLf9WYIUPCaaTpniawIjHWZSwIRZSjrfufJamcXbVVYfN2TWvJYbw0Xf2JjYbl1/f2+wDnBVw3/w==
graphql@^0.12.3:
version "0.12.3"
resolved "https://registry.yarnpkg.com/graphql/-/graphql-0.12.3.tgz#11668458bbe28261c0dcb6e265f515ba79f6ce07"
+ integrity sha512-Hn9rdu4zacplKXNrLCvR8YFiTGnbM4Zw/UH8FDmzBDsH7ou40lSNH4tIlsxcYnz2TGNVJCpu1WxCM23yd6kzhA==
dependencies:
iterall "1.1.3"
growly@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
+ integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=
gzip-size@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520"
+ integrity sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=
dependencies:
duplexer "^0.1.1"
handle-thing@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4"
+ integrity sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=
handlebars@^4.0.3:
- version "4.0.11"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc"
+ version "4.0.12"
+ resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5"
+ integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==
dependencies:
- async "^1.4.0"
+ async "^2.5.0"
optimist "^0.6.1"
- source-map "^0.4.4"
+ source-map "^0.6.1"
optionalDependencies:
- uglify-js "^2.6"
+ uglify-js "^3.1.4"
har-schema@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
+ integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=
har-schema@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
+ integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
har-validator@~4.2.1:
version "4.2.1"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
+ integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio=
dependencies:
ajv "^4.9.1"
har-schema "^1.0.5"
-har-validator@~5.0.3:
- version "5.0.3"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd"
+har-validator@~5.1.0:
+ version "5.1.3"
+ resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
+ integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
dependencies:
- ajv "^5.1.0"
+ ajv "^6.5.5"
har-schema "^2.0.0"
has-ansi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=
dependencies:
ansi-regex "^2.0.0"
has-flag@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
+ integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=
has-flag@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
+ integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=
+
+has-flag@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
+ integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
+
+has-symbols@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44"
+ integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=
has-unicode@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
+ integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=
-has@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+has-value@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f"
+ integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=
dependencies:
- function-bind "^1.0.2"
+ get-value "^2.0.3"
+ has-values "^0.1.4"
+ isobject "^2.0.0"
-hash-base@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1"
+has-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177"
+ integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=
dependencies:
- inherits "^2.0.1"
+ get-value "^2.0.6"
+ has-values "^1.0.0"
+ isobject "^3.0.0"
+
+has-values@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771"
+ integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E=
+
+has-values@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f"
+ integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=
+ dependencies:
+ is-number "^3.0.0"
+ kind-of "^4.0.0"
+
+has@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+ integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+ dependencies:
+ function-bind "^1.1.1"
hash-base@^3.0.0:
version "3.0.4"
resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918"
+ integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=
dependencies:
inherits "^2.0.1"
safe-buffer "^5.0.1"
hash.js@^1.0.0, hash.js@^1.0.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846"
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812"
+ integrity sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==
dependencies:
inherits "^2.0.3"
- minimalistic-assert "^1.0.0"
+ minimalistic-assert "^1.0.1"
hawk@3.1.3, hawk@~3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
+ integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=
dependencies:
boom "2.x.x"
cryptiles "2.x.x"
hoek "2.x.x"
sntp "1.x.x"
-hawk@~6.0.2:
- version "6.0.2"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038"
- dependencies:
- boom "4.x.x"
- cryptiles "3.x.x"
- hoek "4.x.x"
- sntp "2.x.x"
-
-he@1.1.x:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
+he@1.2.x:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
+ integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
history@^4.7.2:
version "4.7.2"
resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b"
+ integrity sha512-1zkBRWW6XweO0NBcjiphtVJVsIQ+SXF29z9DVkceeaSLVMFXHool+fdCZD4spDCfZJCILPILc3bm7Bc+HRi0nA==
dependencies:
invariant "^2.2.1"
loose-envify "^1.2.0"
@@ -3288,6 +4082,7 @@ history@^4.7.2:
hmac-drbg@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
dependencies:
hash.js "^1.0.3"
minimalistic-assert "^1.0.0"
@@ -3296,22 +4091,24 @@ hmac-drbg@^1.0.0:
hoek@2.x.x:
version "2.16.3"
resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
+ integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=
-hoek@4.x.x:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d"
-
-hoist-non-react-statics@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
+hoist-non-react-statics@^2.3.1, hoist-non-react-statics@^2.5.0:
+ version "2.5.5"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
+ integrity sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw==
-hoist-non-react-statics@^2.2.0, hoist-non-react-statics@^2.2.1, hoist-non-react-statics@^2.3.0, hoist-non-react-statics@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0"
+hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.1.0.tgz#42414ccdfff019cd2168168be998c7b3bd5245c0"
+ integrity sha512-MYcYuROh7SBM69xHGqXEwQqDux34s9tz+sCnxJmN18kgWh6JFdTw/5YdZtqsOdZJXddE/wUpCzfEdDrJj8p0Iw==
+ dependencies:
+ react-is "^16.3.2"
home-or-tmp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
+ integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg=
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.1"
@@ -3319,16 +4116,19 @@ home-or-tmp@^2.0.0:
homedir-polyfill@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
+ integrity sha1-TCu8inWJmP7r9e1oWA921GdotLw=
dependencies:
parse-passwd "^1.0.0"
hosted-git-info@^2.1.4:
- version "2.5.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c"
+ version "2.7.1"
+ resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
+ integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==
hpack.js@^2.1.6:
version "2.1.6"
resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2"
+ integrity sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=
dependencies:
inherits "^2.0.1"
obuf "^1.0.0"
@@ -3336,35 +4136,39 @@ hpack.js@^2.1.6:
wbuf "^1.1.0"
html-comment-regex@^1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
+ integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
html-encoding-sniffer@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8"
+ integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==
dependencies:
whatwg-encoding "^1.0.1"
html-entities@^1.2.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
+ integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=
html-minifier@^3.2.3:
- version "3.5.8"
- resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.8.tgz#5ccdb1f73a0d654e6090147511f6e6b2ee312700"
+ version "3.5.21"
+ resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c"
+ integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==
dependencies:
camel-case "3.0.x"
- clean-css "4.1.x"
- commander "2.12.x"
- he "1.1.x"
- ncname "1.0.x"
+ clean-css "4.2.x"
+ commander "2.17.x"
+ he "1.2.x"
param-case "2.1.x"
relateurl "0.2.x"
- uglify-js "3.3.x"
+ uglify-js "3.4.x"
html-webpack-plugin@2.29.0:
version "2.29.0"
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-2.29.0.tgz#e987f421853d3b6938c8c4c8171842e5fd17af23"
+ integrity sha1-6Yf0IYU9O2k4yMTIFxhC5f0XryM=
dependencies:
bluebird "^3.4.7"
html-minifier "^3.2.3"
@@ -3376,6 +4180,7 @@ html-webpack-plugin@2.29.0:
htmlparser2@~3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
+ integrity sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=
dependencies:
domelementtype "1"
domhandler "2.1"
@@ -3385,23 +4190,27 @@ htmlparser2@~3.3.0:
http-deceiver@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
+ integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
-http-errors@1.6.2, http-errors@~1.6.2:
- version "1.6.2"
- resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
+http-errors@1.6.3, http-errors@~1.6.2, http-errors@~1.6.3:
+ version "1.6.3"
+ resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d"
+ integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=
dependencies:
- depd "1.1.1"
+ depd "~1.1.2"
inherits "2.0.3"
- setprototypeof "1.0.3"
- statuses ">= 1.3.1 < 2"
+ setprototypeof "1.1.0"
+ statuses ">= 1.4.0 < 2"
http-parser-js@>=0.4.0:
- version "0.4.9"
- resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.9.tgz#ea1a04fb64adff0242e9974f297dd4c3cad271e1"
+ version "0.5.0"
+ resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.0.tgz#d65edbede84349d0dc30320815a15d39cc3cbbd8"
+ integrity sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==
http-proxy-middleware@~0.17.4:
version "0.17.4"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833"
+ integrity sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=
dependencies:
http-proxy "^1.16.2"
is-glob "^3.1.0"
@@ -3409,15 +4218,18 @@ http-proxy-middleware@~0.17.4:
micromatch "^2.3.11"
http-proxy@^1.16.2:
- version "1.16.2"
- resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742"
+ version "1.17.0"
+ resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a"
+ integrity sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==
dependencies:
- eventemitter3 "1.x.x"
- requires-port "1.x.x"
+ eventemitter3 "^3.0.0"
+ follow-redirects "^1.0.0"
+ requires-port "^1.0.0"
http-signature@~1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
+ integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=
dependencies:
assert-plus "^0.2.0"
jsprim "^1.2.2"
@@ -3426,6 +4238,7 @@ http-signature@~1.1.0:
http-signature@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
+ integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
dependencies:
assert-plus "^1.0.0"
jsprim "^1.2.2"
@@ -3434,32 +4247,65 @@ http-signature@~1.2.0:
https-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
+ integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=
+
+iconv-lite@0.4.23:
+ version "0.4.23"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63"
+ integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
-iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13:
- version "0.4.19"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
+iconv-lite@0.4.24, iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
+ version "0.4.24"
+ resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
+ integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
+ dependencies:
+ safer-buffer ">= 2.1.2 < 3"
icss-replace-symbols@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded"
+ integrity sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=
icss-utils@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962"
+ integrity sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=
dependencies:
postcss "^6.0.1"
ieee754@^1.1.4:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
+ integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
+
+ignore-walk@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8"
+ integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==
+ dependencies:
+ minimatch "^3.0.4"
ignore@^3.3.3:
- version "3.3.7"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021"
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==
+
+immutable-tuple@^0.4.9:
+ version "0.4.9"
+ resolved "https://registry.yarnpkg.com/immutable-tuple/-/immutable-tuple-0.4.9.tgz#473ebdd6c169c461913a454bf87ef8f601a20ff0"
+ integrity sha512-LWbJPZnidF8eczu7XmcnLBsumuyRBkpwIRPCZxlojouhBo5jEBO4toj6n7hMy6IxHU/c+MqDSWkvaTpPlMQcyA==
+
+import-lazy@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
+ integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=
import-local@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/import-local/-/import-local-0.1.1.tgz#b1179572aacdc11c6a91009fb430dbcab5f668a8"
+ integrity sha1-sReVcqrNwRxqkQCftDDbyrX2aKg=
dependencies:
pkg-dir "^2.0.0"
resolve-cwd "^2.0.0"
@@ -3467,24 +4313,29 @@ import-local@^0.1.1:
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+ integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
indent-string@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
+ integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
dependencies:
repeating "^2.0.0"
indexes-of@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
+ integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc=
indexof@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
+ integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=
inflight@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
wrappy "1"
@@ -3492,18 +4343,22 @@ inflight@^1.0.4:
inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
inherits@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
+ integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=
ini@^1.3.4, ini@~1.3.0:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
inquirer@3.3.0, inquirer@^3.0.6:
version "3.3.0"
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9"
+ integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==
dependencies:
ansi-escapes "^3.0.0"
chalk "^2.0.0"
@@ -3523,258 +4378,388 @@ inquirer@3.3.0, inquirer@^3.0.6:
internal-ip@1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c"
+ integrity sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=
dependencies:
meow "^3.3.0"
interpret@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614"
+ integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=
-invariant@^2.0.0, invariant@^2.2.1, invariant@^2.2.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
+invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
+ integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
dependencies:
loose-envify "^1.0.0"
invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY=
ip@^1.1.0, ip@^1.1.5:
version "1.1.5"
resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a"
+ integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=
-ipaddr.js@1.5.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0"
+ipaddr.js@1.8.0:
+ version "1.8.0"
+ resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e"
+ integrity sha1-6qM9bd16zo9/b+DJygRA5wZzix4=
is-absolute-url@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
+ integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=
+
+is-accessor-descriptor@^0.1.6:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6"
+ integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=
+ dependencies:
+ kind-of "^3.0.2"
+
+is-accessor-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656"
+ integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==
+ dependencies:
+ kind-of "^6.0.0"
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+ integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
is-binary-path@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
+ integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=
dependencies:
binary-extensions "^1.0.0"
is-buffer@^1.1.5:
version "1.1.6"
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
is-builtin-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
+ integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74=
dependencies:
builtin-modules "^1.0.0"
-is-callable@^1.1.1, is-callable@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+is-callable@^1.1.3, is-callable@^1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75"
+ integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==
is-ci@^1.0.10:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5"
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c"
+ integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==
+ dependencies:
+ ci-info "^1.5.0"
+
+is-data-descriptor@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56"
+ integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=
dependencies:
- ci-info "^1.0.0"
+ kind-of "^3.0.2"
+
+is-data-descriptor@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7"
+ integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==
+ dependencies:
+ kind-of "^6.0.0"
is-date-object@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+ integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=
+
+is-descriptor@^0.1.0:
+ version "0.1.6"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca"
+ integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==
+ dependencies:
+ is-accessor-descriptor "^0.1.6"
+ is-data-descriptor "^0.1.4"
+ kind-of "^5.0.0"
+
+is-descriptor@^1.0.0, is-descriptor@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec"
+ integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==
+ dependencies:
+ is-accessor-descriptor "^1.0.0"
+ is-data-descriptor "^1.0.0"
+ kind-of "^6.0.2"
is-directory@^0.3.1:
version "0.3.1"
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
+ integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=
is-dotfile@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1"
+ integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=
is-equal-shallow@^0.1.3:
version "0.1.3"
resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
+ integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=
dependencies:
is-primitive "^2.0.0"
-is-extendable@^0.1.1:
+is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
+ integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=
+
+is-extendable@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4"
+ integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==
+ dependencies:
+ is-plain-object "^2.0.4"
is-extglob@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
+ integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=
-is-extglob@^2.1.0:
+is-extglob@^2.1.0, is-extglob@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
+ integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
is-finite@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
+ integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=
dependencies:
number-is-nan "^1.0.0"
is-fullwidth-code-point@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs=
dependencies:
number-is-nan "^1.0.0"
is-fullwidth-code-point@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+ integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
is-glob@^2.0.0, is-glob@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
+ integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=
dependencies:
is-extglob "^1.0.0"
is-glob@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a"
+ integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=
dependencies:
is-extglob "^2.1.0"
+is-glob@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0"
+ integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=
+ dependencies:
+ is-extglob "^2.1.1"
+
+is-installed-globally@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80"
+ integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=
+ dependencies:
+ global-dirs "^0.1.0"
+ is-path-inside "^1.0.0"
+
is-npm@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4"
+ integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ=
is-number@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
+ integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=
dependencies:
kind-of "^3.0.2"
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
+ integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=
dependencies:
kind-of "^3.0.2"
+is-number@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff"
+ integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==
+
is-obj@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f"
+ integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8=
is-path-cwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+ integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=
is-path-in-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52"
+ integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==
dependencies:
is-path-inside "^1.0.0"
is-path-inside@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036"
+ integrity sha1-jvW33lBDej/cprToZe96pVy0gDY=
dependencies:
path-is-inside "^1.0.1"
is-plain-obj@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
+ integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4=
-is-plain-object@^2.0.1:
+is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
+ integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
dependencies:
isobject "^3.0.1"
is-posix-bracket@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
+ integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=
is-primitive@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
+ integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU=
is-promise@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
+ integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=
is-redirect@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24"
+ integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=
is-regex@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=
dependencies:
has "^1.0.1"
is-resolvable@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
is-retry-allowed@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34"
+ integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=
is-root@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-root/-/is-root-1.0.0.tgz#07b6c233bc394cd9d02ba15c966bd6660d6342d5"
+ integrity sha1-B7bCM7w5TNnQK6FclmvWZg1jQtU=
is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
+ integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ=
is-svg@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9"
+ integrity sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=
dependencies:
html-comment-regex "^1.1.0"
-is-symbol@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+is-symbol@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38"
+ integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==
+ dependencies:
+ has-symbols "^1.0.0"
is-typedarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
+ integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
is-utf8@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=
-is-windows@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+is-windows@^1.0.1, is-windows@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
is-wsl@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
+ integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+ integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=
isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
isexe@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
+ integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
isobject@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
+ integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=
dependencies:
isarray "1.0.0"
-isobject@^3.0.1:
+isobject@^3.0.0, isobject@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
+ integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
isomorphic-fetch@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
+ integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
dependencies:
node-fetch "^1.0.1"
whatwg-fetch ">=0.10.0"
@@ -3782,81 +4767,97 @@ isomorphic-fetch@^2.1.1:
isstream@~0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
+ integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
istanbul-api@^1.1.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620"
+ version "1.3.7"
+ resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa"
+ integrity sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==
dependencies:
async "^2.1.4"
fileset "^2.0.2"
- istanbul-lib-coverage "^1.1.1"
- istanbul-lib-hook "^1.1.0"
- istanbul-lib-instrument "^1.9.1"
- istanbul-lib-report "^1.1.2"
- istanbul-lib-source-maps "^1.2.2"
- istanbul-reports "^1.1.3"
+ istanbul-lib-coverage "^1.2.1"
+ istanbul-lib-hook "^1.2.2"
+ istanbul-lib-instrument "^1.10.2"
+ istanbul-lib-report "^1.1.5"
+ istanbul-lib-source-maps "^1.2.6"
+ istanbul-reports "^1.5.1"
js-yaml "^3.7.0"
mkdirp "^0.5.1"
once "^1.4.0"
-istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da"
+istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0"
+ integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ==
-istanbul-lib-hook@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b"
+istanbul-lib-hook@^1.2.2:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86"
+ integrity sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==
dependencies:
append-transform "^0.4.0"
-istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.1:
- version "1.9.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e"
+istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2, istanbul-lib-instrument@^1.4.2:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca"
+ integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==
dependencies:
babel-generator "^6.18.0"
babel-template "^6.16.0"
babel-traverse "^6.18.0"
babel-types "^6.18.0"
babylon "^6.18.0"
- istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-coverage "^1.2.1"
semver "^5.3.0"
-istanbul-lib-report@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425"
+istanbul-lib-report@^1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c"
+ integrity sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==
dependencies:
- istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-coverage "^1.2.1"
mkdirp "^0.5.1"
path-parse "^1.0.5"
supports-color "^3.1.2"
-istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c"
+istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.6:
+ version "1.2.6"
+ resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f"
+ integrity sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==
dependencies:
debug "^3.1.0"
- istanbul-lib-coverage "^1.1.1"
+ istanbul-lib-coverage "^1.2.1"
mkdirp "^0.5.1"
rimraf "^2.6.1"
source-map "^0.5.3"
-istanbul-reports@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10"
+istanbul-reports@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a"
+ integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==
dependencies:
handlebars "^4.0.3"
-iterall@1.1.3, iterall@^1.1.1:
+iterall@1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.1.3.tgz#1cbbff96204056dde6656e2ed2e2226d0e6d72c9"
+ integrity sha512-Cu/kb+4HiNSejAPhSaN1VukdNTTi/r4/e+yykqjlG/IW+1gZH5b4+Bq3whDX4tvbYugta3r8KTMUiqT3fIGxuQ==
+
+iterall@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/iterall/-/iterall-1.2.2.tgz#92d70deb8028e0c39ff3164fdbf4d8b088130cd7"
+ integrity sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==
jest-changed-files@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-20.0.3.tgz#9394d5cc65c438406149bef1bf4d52b68e03e3f8"
+ integrity sha1-k5TVzGXEOEBhSb7xv01Sto4D4/g=
jest-cli@^20.0.4:
version "20.0.4"
resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-20.0.4.tgz#e532b19d88ae5bc6c417e8b0593a6fe954b1dc93"
+ integrity sha1-5TKxnYiuW8bEF+iwWTpv6VSx3JM=
dependencies:
ansi-escapes "^1.4.0"
callsites "^2.0.0"
@@ -3892,6 +4893,7 @@ jest-cli@^20.0.4:
jest-config@^20.0.4:
version "20.0.4"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-20.0.4.tgz#e37930ab2217c913605eff13e7bd763ec48faeea"
+ integrity sha1-43kwqyIXyRNgXv8T5712PsSPruo=
dependencies:
chalk "^1.1.3"
glob "^7.1.1"
@@ -3907,6 +4909,7 @@ jest-config@^20.0.4:
jest-diff@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-20.0.3.tgz#81f288fd9e675f0fb23c75f1c2b19445fe586617"
+ integrity sha1-gfKI/Z5nXw+yPHXxwrGURf5YZhc=
dependencies:
chalk "^1.1.3"
diff "^3.2.0"
@@ -3916,10 +4919,12 @@ jest-diff@^20.0.3:
jest-docblock@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-20.0.3.tgz#17bea984342cc33d83c50fbe1545ea0efaa44712"
+ integrity sha1-F76phDQswz2DxQ++FUXqDvqkRxI=
jest-environment-jsdom@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-20.0.3.tgz#048a8ac12ee225f7190417713834bb999787de99"
+ integrity sha1-BIqKwS7iJfcZBBdxODS7mZeH3pk=
dependencies:
jest-mock "^20.0.3"
jest-util "^20.0.3"
@@ -3928,6 +4933,7 @@ jest-environment-jsdom@^20.0.3:
jest-environment-node@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-20.0.3.tgz#d488bc4612af2c246e986e8ae7671a099163d403"
+ integrity sha1-1Ii8RhKvLCRumG6K52caCZFj1AM=
dependencies:
jest-mock "^20.0.3"
jest-util "^20.0.3"
@@ -3935,6 +4941,7 @@ jest-environment-node@^20.0.3:
jest-haste-map@^20.0.4:
version "20.0.5"
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-20.0.5.tgz#abad74efb1a005974a7b6517e11010709cab9112"
+ integrity sha512-0IKAQjUvuZjMCNi/0VNQQF74/H9KB67hsHJqGiwTWQC6XO5Azs7kLWm+6Q/dwuhvDUvABDOBMFK2/FwZ3sZ07Q==
dependencies:
fb-watchman "^2.0.0"
graceful-fs "^4.1.11"
@@ -3946,6 +4953,7 @@ jest-haste-map@^20.0.4:
jest-jasmine2@^20.0.4:
version "20.0.4"
resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-20.0.4.tgz#fcc5b1411780d911d042902ef1859e852e60d5e1"
+ integrity sha1-/MWxQReA2RHQQpAu8YWehS5g1eE=
dependencies:
chalk "^1.1.3"
graceful-fs "^4.1.11"
@@ -3960,6 +4968,7 @@ jest-jasmine2@^20.0.4:
jest-matcher-utils@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-20.0.3.tgz#b3a6b8e37ca577803b0832a98b164f44b7815612"
+ integrity sha1-s6a443yld4A7CDKpixZPRLeBVhI=
dependencies:
chalk "^1.1.3"
pretty-format "^20.0.3"
@@ -3967,6 +4976,7 @@ jest-matcher-utils@^20.0.3:
jest-matchers@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-20.0.3.tgz#ca69db1c32db5a6f707fa5e0401abb55700dfd60"
+ integrity sha1-ymnbHDLbWm9wf6XgQBq7VXAN/WA=
dependencies:
jest-diff "^20.0.3"
jest-matcher-utils "^20.0.3"
@@ -3976,6 +4986,7 @@ jest-matchers@^20.0.3:
jest-message-util@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-20.0.3.tgz#6aec2844306fcb0e6e74d5796c1006d96fdd831c"
+ integrity sha1-auwoRDBvyw5udNV5bBAG2W/dgxw=
dependencies:
chalk "^1.1.3"
micromatch "^2.3.11"
@@ -3984,20 +4995,24 @@ jest-message-util@^20.0.3:
jest-mock@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-20.0.3.tgz#8bc070e90414aa155c11a8d64c869a0d5c71da59"
+ integrity sha1-i8Bw6QQUqhVcEajWTIaaDVxx2lk=
jest-regex-util@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-20.0.3.tgz#85bbab5d133e44625b19faf8c6aa5122d085d762"
+ integrity sha1-hburXRM+RGJbGfr4xqpRItCF12I=
jest-resolve-dependencies@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-20.0.3.tgz#6e14a7b717af0f2cb3667c549de40af017b1723a"
+ integrity sha1-bhSntxevDyyzZnxUneQK8Bexcjo=
dependencies:
jest-regex-util "^20.0.3"
jest-resolve@^20.0.4:
version "20.0.4"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-20.0.4.tgz#9448b3e8b6bafc15479444c6499045b7ffe597a5"
+ integrity sha1-lEiz6La6/BVHlETGSZBFt//ll6U=
dependencies:
browser-resolve "^1.11.2"
is-builtin-module "^1.0.0"
@@ -4006,6 +5021,7 @@ jest-resolve@^20.0.4:
jest-runtime@^20.0.4:
version "20.0.4"
resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-20.0.4.tgz#a2c802219c4203f754df1404e490186169d124d8"
+ integrity sha1-osgCIZxCA/dU3xQE5JAYYWnRJNg=
dependencies:
babel-core "^6.0.0"
babel-jest "^20.0.3"
@@ -4026,6 +5042,7 @@ jest-runtime@^20.0.4:
jest-snapshot@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-20.0.3.tgz#5b847e1adb1a4d90852a7f9f125086e187c76566"
+ integrity sha1-W4R+GtsaTZCFKn+fElCG4YfHZWY=
dependencies:
chalk "^1.1.3"
jest-diff "^20.0.3"
@@ -4037,6 +5054,7 @@ jest-snapshot@^20.0.3:
jest-util@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-20.0.3.tgz#0c07f7d80d82f4e5a67c6f8b9c3fe7f65cfd32ad"
+ integrity sha1-DAf32A2C9OWmfG+LnD/n9lz9Mq0=
dependencies:
chalk "^1.1.3"
graceful-fs "^4.1.11"
@@ -4049,6 +5067,7 @@ jest-util@^20.0.3:
jest-validate@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-20.0.3.tgz#d0cfd1de4f579f298484925c280f8f1d94ec3cab"
+ integrity sha1-0M/R3k9XnymEhJJcKA+PHZTsPKs=
dependencies:
chalk "^1.1.3"
jest-matcher-utils "^20.0.3"
@@ -4058,20 +5077,29 @@ jest-validate@^20.0.3:
jest@20.0.4:
version "20.0.4"
resolved "https://registry.yarnpkg.com/jest/-/jest-20.0.4.tgz#3dd260c2989d6dad678b1e9cc4d91944f6d602ac"
+ integrity sha1-PdJgwpidba1nix6cxNkZRPbWAqw=
dependencies:
jest-cli "^20.0.4"
js-base64@^2.1.9:
- version "2.4.2"
- resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.2.tgz#1896da010ef8862f385d8887648e9b6dc4a7a2e9"
+ version "2.4.9"
+ resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03"
+ integrity sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==
+
+"js-tokens@^3.0.0 || ^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
+ integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
-js-tokens@^3.0.0, js-tokens@^3.0.2:
+js-tokens@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
+ integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls=
js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc"
+ version "3.12.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1"
+ integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==
dependencies:
argparse "^1.0.7"
esprima "^4.0.0"
@@ -4079,6 +5107,7 @@ js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.9.1:
js-yaml@~3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80"
+ integrity sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=
dependencies:
argparse "^1.0.7"
esprima "^2.6.0"
@@ -4086,10 +5115,12 @@ js-yaml@~3.7.0:
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
+ integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
jsdom@^9.12.0:
version "9.12.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4"
+ integrity sha1-6MVG//ywbADUgzyoRBD+1/igl9Q=
dependencies:
abab "^1.0.3"
acorn "^4.0.4"
@@ -4114,60 +5145,78 @@ jsdom@^9.12.0:
jsesc@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
+ integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s=
jsesc@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
+ integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
json-loader@^0.5.4:
version "0.5.7"
resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d"
+ integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==
json-schema-traverse@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340"
+ integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=
+
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+ integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
json-stable-stringify@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=
dependencies:
jsonify "~0.0.0"
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
+ integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
json3@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1"
+ integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=
json5@^0.5.0, json5@^0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
+ integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=
jsonfile@^2.1.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
+ integrity sha1-NzaitCi4e72gzIO1P6PWM6NcKug=
optionalDependencies:
graceful-fs "^4.1.6"
jsonfile@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-3.0.1.tgz#a5ecc6f65f53f662c4415c7675a0331d0992ec66"
+ integrity sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=
optionalDependencies:
graceful-fs "^4.1.6"
jsonify@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+ integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=
jsprim@^1.2.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
+ integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
dependencies:
assert-plus "1.0.0"
extsprintf "1.3.0"
@@ -4177,62 +5226,79 @@ jsprim@^1.2.2:
jsx-ast-utils@^1.4.0:
version "1.4.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
+ integrity sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=
jsx-ast-utils@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f"
+ integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=
dependencies:
array-includes "^3.0.3"
killable@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.0.tgz#da8b84bd47de5395878f95d64d02f2449fe05e6b"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
+ integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==
-kind-of@^3.0.2:
+kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0:
version "3.2.2"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64"
+ integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=
dependencies:
is-buffer "^1.1.5"
kind-of@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57"
+ integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc=
dependencies:
is-buffer "^1.1.5"
+kind-of@^5.0.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d"
+ integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==
+
+kind-of@^6.0.0, kind-of@^6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051"
+ integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==
+
klaw@^1.0.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439"
+ integrity sha1-QIhDO0azsbolnXh4XY6W9zugJDk=
optionalDependencies:
graceful-fs "^4.1.9"
-latest-version@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-2.0.0.tgz#56f8d6139620847b8017f8f1f4d78e211324168b"
+latest-version@^3.0.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"
+ integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=
dependencies:
- package-json "^2.0.0"
+ package-json "^4.0.0"
lazy-cache@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-lazy-req@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/lazy-req/-/lazy-req-1.1.0.tgz#bdaebead30f8d824039ce0ce149d4daa07ba1fac"
+ integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4=
lcid@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
+ integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=
dependencies:
invert-kv "^1.0.0"
leven@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
+ integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA=
levn@^0.3.0, levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
dependencies:
prelude-ls "~1.1.2"
type-check "~0.3.2"
@@ -4240,6 +5306,7 @@ levn@^0.3.0, levn@~0.3.0:
load-json-file@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
+ integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=
dependencies:
graceful-fs "^4.1.2"
parse-json "^2.2.0"
@@ -4250,6 +5317,7 @@ load-json-file@^1.0.0:
load-json-file@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
dependencies:
graceful-fs "^4.1.2"
parse-json "^2.2.0"
@@ -4259,17 +5327,20 @@ load-json-file@^2.0.0:
loader-fs-cache@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc"
+ integrity sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=
dependencies:
find-cache-dir "^0.1.1"
mkdirp "0.5.1"
loader-runner@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2"
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.1.tgz#026f12fe7c3115992896ac02ba022ba92971b979"
+ integrity sha512-By6ZFY7ETWOc9RFaAIb23IjJVcM4dvJC/N57nmdz9RSkMXvAXGI7SyVlAw3v8vjtDRlqThgVDVmTnr9fqMlxkw==
loader-utils@^0.2.16:
version "0.2.17"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
+ integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=
dependencies:
big.js "^3.1.3"
emojis-list "^2.0.0"
@@ -4279,6 +5350,7 @@ loader-utils@^0.2.16:
loader-utils@^1.0.2, loader-utils@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd"
+ integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=
dependencies:
big.js "^3.1.3"
emojis-list "^2.0.0"
@@ -4287,57 +5359,60 @@ loader-utils@^1.0.2, loader-utils@^1.1.0:
locate-path@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=
dependencies:
p-locate "^2.0.0"
path-exists "^3.0.0"
-lodash-es@^4.2.0, lodash-es@^4.2.1:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7"
+lodash-es@^4.2.1:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.11.tgz#145ab4a7ac5c5e52a3531fb4f310255a152b4be0"
+ integrity sha512-DHb1ub+rMjjrxqlB3H56/6MXtm1lSksDp2rA2cNWjG8mlDUYFhUj3Di2Zn5IwSU87xLv8tNIQ7sSwE/YOX/D/Q==
lodash._reinterpolate@~3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
-
-lodash.assign@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+ integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
+ integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
lodash.cond@^4.3.0:
version "4.5.2"
resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+ integrity sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=
+
+lodash.debounce@^4.0.8:
+ version "4.0.8"
+ resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
+ integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=
lodash.defaults@^4.2.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+ integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
lodash.flowright@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/lodash.flowright/-/lodash.flowright-3.5.0.tgz#2b5fff399716d7e7dc5724fe9349f67065184d67"
+ integrity sha1-K1//OZcW1+fcVyT+k0n2cGUYTWc=
-lodash.isobject@^3.0.2:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d"
-
-lodash.isstring@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
+lodash.isequal@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
+ integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
lodash.memoize@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
-
-lodash.pick@^4.4.0:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+ integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=
lodash.template@^4.4.0:
version "4.4.0"
resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0"
+ integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=
dependencies:
lodash._reinterpolate "~3.0.0"
lodash.templatesettings "^4.0.0"
@@ -4345,34 +5420,46 @@ lodash.template@^4.4.0:
lodash.templatesettings@^4.0.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316"
+ integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=
dependencies:
lodash._reinterpolate "~3.0.0"
+lodash.throttle@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
+ integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
+
lodash.uniq@^4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
+ integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
-"lodash@>=3.5 <5", lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.4:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
+"lodash@>=3.5 <5", lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.4:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+ integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
loglevel@^1.4.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa"
+ integrity sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=
longest@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
+ integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=
-loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
+loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
+ integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
dependencies:
- js-tokens "^3.0.0"
+ js-tokens "^3.0.0 || ^4.0.0"
loud-rejection@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
+ integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
dependencies:
currently-unhandled "^0.4.1"
signal-exit "^3.0.0"
@@ -4380,62 +5467,87 @@ loud-rejection@^1.0.0:
lower-case@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
+ integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw=
lowercase-keys@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f"
+ integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==
lru-cache@^4.0.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55"
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c"
+ integrity sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==
dependencies:
pseudomap "^1.0.2"
yallist "^2.1.2"
-macaddress@^0.2.8:
- version "0.2.8"
- resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12"
-
make-dir@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c"
+ integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==
dependencies:
pify "^3.0.0"
makeerror@1.0.x:
version "1.0.11"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
+ integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=
dependencies:
tmpl "1.0.x"
+map-cache@^0.2.2:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
+ integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=
+
map-obj@^1.0.0, map-obj@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
+ integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
+
+map-visit@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
+ integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=
+ dependencies:
+ object-visit "^1.0.0"
math-expression-evaluator@^1.2.14:
version "1.2.17"
resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac"
+ integrity sha1-3oGf282E3M2PrlnGrreWFbnSZqw=
+
+math-random@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac"
+ integrity sha1-izqsWIuKZuSXXjzepn97sylgH6w=
md5.js@^1.3.4:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d"
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
+ integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
dependencies:
hash-base "^3.0.0"
inherits "^2.0.1"
+ safe-buffer "^5.1.2"
media-typer@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
+ integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
mem@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76"
+ integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=
dependencies:
mimic-fn "^1.0.0"
memory-fs@^0.4.0, memory-fs@~0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552"
+ integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=
dependencies:
errno "^0.1.3"
readable-stream "^2.0.1"
@@ -4443,6 +5555,7 @@ memory-fs@^0.4.0, memory-fs@~0.4.1:
meow@^3.3.0, meow@^3.7.0:
version "3.7.0"
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
+ integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
dependencies:
camelcase-keys "^2.0.0"
decamelize "^1.1.2"
@@ -4458,18 +5571,22 @@ meow@^3.3.0, meow@^3.7.0:
merge-descriptors@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
+ integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
-merge@^1.1.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
+merge@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145"
+ integrity sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==
methods@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
micromatch@^2.1.5, micromatch@^2.3.11:
version "2.3.11"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
+ integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=
dependencies:
arr-diff "^2.0.0"
array-unique "^0.2.1"
@@ -4485,142 +5602,242 @@ micromatch@^2.1.5, micromatch@^2.3.11:
parse-glob "^3.0.4"
regex-cache "^0.4.2"
+micromatch@^3.1.10, micromatch@^3.1.4:
+ version "3.1.10"
+ resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23"
+ integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ braces "^2.3.1"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ extglob "^2.0.4"
+ fragment-cache "^0.2.1"
+ kind-of "^6.0.2"
+ nanomatch "^1.2.9"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.2"
+
miller-rabin@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d"
+ integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==
dependencies:
bn.js "^4.0.0"
brorand "^1.0.1"
-"mime-db@>= 1.30.0 < 2":
- version "1.32.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.32.0.tgz#485b3848b01a3cda5f968b4882c0771e58e09414"
-
-mime-db@~1.30.0:
- version "1.30.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01"
+"mime-db@>= 1.36.0 < 2", mime-db@~1.37.0:
+ version "1.37.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
+ integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
-mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7:
- version "2.1.17"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a"
+mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19, mime-types@~2.1.7:
+ version "2.1.21"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
+ integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
dependencies:
- mime-db "~1.30.0"
+ mime-db "~1.37.0"
mime@1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
+ integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
mime@^1.4.1, mime@^1.5.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
mimic-fn@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
+ integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==
-minimalistic-assert@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3"
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
minimatch@3.0.3:
version "3.0.3"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
+ integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q=
dependencies:
brace-expansion "^1.0.0"
minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
dependencies:
brace-expansion "^1.1.7"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+ integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
minimist@~0.0.1:
version "0.0.10"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
+ integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
+
+minipass@^2.2.1, minipass@^2.3.4:
+ version "2.3.5"
+ resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848"
+ integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==
+ dependencies:
+ safe-buffer "^5.1.2"
+ yallist "^3.0.0"
+
+minizlib@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.1.tgz#6734acc045a46e61d596a43bb9d9cd326e19cc42"
+ integrity sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg==
+ dependencies:
+ minipass "^2.2.1"
+
+mixin-deep@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe"
+ integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==
+ dependencies:
+ for-in "^1.0.2"
+ is-extendable "^1.0.1"
mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
dependencies:
minimist "0.0.8"
moment@^2.20.1:
- version "2.20.1"
- resolved "https://registry.yarnpkg.com/moment/-/moment-2.20.1.tgz#d6eb1a46cbcc14a2b2f9434112c1ff8907f313fd"
+ version "2.22.2"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66"
+ integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
multicast-dns-service-types@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901"
+ integrity sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=
multicast-dns@^6.0.1:
- version "6.2.2"
- resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.2.tgz#300b6133361f8aaaf2b8d1248e85c363fe5b95a0"
+ version "6.2.3"
+ resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229"
+ integrity sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==
dependencies:
- dns-packet "^1.0.1"
- thunky "^0.1.0"
+ dns-packet "^1.3.1"
+ thunky "^1.0.2"
mute-stream@0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
-
-nan@^2.3.0:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
+nan@^2.3.0, nan@^2.9.2:
+ version "2.11.1"
+ resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766"
+ integrity sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==
+
+nanomatch@^1.2.9:
+ version "1.2.13"
+ resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119"
+ integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==
+ dependencies:
+ arr-diff "^4.0.0"
+ array-unique "^0.3.2"
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ fragment-cache "^0.2.1"
+ is-windows "^1.0.2"
+ kind-of "^6.0.2"
+ object.pick "^1.3.0"
+ regex-not "^1.0.0"
+ snapdragon "^0.8.1"
+ to-regex "^3.0.1"
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
-ncname@1.0.x:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c"
+needle@^2.2.1:
+ version "2.2.4"
+ resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
+ integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
dependencies:
- xml-char-classes "^1.0.0"
+ debug "^2.1.2"
+ iconv-lite "^0.4.4"
+ sax "^1.2.4"
negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
+ integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=
+
+neo-async@^2.5.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835"
+ integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA==
+
+next-tick@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
+ integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
no-case@^2.2.0:
version "2.3.2"
resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac"
+ integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==
dependencies:
lower-case "^1.1.1"
node-fetch@^1.0.1:
version "1.7.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
+ integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==
dependencies:
encoding "^0.1.11"
is-stream "^1.0.1"
-node-forge@0.6.33:
- version "0.6.33"
- resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.6.33.tgz#463811879f573d45155ad6a9f43dc296e8e85ebc"
+node-forge@0.7.5:
+ version "0.7.5"
+ resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
+ integrity sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==
node-int64@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
+ integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=
node-libs-browser@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df"
+ integrity sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==
dependencies:
assert "^1.1.1"
browserify-zlib "^0.2.0"
@@ -4647,17 +5864,35 @@ node-libs-browser@^2.0.0:
vm-browserify "0.0.4"
node-notifier@^5.0.2:
- version "5.2.1"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea"
+ version "5.3.0"
+ resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.3.0.tgz#c77a4a7b84038733d5fb351aafd8a268bfe19a01"
+ integrity sha512-AhENzCSGZnZJgBARsUjnQ7DnZbzyP+HxlVXuD0xqAnvL8q+OqtSX7lGg9e8nHzwXkMMXNdVeqq4E2M3EUAqX6Q==
dependencies:
growly "^1.3.0"
- semver "^5.4.1"
+ semver "^5.5.0"
shellwords "^0.1.1"
which "^1.3.0"
-node-pre-gyp@^0.6.36, node-pre-gyp@^0.6.39:
+node-pre-gyp@^0.10.0:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
+ integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==
+ dependencies:
+ detect-libc "^1.0.2"
+ mkdirp "^0.5.1"
+ needle "^2.2.1"
+ nopt "^4.0.1"
+ npm-packlist "^1.1.6"
+ npmlog "^4.0.2"
+ rc "^1.2.7"
+ rimraf "^2.6.1"
+ semver "^5.3.0"
+ tar "^4"
+
+node-pre-gyp@^0.6.36:
version "0.6.39"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649"
+ integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==
dependencies:
detect-libc "^1.0.2"
hawk "3.1.3"
@@ -4671,13 +5906,10 @@ node-pre-gyp@^0.6.36, node-pre-gyp@^0.6.39:
tar "^2.2.1"
tar-pack "^3.4.0"
-node-status-codes@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/node-status-codes/-/node-status-codes-1.0.0.tgz#5ae5541d024645d32a58fcddc9ceecea7ae3ac2f"
-
nopt@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
+ integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=
dependencies:
abbrev "1"
osenv "^0.1.4"
@@ -4685,40 +5917,59 @@ nopt@^4.0.1:
normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
version "2.4.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
+ integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==
dependencies:
hosted-git-info "^2.1.4"
is-builtin-module "^1.0.0"
semver "2 || 3 || 4 || 5"
validate-npm-package-license "^3.0.1"
-normalize-path@^2.0.0, normalize-path@^2.0.1:
+normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9"
+ integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=
dependencies:
remove-trailing-separator "^1.0.1"
normalize-range@^0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
+ integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=
normalize-url@^1.4.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c"
+ integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=
dependencies:
object-assign "^4.0.1"
prepend-http "^1.0.0"
query-string "^4.1.0"
sort-keys "^1.0.0"
+npm-bundled@^1.0.1:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979"
+ integrity sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==
+
+npm-packlist@^1.1.6:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.12.tgz#22bde2ebc12e72ca482abd67afc51eb49377243a"
+ integrity sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==
+ dependencies:
+ ignore-walk "^3.0.1"
+ npm-bundled "^1.0.1"
+
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
+ integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=
dependencies:
path-key "^2.0.0"
npmlog@^4.0.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
+ integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
dependencies:
are-we-there-yet "~1.1.2"
console-control-strings "~1.1.0"
@@ -4726,85 +5977,139 @@ npmlog@^4.0.2:
set-blocking "~2.0.0"
nth-check@~1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
+ integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==
dependencies:
boolbase "~1.0.0"
num2fraction@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede"
+ integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=
number-is-nan@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+ integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=
"nwmatcher@>= 1.3.9 < 2.0.0":
- version "1.4.3"
- resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c"
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e"
+ integrity sha512-3iuY4N5dhgMpCUrOVnuAdGrgxVqV2cJpM+XNccjR2DKOB1RUP0aA+wGXEiNziG/UKboFyGBIoKOaNlJxx8bciQ==
-oauth-sign@~0.8.1, oauth-sign@~0.8.2:
+oauth-sign@~0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
+ integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=
+
+oauth-sign@~0.9.0:
+ version "0.9.0"
+ resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
+ integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
object-assign@4.1.1, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+ integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=
+
+object-copy@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c"
+ integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw=
+ dependencies:
+ copy-descriptor "^0.1.0"
+ define-property "^0.2.5"
+ kind-of "^3.0.3"
object-hash@^1.1.4:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b"
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.3.1.tgz#fde452098a951cb145f039bb7d455449ddc126df"
+ integrity sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==
-object-keys@^1.0.8:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+object-keys@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2"
+ integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==
-object-path@^0.11.4:
- version "0.11.4"
- resolved "https://registry.yarnpkg.com/object-path/-/object-path-0.11.4.tgz#370ae752fbf37de3ea70a861c23bba8915691949"
+object-visit@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb"
+ integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=
+ dependencies:
+ isobject "^3.0.0"
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
+ integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=
dependencies:
for-own "^0.1.4"
is-extendable "^0.1.1"
+object.pick@^1.3.0:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747"
+ integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=
+ dependencies:
+ isobject "^3.0.1"
+
obuf@^1.0.0, obuf@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e"
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e"
+ integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==
on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
+ integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
dependencies:
ee-first "1.1.1"
on-headers@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
+ integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=
once@^1.3.0, once@^1.3.3, once@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
onetime@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
+ integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=
dependencies:
mimic-fn "^1.0.0"
-opn@5.2.0, opn@^5.1.0:
+opn@5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/opn/-/opn-5.2.0.tgz#71fdf934d6827d676cecbea1531f95d354641225"
+ integrity sha512-Jd/GpzPyHF4P2/aNOVmS3lfMSWV9J7cOhCG1s08XCEAsPkB7lp6ddiU0J7XzyQRDUh8BqJ7PchfINjR8jyofRQ==
+ dependencies:
+ is-wsl "^1.1.0"
+
+opn@^5.1.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/opn/-/opn-5.4.0.tgz#cb545e7aab78562beb11aa3bfabc7042e1761035"
+ integrity sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==
dependencies:
is-wsl "^1.1.0"
+optimism@^0.6.6:
+ version "0.6.8"
+ resolved "https://registry.yarnpkg.com/optimism/-/optimism-0.6.8.tgz#0780b546da8cd0a72e5207e0c3706c990c8673a6"
+ integrity sha512-bN5n1KCxSqwBDnmgDnzMtQTHdL+uea2HYFx1smvtE+w2AMl0Uy31g0aXnP/Nt85OINnMJPRpJyfRQLTCqn5Weg==
+ dependencies:
+ immutable-tuple "^0.4.9"
+
optimist@^0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
+ integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY=
dependencies:
minimist "~0.0.1"
wordwrap "~0.0.2"
@@ -4812,6 +6117,7 @@ optimist@^0.6.1:
optionator@^0.8.1, optionator@^0.8.2:
version "0.8.2"
resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
dependencies:
deep-is "~0.1.3"
fast-levenshtein "~2.0.4"
@@ -4821,28 +6127,33 @@ optionator@^0.8.1, optionator@^0.8.2:
wordwrap "~1.0.0"
original@>=0.0.5:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
+ integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
dependencies:
- url-parse "1.0.x"
+ url-parse "^1.4.3"
os-browserify@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
+ integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
os-homedir@^1.0.0, os-homedir@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+ integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
os-locale@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
+ integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
dependencies:
lcid "^1.0.0"
os-locale@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
+ integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==
dependencies:
execa "^0.7.0"
lcid "^1.0.0"
@@ -4851,10 +6162,12 @@ os-locale@^2.0.0:
os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
-osenv@^0.1.0, osenv@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644"
+osenv@^0.1.4:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
+ integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
@@ -4862,32 +6175,38 @@ osenv@^0.1.0, osenv@^0.1.4:
p-finally@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
+ integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=
p-limit@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
+ integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==
dependencies:
p-try "^1.0.0"
p-locate@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=
dependencies:
p-limit "^1.1.0"
p-map@^1.1.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b"
+ integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==
p-try@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3"
+ integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=
-package-json@^2.0.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/package-json/-/package-json-2.4.0.tgz#0d15bd67d1cbbddbb2ca222ff2edb86bcb31a8bb"
+package-json@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed"
+ integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=
dependencies:
- got "^5.0.0"
+ got "^6.7.1"
registry-auth-token "^3.0.1"
registry-url "^3.0.3"
semver "^5.1.0"
@@ -4895,16 +6214,19 @@ package-json@^2.0.0:
pako@~1.0.5:
version "1.0.6"
resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258"
+ integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==
param-case@2.1.x:
version "2.1.1"
resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
+ integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc=
dependencies:
no-case "^2.2.0"
parse-asn1@^5.0.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712"
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8"
+ integrity sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==
dependencies:
asn1.js "^4.0.0"
browserify-aes "^1.0.0"
@@ -4915,77 +6237,103 @@ parse-asn1@^5.0.0:
parse-glob@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
+ integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw=
dependencies:
glob-base "^0.3.0"
is-dotfile "^1.0.0"
is-extglob "^1.0.0"
is-glob "^2.0.0"
-parse-json@^2.1.0, parse-json@^2.2.0:
+parse-json@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=
dependencies:
error-ex "^1.2.0"
parse-passwd@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=
parse5@^1.5.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
+ integrity sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=
parser-toolkit@>=0.0.3:
version "0.0.5"
resolved "https://registry.yarnpkg.com/parser-toolkit/-/parser-toolkit-0.0.5.tgz#ec4b61729c86318b56ea971bfba6b3c672d62c01"
+ integrity sha1-7EthcpyGMYtW6pcb+6azxnLWLAE=
parseurl@~1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
+ integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=
+
+pascalcase@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14"
+ integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=
path-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
+ integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=
+
+path-dirname@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0"
+ integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=
path-exists@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=
dependencies:
pinkie-promise "^2.0.0"
path-exists@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+ integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=
path-is-absolute@^1.0.0, path-is-absolute@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+ integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
path-is-inside@^1.0.1, path-is-inside@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+ integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=
path-key@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
+ integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
path-parse@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
+ integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
path-to-regexp@0.1.7:
version "0.1.7"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
+ integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
path-to-regexp@^1.0.1, path-to-regexp@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
+ integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=
dependencies:
isarray "0.0.1"
path-type@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
+ integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=
dependencies:
graceful-fs "^4.1.2"
pify "^2.0.0"
@@ -4994,12 +6342,14 @@ path-type@^1.0.0:
path-type@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
dependencies:
pify "^2.0.0"
pbkdf2@^3.0.3:
- version "3.0.14"
- resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade"
+ version "3.0.17"
+ resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6"
+ integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==
dependencies:
create-hash "^1.1.2"
create-hmac "^1.1.4"
@@ -5010,56 +6360,72 @@ pbkdf2@^3.0.3:
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
+ integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=
performance-now@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
pify@^2.0.0, pify@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+ integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
pify@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
+ integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
pinkie-promise@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o=
dependencies:
pinkie "^2.0.0"
pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+ integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA=
pkg-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
dependencies:
find-up "^1.0.0"
pkg-dir@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b"
+ integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=
dependencies:
find-up "^2.1.0"
pluralize@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+ integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
portfinder@^1.0.9:
- version "1.0.13"
- resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
+ version "1.0.19"
+ resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.19.tgz#07e87914a55242dcda5b833d42f018d6875b595f"
+ integrity sha512-23aeQKW9KgHe6citUrG3r9HjeX6vls0h713TAa+CwTKZwNIr/pD2ApaxYF4Um3ZZyq4ar+Siv3+fhoHaIwSOSw==
dependencies:
async "^1.5.2"
debug "^2.2.0"
mkdirp "0.5.x"
+posix-character-classes@^0.1.0:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab"
+ integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
+
postcss-calc@^5.2.0:
version "5.3.1"
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
+ integrity sha1-d7rnypKK2FcW4v2kLyYb98HWW14=
dependencies:
postcss "^5.0.2"
postcss-message-helpers "^2.0.0"
@@ -5068,6 +6434,7 @@ postcss-calc@^5.2.0:
postcss-colormin@^2.1.8:
version "2.2.2"
resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b"
+ integrity sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=
dependencies:
colormin "^1.0.5"
postcss "^5.0.13"
@@ -5076,6 +6443,7 @@ postcss-colormin@^2.1.8:
postcss-convert-values@^2.3.4:
version "2.6.1"
resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d"
+ integrity sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=
dependencies:
postcss "^5.0.11"
postcss-value-parser "^3.1.2"
@@ -5083,50 +6451,57 @@ postcss-convert-values@^2.3.4:
postcss-discard-comments@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d"
+ integrity sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=
dependencies:
postcss "^5.0.14"
postcss-discard-duplicates@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932"
+ integrity sha1-uavye4isGIFYpesSq8riAmO5GTI=
dependencies:
postcss "^5.0.4"
postcss-discard-empty@^2.0.1:
version "2.1.0"
resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5"
+ integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=
dependencies:
postcss "^5.0.14"
postcss-discard-overridden@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58"
+ integrity sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=
dependencies:
postcss "^5.0.16"
postcss-discard-unused@^2.2.1:
version "2.2.3"
resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433"
+ integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=
dependencies:
postcss "^5.0.14"
uniqs "^2.0.0"
postcss-filter-plugins@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c"
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec"
+ integrity sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==
dependencies:
postcss "^5.0.4"
- uniqid "^4.0.0"
postcss-flexbugs-fixes@3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.2.0.tgz#9b8b932c53f9cf13ba0f61875303e447c33dcc51"
+ integrity sha512-0AuD9HG1Ey3/3nqPWu9yqf7rL0KCPu5VgjDsjf5mzEcuo9H/z8nco/fljKgjsOUrZypa95MI0kS4xBZeBzz2lw==
dependencies:
postcss "^6.0.1"
postcss-load-config@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
+ integrity sha1-U56a/J3chiASHr+djDZz4M5Q0oo=
dependencies:
cosmiconfig "^2.1.0"
object-assign "^4.1.0"
@@ -5136,6 +6511,7 @@ postcss-load-config@^1.2.0:
postcss-load-options@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
+ integrity sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=
dependencies:
cosmiconfig "^2.1.0"
object-assign "^4.1.0"
@@ -5143,6 +6519,7 @@ postcss-load-options@^1.2.0:
postcss-load-plugins@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
+ integrity sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=
dependencies:
cosmiconfig "^2.1.1"
object-assign "^4.1.0"
@@ -5150,6 +6527,7 @@ postcss-load-plugins@^2.3.0:
postcss-loader@2.0.8:
version "2.0.8"
resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-2.0.8.tgz#8c67ddb029407dfafe684a406cfc16bad2ce0814"
+ integrity sha512-KtXBiQ/r/WYW8LxTSJK7h8wLqvCMSub/BqmRnud/Mu8RzwflW9cmXxwsMwbn15TNv287Hcufdb3ZSs7xHKnG8Q==
dependencies:
loader-utils "^1.1.0"
postcss "^6.0.0"
@@ -5159,6 +6537,7 @@ postcss-loader@2.0.8:
postcss-merge-idents@^2.1.5:
version "2.1.7"
resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270"
+ integrity sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=
dependencies:
has "^1.0.1"
postcss "^5.0.10"
@@ -5167,12 +6546,14 @@ postcss-merge-idents@^2.1.5:
postcss-merge-longhand@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658"
+ integrity sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=
dependencies:
postcss "^5.0.4"
postcss-merge-rules@^2.0.3:
version "2.1.2"
resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721"
+ integrity sha1-0d9d+qexrMO+VT8OnhDofGG19yE=
dependencies:
browserslist "^1.5.2"
caniuse-api "^1.5.2"
@@ -5183,10 +6564,12 @@ postcss-merge-rules@^2.0.3:
postcss-message-helpers@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e"
+ integrity sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=
postcss-minify-font-values@^1.0.2:
version "1.0.5"
resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69"
+ integrity sha1-S1jttWZB66fIR0qzUmyv17vey2k=
dependencies:
object-assign "^4.0.1"
postcss "^5.0.4"
@@ -5195,6 +6578,7 @@ postcss-minify-font-values@^1.0.2:
postcss-minify-gradients@^1.0.1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1"
+ integrity sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=
dependencies:
postcss "^5.0.12"
postcss-value-parser "^3.3.0"
@@ -5202,6 +6586,7 @@ postcss-minify-gradients@^1.0.1:
postcss-minify-params@^1.0.4:
version "1.2.2"
resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3"
+ integrity sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=
dependencies:
alphanum-sort "^1.0.1"
postcss "^5.0.2"
@@ -5211,6 +6596,7 @@ postcss-minify-params@^1.0.4:
postcss-minify-selectors@^2.0.4:
version "2.1.1"
resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf"
+ integrity sha1-ssapjAByz5G5MtGkllCBFDEXNb8=
dependencies:
alphanum-sort "^1.0.2"
has "^1.0.1"
@@ -5218,14 +6604,16 @@ postcss-minify-selectors@^2.0.4:
postcss-selector-parser "^2.0.0"
postcss-modules-extract-imports@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz#b614c9720be6816eaee35fb3a5faa1dba6a05ddb"
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a"
+ integrity sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==
dependencies:
postcss "^6.0.1"
postcss-modules-local-by-default@^1.0.1:
version "1.2.0"
resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
+ integrity sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=
dependencies:
css-selector-tokenizer "^0.7.0"
postcss "^6.0.1"
@@ -5233,6 +6621,7 @@ postcss-modules-local-by-default@^1.0.1:
postcss-modules-scope@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
+ integrity sha1-1upkmUx5+XtipytCb75gVqGUu5A=
dependencies:
css-selector-tokenizer "^0.7.0"
postcss "^6.0.1"
@@ -5240,6 +6629,7 @@ postcss-modules-scope@^1.0.0:
postcss-modules-values@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
+ integrity sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=
dependencies:
icss-replace-symbols "^1.1.0"
postcss "^6.0.1"
@@ -5247,12 +6637,14 @@ postcss-modules-values@^1.1.0:
postcss-normalize-charset@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1"
+ integrity sha1-757nEhLX/nWceO0WL2HtYrXLk/E=
dependencies:
postcss "^5.0.5"
postcss-normalize-url@^3.0.7:
version "3.0.8"
resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222"
+ integrity sha1-EI90s/L82viRov+j6kWSJ5/HgiI=
dependencies:
is-absolute-url "^2.0.0"
normalize-url "^1.4.0"
@@ -5262,6 +6654,7 @@ postcss-normalize-url@^3.0.7:
postcss-ordered-values@^2.1.0:
version "2.2.3"
resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d"
+ integrity sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=
dependencies:
postcss "^5.0.4"
postcss-value-parser "^3.0.1"
@@ -5269,6 +6662,7 @@ postcss-ordered-values@^2.1.0:
postcss-reduce-idents@^2.2.2:
version "2.4.0"
resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3"
+ integrity sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=
dependencies:
postcss "^5.0.4"
postcss-value-parser "^3.0.2"
@@ -5276,12 +6670,14 @@ postcss-reduce-idents@^2.2.2:
postcss-reduce-initial@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea"
+ integrity sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=
dependencies:
postcss "^5.0.4"
postcss-reduce-transforms@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1"
+ integrity sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=
dependencies:
has "^1.0.1"
postcss "^5.0.8"
@@ -5290,6 +6686,7 @@ postcss-reduce-transforms@^1.0.3:
postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
version "2.2.3"
resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90"
+ integrity sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=
dependencies:
flatten "^1.0.2"
indexes-of "^1.0.1"
@@ -5298,6 +6695,7 @@ postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2:
postcss-svgo@^2.1.1:
version "2.1.6"
resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d"
+ integrity sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=
dependencies:
is-svg "^2.0.0"
postcss "^5.0.14"
@@ -5307,18 +6705,21 @@ postcss-svgo@^2.1.1:
postcss-unique-selectors@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d"
+ integrity sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=
dependencies:
alphanum-sort "^1.0.1"
postcss "^5.0.4"
uniqs "^2.0.0"
postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15"
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281"
+ integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==
postcss-zindex@^2.0.1:
version "2.2.0"
resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22"
+ integrity sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=
dependencies:
has "^1.0.1"
postcss "^5.0.4"
@@ -5327,6 +6728,7 @@ postcss-zindex@^2.0.1:
postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16:
version "5.2.18"
resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5"
+ integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==
dependencies:
chalk "^1.1.3"
js-base64 "^2.1.9"
@@ -5334,32 +6736,38 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
supports-color "^3.2.3"
postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.13:
- version "6.0.16"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.16.tgz#112e2fe2a6d2109be0957687243170ea5589e146"
+ version "6.0.23"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324"
+ integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==
dependencies:
- chalk "^2.3.0"
+ chalk "^2.4.1"
source-map "^0.6.1"
- supports-color "^5.1.0"
+ supports-color "^5.4.0"
prelude-ls@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
prepend-http@^1.0.0, prepend-http@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
+ integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=
preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
+ integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=
pretty-bytes@^4.0.2:
version "4.0.2"
resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9"
+ integrity sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=
pretty-error@^2.0.2:
version "2.1.1"
resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
+ integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=
dependencies:
renderkid "^2.0.1"
utila "~0.4"
@@ -5367,94 +6775,122 @@ pretty-error@^2.0.2:
pretty-format@^20.0.3:
version "20.0.3"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-20.0.3.tgz#020e350a560a1fe1a98dc3beb6ccffb386de8b14"
+ integrity sha1-Ag41ClYKH+GpjcO+tsz/s4beixQ=
dependencies:
ansi-regex "^2.1.1"
ansi-styles "^3.0.0"
-private@^0.1.6, private@^0.1.7:
+private@^0.1.6, private@^0.1.7, private@^0.1.8:
version "0.1.8"
resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
+ integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
process@^0.11.10:
version "0.11.10"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+ integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI=
progress@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.1.tgz#c9242169342b1c29d275889c95734621b1952e31"
+ integrity sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==
promise@8.0.1:
version "8.0.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.1.tgz#e45d68b00a17647b6da711bf85ed6ed47208f450"
+ integrity sha1-5F1osAoXZHttpxG/he1u1HII9FA=
dependencies:
asap "~2.0.3"
promise@^7.1.1:
version "7.3.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
+ integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
dependencies:
asap "~2.0.3"
-prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0:
- version "15.6.0"
- resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856"
+prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@~15.6.0:
+ version "15.6.2"
+ resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
+ integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==
dependencies:
- fbjs "^0.8.16"
loose-envify "^1.3.1"
object-assign "^4.1.1"
-proxy-addr@~2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec"
+proxy-addr@~2.0.4:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93"
+ integrity sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==
dependencies:
forwarded "~0.1.2"
- ipaddr.js "1.5.2"
+ ipaddr.js "1.8.0"
prr@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
+ integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
pseudomap@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+ integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
+
+psl@^1.1.24:
+ version "1.1.29"
+ resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67"
+ integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==
public-encrypt@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6"
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0"
+ integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==
dependencies:
bn.js "^4.1.0"
browserify-rsa "^4.0.0"
create-hash "^1.1.0"
parse-asn1 "^5.0.0"
randombytes "^2.0.1"
+ safe-buffer "^5.1.2"
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
punycode@^1.2.4, punycode@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+ integrity sha1-wNWmOycYgArY4esPpSachN1BhF4=
+
+punycode@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+ integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
q@^1.1.2:
version "1.5.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
+ integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
-qs@6.5.1, qs@~6.5.1:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8"
+qs@6.5.2, qs@~6.5.2:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
qs@~6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
+ integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=
query-string@^4.1.0:
version "4.3.4"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
+ integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s=
dependencies:
object-assign "^4.1.0"
strict-uri-encode "^1.0.0"
@@ -5462,41 +6898,52 @@ query-string@^4.1.0:
querystring-es3@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
+ integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
querystring@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
-querystringify@0.0.x:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c"
-
-querystringify@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb"
+querystringify@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef"
+ integrity sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==
-raf@3.4.0, raf@^3.2.0:
+raf@3.4.0:
version "3.4.0"
resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575"
+ integrity sha512-pDP/NMRAXoTfrhCfyfSEwJAKLaxBU9eApMeBPB1TkDouZmvPerIClV8lTAd+uF8ZiTaVl69e1FCxQrAd/VTjGw==
dependencies:
performance-now "^2.1.0"
-randomatic@^1.1.3:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c"
+raf@^3.4.0:
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39"
+ integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==
dependencies:
- is-number "^3.0.0"
- kind-of "^4.0.0"
+ performance-now "^2.1.0"
+
+randomatic@^3.0.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed"
+ integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==
+ dependencies:
+ is-number "^4.0.0"
+ kind-of "^6.0.0"
+ math-random "^1.0.1"
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80"
+ integrity sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==
dependencies:
safe-buffer "^5.1.0"
randomfill@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62"
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458"
+ integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==
dependencies:
randombytes "^2.0.5"
safe-buffer "^5.1.0"
@@ -5504,45 +6951,50 @@ randomfill@^1.0.3:
range-parser@^1.0.3, range-parser@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
+ integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=
-raw-body@2.3.2:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89"
+raw-body@2.3.3:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3"
+ integrity sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==
dependencies:
bytes "3.0.0"
- http-errors "1.6.2"
- iconv-lite "0.4.19"
+ http-errors "1.6.3"
+ iconv-lite "0.4.23"
unpipe "1.0.0"
-rc@^1.0.1, rc@^1.1.6, rc@^1.1.7:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.4.tgz#a0f606caae2a3b862bbd0ef85482c0125b315fa3"
+rc@^1.0.1, rc@^1.1.6, rc@^1.1.7, rc@^1.2.7:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
dependencies:
- deep-extend "~0.4.0"
+ deep-extend "^0.6.0"
ini "~1.3.0"
minimist "^1.2.0"
strip-json-comments "~2.0.1"
react-apollo@2.x:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-2.0.4.tgz#01dd32a8e388672f5d7385b21cdd0b94009ee9ee"
+ version "2.3.1"
+ resolved "https://registry.yarnpkg.com/react-apollo/-/react-apollo-2.3.1.tgz#f3687062f438b9b40e525d7e1ac2bcf0101b4495"
+ integrity sha512-xPteQmCzMJT8wE4v0zq38E6JWLhrNcJENl66fP117lwzU2lZA+qoUDcizqKl0z2OY5b+KklmqnPPD+wcWAdy7w==
dependencies:
- apollo-link "^1.0.0"
- hoist-non-react-statics "^2.2.0"
- invariant "^2.2.1"
+ fbjs "^1.0.0"
+ hoist-non-react-statics "^3.0.0"
+ invariant "^2.2.2"
lodash.flowright "^3.5.0"
- lodash.pick "^4.4.0"
- prop-types "^15.5.8"
+ lodash.isequal "^4.5.0"
+ prop-types "^15.6.0"
react-dev-utils@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-5.0.0.tgz#425ac7c9c40c2603bc4f7ab8836c1406e96bb473"
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-5.0.3.tgz#92f97668f03deb09d7fa11ea288832a8c756e35e"
+ integrity sha512-Mvs6ofsc2xTjeZIrMaIfbXfsPVrbdVy/cVqq6SAacnqfMlcBpDuivhWZ1ODGeJ8HgmyWTLH971PYjj/EPCDVAw==
dependencies:
address "1.0.3"
babel-code-frame "6.26.0"
chalk "1.1.3"
cross-spawn "5.1.0"
- detect-port-alt "1.1.5"
+ detect-port-alt "1.1.6"
escape-string-regexp "1.0.5"
filesize "3.5.11"
global-modules "1.0.0"
@@ -5550,78 +7002,100 @@ react-dev-utils@^5.0.0:
inquirer "3.3.0"
is-root "1.0.0"
opn "5.2.0"
- react-error-overlay "^4.0.0"
+ react-error-overlay "^4.0.1"
recursive-readdir "2.2.1"
shell-quote "1.6.1"
- sockjs-client "1.1.4"
+ sockjs-client "1.1.5"
strip-ansi "3.0.1"
text-table "0.2.0"
react-dom@16.x:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044"
+ version "16.6.3"
+ resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0"
+ integrity sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==
dependencies:
- fbjs "^0.8.16"
loose-envify "^1.1.0"
object-assign "^4.1.1"
- prop-types "^15.6.0"
+ prop-types "^15.6.2"
+ scheduler "^0.11.2"
"react-dom@^15.0.0 || 15.x":
version "15.6.2"
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730"
+ integrity sha1-Qc+t9pO3V/rycIRDodH9WgK+9zA=
dependencies:
fbjs "^0.8.9"
loose-envify "^1.1.0"
object-assign "^4.1.0"
prop-types "^15.5.10"
-react-error-overlay@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.0.tgz#d198408a85b4070937a98667f500c832f86bd5d4"
+react-error-overlay@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-4.0.1.tgz#417addb0814a90f3a7082eacba7cee588d00da89"
+ integrity sha512-xXUbDAZkU08aAkjtUvldqbvI04ogv+a1XdHxvYuHPYKIVk/42BIOD0zSKTHAWV4+gDy3yGm283z2072rA2gdtw==
+
+react-is@^16.3.1, react-is@^16.3.2, react-is@^16.6.0:
+ version "16.6.3"
+ resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.3.tgz#d2d7462fcfcbe6ec0da56ad69047e47e56e7eac0"
+ integrity sha512-u7FDWtthB4rWibG/+mFbVd5FvdI20yde86qKGx4lVUTWmPlSWQ4QxbBIrrs+HnXGbxOUlUzTAP/VDmvCwaP2yA==
+
+react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
+ integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
react-redux@^5.0.5:
- version "5.0.6"
- resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946"
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.1.1.tgz#88e368682c7fa80e34e055cd7ac56f5936b0f52f"
+ integrity sha512-LE7Ned+cv5qe7tMV5BPYkGQ5Lpg8gzgItK07c67yHvJ8t0iaD9kPFPAli/mYkiyJYrs2pJgExR2ZgsGqlrOApg==
dependencies:
- hoist-non-react-statics "^2.2.1"
- invariant "^2.0.0"
- lodash "^4.2.0"
- lodash-es "^4.2.0"
+ "@babel/runtime" "^7.1.2"
+ hoist-non-react-statics "^3.1.0"
+ invariant "^2.2.4"
loose-envify "^1.1.0"
- prop-types "^15.5.10"
+ prop-types "^15.6.1"
+ react-is "^16.6.0"
+ react-lifecycles-compat "^3.0.0"
-react-resize-detector@1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-1.1.0.tgz#4a9831fa3caad32230478dd0185cbd2aa91a5ebf"
+react-resize-detector@~2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-2.3.0.tgz#57bad1ae26a28a62a2ddb678ba6ffdf8fa2b599c"
+ integrity sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ==
dependencies:
- prop-types "^15.5.10"
+ lodash.debounce "^4.0.8"
+ lodash.throttle "^4.1.1"
+ prop-types "^15.6.0"
+ resize-observer-polyfill "^1.5.0"
react-router-dom@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d"
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6"
+ integrity sha512-c/MlywfxDdCp7EnB7YfPMOfMD3tOtIjrQlj/CKfNMBxdmpJP8xcz5P/UAFn3JbnQCNUxsHyVVqllF9LhgVyFCA==
dependencies:
history "^4.7.2"
- invariant "^2.2.2"
+ invariant "^2.2.4"
loose-envify "^1.3.1"
- prop-types "^15.5.4"
- react-router "^4.2.0"
- warning "^3.0.0"
+ prop-types "^15.6.1"
+ react-router "^4.3.1"
+ warning "^4.0.1"
-react-router@^4.1.1, react-router@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.2.0.tgz#61f7b3e3770daeb24062dae3eedef1b054155986"
+react-router@^4.1.1, react-router@^4.3.1:
+ version "4.3.1"
+ resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e"
+ integrity sha512-yrvL8AogDh2X42Dt9iknk4wF4V8bWREPirFfS9gLU1huk6qK41sg7Z/1S81jjTrGHxa3B8R3J6xIkDAA6CVarg==
dependencies:
history "^4.7.2"
- hoist-non-react-statics "^2.3.0"
- invariant "^2.2.2"
+ hoist-non-react-statics "^2.5.0"
+ invariant "^2.2.4"
loose-envify "^1.3.1"
path-to-regexp "^1.7.0"
- prop-types "^15.5.4"
- warning "^3.0.0"
+ prop-types "^15.6.1"
+ warning "^4.0.1"
react-scripts@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-1.1.0.tgz#0c94b2b2e14cff2dad8919397901b5edebeba511"
+ integrity sha512-6FxNkE9ljbu/I0w0oxTvUlOv9zfwAJNxASSoi7qqIhDkf3qmhl4xLuz5Pbn4ayiAz+8G9+P3AfaI/Iq6iCE73g==
dependencies:
autoprefixer "7.1.6"
babel-core "6.26.0"
@@ -5663,51 +7137,47 @@ react-scripts@1.1.0:
optionalDependencies:
fsevents "1.1.2"
-react-smooth@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.0.tgz#b29dbebddddb06d21b5b08962167fb9eac1897d8"
+react-smooth@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/react-smooth/-/react-smooth-1.0.2.tgz#f7a2d932ece8db898646078c3c97f3e9533e0486"
+ integrity sha512-pIGzL1g9VGAsRsdZQokIK0vrCkcdKtnOnS1gyB2rrowdLy69lNSWoIjCTWAfgbiYvria8tm5hEZqj+jwXMkV4A==
dependencies:
lodash "~4.17.4"
prop-types "^15.6.0"
- raf "^3.2.0"
- react-transition-group "^2.2.1"
+ raf "^3.4.0"
+ react-transition-group "^2.5.0"
-react-transition-group@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10"
+react-transition-group@^2.5.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.5.0.tgz#70bca0e3546102c4dc5cf3f5f57f73447cce6874"
+ integrity sha512-qYB3JBF+9Y4sE4/Mg/9O6WFpdoYjeeYqx0AFb64PTazVy8RPMiE3A47CG9QmM4WJ/mzDiZYslV+Uly6O1Erlgw==
dependencies:
- chain-function "^1.0.0"
- classnames "^2.2.5"
- dom-helpers "^3.2.0"
- loose-envify "^1.3.1"
- prop-types "^15.5.8"
- warning "^3.0.0"
+ dom-helpers "^3.3.1"
+ loose-envify "^1.4.0"
+ prop-types "^15.6.2"
+ react-lifecycles-compat "^3.0.4"
react-trend@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/react-trend/-/react-trend-1.2.4.tgz#498987286abd43ee3dff881115cd64d1c8e72d95"
+ integrity sha1-SYmHKGq9Q+49/4gRFc1k0cjnLZU=
dependencies:
prop-types "^15.5.8"
react@16.x:
- version "16.2.0"
- resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba"
+ version "16.6.3"
+ resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c"
+ integrity sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==
dependencies:
- fbjs "^0.8.16"
loose-envify "^1.1.0"
object-assign "^4.1.1"
- prop-types "^15.6.0"
-
-read-all-stream@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa"
- dependencies:
- pinkie-promise "^2.0.0"
- readable-stream "^2.0.0"
+ prop-types "^15.6.2"
+ scheduler "^0.11.2"
read-pkg-up@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
+ integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=
dependencies:
find-up "^1.0.0"
read-pkg "^1.0.0"
@@ -5715,6 +7185,7 @@ read-pkg-up@^1.0.1:
read-pkg-up@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
dependencies:
find-up "^2.0.0"
read-pkg "^2.0.0"
@@ -5722,6 +7193,7 @@ read-pkg-up@^2.0.0:
read-pkg@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
+ integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=
dependencies:
load-json-file "^1.0.0"
normalize-package-data "^2.3.2"
@@ -5730,6 +7202,7 @@ read-pkg@^1.0.0:
read-pkg@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
dependencies:
load-json-file "^2.0.0"
normalize-package-data "^2.3.2"
@@ -5738,56 +7211,63 @@ read-pkg@^2.0.0:
readable-stream@1.0:
version "1.0.34"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
isarray "0.0.1"
string_decoder "~0.10.x"
-readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c"
+readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.6:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.3"
isarray "~1.0.0"
- process-nextick-args "~1.0.6"
+ process-nextick-args "~2.0.0"
safe-buffer "~5.1.1"
- string_decoder "~1.0.3"
+ string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525"
+ integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==
dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
+ graceful-fs "^4.1.11"
+ micromatch "^3.1.10"
readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
-recharts-scale@0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.3.2.tgz#dac7621714a4765d152cb2adbc30c73b831208c9"
+recharts-scale@^0.4.2:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/recharts-scale/-/recharts-scale-0.4.2.tgz#b66315d985cd9b80d5f7d977a5aab9a305abc354"
+ integrity sha512-p/cKt7j17D1CImLgX2f5+6IXLbRHGUQkogIp06VUoci/XkhOQiGSzUrsD1uRmiI7jha4u8XNFOjkHkzzBPivMg==
+ dependencies:
+ decimal.js-light "^2.4.1"
recharts@^1.0.0-alpha.6:
- version "1.0.0-beta.9"
- resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.0.0-beta.9.tgz#f00ff7dc9b7b017c8b4f66a10b96f39b20cd1353"
- dependencies:
- classnames "2.2.5"
- core-js "2.5.1"
- d3-interpolate "^1.1.5"
- d3-scale "1.0.6"
- d3-shape "1.2.0"
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/recharts/-/recharts-1.4.1.tgz#92df29090b457c34c58beec263dc766c2b9ea300"
+ integrity sha512-HtI3B4xGPn591kNDU5MaCcJeUtlSqOH3cOBtHuhXGxDU2MDkS6abaQtgZD1J4mQiUCUZT3LCziTz5+wD7k+pvw==
+ dependencies:
+ classnames "~2.2.5"
+ core-js "~2.5.1"
+ d3-interpolate "~1.3.0"
+ d3-scale "~2.1.0"
+ d3-shape "~1.2.0"
lodash "~4.17.4"
- prop-types "^15.6.0"
- react-resize-detector "1.1.0"
- react-smooth "1.0.0"
- recharts-scale "0.3.2"
- reduce-css-calc "1.3.0"
+ prop-types "~15.6.0"
+ react-resize-detector "~2.3.0"
+ react-smooth "~1.0.0"
+ recharts-scale "^0.4.2"
+ reduce-css-calc "~1.3.0"
recompose@^0.26.0:
version "0.26.0"
resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30"
+ integrity sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==
dependencies:
change-emitter "^0.1.2"
fbjs "^0.8.1"
@@ -5797,19 +7277,22 @@ recompose@^0.26.0:
recursive-readdir@2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.1.tgz#90ef231d0778c5ce093c9a48d74e5c5422d13a99"
+ integrity sha1-kO8jHQd4xc4JPJpI105cVCLROpk=
dependencies:
minimatch "3.0.3"
redent@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
+ integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
dependencies:
indent-string "^2.1.0"
strip-indent "^1.0.1"
-reduce-css-calc@1.3.0, reduce-css-calc@^1.2.6:
+reduce-css-calc@^1.2.6, reduce-css-calc@~1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716"
+ integrity sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=
dependencies:
balanced-match "^0.4.2"
math-expression-evaluator "^1.2.14"
@@ -5818,16 +7301,19 @@ reduce-css-calc@1.3.0, reduce-css-calc@^1.2.6:
reduce-function-call@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99"
+ integrity sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=
dependencies:
balanced-match "^0.4.2"
redux-thunk@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.2.0.tgz#e615a16e16b47a19a515766133d1e3e99b7852e5"
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
+ integrity sha512-km6dclyFnmcvxhAcrQV2AkZmPQjzPDjgVlQtR0EQjxZPyJ0BnMf3in1ryuR8A2qU0HldVRfxYXbFSKlI3N7Slw==
redux@^3.6.0:
version "3.7.2"
resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b"
+ integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==
dependencies:
lodash "^4.2.1"
lodash-es "^4.2.1"
@@ -5835,16 +7321,24 @@ redux@^3.6.0:
symbol-observable "^1.0.3"
regenerate@^1.2.1:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f"
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11"
+ integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==
regenerator-runtime@^0.11.0, regenerator-runtime@^0.11.1:
version "0.11.1"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9"
+ integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==
+
+regenerator-runtime@^0.12.0:
+ version "0.12.1"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz#fa1a71544764c036f8c49b13a08b2594c9f8a0de"
+ integrity sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==
regenerator-transform@^0.10.0:
version "0.10.1"
resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd"
+ integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==
dependencies:
babel-runtime "^6.18.0"
babel-types "^6.19.0"
@@ -5853,12 +7347,22 @@ regenerator-transform@^0.10.0:
regex-cache@^0.4.2:
version "0.4.4"
resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd"
+ integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==
dependencies:
is-equal-shallow "^0.1.3"
+regex-not@^1.0.0, regex-not@^1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c"
+ integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==
+ dependencies:
+ extend-shallow "^3.0.2"
+ safe-regex "^1.1.0"
+
regexpu-core@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
+ integrity sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=
dependencies:
regenerate "^1.2.1"
regjsgen "^0.2.0"
@@ -5867,14 +7371,16 @@ regexpu-core@^1.0.0:
regexpu-core@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240"
+ integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=
dependencies:
regenerate "^1.2.1"
regjsgen "^0.2.0"
regjsparser "^0.1.4"
registry-auth-token@^3.0.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006"
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20"
+ integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==
dependencies:
rc "^1.1.6"
safe-buffer "^5.0.1"
@@ -5882,54 +7388,64 @@ registry-auth-token@^3.0.1:
registry-url@^3.0.3:
version "3.1.0"
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
+ integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI=
dependencies:
rc "^1.0.1"
regjsgen@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7"
+ integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=
regjsparser@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c"
+ integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=
dependencies:
jsesc "~0.5.0"
relateurl@0.2.x:
version "0.2.7"
resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
+ integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=
remove-trailing-separator@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
+ integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8=
renderkid@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319"
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.2.tgz#12d310f255360c07ad8fde253f6c9e9de372d2aa"
+ integrity sha512-FsygIxevi1jSiPY9h7vZmBFUbAOcbYm9UwyiLNdVsLRs/5We9Ob5NMPbGYUTWiLq5L+ezlVdE0A8bbME5CWTpg==
dependencies:
css-select "^1.1.0"
- dom-converter "~0.1"
+ dom-converter "~0.2"
htmlparser2 "~3.3.0"
strip-ansi "^3.0.0"
- utila "~0.3"
+ utila "^0.4.0"
repeat-element@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce"
+ integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==
-repeat-string@^1.5.2:
+repeat-string@^1.5.2, repeat-string@^1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
+ integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
repeating@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
+ integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=
dependencies:
is-finite "^1.0.0"
request@2.81.0:
version "2.81.0"
resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
+ integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=
dependencies:
aws-sign2 "~0.6.0"
aws4 "^1.2.1"
@@ -5955,64 +7471,75 @@ request@2.81.0:
uuid "^3.0.0"
request@^2.79.0, request@^2.81.0:
- version "2.83.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356"
+ version "2.88.0"
+ resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef"
+ integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==
dependencies:
aws-sign2 "~0.7.0"
- aws4 "^1.6.0"
+ aws4 "^1.8.0"
caseless "~0.12.0"
- combined-stream "~1.0.5"
- extend "~3.0.1"
+ combined-stream "~1.0.6"
+ extend "~3.0.2"
forever-agent "~0.6.1"
- form-data "~2.3.1"
- har-validator "~5.0.3"
- hawk "~6.0.2"
+ form-data "~2.3.2"
+ har-validator "~5.1.0"
http-signature "~1.2.0"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
- mime-types "~2.1.17"
- oauth-sign "~0.8.2"
+ mime-types "~2.1.19"
+ oauth-sign "~0.9.0"
performance-now "^2.1.0"
- qs "~6.5.1"
- safe-buffer "^5.1.1"
- stringstream "~0.0.5"
- tough-cookie "~2.3.3"
+ qs "~6.5.2"
+ safe-buffer "^5.1.2"
+ tough-cookie "~2.4.3"
tunnel-agent "^0.6.0"
- uuid "^3.1.0"
+ uuid "^3.3.2"
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+ integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
require-from-string@^1.1.0:
version "1.2.1"
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
+ integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=
require-main-filename@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
+ integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=
require-uncached@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
dependencies:
caller-path "^0.1.0"
resolve-from "^1.0.0"
-requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0:
+requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
+ integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
+
+resize-observer-polyfill@^1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz#660ff1d9712a2382baa2cad450a4716209f9ca69"
+ integrity sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==
resolve-cwd@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a"
+ integrity sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=
dependencies:
resolve-from "^3.0.0"
resolve-dir@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=
dependencies:
expand-tilde "^2.0.0"
global-modules "^1.0.0"
@@ -6020,74 +7547,110 @@ resolve-dir@^1.0.0:
resolve-from@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+ integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
resolve-from@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
+ integrity sha1-six699nWiBvItuZTM17rywoYh0g=
resolve-pathname@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879"
+ integrity sha512-bAFz9ld18RzJfddgrO2e/0S2O81710++chRMUxHjXOYKF6jTAMrUNZrEZ1PvV0zlhfjidm08iRPdTLPno1FuRg==
+
+resolve-url@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
+ integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
resolve@1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+ integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=
resolve@^1.3.2, resolve@^1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36"
+ version "1.8.1"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26"
+ integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==
dependencies:
path-parse "^1.0.5"
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
+ integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368=
dependencies:
onetime "^2.0.0"
signal-exit "^3.0.2"
+ret@~0.1.10:
+ version "0.1.15"
+ resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
+ integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
+
right-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
+ integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8=
dependencies:
align-text "^0.1.1"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1:
+rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.6.1, rimraf@~2.6.2:
version "2.6.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
+ integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==
dependencies:
glob "^7.0.5"
ripemd160@^2.0.0, ripemd160@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7"
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
+ integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
dependencies:
- hash-base "^2.0.0"
+ hash-base "^3.0.0"
inherits "^2.0.1"
run-async@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
dependencies:
is-promise "^2.1.0"
rx-lite-aggregates@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be"
+ integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=
dependencies:
rx-lite "*"
rx-lite@*, rx-lite@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444"
+ integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=
-safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
- version "5.1.1"
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
+safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+safe-regex@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e"
+ integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4=
+ dependencies:
+ ret "~0.1.10"
+
+"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
+ integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
sane@~1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/sane/-/sane-1.6.0.tgz#9610c452307a135d29c1fdfe2547034180c46775"
+ integrity sha1-lhDEUjB6E10pwf3+JUcDQYDEZ3U=
dependencies:
anymatch "^1.3.0"
exec-sh "^0.2.0"
@@ -6097,44 +7660,59 @@ sane@~1.6.0:
walker "~1.0.5"
watch "~0.10.0"
-sax@^1.2.1, sax@~1.2.1:
+sax@^1.2.1, sax@^1.2.4, sax@~1.2.1:
version "1.2.4"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+scheduler@^0.11.2:
+ version "0.11.2"
+ resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.2.tgz#a8db5399d06eba5abac51b705b7151d2319d33d3"
+ integrity sha512-+WCP3s3wOaW4S7C1tl3TEXp4l9lJn0ZK8G3W3WKRWmw77Z2cIFUW2MiNTMHn5sCjxN+t7N43HAOOgMjyAg5hlg==
+ dependencies:
+ loose-envify "^1.1.0"
+ object-assign "^4.1.1"
schema-utils@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf"
+ integrity sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=
dependencies:
ajv "^5.0.0"
select-hose@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
+ integrity sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=
selfsigned@^1.9.1:
- version "1.10.1"
- resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.1.tgz#bf8cb7b83256c4551e31347c6311778db99eec52"
+ version "1.10.4"
+ resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.4.tgz#cdd7eccfca4ed7635d47a08bf2d5d3074092e2cd"
+ integrity sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==
dependencies:
- node-forge "0.6.33"
+ node-forge "0.7.5"
semver-diff@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36"
+ integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=
dependencies:
semver "^5.0.3"
-"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1:
- version "5.5.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab"
+"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+ integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
-send@0.16.1:
- version "0.16.1"
- resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3"
+send@0.16.2:
+ version "0.16.2"
+ resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
+ integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==
dependencies:
debug "2.6.9"
- depd "~1.1.1"
+ depd "~1.1.2"
destroy "~1.0.4"
- encodeurl "~1.0.1"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
etag "~1.8.1"
fresh "0.5.2"
@@ -6143,11 +7721,12 @@ send@0.16.1:
ms "2.0.0"
on-finished "~2.3.0"
range-parser "~1.2.0"
- statuses "~1.3.1"
+ statuses "~1.4.0"
serve-index@^1.7.2:
version "1.9.1"
resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
+ integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
dependencies:
accepts "~1.3.4"
batch "0.6.1"
@@ -6157,42 +7736,60 @@ serve-index@^1.7.2:
mime-types "~2.1.17"
parseurl "~1.3.2"
-serve-static@1.13.1:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719"
+serve-static@1.13.2:
+ version "1.13.2"
+ resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1"
+ integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==
dependencies:
- encodeurl "~1.0.1"
+ encodeurl "~1.0.2"
escape-html "~1.0.3"
parseurl "~1.3.2"
- send "0.16.1"
+ send "0.16.2"
serviceworker-cache-polyfill@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/serviceworker-cache-polyfill/-/serviceworker-cache-polyfill-4.0.0.tgz#de19ee73bef21ab3c0740a37b33db62464babdeb"
+ integrity sha1-3hnuc77yGrPAdAo3sz22JGS6ves=
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
+ integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc=
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
+set-value@^0.4.3:
+ version "0.4.3"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1"
+ integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE=
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.1"
+ to-object-path "^0.3.0"
+
+set-value@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274"
+ integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==
+ dependencies:
+ extend-shallow "^2.0.1"
+ is-extendable "^0.1.1"
+ is-plain-object "^2.0.3"
+ split-string "^3.0.1"
setimmediate@^1.0.4, setimmediate@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
-
-setprototypeof@1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+ integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=
setprototypeof@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656"
+ integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==
sha.js@^2.4.0, sha.js@^2.4.8:
- version "2.4.10"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b"
+ version "2.4.11"
+ resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
+ integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
dependencies:
inherits "^2.0.1"
safe-buffer "^5.0.1"
@@ -6200,16 +7797,19 @@ sha.js@^2.4.0, sha.js@^2.4.8:
shebang-command@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=
dependencies:
shebang-regex "^1.0.0"
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
+ integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=
shell-quote@1.6.1:
version "1.6.1"
resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767"
+ integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=
dependencies:
array-filter "~0.0.0"
array-map "~0.0.0"
@@ -6219,40 +7819,78 @@ shell-quote@1.6.1:
shellwords@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b"
+ integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
signal-exit@^3.0.0, signal-exit@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
+ integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+ integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=
slice-ansi@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
+ integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==
dependencies:
is-fullwidth-code-point "^2.0.0"
-slide@^1.1.5:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707"
+snapdragon-node@^2.0.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b"
+ integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==
+ dependencies:
+ define-property "^1.0.0"
+ isobject "^3.0.0"
+ snapdragon-util "^3.0.1"
+
+snapdragon-util@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2"
+ integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==
+ dependencies:
+ kind-of "^3.2.0"
+
+snapdragon@^0.8.1:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d"
+ integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==
+ dependencies:
+ base "^0.11.1"
+ debug "^2.2.0"
+ define-property "^0.2.5"
+ extend-shallow "^2.0.1"
+ map-cache "^0.2.2"
+ source-map "^0.5.6"
+ source-map-resolve "^0.5.0"
+ use "^3.1.0"
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
+ integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=
dependencies:
hoek "2.x.x"
-sntp@2.x.x:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8"
- dependencies:
- hoek "4.x.x"
-
sockjs-client@1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12"
+ integrity sha1-W6vjhrd15M8U51IJEUUmVAFsixI=
+ dependencies:
+ debug "^2.6.6"
+ eventsource "0.1.6"
+ faye-websocket "~0.11.0"
+ inherits "^2.0.1"
+ json3 "^3.3.2"
+ url-parse "^1.1.8"
+
+sockjs-client@1.1.5:
+ version "1.1.5"
+ resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83"
+ integrity sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=
dependencies:
debug "^2.6.6"
eventsource "0.1.6"
@@ -6264,6 +7902,7 @@ sockjs-client@1.1.4:
sockjs@0.3.18:
version "0.3.18"
resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.18.tgz#d9b289316ca7df77595ef299e075f0f937eb4207"
+ integrity sha1-2bKJMWyn33dZXvKZ4HXw+TfrQgc=
dependencies:
faye-websocket "^0.10.0"
uuid "^2.0.2"
@@ -6271,50 +7910,78 @@ sockjs@0.3.18:
sort-keys@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad"
+ integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0=
dependencies:
is-plain-obj "^1.0.0"
source-list-map@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085"
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
+ integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==
+
+source-map-resolve@^0.5.0:
+ version "0.5.2"
+ resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259"
+ integrity sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==
+ dependencies:
+ atob "^2.1.1"
+ decode-uri-component "^0.2.0"
+ resolve-url "^0.2.1"
+ source-map-url "^0.4.0"
+ urix "^0.1.0"
source-map-support@^0.4.15:
version "0.4.18"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
+ integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
dependencies:
source-map "^0.5.6"
-source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1, source-map@~0.5.6:
+source-map-url@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
+ integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=
+
+source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1:
version "0.5.7"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+ integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
-source-map@^0.4.4:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.6.1, source-map@~0.6.1:
+source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
-spdx-correct@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
+spdx-correct@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.2.tgz#19bb409e91b47b1ad54159243f7312a858db3c2e"
+ integrity sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==
dependencies:
- spdx-license-ids "^1.0.2"
+ spdx-expression-parse "^3.0.0"
+ spdx-license-ids "^3.0.0"
-spdx-expression-parse@~1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
+spdx-exceptions@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977"
+ integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==
-spdx-license-ids@^1.0.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
+spdx-expression-parse@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0"
+ integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==
+ dependencies:
+ spdx-exceptions "^2.1.0"
+ spdx-license-ids "^3.0.0"
+
+spdx-license-ids@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz#a59efc09784c2a5bada13cfeaf5c75dd214044d2"
+ integrity sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==
spdy-transport@^2.0.18:
- version "2.0.20"
- resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.0.20.tgz#735e72054c486b2354fe89e702256004a39ace4d"
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.1.tgz#c54815d73858aadd06ce63001e7d25fa6441623b"
+ integrity sha512-q7D8c148escoB3Z7ySCASadkegMmUZW8Wb/Q1u0/XBgDKMO880rLQDj8Twiew/tYi7ghemKUi/whSYOwE17f5Q==
dependencies:
debug "^2.6.8"
detect-node "^2.0.3"
@@ -6327,6 +7994,7 @@ spdy-transport@^2.0.18:
spdy@^3.4.1:
version "3.4.7"
resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc"
+ integrity sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=
dependencies:
debug "^2.6.8"
handle-thing "^1.2.5"
@@ -6335,192 +8003,240 @@ spdy@^3.4.1:
select-hose "^2.0.0"
spdy-transport "^2.0.18"
+split-string@^3.0.1, split-string@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2"
+ integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==
+ dependencies:
+ extend-shallow "^3.0.0"
+
sprintf-js@~1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+ integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
sshpk@^1.7.0:
- version "1.13.1"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3"
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.15.2.tgz#c946d6bd9b1a39d0e8635763f5242d6ed6dcb629"
+ integrity sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==
dependencies:
asn1 "~0.2.3"
assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
bcrypt-pbkdf "^1.0.0"
+ dashdash "^1.12.0"
ecc-jsbn "~0.1.1"
+ getpass "^0.1.1"
jsbn "~0.1.0"
+ safer-buffer "^2.0.2"
tweetnacl "~0.14.0"
-"statuses@>= 1.3.1 < 2":
+static-extend@^0.1.1:
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
+ integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=
+ dependencies:
+ define-property "^0.2.5"
+ object-copy "^0.1.0"
+
+"statuses@>= 1.4.0 < 2":
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
+ integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
+
+statuses@~1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
-
-statuses@~1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+ integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==
stream-browserify@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
+ integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=
dependencies:
inherits "~2.0.1"
readable-stream "^2.0.2"
stream-http@^2.7.2:
- version "2.8.0"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10"
+ version "2.8.3"
+ resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc"
+ integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==
dependencies:
builtin-status-codes "^3.0.0"
inherits "^2.0.1"
- readable-stream "^2.3.3"
+ readable-stream "^2.3.6"
to-arraybuffer "^1.0.0"
xtend "^4.0.0"
stream-json@^0.5.2:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-0.5.2.tgz#f4256c0ef1a905f2ef2d473706b4b3ff827653cf"
+ version "0.5.3"
+ resolved "https://registry.yarnpkg.com/stream-json/-/stream-json-0.5.3.tgz#119e466c6966ffc63989848184377d2a07c600c8"
+ integrity sha512-zk8rHH33cfpuvxmwvQjQgRon2srjZUVzbulvB2CYfehcSGGF1jrLQZwEGm3jx0LnIZdJmKtal/qE3p+uZXynIg==
dependencies:
parser-toolkit ">=0.0.3"
strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
+ integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=
string-length@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac"
+ integrity sha1-VpcPscOFWOnnC3KL894mmsRa36w=
dependencies:
strip-ansi "^3.0.0"
string-width@^1.0.1, string-width@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=
dependencies:
code-point-at "^1.0.0"
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
-string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
+"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
+ integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==
dependencies:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^4.0.0"
-string_decoder@^1.0.0, string_decoder@~1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab"
+string_decoder@^1.0.0, string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
dependencies:
safe-buffer "~5.1.0"
string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+ integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=
-stringstream@~0.0.4, stringstream@~0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
+stringstream@~0.0.4:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72"
+ integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==
strip-ansi@3.0.1, strip-ansi@^3.0.0, strip-ansi@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=
dependencies:
ansi-regex "^2.0.0"
strip-ansi@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
+ integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8=
dependencies:
ansi-regex "^3.0.0"
strip-bom@3.0.0, strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+ integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
strip-bom@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
+ integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=
dependencies:
is-utf8 "^0.2.0"
strip-eof@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
+ integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=
strip-indent@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
+ integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
dependencies:
get-stdin "^4.0.1"
strip-json-comments@~2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
style-loader@0.19.0:
version "0.19.0"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759"
+ integrity sha512-9mx9sC9nX1dgP96MZOODpGC6l1RzQBITI2D5WJhu+wnbrSYVKLGuy14XJSLVQih/0GFrPpjelt+s//VcZQ2Evw==
dependencies:
loader-utils "^1.0.2"
schema-utils "^0.3.0"
styled-components@^3.0.1:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.0.2.tgz#dbcd66ee84d444ee4332a7f74027e8a675191593"
+ version "3.4.10"
+ resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-3.4.10.tgz#9a654c50ea2b516c36ade57ddcfa296bf85c96e1"
+ integrity sha512-TA8ip8LoILgmSAFd3r326pKtXytUUGu5YWuqZcOQVwVVwB6XqUMn4MHW2IuYJ/HAD81jLrdQed8YWfLSG1LX4Q==
dependencies:
buffer "^5.0.3"
css-to-react-native "^2.0.3"
- fbjs "^0.8.9"
- hoist-non-react-statics "^1.2.0"
- is-plain-object "^2.0.1"
+ fbjs "^0.8.16"
+ hoist-non-react-statics "^2.5.0"
prop-types "^15.5.4"
- stylis "^3.4.0"
+ react-is "^16.3.1"
+ stylis "^3.5.0"
+ stylis-rule-sheet "^0.0.10"
supports-color "^3.2.3"
-stylis@^3.4.0:
- version "3.4.8"
- resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.4.8.tgz#94380babbcd4c75726215794ca985b38ec96d1a3"
+stylis-rule-sheet@^0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430"
+ integrity sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw==
+
+stylis@^3.5.0:
+ version "3.5.4"
+ resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
+ integrity sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q==
subscriptions-transport-ws@^0.9.5:
- version "0.9.5"
- resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.5.tgz#faa9eb1230d5f2efe355368cd973b867e4483c53"
+ version "0.9.15"
+ resolved "https://registry.yarnpkg.com/subscriptions-transport-ws/-/subscriptions-transport-ws-0.9.15.tgz#68a8b7ba0037d8c489fb2f5a102d1494db297d0d"
+ integrity sha512-f9eBfWdHsePQV67QIX+VRhf++dn1adyC/PZHP6XI5AfKnZ4n0FW+v5omxwdHVpd4xq2ZijaHEcmlQrhBY79ZWQ==
dependencies:
backo2 "^1.0.2"
- eventemitter3 "^2.0.3"
- iterall "^1.1.1"
- lodash.assign "^4.2.0"
- lodash.isobject "^3.0.2"
- lodash.isstring "^4.0.1"
+ eventemitter3 "^3.1.0"
+ iterall "^1.2.1"
symbol-observable "^1.0.4"
- ws "^3.0.0"
+ ws "^5.2.0"
supports-color@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+ integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=
supports-color@^3.1.2, supports-color@^3.2.3:
version "3.2.3"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
+ integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=
dependencies:
has-flag "^1.0.0"
-supports-color@^4.0.0, supports-color@^4.2.1:
+supports-color@^4.2.1:
version "4.5.0"
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b"
+ integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=
dependencies:
has-flag "^2.0.0"
-supports-color@^5.1.0:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.1.0.tgz#058a021d1b619f7ddf3980d712ea3590ce7de3d5"
+supports-color@^5.3.0, supports-color@^5.4.0:
+ version "5.5.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
+ integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
dependencies:
- has-flag "^2.0.0"
+ has-flag "^3.0.0"
svgo@^0.7.0:
version "0.7.2"
resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5"
+ integrity sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=
dependencies:
coa "~1.0.1"
colors "~1.1.2"
@@ -6533,14 +8249,16 @@ svgo@^0.7.0:
sw-precache-webpack-plugin@0.11.4:
version "0.11.4"
resolved "https://registry.yarnpkg.com/sw-precache-webpack-plugin/-/sw-precache-webpack-plugin-0.11.4.tgz#a695017e54eed575551493a519dc1da8da2dc5e0"
+ integrity sha1-ppUBflTu1XVVFJOlGdwdqNotxeA=
dependencies:
del "^2.2.2"
sw-precache "^5.1.1"
uglify-js "^3.0.13"
sw-precache@^5.1.1:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/sw-precache/-/sw-precache-5.2.0.tgz#eb6225ce580ceaae148194578a0ad01ab7ea199c"
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/sw-precache/-/sw-precache-5.2.1.tgz#06134f319eec68f3b9583ce9a7036b1c119f7179"
+ integrity sha512-8FAy+BP/FXE+ILfiVTt+GQJ6UEf4CVHD9OfhzH0JX+3zoy2uFk7Vn9EfXASOtVmmIVbL3jE/W8Z66VgPSZcMhw==
dependencies:
dom-urls "^1.1.0"
es6-promise "^4.0.5"
@@ -6551,29 +8269,33 @@ sw-precache@^5.1.1:
mkdirp "^0.5.1"
pretty-bytes "^4.0.2"
sw-toolbox "^3.4.0"
- update-notifier "^1.0.3"
+ update-notifier "^2.3.0"
sw-toolbox@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/sw-toolbox/-/sw-toolbox-3.6.0.tgz#26df1d1c70348658e4dea2884319149b7b3183b5"
+ integrity sha1-Jt8dHHA0hljk3qKIQxkUm3sxg7U=
dependencies:
path-to-regexp "^1.0.1"
serviceworker-cache-polyfill "^4.0.0"
symbol-observable@^1.0.2, symbol-observable@^1.0.3, symbol-observable@^1.0.4:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.1.0.tgz#5c68fd8d54115d9dfb72a84720549222e8db9b32"
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+ integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==
symbol-tree@^3.2.1:
version "3.2.2"
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
+ integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=
table@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36"
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
+ integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==
dependencies:
- ajv "^5.2.3"
- ajv-keywords "^2.1.0"
+ ajv "^6.0.1"
+ ajv-keywords "^3.0.0"
chalk "^2.1.0"
lodash "^4.17.4"
slice-ansi "1.0.0"
@@ -6582,10 +8304,12 @@ table@^4.0.1:
tapable@^0.2.7:
version "0.2.8"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22"
+ integrity sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=
tar-pack@^3.4.0:
version "3.4.1"
resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f"
+ integrity sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg==
dependencies:
debug "^2.2.0"
fstream "^1.0.10"
@@ -6599,14 +8323,36 @@ tar-pack@^3.4.0:
tar@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
+ integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
dependencies:
block-stream "*"
fstream "^1.0.2"
inherits "2"
-test-exclude@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26"
+tar@^4:
+ version "4.4.8"
+ resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d"
+ integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==
+ dependencies:
+ chownr "^1.1.1"
+ fs-minipass "^1.2.5"
+ minipass "^2.3.4"
+ minizlib "^1.1.1"
+ mkdirp "^0.5.0"
+ safe-buffer "^5.1.2"
+ yallist "^3.0.2"
+
+term-size@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
+ integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=
+ dependencies:
+ execa "^0.7.0"
+
+test-exclude@^4.2.1:
+ version "4.2.3"
+ resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20"
+ integrity sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==
dependencies:
arrify "^1.0.1"
micromatch "^2.3.11"
@@ -6617,118 +8363,176 @@ test-exclude@^4.1.1:
text-table@0.2.0, text-table@~0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
throat@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/throat/-/throat-3.2.0.tgz#50cb0670edbc40237b9e347d7e1f88e4620af836"
+ integrity sha512-/EY8VpvlqJ+sFtLPeOgc8Pl7kQVOWv0woD87KTXVHPIAE842FGT+rokxIhe8xIUP1cfgrkt0as0vDLjDiMtr8w==
through@^2.3.6:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
-thunky@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/thunky/-/thunky-0.1.0.tgz#bf30146824e2b6e67b0f2d7a4ac8beb26908684e"
+thunky@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826"
+ integrity sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==
time-stamp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357"
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57"
+ integrity sha512-zxke8goJQpBeEgD82CXABeMh0LSJcj7CXEd0OHOg45HgcofF7pxNwZm9+RknpxpDhwN4gFpySkApKfFYfRQnUA==
-timed-out@^3.0.0:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-3.1.3.tgz#95860bfcc5c76c277f8f8326fd0f5b2e20eba217"
+timed-out@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
timers-browserify@^2.0.4:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.5.tgz#04878fb12a155a159c9d1e59faa1f77bf4ecc44c"
+ version "2.0.10"
+ resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae"
+ integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==
dependencies:
setimmediate "^1.0.4"
tmp@^0.0.33:
version "0.0.33"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
dependencies:
os-tmpdir "~1.0.2"
tmpl@1.0.x:
version "1.0.4"
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
+ integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
to-arraybuffer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
+ integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=
to-fast-properties@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47"
+ integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=
+
+to-object-path@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af"
+ integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=
+ dependencies:
+ kind-of "^3.0.2"
+
+to-regex-range@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
+ integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=
+ dependencies:
+ is-number "^3.0.0"
+ repeat-string "^1.6.1"
+
+to-regex@^3.0.1, to-regex@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce"
+ integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==
+ dependencies:
+ define-property "^2.0.2"
+ extend-shallow "^3.0.2"
+ regex-not "^1.0.2"
+ safe-regex "^1.1.0"
toposort@^1.0.0:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec"
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
+ integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk=
-tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3:
- version "2.3.3"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561"
+tough-cookie@^2.3.2, tough-cookie@~2.4.3:
+ version "2.4.3"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781"
+ integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==
+ dependencies:
+ psl "^1.1.24"
+ punycode "^1.4.1"
+
+tough-cookie@~2.3.0:
+ version "2.3.4"
+ resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655"
+ integrity sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==
dependencies:
punycode "^1.4.1"
tr46@~0.0.3:
version "0.0.3"
resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+ integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
trim-newlines@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+ integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
trim-right@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+ integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
+ integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=
tunnel-agent@^0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
+ integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
dependencies:
safe-buffer "^5.0.1"
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+ integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
dependencies:
prelude-ls "~1.1.2"
-type-is@~1.6.15:
- version "1.6.15"
- resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
+type-is@~1.6.16:
+ version "1.6.16"
+ resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
+ integrity sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==
dependencies:
media-typer "0.3.0"
- mime-types "~2.1.15"
+ mime-types "~2.1.18"
typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+ integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-ua-parser-js@^0.7.9:
- version "0.7.17"
- resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac"
+ua-parser-js@^0.7.18:
+ version "0.7.19"
+ resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b"
+ integrity sha512-T3PVJ6uz8i0HzPxOF9SWzWAlfN/DavlpQqepn22xgve/5QecC+XMCAtmUNnY7C9StehaV6exjUCI801lOI7QlQ==
-uglify-js@3.3.x, uglify-js@^3.0.13:
- version "3.3.8"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.8.tgz#51e9a5db73afb53ac98603d08224edcd0be45fd8"
+uglify-js@3.4.x, uglify-js@^3.0.13, uglify-js@^3.1.4:
+ version "3.4.9"
+ resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
+ integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==
dependencies:
- commander "~2.13.0"
+ commander "~2.17.1"
source-map "~0.6.1"
-uglify-js@^2.6, uglify-js@^2.8.29:
+uglify-js@^2.8.29:
version "2.8.29"
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
+ integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0=
dependencies:
source-map "~0.5.1"
yargs "~3.10.0"
@@ -6738,10 +8542,12 @@ uglify-js@^2.6, uglify-js@^2.8.29:
uglify-to-browserify@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
+ integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc=
uglifyjs-webpack-plugin@^0.4.6:
version "0.4.6"
resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309"
+ integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=
dependencies:
source-map "^0.5.6"
uglify-js "^2.8.29"
@@ -6750,61 +8556,105 @@ uglifyjs-webpack-plugin@^0.4.6:
uid-number@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
+ integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=
-ultron@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c"
+union-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4"
+ integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=
+ dependencies:
+ arr-union "^3.1.0"
+ get-value "^2.0.6"
+ is-extendable "^0.1.1"
+ set-value "^0.4.3"
uniq@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
-
-uniqid@^4.0.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1"
- dependencies:
- macaddress "^0.2.8"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
uniqs@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02"
+ integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI=
+
+unique-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a"
+ integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=
+ dependencies:
+ crypto-random-string "^1.0.0"
universalify@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7"
+ version "0.1.2"
+ resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+ integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
unpipe@1.0.0, unpipe@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+ integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
-unzip-response@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-1.0.2.tgz#b984f0877fc0a89c2c773cc1ef7b5b232b5b06fe"
+unset-value@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559"
+ integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=
+ dependencies:
+ has-value "^0.3.1"
+ isobject "^3.0.0"
-update-notifier@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-1.0.3.tgz#8f92c515482bd6831b7c93013e70f87552c7cf5a"
+unzip-response@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97"
+ integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=
+
+upath@^1.0.5:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd"
+ integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==
+
+update-notifier@^2.3.0:
+ version "2.5.0"
+ resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6"
+ integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==
dependencies:
- boxen "^0.6.0"
- chalk "^1.0.0"
- configstore "^2.0.0"
+ boxen "^1.2.1"
+ chalk "^2.0.1"
+ configstore "^3.0.0"
+ import-lazy "^2.1.0"
+ is-ci "^1.0.10"
+ is-installed-globally "^0.1.0"
is-npm "^1.0.0"
- latest-version "^2.0.0"
- lazy-req "^1.1.0"
+ latest-version "^3.0.0"
semver-diff "^2.0.0"
- xdg-basedir "^2.0.0"
+ xdg-basedir "^3.0.0"
upper-case@^1.1.1:
version "1.1.3"
resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598"
+ integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=
+
+uri-js@^4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
+ integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
+ dependencies:
+ punycode "^2.1.0"
urijs@^1.16.1:
- version "1.19.0"
- resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.0.tgz#d8aa284d0e7469703a6988ad045c4cbfdf08ada0"
+ version "1.19.1"
+ resolved "https://registry.yarnpkg.com/urijs/-/urijs-1.19.1.tgz#5b0ff530c0cbde8386f6342235ba5ca6e995d25a"
+ integrity sha512-xVrGVi94ueCJNrBSTjWqjvtgvl3cyOTThp2zaMaFNGp3F542TR6sM3f2o8RqZl+AwteClSVmoCyt0ka4RjQOQg==
+
+urix@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
+ integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
url-loader@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7"
+ integrity sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==
dependencies:
loader-utils "^1.0.2"
mime "^1.4.1"
@@ -6813,82 +8663,97 @@ url-loader@0.6.2:
url-parse-lax@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73"
+ integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=
dependencies:
prepend-http "^1.0.1"
-url-parse@1.0.x:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b"
+url-parse@^1.1.8, url-parse@^1.4.3:
+ version "1.4.4"
+ resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8"
+ integrity sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==
dependencies:
- querystringify "0.0.x"
- requires-port "1.0.x"
-
-url-parse@^1.1.8:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986"
- dependencies:
- querystringify "~1.0.0"
- requires-port "~1.0.0"
+ querystringify "^2.0.0"
+ requires-port "^1.0.0"
url@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
+ integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=
dependencies:
punycode "1.3.2"
querystring "0.2.0"
+use@^3.1.0:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"
+ integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
-util@0.10.3, util@^0.10.3:
+util@0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
+ integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk=
dependencies:
inherits "2.0.1"
-utila@~0.3:
- version "0.3.3"
- resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226"
+util@^0.10.3:
+ version "0.10.4"
+ resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901"
+ integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==
+ dependencies:
+ inherits "2.0.3"
-utila@~0.4:
+utila@^0.4.0, utila@~0.4:
version "0.4.0"
resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
+ integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
utils-merge@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
+ integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
-uuid@^2.0.1, uuid@^2.0.2:
+uuid@^2.0.2:
version "2.0.3"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a"
+ integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=
-uuid@^3.0.0, uuid@^3.1.0:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14"
+uuid@^3.0.0, uuid@^3.3.2:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
+ integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
validate-npm-package-license@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
+ integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
dependencies:
- spdx-correct "~1.0.0"
- spdx-expression-parse "~1.0.0"
+ spdx-correct "^3.0.0"
+ spdx-expression-parse "^3.0.0"
value-equal@^0.4.0:
version "0.4.0"
resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7"
+ integrity sha512-x+cYdNnaA3CxvMaTX0INdTCN8m8aF2uY9BvEqmxuYp8bL09cs/kWVQPVGcA35fMktdOsP69IgU7wFj/61dJHEw==
vary@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
+ integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
vendors@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22"
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801"
+ integrity sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==
verror@1.10.0:
version "1.10.0"
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
+ integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
dependencies:
assert-plus "^1.0.0"
core-util-is "1.0.2"
@@ -6897,50 +8762,66 @@ verror@1.10.0:
vm-browserify@0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
+ integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=
dependencies:
indexof "0.0.1"
walker@~1.0.5:
version "1.0.7"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
+ integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=
dependencies:
makeerror "1.0.x"
warning@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c"
+ integrity sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=
+ dependencies:
+ loose-envify "^1.0.0"
+
+warning@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.2.tgz#aa6876480872116fa3e11d434b0d0d8d91e44607"
+ integrity sha512-wbTp09q/9C+jJn4KKJfJfoS6VleK/Dti0yqWSm6KMvJ4MRCXFQNapHuJXutJIrWV0Cf4AhTdeIe4qdKHR1+Hug==
dependencies:
loose-envify "^1.0.0"
watch@~0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
+ integrity sha1-d3mLLaD5kQ1ZXxrOWwwiWFIfIdw=
watchpack@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac"
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00"
+ integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==
dependencies:
- async "^2.1.2"
- chokidar "^1.7.0"
+ chokidar "^2.0.2"
graceful-fs "^4.1.2"
+ neo-async "^2.5.0"
wbuf@^1.1.0, wbuf@^1.7.2:
- version "1.7.2"
- resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.2.tgz#d697b99f1f59512df2751be42769c1580b5801fe"
+ version "1.7.3"
+ resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"
+ integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==
dependencies:
minimalistic-assert "^1.0.0"
webidl-conversions@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+ integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
webidl-conversions@^4.0.0:
version "4.0.2"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad"
+ integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==
webpack-dev-middleware@^1.11.0:
version "1.12.2"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e"
+ integrity sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==
dependencies:
memory-fs "~0.4.1"
mime "^1.5.0"
@@ -6951,6 +8832,7 @@ webpack-dev-middleware@^1.11.0:
webpack-dev-server@2.9.4:
version "2.9.4"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-2.9.4.tgz#7883e61759c6a4b33e9b19ec4037bd4ab61428d1"
+ integrity sha512-thrqC0EQEoSjXeYgP6pUXcUCZ+LNrKsDPn+mItLnn5VyyNZOJKd06hUP5vqkYwL8nWWXsii0loSF9NHNccT6ow==
dependencies:
ansi-html "0.0.7"
array-includes "^3.0.3"
@@ -6983,13 +8865,15 @@ webpack-dev-server@2.9.4:
webpack-manifest-plugin@1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-1.3.2.tgz#5ea8ee5756359ddc1d98814324fe43496349a7d4"
+ integrity sha512-MX60Bv2G83Zks9pi3oLOmRgnPAnwrlMn+lftMrWBm199VQjk46/xgzBi9lPfpZldw2+EI2S+OevuLIaDuxCWRw==
dependencies:
fs-extra "^0.30.0"
lodash ">=3.5 <5"
webpack-sources@^1.0.1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54"
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85"
+ integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==
dependencies:
source-list-map "^2.0.0"
source-map "~0.6.1"
@@ -6997,6 +8881,7 @@ webpack-sources@^1.0.1:
webpack@3.8.1:
version "3.8.1"
resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83"
+ integrity sha512-5ZXLWWsMqHKFr5y0N3Eo5IIisxeEeRAajNq4mELb/WELOR7srdbQk2N5XiyNy2A/AgvlR3AmeBCZJW8lHrolbw==
dependencies:
acorn "^5.0.0"
acorn-dynamic-import "^2.0.0"
@@ -7024,6 +8909,7 @@ webpack@3.8.1:
websocket-driver@>=0.5.1:
version "0.7.0"
resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb"
+ integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=
dependencies:
http-parser-js ">=0.4.0"
websocket-extensions ">=0.1.1"
@@ -7031,20 +8917,29 @@ websocket-driver@>=0.5.1:
websocket-extensions@>=0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29"
+ integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==
whatwg-encoding@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3"
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0"
+ integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==
dependencies:
- iconv-lite "0.4.19"
+ iconv-lite "0.4.24"
-whatwg-fetch@2.0.3, whatwg-fetch@>=0.10.0:
+whatwg-fetch@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84"
+ integrity sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ=
+
+whatwg-fetch@>=0.10.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
+ integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
whatwg-url@^4.3.0:
version "4.8.0"
resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.8.0.tgz#d2981aa9148c1e00a41c5a6131166ab4683bbcc0"
+ integrity sha1-0pgaqRSMHgCkHFphMRZqtGg7vMA=
dependencies:
tr46 "~0.0.3"
webidl-conversions "^3.0.0"
@@ -7052,59 +8947,70 @@ whatwg-url@^4.3.0:
whet.extend@~0.9.9:
version "0.9.9"
resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1"
+ integrity sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=
which-module@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
+ integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
which-module@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
+ integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=
which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
dependencies:
isexe "^2.0.0"
wide-align@^1.1.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710"
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457"
+ integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==
dependencies:
- string-width "^1.0.2"
+ string-width "^1.0.2 || 2"
-widest-line@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c"
+widest-line@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc"
+ integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==
dependencies:
- string-width "^1.0.1"
+ string-width "^2.1.1"
window-size@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+ integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=
wordwrap@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+ integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
+ integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc=
wordwrap@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
worker-farm@^1.3.1:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae"
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
+ integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==
dependencies:
- errno "^0.1.4"
- xtend "^4.0.1"
+ errno "~0.1.7"
wrap-ansi@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
+ integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=
dependencies:
string-width "^1.0.1"
strip-ansi "^3.0.1"
@@ -7112,76 +9018,86 @@ wrap-ansi@^2.0.0:
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+ integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
-write-file-atomic@^1.1.2:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f"
+write-file-atomic@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab"
+ integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==
dependencies:
graceful-fs "^4.1.11"
imurmurhash "^0.1.4"
- slide "^1.1.5"
+ signal-exit "^3.0.2"
write@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
dependencies:
mkdirp "^0.5.1"
-ws@^3.0.0:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2"
+ws@^5.2.0:
+ version "5.2.2"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"
+ integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==
dependencies:
async-limiter "~1.0.0"
- safe-buffer "~5.1.0"
- ultron "~1.1.0"
-xdg-basedir@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2"
- dependencies:
- os-homedir "^1.0.0"
-
-xml-char-classes@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
+xdg-basedir@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+ integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=
xml-name-validator@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
+ integrity sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=
-xtend@^4.0.0, xtend@^4.0.1:
+xtend@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
+ integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68=
y18n@^3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
+ integrity sha1-bRX7qITAhnnA136I53WegR4H+kE=
yallist@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+ integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
+
+yallist@^3.0.0, yallist@^3.0.2:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9"
+ integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=
yargs-parser@^4.2.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
+ integrity sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=
dependencies:
camelcase "^3.0.0"
yargs-parser@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
+ integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=
dependencies:
camelcase "^3.0.0"
yargs-parser@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9"
+ integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k=
dependencies:
camelcase "^4.1.0"
yargs@^6.6.0:
version "6.6.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
+ integrity sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=
dependencies:
camelcase "^3.0.0"
cliui "^3.2.0"
@@ -7200,6 +9116,7 @@ yargs@^6.6.0:
yargs@^7.0.2:
version "7.1.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
+ integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=
dependencies:
camelcase "^3.0.0"
cliui "^3.2.0"
@@ -7218,6 +9135,7 @@ yargs@^7.0.2:
yargs@^8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360"
+ integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A=
dependencies:
camelcase "^4.1.0"
cliui "^3.2.0"
@@ -7236,6 +9154,7 @@ yargs@^8.0.2:
yargs@~3.10.0:
version "3.10.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
+ integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=
dependencies:
camelcase "^1.0.2"
cliui "^2.1.0"
@@ -7243,13 +9162,18 @@ yargs@~3.10.0:
window-size "0.1.0"
yarn@^1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.3.2.tgz#5939762581b5b4ddcd3418c0f6be42df3aee195f"
+ version "1.12.3"
+ resolved "https://registry.yarnpkg.com/yarn/-/yarn-1.12.3.tgz#fb4599bf1f8da01552bcc7e1571dfd4e53788203"
+ integrity sha512-8f5rWNDvkhAmCxmn8C0LsNWMxTYVk4VGKiq0sIB6HGZjaZTHsGIH87SUmVDUEd2Wk54bqKoUlbVWgQFCQhRkVw==
-zen-observable@^0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.6.1.tgz#01dbed3bc8d02cbe9ee1112c83e04c807f647244"
+zen-observable-ts@^0.8.10:
+ version "0.8.10"
+ resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-0.8.10.tgz#18e2ce1c89fe026e9621fd83cc05168228fce829"
+ integrity sha512-5vqMtRggU/2GhePC9OU4sYEWOdvmayp2k3gjPf4F0mXwB3CSbbNznfDUvDJx9O2ZTa1EIXdJhPchQveFKwNXPQ==
+ dependencies:
+ zen-observable "^0.8.0"
-zen-observable@^0.7.0:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.7.1.tgz#f84075c0ee085594d3566e1d6454207f126411b3"
+zen-observable@^0.8.0:
+ version "0.8.11"
+ resolved "https://registry.yarnpkg.com/zen-observable/-/zen-observable-0.8.11.tgz#d3415885eeeb42ee5abb9821c95bb518fcd6d199"
+ integrity sha512-N3xXQVr4L61rZvGMpWe8XoCGX8vhU35dPyQ4fm5CY/KDlG0F75un14hjbckPXTDuKUY6V0dqR2giT6xN8Y4GEQ==
diff --git a/analytics/index.js b/analytics/index.js
new file mode 100644
index 0000000000..7955d6da65
--- /dev/null
+++ b/analytics/index.js
@@ -0,0 +1,35 @@
+// @flow
+const debug = require('debug')('analytics');
+import createWorker from '../shared/bull/create-worker';
+
+import trackAnalytics from './queues/track-analytics';
+import identifyAnalytics from './queues/identify-analytics';
+
+import { TRACK_ANALYTICS, IDENTIFY_ANALYTICS } from './queues/constants';
+
+const PORT = process.env.PORT || 3009;
+
+debug('\n📈 Analytics worker is starting...');
+debug('Logging with debug enabled!');
+debug('');
+
+const server = createWorker({
+ [TRACK_ANALYTICS]: trackAnalytics,
+ [IDENTIFY_ANALYTICS]: identifyAnalytics,
+});
+
+debug(
+ `🗄 Queues open for business ${(process.env.NODE_ENV === 'production' &&
+ // $FlowIssue
+ `at ${process.env.COMPOSE_REDIS_URL}:${process.env.COMPOSE_REDIS_PORT}`) ||
+ 'locally'}`
+);
+
+// $FlowIssue
+server.listen(PORT, 'localhost', () => {
+ debug(
+ `💉 Healthcheck server running at ${server.address().address}:${
+ server.address().port
+ }`
+ );
+});
diff --git a/analytics/models/channel.js b/analytics/models/channel.js
new file mode 100644
index 0000000000..d01033b51d
--- /dev/null
+++ b/analytics/models/channel.js
@@ -0,0 +1,10 @@
+// @flow
+import type { DBChannel } from 'shared/types';
+import { db } from 'shared/db';
+
+export const getChannelById = (channelId: string): Promise => {
+ return db
+ .table('channels')
+ .get(channelId)
+ .run();
+};
diff --git a/analytics/models/community.js b/analytics/models/community.js
new file mode 100644
index 0000000000..8e635e411d
--- /dev/null
+++ b/analytics/models/community.js
@@ -0,0 +1,10 @@
+// @flow
+import type { DBCommunity } from 'shared/types';
+import { db } from 'shared/db';
+
+export const getCommunityById = (communityId: string): Promise => {
+ return db
+ .table('communities')
+ .get(communityId)
+ .run();
+};
diff --git a/analytics/models/message.js b/analytics/models/message.js
new file mode 100644
index 0000000000..ce1b77d6cc
--- /dev/null
+++ b/analytics/models/message.js
@@ -0,0 +1,10 @@
+// @flow
+import type { DBMessage } from 'shared/types';
+import { db } from 'shared/db';
+
+export const getMessageById = (messageId: string): Promise => {
+ return db
+ .table('messages')
+ .get(messageId)
+ .run();
+};
diff --git a/analytics/models/notification.js b/analytics/models/notification.js
new file mode 100644
index 0000000000..a3ded7904a
--- /dev/null
+++ b/analytics/models/notification.js
@@ -0,0 +1,12 @@
+// @flow
+import type { DBNotification } from 'shared/types';
+import { db } from 'shared/db';
+
+export const getNotificationById = (
+ notificationId: string
+): Promise => {
+ return db
+ .table('notifications')
+ .get(notificationId)
+ .run();
+};
diff --git a/analytics/models/reaction.js b/analytics/models/reaction.js
new file mode 100644
index 0000000000..2cb72bed53
--- /dev/null
+++ b/analytics/models/reaction.js
@@ -0,0 +1,18 @@
+// @flow
+import type { DBReaction, DBThreadReaction } from 'shared/types';
+import { db } from 'shared/db';
+
+export const getReactionById = (reactionId: string): Promise => {
+ return db
+ .table('reactions')
+ .get(reactionId)
+ .run();
+};
+
+// prettier-ignore
+export const getThreadReactionById = (reactionId: string): Promise => {
+ return db
+ .table('threadReactions')
+ .get(reactionId)
+ .run();
+};
diff --git a/analytics/models/thread.js b/analytics/models/thread.js
new file mode 100644
index 0000000000..38cc1cb06b
--- /dev/null
+++ b/analytics/models/thread.js
@@ -0,0 +1,10 @@
+// @flow
+import type { DBThread } from 'shared/types';
+import { db } from 'shared/db';
+
+export const getThreadById = (threadId: string): Promise => {
+ return db
+ .table('threads')
+ .get(threadId)
+ .run();
+};
diff --git a/analytics/models/usersChannels.js b/analytics/models/usersChannels.js
new file mode 100644
index 0000000000..b232f51fec
--- /dev/null
+++ b/analytics/models/usersChannels.js
@@ -0,0 +1,26 @@
+// @flow
+import type { DBUsersChannels } from 'shared/types';
+import { db } from 'shared/db';
+
+const defaultResult = {
+ isMember: false,
+ isOwner: false,
+ isModerator: false,
+ isBlocked: false,
+ isPending: false,
+ reputation: 0,
+};
+
+export const getUserPermissionsInChannel = (
+ userId: string,
+ channelId: string
+): Promise => {
+ return db
+ .table('usersChannels')
+ .getAll([userId, channelId], { index: 'userIdAndChannelId' })
+ .run()
+ .then(results => {
+ if (!results || results.length === 0) return defaultResult;
+ return results[0];
+ });
+};
diff --git a/analytics/models/usersCommunities.js b/analytics/models/usersCommunities.js
new file mode 100644
index 0000000000..466e6aaa81
--- /dev/null
+++ b/analytics/models/usersCommunities.js
@@ -0,0 +1,25 @@
+// @flow
+import type { DBUsersCommunities } from 'shared/types';
+import { db } from 'shared/db';
+
+const defaultResult = {
+ isMember: false,
+ isOwner: false,
+ isModerator: false,
+ isBlocked: false,
+ reputation: 0,
+};
+
+export const getUserPermissionsInCommunity = (
+ userId: string,
+ communityId: string
+): Promise => {
+ return db
+ .table('usersCommunities')
+ .getAll([userId, communityId], { index: 'userIdAndCommunityId' })
+ .run()
+ .then(results => {
+ if (!results || results.length === 0) return defaultResult;
+ return results[0];
+ });
+};
diff --git a/analytics/models/usersThreads.js b/analytics/models/usersThreads.js
new file mode 100644
index 0000000000..73510a195d
--- /dev/null
+++ b/analytics/models/usersThreads.js
@@ -0,0 +1,17 @@
+// @flow
+import type { DBUsersThreads } from 'shared/types';
+import { db } from 'shared/db';
+
+export const getThreadNotificationStatusForUser = (
+ threadId: string,
+ userId: string
+): Promise => {
+ return db
+ .table('usersThreads')
+ .getAll([userId, threadId], { index: 'userIdAndThreadId' })
+ .run()
+ .then(results => {
+ if (!results || results.length === 0) return null;
+ return results[0];
+ });
+};
diff --git a/analytics/package.json b/analytics/package.json
new file mode 100644
index 0000000000..b1d5c4cf32
--- /dev/null
+++ b/analytics/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "analytics",
+ "version": "1.0.0",
+ "scripts": {
+ "start": "NODE_ENV=production node main.js"
+ },
+ "dependencies": {
+ "amplitude": "^3.5.0",
+ "aws-sdk": "^2.395.0",
+ "bull": "3.3.10",
+ "datadog-metrics": "^0.8.1",
+ "debug": "^4.1.1",
+ "faker": "^4.1.0",
+ "ioredis": "3.2.2",
+ "lodash.intersection": "^4.4.0",
+ "node-env-file": "^0.1.8",
+ "now-env": "^3.1.0",
+ "performance-now": "^2.1.0",
+ "raven": "^2.6.4",
+ "redis-tag-cache": "^1.2.1",
+ "rethinkdb-inspector": "^0.3.3",
+ "rethinkdbdash": "^2.3.31",
+ "rethinkhaberdashery": "^2.3.32",
+ "sanitize-filename": "^1.6.1",
+ "sha1": "^1.1.1",
+ "source-map-support": "^0.5.10",
+ "toobusy-js": "^0.5.1"
+ }
+}
diff --git a/analytics/queues/constants.js b/analytics/queues/constants.js
new file mode 100644
index 0000000000..179d7676c6
--- /dev/null
+++ b/analytics/queues/constants.js
@@ -0,0 +1,3 @@
+// @flow
+export const TRACK_ANALYTICS = 'track analytics';
+export const IDENTIFY_ANALYTICS = 'identify analytics';
diff --git a/analytics/queues/identify-analytics.js b/analytics/queues/identify-analytics.js
new file mode 100644
index 0000000000..a50689bb11
--- /dev/null
+++ b/analytics/queues/identify-analytics.js
@@ -0,0 +1,29 @@
+// @flow
+const debug = require('debug')('analytics:queues:identify');
+import Raven from 'shared/raven';
+import type { Job, IdentifyAnalyticsData } from 'shared/bull/types';
+import { getUserById } from 'shared/db/queries/user';
+import { identify, transformations } from '../utils';
+
+const processJob = async (job: Job) => {
+ const { userId } = job.data;
+
+ if (!userId) return;
+
+ const user = await getUserById(userId);
+
+ if (!user) return;
+
+ const analyticsUser = transformations.analyticsUser(user);
+ return await identify(userId, analyticsUser);
+};
+
+export default async (job: Job) => {
+ try {
+ await processJob(job);
+ } catch (err) {
+ console.error('❌ Error in job:\n');
+ console.error(err);
+ Raven.captureException(err);
+ }
+};
diff --git a/analytics/queues/track-analytics.js b/analytics/queues/track-analytics.js
new file mode 100644
index 0000000000..94b92fbd2a
--- /dev/null
+++ b/analytics/queues/track-analytics.js
@@ -0,0 +1,32 @@
+// @flow
+const debug = require('debug')('analytics:queues:track');
+import Raven from 'shared/raven';
+import type { Job, TrackAnalyticsData } from 'shared/bull/types';
+import { getContext, track } from '../utils';
+
+const processJob = async (job: Job) => {
+ const { userId, event, context, properties = {} } = job.data;
+
+ debug(`Incoming job: ${event}`);
+
+ if (!context) {
+ return track(userId, event, { ...properties });
+ }
+
+ const contextProperties = await getContext({ userId, ...context });
+
+ return await track(userId, event, {
+ ...contextProperties,
+ ...properties,
+ });
+};
+
+export default async (job: Job) => {
+ try {
+ await processJob(job);
+ } catch (err) {
+ console.error('❌ Error in job:\n');
+ console.error(err);
+ Raven.captureException(err);
+ }
+};
diff --git a/analytics/utils/amplitude.js b/analytics/utils/amplitude.js
new file mode 100644
index 0000000000..76e71cfc5d
--- /dev/null
+++ b/analytics/utils/amplitude.js
@@ -0,0 +1,15 @@
+// @flow
+require('now-env');
+const Amplitude = require('amplitude');
+
+const IS_PROD = process.env.NODE_ENV === 'production';
+
+const AMPLITUDE_API_KEY = IS_PROD
+ ? process.env.AMPLITUDE_API_KEY
+ : process.env.AMPLITUDE_API_KEY_DEVELOPMENT;
+
+if (!AMPLITUDE_API_KEY) {
+ console.warn('No amplitude api key provided');
+}
+
+export const amplitude = new Amplitude(AMPLITUDE_API_KEY);
diff --git a/analytics/utils/getContext.js b/analytics/utils/getContext.js
new file mode 100644
index 0000000000..db661487d5
--- /dev/null
+++ b/analytics/utils/getContext.js
@@ -0,0 +1,254 @@
+// @flow
+import type { DBThreadReaction } from 'shared/types';
+import { transformations } from './index';
+import { getThreadNotificationStatusForUser } from '../models/usersThreads';
+import { getReactionById, getThreadReactionById } from '../models/reaction';
+import { getMessageById } from '../models/message';
+import { getThreadById } from '../models/thread';
+import { getChannelById } from '../models/channel';
+import { getCommunityById } from '../models/community';
+import { getUserPermissionsInChannel } from '../models/usersChannels';
+import { getUserPermissionsInCommunity } from '../models/usersCommunities';
+import { getNotificationById } from '../models/notification';
+/*
+
+ Given an entityId, return structured data to track in internal analytics
+ E.g. given a reactionId, return the reaction, message, thread, channel, and community
+ where the reaction was left
+
+ E.g. given a threadId, return the thread, channel and community
+
+*/
+type EntityObjType = {
+ reactionId?: string,
+ threadReactionId?: string,
+ messageId?: string,
+ threadId?: string,
+ channelId?: string,
+ communityId?: string,
+ notificationId?: string,
+ userId: string,
+};
+
+export const getContext = async (obj: EntityObjType) => {
+ if (obj.reactionId) {
+ const reaction = await getReactionById(obj.reactionId);
+ const message = await getMessageById(reaction.messageId);
+ const thread = await getThreadById(message.threadId);
+
+ // if no thread was found, we are in a dm
+ if (!thread) {
+ return {
+ reaction: transformations.analyticsReaction(reaction),
+ message: transformations.analyticsMessage(message),
+ };
+ }
+
+ const [
+ channel,
+ community,
+ channelPermissions,
+ communityPermissions,
+ threadPermissions,
+ ] = await Promise.all([
+ getChannelById(thread.channelId),
+ getCommunityById(thread.communityId),
+ getUserPermissionsInChannel(obj.userId, thread.channelId),
+ getUserPermissionsInCommunity(obj.userId, thread.communityId),
+ getThreadNotificationStatusForUser(thread.id, obj.userId),
+ ]);
+
+ return {
+ reaction: transformations.analyticsReaction(reaction),
+ message: transformations.analyticsMessage(message),
+ thread: {
+ ...transformations.analyticsThread(thread),
+ ...transformations.analyticsThreadPermissions(threadPermissions),
+ isPinned: community.pinnedThreadId
+ ? community.pinnedThreadId === thread.id
+ : false,
+ },
+ channel: {
+ ...transformations.analyticsChannel(channel),
+ ...transformations.analyticsChannelPermissions(channelPermissions),
+ },
+ community: {
+ ...transformations.analyticsCommunity(community),
+ ...transformations.analyticsCommunityPermissions(communityPermissions),
+ },
+ };
+ }
+
+ if (obj.threadReactionId) {
+ const threadReaction: DBThreadReaction = await getThreadReactionById(
+ obj.threadReactionId
+ );
+ const thread = await getThreadById(threadReaction.threadId);
+
+ // if no thread was found, we are in a dm
+ if (!thread) {
+ return {};
+ }
+
+ const [
+ channel,
+ community,
+ channelPermissions,
+ communityPermissions,
+ threadPermissions,
+ ] = await Promise.all([
+ getChannelById(thread.channelId),
+ getCommunityById(thread.communityId),
+ getUserPermissionsInChannel(obj.userId, thread.channelId),
+ getUserPermissionsInCommunity(obj.userId, thread.communityId),
+ getThreadNotificationStatusForUser(thread.id, obj.userId),
+ ]);
+
+ return {
+ threadReaction: transformations.analyticsThreadReaction(threadReaction),
+ thread: {
+ ...transformations.analyticsThread(thread),
+ ...transformations.analyticsThreadPermissions(threadPermissions),
+ isPinned: community.pinnedThreadId
+ ? community.pinnedThreadId === thread.id
+ : false,
+ },
+ channel: {
+ ...transformations.analyticsChannel(channel),
+ ...transformations.analyticsChannelPermissions(channelPermissions),
+ },
+ community: {
+ ...transformations.analyticsCommunity(community),
+ ...transformations.analyticsCommunityPermissions(communityPermissions),
+ },
+ };
+ }
+
+ if (obj.messageId) {
+ const message = await getMessageById(obj.messageId);
+ const thread = await getThreadById(message.threadId);
+
+ // if no thread was found, we are in a dm
+ if (!thread) {
+ return {
+ message: transformations.analyticsMessage(message),
+ };
+ }
+
+ const [
+ channel,
+ community,
+ channelPermissions,
+ communityPermissions,
+ threadPermissions,
+ ] = await Promise.all([
+ getChannelById(thread.channelId),
+ getCommunityById(thread.communityId),
+ getUserPermissionsInChannel(obj.userId, thread.channelId),
+ getUserPermissionsInCommunity(obj.userId, thread.communityId),
+ getThreadNotificationStatusForUser(thread.id, obj.userId),
+ ]);
+
+ return {
+ message: transformations.analyticsMessage(message),
+ thread: {
+ ...transformations.analyticsThread(thread),
+ ...transformations.analyticsThreadPermissions(threadPermissions),
+ isPinned: community.pinnedThreadId
+ ? community.pinnedThreadId === thread.id
+ : false,
+ },
+ channel: {
+ ...transformations.analyticsChannel(channel),
+ ...transformations.analyticsChannelPermissions(channelPermissions),
+ },
+ community: {
+ ...transformations.analyticsCommunity(community),
+ ...transformations.analyticsCommunityPermissions(communityPermissions),
+ },
+ };
+ }
+
+ if (obj.threadId) {
+ const thread = await getThreadById(obj.threadId);
+
+ const [
+ channel,
+ community,
+ channelPermissions,
+ communityPermissions,
+ threadPermissions,
+ ] = await Promise.all([
+ getChannelById(thread.channelId),
+ getCommunityById(thread.communityId),
+ getUserPermissionsInChannel(obj.userId, thread.channelId),
+ getUserPermissionsInCommunity(obj.userId, thread.communityId),
+ getThreadNotificationStatusForUser(thread.id, obj.userId),
+ ]);
+
+ return {
+ thread: {
+ ...transformations.analyticsThread(thread),
+ ...transformations.analyticsThreadPermissions(threadPermissions),
+ isPinned: community.pinnedThreadId
+ ? community.pinnedThreadId === thread.id
+ : false,
+ },
+ channel: {
+ ...transformations.analyticsChannel(channel),
+ ...transformations.analyticsChannelPermissions(channelPermissions),
+ },
+ community: {
+ ...transformations.analyticsCommunity(community),
+ ...transformations.analyticsCommunityPermissions(communityPermissions),
+ },
+ };
+ }
+
+ if (obj.channelId) {
+ const channel = await getChannelById(obj.channelId);
+ const [
+ community,
+ channelPermissions,
+ communityPermissions,
+ ] = await Promise.all([
+ getCommunityById(channel.communityId),
+ getUserPermissionsInChannel(obj.userId, channel.id),
+ getUserPermissionsInCommunity(obj.userId, channel.communityId),
+ ]);
+
+ return {
+ channel: {
+ ...transformations.analyticsChannel(channel),
+ ...transformations.analyticsChannelPermissions(channelPermissions),
+ },
+ community: {
+ ...transformations.analyticsCommunity(community),
+ ...transformations.analyticsCommunityPermissions(communityPermissions),
+ },
+ };
+ }
+
+ if (obj.communityId) {
+ const communityId = obj.communityId;
+
+ const [community, communityPermissions] = await Promise.all([
+ getCommunityById(obj.communityId),
+ getUserPermissionsInCommunity(obj.userId, communityId),
+ ]);
+ return {
+ community: {
+ ...transformations.analyticsCommunity(community),
+ ...transformations.analyticsCommunityPermissions(communityPermissions),
+ },
+ };
+ }
+
+ if (obj.notificationId) {
+ const notificationId = obj.notificationId;
+ const notification = await getNotificationById(notificationId);
+ return {
+ event: notification.event,
+ };
+ }
+};
diff --git a/analytics/utils/hash.js b/analytics/utils/hash.js
new file mode 100644
index 0000000000..edb8837a2e
--- /dev/null
+++ b/analytics/utils/hash.js
@@ -0,0 +1,4 @@
+// @flow
+import sha1 from 'sha1';
+
+export default (text: string): string => sha1(text);
diff --git a/analytics/utils/identify.js b/analytics/utils/identify.js
new file mode 100644
index 0000000000..9e32f1910b
--- /dev/null
+++ b/analytics/utils/identify.js
@@ -0,0 +1,21 @@
+// @flow
+const debug = require('debug')('analytics:identify');
+import Raven from 'shared/raven';
+import { amplitude } from './amplitude';
+import { hash } from './';
+
+export const identify = (userId: string, userProperties: Object) => {
+ const amplitudePromise = () => {
+ debug(`[Amplitude] Identify ${userId}`);
+ return amplitude.identify({
+ userId: hash(userId),
+ userProperties,
+ });
+ };
+
+ return Promise.all([amplitudePromise()]).catch(err => {
+ console.error('❌ Error in job:\n');
+ console.error(err);
+ Raven.captureException(err);
+ });
+};
diff --git a/analytics/utils/index.js b/analytics/utils/index.js
new file mode 100644
index 0000000000..6253672b3b
--- /dev/null
+++ b/analytics/utils/index.js
@@ -0,0 +1,9 @@
+// @flow
+import { events } from 'shared/analytics';
+import * as transformations from './transformations';
+import { track } from './track';
+import { identify } from './identify';
+import hash from './hash';
+import { getContext } from './getContext';
+
+export { hash, events, transformations, track, identify, getContext };
diff --git a/analytics/utils/track.js b/analytics/utils/track.js
new file mode 100644
index 0000000000..74c75b9856
--- /dev/null
+++ b/analytics/utils/track.js
@@ -0,0 +1,39 @@
+// @flow
+const debug = require('debug')('analytics:track');
+import Raven from 'shared/raven';
+import { amplitude } from './amplitude';
+import { hash } from './';
+
+export const track = (
+ userId: string,
+ eventType: string,
+ eventProperties: Object = {}
+) => {
+ if (!userId) {
+ console.error('Undefined received as userId in tracking queue: ', {
+ userId,
+ eventType,
+ eventProperties,
+ });
+ return;
+ }
+
+ const amplitudePromise = () => {
+ debug(`[Amplitude] Tracking ${eventType}`);
+
+ return amplitude.track({
+ userId: hash(userId),
+ eventType,
+ eventProperties: {
+ ...eventProperties,
+ client: 'api',
+ },
+ });
+ };
+
+ return Promise.all([amplitudePromise()]).catch(err => {
+ console.error('❌ Error in job:\n');
+ console.error(err);
+ Raven.captureException(err);
+ });
+};
diff --git a/analytics/utils/transformations.js b/analytics/utils/transformations.js
new file mode 100644
index 0000000000..93753fbdf2
--- /dev/null
+++ b/analytics/utils/transformations.js
@@ -0,0 +1,244 @@
+// @flow
+import type {
+ DBChannel,
+ DBUsersChannels,
+ DBCommunity,
+ DBUsersCommunities,
+ DBThread,
+ DBUser,
+ DBReaction,
+ DBThreadReaction,
+ DBMessage,
+ DBUsersThreads,
+} from 'shared/types';
+import { getTruthyValuesFromObject } from 'shared/truthy-values';
+
+type AnalyticsChannel = {
+ id: ?string,
+ name: ?string,
+ slug: ?string,
+ isPrivate: ?boolean,
+ isArchived: ?boolean,
+};
+
+type AnalyticsCommunity = {
+ id: ?string,
+ name: ?string,
+ slug: ?string,
+ isPrivate: boolean,
+};
+
+type AnalyticsChannelPermissions = {
+ roles: Array,
+};
+
+type AnalyticsCommunityPermissions = {
+ roles: Array,
+};
+
+type AnalyticsThread = {
+ id: ?string,
+ isLocked: ?boolean,
+ isWatercooler: ?boolean,
+};
+
+type AnalyticsThreadPermissions = {
+ isParticipant: ?boolean,
+ receiveNotifications: ?boolean,
+};
+
+type AnalyticsUser = {
+ createdAt: ?string,
+ twitterAuthed: boolean,
+ fbAuthed: boolean,
+ githubAuthed: boolean,
+ googleAuthed: boolean,
+ hasUsername: boolean,
+ lastSeen: ?string,
+};
+
+type AnalyticsReaction = {
+ id: ?string,
+ type: ?string,
+};
+
+type AnalyticsThreadReaction = {
+ id: ?string,
+ type: ?string,
+};
+
+type AnalyticsMessage = {
+ id: ?string,
+ threadType: ?string,
+ parentId: ?string,
+};
+
+export const analyticsReaction = (reaction: ?DBReaction): AnalyticsReaction => {
+ if (!reaction) {
+ return {
+ id: null,
+ type: null,
+ };
+ }
+
+ return {
+ id: reaction.id,
+ type: reaction.type,
+ };
+};
+
+export const analyticsThreadReaction = (
+ reaction: ?DBThreadReaction
+): AnalyticsThreadReaction => {
+ if (!reaction) {
+ return {
+ id: null,
+ type: null,
+ };
+ }
+
+ return {
+ id: reaction.id,
+ type: reaction.type,
+ };
+};
+
+export const analyticsMessage = (message: ?DBMessage): AnalyticsMessage => {
+ if (!message) {
+ return {
+ id: null,
+ threadType: null,
+ parentId: null,
+ };
+ }
+
+ return {
+ id: message.id,
+ threadType: message.threadType,
+ parentId: message.parentId ? message.parentId : null,
+ };
+};
+
+export const analyticsChannel = (channel: ?DBChannel): AnalyticsChannel => {
+ if (!channel) {
+ return {
+ id: null,
+ name: null,
+ slug: null,
+ isPrivate: null,
+ isArchived: null,
+ };
+ }
+
+ return {
+ id: channel.id,
+ name: channel.name,
+ slug: channel.slug,
+ isPrivate: channel.isPrivate,
+ isArchived: channel.archivedAt ? true : false,
+ };
+};
+
+export const analyticsChannelPermissions = (
+ channelPermissions: ?DBUsersChannels
+): AnalyticsChannelPermissions => {
+ if (!channelPermissions)
+ return {
+ roles: [],
+ };
+
+ return {
+ roles: getTruthyValuesFromObject(channelPermissions),
+ };
+};
+
+export const analyticsCommunity = (
+ community: DBCommunity
+): AnalyticsCommunity => {
+ if (!community) {
+ return {
+ id: null,
+ name: null,
+ slug: null,
+ isPrivate: false,
+ };
+ }
+
+ return {
+ id: community.id,
+ name: community.name,
+ slug: community.slug,
+ isPrivate: community.isPrivate,
+ };
+};
+
+export const analyticsCommunityPermissions = (
+ communityPermissions: DBUsersCommunities
+): AnalyticsCommunityPermissions => {
+ if (!communityPermissions) {
+ return {
+ roles: [],
+ reputation: 0,
+ };
+ }
+
+ return {
+ roles: getTruthyValuesFromObject(communityPermissions),
+ reputation: communityPermissions.reputation,
+ };
+};
+
+export const analyticsThread = (thread: ?DBThread): AnalyticsThread => {
+ if (!thread) {
+ return {
+ id: null,
+ isLocked: null,
+ isWatercooler: null,
+ };
+ }
+
+ return {
+ id: thread.id,
+ isLocked: thread.isLocked,
+ isWatercooler: thread.watercooler ? true : false,
+ };
+};
+
+export const analyticsThreadPermissions = (
+ usersThread: ?DBUsersThreads
+): AnalyticsThreadPermissions => {
+ if (!usersThread) {
+ return {
+ isParticipant: false,
+ receiveNotifications: false,
+ };
+ }
+
+ return {
+ isParticipant: usersThread.isParticipant,
+ receiveNotifications: usersThread.receiveNotifications,
+ };
+};
+
+export const analyticsUser = (user: DBUser): AnalyticsUser => {
+ if (!user) {
+ return {
+ createdAt: null,
+ twitterAuthed: false,
+ fbAuthed: false,
+ githubAuthed: false,
+ googleAuthed: false,
+ hasUsername: false,
+ lastSeen: null,
+ };
+ }
+ return {
+ createdAt: user.createdAt,
+ twitterAuthed: user.providerId ? true : false,
+ fbAuthed: user.fbProviderId ? true : false,
+ githubAuthed: user.githubProviderId ? true : false,
+ googleAuthed: user.googleProviderId ? true : false,
+ hasUsername: user.username ? true : false,
+ lastSeen: user.lastSeen ? user.lastSeen : null,
+ };
+};
diff --git a/analytics/yarn.lock b/analytics/yarn.lock
new file mode 100644
index 0000000000..5bb33d1726
--- /dev/null
+++ b/analytics/yarn.lock
@@ -0,0 +1,732 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+amplitude@^3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/amplitude/-/amplitude-3.5.0.tgz#63edadbd9a0aef49467f66c11340fe9b371cd7c3"
+ integrity sha1-Y+2tvZoK70lGf2bBE0D+mzcc18M=
+ dependencies:
+ superagent "^3.3.1"
+
+asynckit@^0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
+ integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
+
+aws-sdk@^2.395.0:
+ version "2.395.0"
+ resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.395.0.tgz#637e5fa06d69bfb923b17bde24a8bd2a74dedab3"
+ integrity sha512-ldTTjctniZT4E2lq2z3D8Y2u+vpkp+laoEnDkXgjKXTKbiJ0QEtfWsUdx/IQ7awCt8stoxyqZK47DJOxIbRNoA==
+ dependencies:
+ buffer "4.9.1"
+ events "1.1.1"
+ ieee754 "1.1.8"
+ jmespath "0.15.0"
+ querystring "0.2.0"
+ sax "1.2.1"
+ url "0.10.3"
+ uuid "3.3.2"
+ xml2js "0.4.19"
+
+base64-js@^1.0.2:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3"
+ integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==
+
+bignumber.js@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-1.1.1.tgz#1a415d9ac014c13256af1feed9d1a3e5717a8cf7"
+ integrity sha1-GkFdmsAUwTJWrx/u2dGj5XF6jPc=
+
+"bluebird@>= 3.0.1", bluebird@^3.3.4, bluebird@^3.5.0:
+ version "3.5.3"
+ resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
+ integrity sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==
+
+buffer-from@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
+ integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
+
+buffer@4.9.1:
+ version "4.9.1"
+ resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
+ integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=
+ dependencies:
+ base64-js "^1.0.2"
+ ieee754 "^1.1.4"
+ isarray "^1.0.0"
+
+bull@3.3.10:
+ version "3.3.10"
+ resolved "https://registry.yarnpkg.com/bull/-/bull-3.3.10.tgz#32e76281902070b4720bc37b3793f09db635f646"
+ integrity sha512-bO1w83BONVTE3Rb10e0wPf11lXH1fGFNGmZH4Ys9jR7jGN4qmTNo7odxm7ELhjKXofjiFLWZFuTdONCs8kV8ug==
+ dependencies:
+ bluebird "^3.5.0"
+ cron-parser "^2.4.1"
+ debuglog "^1.0.0"
+ ioredis "^3.1.4"
+ lodash "^4.17.4"
+ semver "^5.4.1"
+ uuid "^3.1.0"
+
+"charenc@>= 0.0.1", charenc@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667"
+ integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=
+
+cluster-key-slot@^1.0.6:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.0.12.tgz#d5deff2a520717bc98313979b687309b2d368e29"
+ integrity sha512-21O0kGmvED5OJ7ZTdqQ5lQQ+sjuez33R+d35jZKLwqUb5mqcPHUsxOSzj61+LHVtxGZd1kShbQM3MjB/gBJkVg==
+
+combined-stream@^1.0.6:
+ version "1.0.7"
+ resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828"
+ integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==
+ dependencies:
+ delayed-stream "~1.0.0"
+
+component-emitter@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6"
+ integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=
+
+cookie@0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
+cookiejar@^2.1.0:
+ version "2.1.2"
+ resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c"
+ integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==
+
+core-util-is@~1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+ integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
+
+cron-parser@^2.4.1:
+ version "2.7.3"
+ resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.7.3.tgz#12603f89f5375af353a9357be2543d3172eac651"
+ integrity sha512-t9Kc7HWBWPndBzvbdQ1YG9rpPRB37Tb/tTviziUOh1qs3TARGh3b1p+tnkOHNe1K5iI3oheBPgLqwotMM7+lpg==
+ dependencies:
+ is-nan "^1.2.1"
+ moment-timezone "^0.5.23"
+
+"crypt@>= 0.0.1", crypt@~0.0.1:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b"
+ integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=
+
+datadog-metrics@^0.8.1:
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/datadog-metrics/-/datadog-metrics-0.8.1.tgz#be87237109a7084193c668d80112533ef00e3f21"
+ integrity sha512-qTSKnddO6GxTJW9FYpmWjvvift3qfyMurDjwNjJnJhBk76pBdDhC0B5V9V+XwPdn4r42qu48kwXNuHJslXlDOA==
+ dependencies:
+ debug "3.1.0"
+ dogapi "1.1.0"
+
+debug@3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+ integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
+ dependencies:
+ ms "2.0.0"
+
+debug@^2.6.9:
+ version "2.6.9"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
+ integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
+ dependencies:
+ ms "2.0.0"
+
+debug@^3.1.0:
+ version "3.2.6"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
+ integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
+ dependencies:
+ ms "^2.1.1"
+
+debug@^4.1.1:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
+ integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
+ dependencies:
+ ms "^2.1.1"
+
+debuglog@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492"
+ integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=
+
+deep-extend@^0.6.0:
+ version "0.6.0"
+ resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
+ integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
+
+define-properties@^1.1.1:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1"
+ integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==
+ dependencies:
+ object-keys "^1.0.12"
+
+delayed-stream@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
+ integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
+
+denque@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916"
+ integrity sha512-gh513ac7aiKrAgjiIBWZG0EASyDF9p4JMWwKA8YU5s9figrL5SRNEMT6FDynsegakuhWd1wVqTvqvqAoDxw7wQ==
+
+dogapi@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/dogapi/-/dogapi-1.1.0.tgz#71a43865ad4bb4cb18bc3e13cf769971f501030a"
+ integrity sha1-caQ4Za1LtMsYvD4Tz3aZcfUBAwo=
+ dependencies:
+ extend "^3.0.0"
+ json-bigint "^0.1.4"
+ minimist "^1.1.1"
+ rc "^1.0.0"
+
+events@1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+ integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
+
+extend@^3.0.0:
+ version "3.0.2"
+ resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+ integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
+
+faker@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/faker/-/faker-4.1.0.tgz#1e45bbbecc6774b3c195fad2835109c6d748cc3f"
+ integrity sha1-HkW7vsxndLPBlfrSg1EJxtdIzD8=
+
+flexbuffer@0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/flexbuffer/-/flexbuffer-0.0.6.tgz#039fdf23f8823e440c38f3277e6fef1174215b30"
+ integrity sha1-A5/fI/iCPkQMOPMnfm/vEXQhWzA=
+
+form-data@^2.3.1:
+ version "2.3.3"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
+ integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.6"
+ mime-types "^2.1.12"
+
+formidable@^1.2.0:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.2.1.tgz#70fb7ca0290ee6ff961090415f4b3df3d2082659"
+ integrity sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==
+
+ieee754@1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q=
+
+ieee754@^1.1.4:
+ version "1.1.12"
+ resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b"
+ integrity sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==
+
+inherits@~2.0.3:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+ integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
+
+ini@~1.3.0:
+ version "1.3.5"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
+ integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
+
+ioredis@3.2.2, ioredis@^3.1.4:
+ version "3.2.2"
+ resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b"
+ integrity sha512-g+ShTQYLsCcOUkNOK6CCEZbj3aRDVPw3WOwXk+LxlUKvuS9ujEqP2MppBHyRVYrNNFW/vcPaTBUZ2ctGNSiOCA==
+ dependencies:
+ bluebird "^3.3.4"
+ cluster-key-slot "^1.0.6"
+ debug "^2.6.9"
+ denque "^1.1.0"
+ flexbuffer "0.0.6"
+ lodash.assign "^4.2.0"
+ lodash.bind "^4.2.1"
+ lodash.clone "^4.5.0"
+ lodash.clonedeep "^4.5.0"
+ lodash.defaults "^4.2.0"
+ lodash.difference "^4.5.0"
+ lodash.flatten "^4.4.0"
+ lodash.foreach "^4.5.0"
+ lodash.isempty "^4.4.0"
+ lodash.keys "^4.2.0"
+ lodash.noop "^3.0.1"
+ lodash.partial "^4.2.1"
+ lodash.pick "^4.4.0"
+ lodash.sample "^4.2.1"
+ lodash.shuffle "^4.2.0"
+ lodash.values "^4.3.0"
+ redis-commands "^1.2.0"
+ redis-parser "^2.4.0"
+
+ioredis@^4.0.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.2.0.tgz#f0f76fa5067a51c365ef1411f6572478a825971d"
+ integrity sha512-PdxZGNJBfPiR2RI6DkqmiacL1+ML3gaqEiaC5QXWQt9eSTlGj+BwDCct0s8irn1ed8GyzAHTzcjvU9fmnl6D7A==
+ dependencies:
+ cluster-key-slot "^1.0.6"
+ debug "^3.1.0"
+ denque "^1.1.0"
+ flexbuffer "0.0.6"
+ lodash.defaults "^4.2.0"
+ lodash.flatten "^4.4.0"
+ redis-commands "1.4.0"
+ redis-errors "^1.2.0"
+ redis-parser "^3.0.0"
+ standard-as-callback "^1.0.0"
+
+is-buffer@~1.1.1:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
+ integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==
+
+is-nan@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.2.1.tgz#9faf65b6fb6db24b7f5c0628475ea71f988401e2"
+ integrity sha1-n69ltvttskt/XAYoR16nH5iEAeI=
+ dependencies:
+ define-properties "^1.1.1"
+
+isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+ integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
+
+jmespath@0.15.0:
+ version "0.15.0"
+ resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217"
+ integrity sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=
+
+json-bigint@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-0.1.4.tgz#b5d40b8a9009e92f157f7c079db097001830e01e"
+ integrity sha1-tdQLipAJ6S8Vf3wHnbCXABgw4B4=
+ dependencies:
+ bignumber.js "~1.1.1"
+
+lodash.assign@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
+ integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
+
+lodash.bind@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35"
+ integrity sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=
+
+lodash.clone@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6"
+ integrity sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y=
+
+lodash.clonedeep@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
+ integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
+
+lodash.defaults@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c"
+ integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=
+
+lodash.difference@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c"
+ integrity sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=
+
+lodash.flatten@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
+ integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
+
+lodash.foreach@^4.5.0:
+ version "4.5.0"
+ resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53"
+ integrity sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=
+
+lodash.intersection@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.intersection/-/lodash.intersection-4.4.0.tgz#0a11ba631d0e95c23c7f2f4cbb9a692ed178e705"
+ integrity sha1-ChG6Yx0OlcI8fy9Mu5ppLtF45wU=
+
+lodash.isempty@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
+ integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=
+
+lodash.keys@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205"
+ integrity sha1-oIYCrBLk+4P5H8H7ejYKTZujUgU=
+
+lodash.noop@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c"
+ integrity sha1-OBiPTWUKOkdCWEObluxFsyYXEzw=
+
+lodash.partial@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.partial/-/lodash.partial-4.2.1.tgz#49f3d8cfdaa3bff8b3a91d127e923245418961d4"
+ integrity sha1-SfPYz9qjv/izqR0SfpIyRUGJYdQ=
+
+lodash.pick@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
+ integrity sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=
+
+lodash.sample@^4.2.1:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/lodash.sample/-/lodash.sample-4.2.1.tgz#5e4291b0c753fa1abeb0aab8fb29df1b66f07f6d"
+ integrity sha1-XkKRsMdT+hq+sKq4+ynfG2bwf20=
+
+lodash.shuffle@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz#145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b"
+ integrity sha1-FFtQU8+HX29cKjP0i26ZSMbse0s=
+
+lodash.values@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347"
+ integrity sha1-o6bCsOvsxcLLocF+bmIP6BtT00c=
+
+lodash@^4.17.4:
+ version "4.17.11"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
+ integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
+
+md5@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/md5/-/md5-2.2.1.tgz#53ab38d5fe3c8891ba465329ea23fac0540126f9"
+ integrity sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=
+ dependencies:
+ charenc "~0.0.1"
+ crypt "~0.0.1"
+ is-buffer "~1.1.1"
+
+methods@^1.1.1:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
+ integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
+
+mime-db@~1.37.0:
+ version "1.37.0"
+ resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
+ integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
+
+mime-types@^2.1.12:
+ version "2.1.21"
+ resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
+ integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
+ dependencies:
+ mime-db "~1.37.0"
+
+mime@^1.4.1:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
+ integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
+
+minimist@^1.1.1, minimist@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+ integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=
+
+moment-timezone@^0.5.23:
+ version "0.5.23"
+ resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463"
+ integrity sha512-WHFH85DkCfiNMDX5D3X7hpNH3/PUhjTGcD0U1SgfBGZxJ3qUmJh5FdvaFjcClxOvB3rzdfj4oRffbI38jEnC1w==
+ dependencies:
+ moment ">= 2.9.0"
+
+"moment@>= 2.9.0":
+ version "2.22.2"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.22.2.tgz#3c257f9839fc0e93ff53149632239eb90783ff66"
+ integrity sha1-PCV/mDn8DpP/UxSWMiOeuQeD/2Y=
+
+ms@2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
+ integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
+
+ms@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
+ integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
+
+node-env-file@^0.1.8:
+ version "0.1.8"
+ resolved "https://registry.yarnpkg.com/node-env-file/-/node-env-file-0.1.8.tgz#fccb7b050f735b5a33da9eb937cf6f1ab457fb69"
+ integrity sha1-/Mt7BQ9zW1oz2p65N89vGrRX+2k=
+
+now-env@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/now-env/-/now-env-3.1.0.tgz#e0198b67279d387229cfd4b25de4c2fc7156943f"
+ integrity sha512-f+jXC+UkoxD/g9Nlig99Bxswoh7UUuQxw0EsPfuueHnVpVE0LfgQ4el5dxY4TSXwrL9mEF9GGm0gb7r3K8r/ug==
+
+object-keys@^1.0.12:
+ version "1.0.12"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2"
+ integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==
+
+performance-now@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
+ integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
+
+process-nextick-args@~2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa"
+ integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==
+
+punycode@1.3.2:
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+ integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=
+
+qs@^6.5.1:
+ version "6.5.2"
+ resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
+ integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+
+querystring@0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
+ integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
+
+raven@^2.6.4:
+ version "2.6.4"
+ resolved "https://registry.yarnpkg.com/raven/-/raven-2.6.4.tgz#458d4a380c8fbb59e0150c655625aaf60c167ea3"
+ integrity sha512-6PQdfC4+DQSFncowthLf+B6Hr0JpPsFBgTVYTAOq7tCmx/kR4SXbeawtPch20+3QfUcQDoJBLjWW1ybvZ4kXTw==
+ dependencies:
+ cookie "0.3.1"
+ md5 "^2.2.1"
+ stack-trace "0.0.10"
+ timed-out "4.0.1"
+ uuid "3.3.2"
+
+rc@^1.0.0:
+ version "1.2.8"
+ resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
+ integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
+ dependencies:
+ deep-extend "^0.6.0"
+ ini "~1.3.0"
+ minimist "^1.2.0"
+ strip-json-comments "~2.0.1"
+
+readable-stream@^2.3.5:
+ version "2.3.6"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf"
+ integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.3"
+ isarray "~1.0.0"
+ process-nextick-args "~2.0.0"
+ safe-buffer "~5.1.1"
+ string_decoder "~1.1.1"
+ util-deprecate "~1.0.1"
+
+redis-commands@1.4.0, redis-commands@^1.2.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f"
+ integrity sha512-cu8EF+MtkwI4DLIT0x9P8qNTLFhQD4jLfxLR0cCNkeGzs87FN6879JOJwNQR/1zD7aSYNbU0hgsV9zGY71Itvw==
+
+redis-errors@^1.0.0, redis-errors@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad"
+ integrity sha1-62LSrbFeTq9GEMBK/hUpOEJQq60=
+
+redis-parser@^2.4.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b"
+ integrity sha1-Uu0J2srBCPGmMcB+m2mUHnoZUEs=
+
+redis-parser@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4"
+ integrity sha1-tm2CjNyv5rS4pCin3vTGvKwxyLQ=
+ dependencies:
+ redis-errors "^1.0.0"
+
+redis-tag-cache@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/redis-tag-cache/-/redis-tag-cache-1.2.1.tgz#07d6e1f945d9d5c8186602129cb10573167d7534"
+ integrity sha512-0F+rLtoIkz4NOWGt9k3qaPcbpvr6+wcEC9aWV78newMKTRN/nIYHgvfyO1Q0ySEepiEYbqj9DhjvQ4CUAtT9/g==
+ dependencies:
+ ioredis "^4.0.0"
+
+rethinkdb-inspector@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.yarnpkg.com/rethinkdb-inspector/-/rethinkdb-inspector-0.3.3.tgz#f0d88c66d17e0234b5518ca51cd8c272cb787003"
+ integrity sha512-1R0S5maattWOptfkHsU5ulXnt6FIKqjgyEdd8WgW9QbYMiHaXNqkHTAsmtXXSAf0j5iFH3F2qq/7eg4xwb8Euw==
+
+rethinkdbdash@^2.3.31:
+ version "2.3.31"
+ resolved "https://registry.yarnpkg.com/rethinkdbdash/-/rethinkdbdash-2.3.31.tgz#fe2f73d1fa6e6f5d96d8e881292013cf6dca914d"
+ integrity sha512-6nXrKFjdg2Ug0YpdmPWSvyD/2EisHnFNt4FWZ74dcXGK48ievSv+cNFTmVv+KjLi6I9CCf6w4CKZ6yCYTfMfdQ==
+ dependencies:
+ bluebird ">= 3.0.1"
+
+rethinkhaberdashery@^2.3.32:
+ version "2.3.32"
+ resolved "https://registry.yarnpkg.com/rethinkhaberdashery/-/rethinkhaberdashery-2.3.32.tgz#ddcc4ba1342e653a9d3bb6982b526087e93d537e"
+ integrity sha512-scDswDEu7R47WqomjScq46LkCdhaFhpaGQDP3P44GDF32iCFgYbsL4fnJdaieE115qLeinRhEjna08XWCtV0iQ==
+ dependencies:
+ bluebird ">= 3.0.1"
+
+safe-buffer@~5.1.0, safe-buffer@~5.1.1:
+ version "5.1.2"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
+ integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
+
+sanitize-filename@^1.6.1:
+ version "1.6.1"
+ resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.1.tgz#612da1c96473fa02dccda92dcd5b4ab164a6772a"
+ integrity sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=
+ dependencies:
+ truncate-utf8-bytes "^1.0.0"
+
+sax@1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
+ integrity sha1-e45lYZCyKOgaZq6nSEgNgozS03o=
+
+sax@>=0.6.0:
+ version "1.2.4"
+ resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"
+ integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==
+
+semver@^5.4.1:
+ version "5.6.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
+ integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
+
+sha1@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848"
+ integrity sha1-rdqnqTFo85PxnrKxUJFhjicA+Eg=
+ dependencies:
+ charenc ">= 0.0.1"
+ crypt ">= 0.0.1"
+
+source-map-support@^0.5.10:
+ version "0.5.10"
+ resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
+ integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
+ dependencies:
+ buffer-from "^1.0.0"
+ source-map "^0.6.0"
+
+source-map@^0.6.0:
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+ integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+stack-trace@0.0.10:
+ version "0.0.10"
+ resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
+ integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
+
+standard-as-callback@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-1.0.1.tgz#2e9e1e9d278d7d77580253faaec42269015e3c1d"
+ integrity sha512-izxEITSyc7S+5oOiF/URiYaNkemPUxIndCNv66jJ548Y1TVxhBvioNMSPrZIQdaZDlhnguOdUzHA/7hJ3xFhuQ==
+
+string_decoder@~1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
+ integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
+ dependencies:
+ safe-buffer "~5.1.0"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+ integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
+
+superagent@^3.3.1:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/superagent/-/superagent-3.8.3.tgz#460ea0dbdb7d5b11bc4f78deba565f86a178e128"
+ integrity sha512-GLQtLMCoEIK4eDv6OGtkOoSMt3D+oq0y3dsxMuYuDvaNUvuT8eFBuLmfR0iYYzHC1e8hpzC6ZsxbuP6DIalMFA==
+ dependencies:
+ component-emitter "^1.2.0"
+ cookiejar "^2.1.0"
+ debug "^3.1.0"
+ extend "^3.0.0"
+ form-data "^2.3.1"
+ formidable "^1.2.0"
+ methods "^1.1.1"
+ mime "^1.4.1"
+ qs "^6.5.1"
+ readable-stream "^2.3.5"
+
+timed-out@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
+ integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
+
+toobusy-js@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/toobusy-js/-/toobusy-js-0.5.1.tgz#5511f78f6a87a6a512d44fdb0efa13672217f659"
+ integrity sha1-VRH3j2qHpqUS1E/bDvoTZyIX9lk=
+
+truncate-utf8-bytes@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
+ integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys=
+ dependencies:
+ utf8-byte-length "^1.0.1"
+
+url@0.10.3:
+ version "0.10.3"
+ resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64"
+ integrity sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=
+ dependencies:
+ punycode "1.3.2"
+ querystring "0.2.0"
+
+utf8-byte-length@^1.0.1:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
+ integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=
+
+util-deprecate@~1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
+ integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
+
+uuid@3.3.2, uuid@^3.1.0:
+ version "3.3.2"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131"
+ integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==
+
+xml2js@0.4.19:
+ version "0.4.19"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7"
+ integrity sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "~9.0.1"
+
+xmlbuilder@~9.0.1:
+ version "9.0.7"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d"
+ integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=
diff --git a/api/apollo-server.js b/api/apollo-server.js
new file mode 100644
index 0000000000..85d24c4544
--- /dev/null
+++ b/api/apollo-server.js
@@ -0,0 +1,125 @@
+// @flow
+import { ApolloServer } from 'apollo-server-express';
+import depthLimit from 'graphql-depth-limit';
+import costAnalysis from 'graphql-cost-analysis';
+import createLoaders from './loaders';
+import createErrorFormatter from './utils/create-graphql-error-formatter';
+import schema from './schema';
+import { setUserOnline } from 'shared/db/queries/user';
+import { getUserIdFromReq } from './utils/session-store';
+import UserError from './utils/UserError';
+import type { DBUser } from 'shared/types';
+
+// NOTE(@mxstbr): Evil hack to make graphql-cost-analysis work with Apollo Server v2
+// @see pa-bru/graphql-cost-analysis#12
+// @author @arianon
+class ProtectedApolloServer extends ApolloServer {
+ async createGraphQLServerOptions(
+ req: express$Request,
+ res: express$Response
+ ): Promise<*> {
+ const options = await super.createGraphQLServerOptions(req, res);
+
+ return {
+ ...options,
+ validationRules: [
+ ...options.validationRules,
+ costAnalysis({
+ maximumCost: 750,
+ defaultCost: 1,
+ variables: req.body.variables,
+ createError: (max, actual) => {
+ const err = new UserError(
+ `GraphQL query exceeds maximum complexity, please remove some nesting or fields and try again. (max: ${max}, actual: ${actual})`
+ );
+ return err;
+ },
+ }),
+ ],
+ };
+ }
+}
+
+const server = new ProtectedApolloServer({
+ schema,
+ formatError: createErrorFormatter(),
+ // For subscriptions, this gets passed "connection", for everything else "req" and "res"
+ context: ({ req, res, connection, ...rest }, ...other) => {
+ if (connection) {
+ return {
+ ...(connection.context || {}),
+ };
+ }
+
+ // Add GraphQL operation information to the statsd tags
+ req.statsdTags = {
+ graphqlOperationName: req.body.operationName || 'unknown_operation',
+ };
+ const loaders = createLoaders();
+ let currentUser = req.user && !req.user.bannedAt ? req.user : null;
+
+ return {
+ loaders,
+ updateCookieUserData: (data: DBUser) =>
+ new Promise((res, rej) =>
+ req.login(data, err => (err ? rej(err) : res()))
+ ),
+ req,
+ user: currentUser,
+ };
+ },
+ subscriptions: {
+ path: '/websocket',
+ onOperation: (_: any, params: Object) => {
+ const errorFormatter = createErrorFormatter();
+ params.formatError = errorFormatter;
+ return params;
+ },
+ onDisconnect: rawSocket => {
+ return getUserIdFromReq(rawSocket.upgradeReq)
+ .then(id => id && setUserOnline(id, false))
+ .catch(err => {
+ console.error(err);
+ });
+ },
+ onConnect: (connectionParams, rawSocket) =>
+ getUserIdFromReq(rawSocket.upgradeReq)
+ .then(id => (id ? setUserOnline(id, true) : null))
+ .then(user => {
+ return {
+ user: user || null,
+ loaders: createLoaders({ cache: false }),
+ };
+ })
+ .catch(err => {
+ console.error(err);
+ return {
+ loaders: createLoaders({ cache: false }),
+ };
+ }),
+ },
+ playground: process.env.NODE_ENV !== 'production' && {
+ settings: {
+ 'editor.theme': 'light',
+ },
+ tabs: [
+ {
+ endpoint: 'http://localhost:3001/api',
+ query: `{
+ user(username: "mxstbr") {
+ id
+ username
+ }
+}`,
+ },
+ ],
+ },
+ introspection: process.env.NODE_ENV !== 'production',
+ maxFileSize: 25 * 1024 * 1024, // 25MB
+ engine: false,
+ tracing: false,
+ cacheControl: false,
+ validationRules: [depthLimit(10)],
+});
+
+export default server;
diff --git a/api/authentication.js b/api/authentication.js
index ab4c71c72b..98e2eea828 100644
--- a/api/authentication.js
+++ b/api/authentication.js
@@ -6,11 +6,11 @@ const { Strategy: FacebookStrategy } = require('passport-facebook');
const { Strategy: GoogleStrategy } = require('passport-google-oauth2');
const { Strategy: GitHubStrategy } = require('passport-github2');
const {
- getUser,
+ getUserById,
createOrFindUser,
saveUserProvider,
getUserByIndex,
-} = require('./models/user');
+} = require('shared/db/queries/user');
const IS_PROD = !process.env.FORCE_DEV && process.env.NODE_ENV === 'production';
@@ -46,21 +46,39 @@ const GITHUB_OAUTH_CLIENT_ID = IS_PROD
? '208a2e8684d88883eded'
: 'ed3e924f4a599313c83b';
+const isSerializedJSON = (str: string) =>
+ str[0] === '{' && str[str.length - 1] === '}';
+
const init = () => {
// Setup use serialization
passport.serializeUser((user, done) => {
- done(null, user.id);
+ done(null, typeof user === 'string' ? user : JSON.stringify(user));
});
- passport.deserializeUser((id, done) => {
- getUser({ id })
+ // NOTE(@mxstbr): `data` used to be just the userID, but is now the full user data
+ // to avoid having to go to the db on every single request. We have to handle both
+ // cases here, as more and more users use Spectrum again we go to the db less and less
+ passport.deserializeUser((data, done) => {
+ // Fast path: we got the full user data in the cookie
+ if (isSerializedJSON(data)) {
+ let user;
+ // Ignore errors if our isSerializedJSON heuristic is wrong and `data` isn't serialized JSON
+ try {
+ user = JSON.parse(data);
+ } catch (err) {}
+
+ if (user && user.id && user.createdAt) {
+ return done(null, user);
+ }
+ }
+
+ // Slow path: data is just the userID (legacy), so we have to go to the db to get the full data
+ return getUserById(data)
.then(user => {
done(null, user);
- return null;
})
.catch(err => {
done(err);
- return null;
});
});
@@ -70,7 +88,9 @@ const init = () => {
{
consumerKey: TWITTER_OAUTH_CLIENT_ID,
consumerSecret: TWITTER_OAUTH_CLIENT_SECRET,
- callbackURL: '/auth/twitter/callback',
+ callbackURL: IS_PROD
+ ? 'https://spectrum.chat/auth/twitter/callback'
+ : 'http://localhost:3001/auth/twitter/callback',
includeEmail: true,
},
(token, tokenSecret, profile, done) => {
@@ -111,8 +131,6 @@ const init = () => {
profile._json.entities.url.urls.length > 0
? profile._json.entities.url.urls[0].expanded_url
: '',
- createdAt: new Date(),
- lastSeen: new Date(),
};
return createOrFindUser(user, 'providerId')
@@ -178,8 +196,6 @@ const init = () => {
? profile.photos[0].value
: null,
coverPhoto: profile._json.cover ? profile._json.cover.source : '',
- createdAt: new Date(),
- lastSeen: new Date(),
};
return createOrFindUser(user, 'fbProviderId')
@@ -244,8 +260,6 @@ const init = () => {
profile._json.urls && profile._json.urls.length > 0
? profile._json.urls[0].value
: '',
- createdAt: new Date(),
- lastSeen: new Date(),
};
return createOrFindUser(user, 'googleProviderId')
@@ -290,7 +304,16 @@ const init = () => {
// 1
// if the user already has a githubProviderId, don't override it
if (req.user.githubProviderId) {
- if (!req.user.githubUsername) {
+ /*
+ Update the cached content of the github profile that we store
+ in redis for the graphql resolver. This allows us to put a button
+ on the client for a user to re-connect a github profile from
+ the web app which will update the cache with any changed usernames
+ */
+ if (
+ !req.user.githubUsername ||
+ req.user.githubUsername !== githubUsername
+ ) {
return saveUserProvider(
req.user.id,
'githubProviderId',
@@ -357,8 +380,6 @@ const init = () => {
null,
profilePhoto:
(profile._json.avatar_url && profile._json.avatar_url) || null,
- createdAt: new Date(),
- lastSeen: new Date(),
};
return createOrFindUser(user, 'githubProviderId')
diff --git a/api/index.js b/api/index.js
index d97c4e9fb3..17dbf02e59 100644
--- a/api/index.js
+++ b/api/index.js
@@ -2,101 +2,84 @@
/**
* The entry point for the server, this is where everything starts
*/
-console.log('Server starting...');
const compression = require('compression');
const debug = require('debug')('api');
+debug('Server starting...');
debug('logging with debug enabled!');
import { createServer } from 'http';
import express from 'express';
import Raven from 'shared/raven';
-import { ApolloEngine } from 'apollo-engine';
import toobusy from 'shared/middlewares/toobusy';
+import addSecurityMiddleware from 'shared/middlewares/security';
+import csrf from 'shared/middlewares/csrf';
+import statsd from 'shared/middlewares/statsd';
import { init as initPassport } from './authentication.js';
+import apolloServer from './apollo-server';
+import { corsOptions } from 'shared/middlewares/cors';
+import errorHandler from 'shared/middlewares/error-handler';
+import middlewares from './routes/middlewares';
+import authRoutes from './routes/auth';
+import apiRoutes from './routes/api';
import type { DBUser } from 'shared/types';
+import type { Loader } from './loaders/types';
+
+export type GraphQLContext = {
+ user: DBUser,
+ updateCookieUserData: (data: DBUser) => Promise,
+ loaders: {
+ [key: string]: Loader,
+ },
+};
const PORT = process.env.PORT ? parseInt(process.env.PORT, 10) : 3001;
-// Initialize authentication
initPassport();
-// API server
const app = express();
+// Instantiate the statsd middleware as soon as possible to get accurate time tracking
+app.use(statsd);
+
// Trust the now proxy
app.set('trust proxy', true);
-
-// Return the request if the server is too busy
app.use(toobusy);
-// Send all responses as gzip
-app.use(compression());
+// Security middleware.
+addSecurityMiddleware(app, { enableNonce: false, enableCSP: false });
+if (process.env.NODE_ENV === 'production' && !process.env.FORCE_DEV) {
+ app.use(csrf);
+}
-import middlewares from './routes/middlewares';
+// All other middlewares
+app.use(compression());
app.use(middlewares);
-import authRoutes from './routes/auth';
+// Routes
app.use('/auth', authRoutes);
-
-import apiRoutes from './routes/api';
app.use('/api', apiRoutes);
+// GraphQL middleware
+apolloServer.applyMiddleware({ app, path: '/api', cors: corsOptions });
+
+// Redirect a request to the root path to the main app
+app.use('/', (req: express$Request, res: express$Response) => {
+ res.redirect(
+ process.env.NODE_ENV === 'production' && !process.env.FORCE_DEV
+ ? 'https://spectrum.chat'
+ : 'http://localhost:3000'
+ );
+});
+
// $FlowIssue
-app.use(
- (
- err: Error,
- req: express$Request,
- res: express$Response,
- next: express$NextFunction
- ) => {
- if (err) {
- console.error(err);
- res
- .status(500)
- .send(
- 'Oops, something went wrong! Our engineers have been alerted and will fix this asap.'
- );
- Raven.captureException(err);
- } else {
- return next();
- }
- }
-);
+app.use(errorHandler);
-import type { Loader } from './loaders/types';
-export type GraphQLContext = {
- user: DBUser,
- loaders: {
- [key: string]: Loader,
- },
-};
+// We need to create a separate HTTP server to handle GraphQL subscriptions via websockets
+const httpServer = createServer(app);
+apolloServer.installSubscriptionHandlers(httpServer);
-const server = createServer(app);
-
-// Create subscriptions server at /websocket
-import createSubscriptionsServer from './routes/create-subscription-server';
-const subscriptionsServer = createSubscriptionsServer(server, '/websocket');
-
-// Start API wrapped in Apollo Engine
-// const engine = new ApolloEngine({
-// logging: {
-// level: 'WARN',
-// },
-// apiKey: process.env.APOLLO_ENGINE_API_KEY,
-// // Only send perf data to the remote server in production
-// reporting: {
-// disabled: process.env.NODE_ENV !== 'production',
-// hostname: process.env.NOW_URL || undefined,
-// privateHeaders: ['authorization', 'Authorization', 'AUTHORIZATION'],
-// },
-// });
-
-// engine.listen({
-// port: PORT,
-// httpServer: server,
-// graphqlPaths: ['/api'],
-// });
-server.listen(PORT);
-console.log(`GraphQL server running at http://localhost:${PORT}/api`);
+httpServer.listen(PORT);
+
+debug(`GraphQL API running at http://localhost:${PORT}/api`);
process.on('unhandledRejection', async err => {
console.error('Unhandled rejection', err);
@@ -119,5 +102,3 @@ process.on('uncaughtException', async err => {
process.exit(1);
}
});
-
-//
diff --git a/api/loaders/channel.js b/api/loaders/channel.js
index a22c672c28..c0c72242ef 100644
--- a/api/loaders/channel.js
+++ b/api/loaders/channel.js
@@ -3,11 +3,11 @@ import {
getChannels,
getChannelsThreadCounts,
getChannelsMemberCounts,
+ getChannelsOnlineMemberCounts,
} from '../models/channel';
import { getChannelsSettings } from '../models/channelSettings';
import createLoader from './create-loader';
import { getPendingUsersInChannels } from '../models/usersChannels';
-import type { Loader } from './types';
export const __createChannelLoader = createLoader(channels =>
getChannels(channels)
@@ -18,13 +18,18 @@ export const __createChannelThreadCountLoader = createLoader(
'group'
);
+export const __createChannelPendingMembersLoader = createLoader(
+ channels => getPendingUsersInChannels(channels),
+ 'group'
+);
+
export const __createChannelMemberCountLoader = createLoader(
channels => getChannelsMemberCounts(channels),
'group'
);
-export const __createChannelPendingMembersLoader = createLoader(
- channels => getPendingUsersInChannels(channels),
+export const __createChannelOnlineMemberCountLoader = createLoader(
+ channelIds => getChannelsOnlineMemberCounts(channelIds),
'group'
);
diff --git a/api/loaders/community.js b/api/loaders/community.js
index b942998300..1eaa6f0b00 100644
--- a/api/loaders/community.js
+++ b/api/loaders/community.js
@@ -2,18 +2,13 @@
import {
getCommunities,
getCommunitiesBySlug,
- getCommunitiesMemberCounts,
getCommunitiesChannelCounts,
+ getCommunitiesOnlineMemberCounts,
+ getCommunitiesMemberCounts,
} from '../models/community';
import { getCommunitiesSettings } from '../models/communitySettings';
-import { getCommunitiesRecurringPayments } from '../models/recurringPayment';
import createLoader from './create-loader';
-export const __createCommunityRecurringPaymentsLoader = createLoader(
- communities => getCommunitiesRecurringPayments(communities),
- 'group'
-);
-
export const __createCommunityLoader = createLoader(communities =>
getCommunities(communities)
);
@@ -33,6 +28,11 @@ export const __createCommunityChannelCountLoader = createLoader(
'group'
);
+export const __createCommunityOnlineMemberCountLoader = createLoader(
+ communityIds => getCommunitiesOnlineMemberCounts(communityIds),
+ 'group'
+);
+
export const __createCommunitySettingsLoader = createLoader(
communityIds => getCommunitiesSettings(communityIds),
key => key.communityId
diff --git a/api/loaders/create-loader.js b/api/loaders/create-loader.js
index f0b022a0f8..3261d479ac 100644
--- a/api/loaders/create-loader.js
+++ b/api/loaders/create-loader.js
@@ -1,5 +1,4 @@
// @flow
-//$FlowFixMe
import DataLoader from 'dataloader';
import unique from 'shared/unique-elements';
import type { Loader, DataLoaderOptions } from './types';
@@ -26,7 +25,7 @@ const createLoader = (
// https://github.com/facebook/dataloader/blob/master/examples/RethinkDB.md
function indexResults(results, indexField, cacheKeyFn) {
var indexedResults = new Map();
- results.forEach(res => {
+ results.filter(Boolean).forEach(res => {
const key =
typeof indexField === 'function' ? indexField(res) : res[indexField];
indexedResults.set(cacheKeyFn(key), res);
diff --git a/api/loaders/directMessageThread.js b/api/loaders/directMessageThread.js
index a0b936d483..1657fca0e0 100644
--- a/api/loaders/directMessageThread.js
+++ b/api/loaders/directMessageThread.js
@@ -1,7 +1,7 @@
// @flow
import { getDirectMessageThreads } from '../models/directMessageThread';
import { getMembersInDirectMessageThreads } from '../models/usersDirectMessageThreads';
-import { getLastMessages } from '../models/message';
+import { getLastMessageOfThreads } from '../models/message';
import createLoader from './create-loader';
import type { Loader } from './types';
@@ -15,8 +15,8 @@ export const __createDirectMessageParticipantsLoader = createLoader(
);
export const __createDirectMessageSnippetLoader = createLoader(
- threads => getLastMessages(threads),
- 'group'
+ threads => getLastMessageOfThreads(threads),
+ 'threadId'
);
export default () => {
diff --git a/api/loaders/index.js b/api/loaders/index.js
index eab83ff918..f47ee366de 100644
--- a/api/loaders/index.js
+++ b/api/loaders/index.js
@@ -3,7 +3,6 @@ import {
__createUserLoader,
__createUserByUsernameLoader,
__createUserThreadCountLoader,
- __createUserRecurringPaymentsLoader,
__createUserPermissionsInCommunityLoader,
__createUserTotalReputationLoader,
__createUserPermissionsInChannelLoader,
@@ -12,31 +11,35 @@ import {
import {
__createThreadLoader,
__createThreadParticipantsLoader,
- __createThreadMessageCountLoader,
} from './thread';
import { __createNotificationLoader } from './notification';
import {
__createChannelLoader,
- __createChannelMemberCountLoader,
__createChannelThreadCountLoader,
+ __createChannelMemberCountLoader,
+ __createChannelOnlineMemberCountLoader,
__createChannelPendingMembersLoader,
__createChannelSettingsLoader,
} from './channel';
import {
__createCommunityLoader,
__createCommunityBySlugLoader,
- __createCommunityRecurringPaymentsLoader,
- __createCommunityMemberCountLoader,
__createCommunityChannelCountLoader,
__createCommunitySettingsLoader,
+ __createCommunityMemberCountLoader,
+ __createCommunityOnlineMemberCountLoader,
} from './community';
import {
__createDirectMessageThreadLoader,
__createDirectMessageParticipantsLoader,
__createDirectMessageSnippetLoader,
} from './directMessageThread';
-import { __createReactionLoader } from './reaction';
-import { __createStripeCustomersLoader } from './stripe';
+import {
+ __createReactionLoader,
+ __createSingleReactionLoader,
+} from './reaction';
+import { __createThreadReactionLoader } from './threadReaction';
+import { __createMessageLoader } from './message';
import type { DataLoaderOptions } from './types';
// Create all the necessary loaders to be attached to the GraphQL context for each request
@@ -44,7 +47,6 @@ const createLoaders = (options?: DataLoaderOptions) => ({
user: __createUserLoader(options),
userByUsername: __createUserByUsernameLoader(options),
userThreadCount: __createUserThreadCountLoader(options),
- userRecurringPayments: __createUserRecurringPaymentsLoader(options),
userPermissionsInCommunity: __createUserPermissionsInCommunityLoader(options),
userPermissionsInChannel: __createUserPermissionsInChannelLoader(options),
userTotalReputation: __createUserTotalReputationLoader(options),
@@ -53,24 +55,26 @@ const createLoaders = (options?: DataLoaderOptions) => ({
),
thread: __createThreadLoader(options),
threadParticipants: __createThreadParticipantsLoader(options),
- threadMessageCount: __createThreadMessageCountLoader(options),
notification: __createNotificationLoader(options),
channel: __createChannelLoader(options),
channelMemberCount: __createChannelMemberCountLoader(options),
+ channelOnlineMemberCount: __createChannelOnlineMemberCountLoader(options),
channelThreadCount: __createChannelThreadCountLoader(options),
channelPendingUsers: __createChannelPendingMembersLoader(options),
channelSettings: __createChannelSettingsLoader(options),
community: __createCommunityLoader(options),
communityBySlug: __createCommunityBySlugLoader(options),
- communityRecurringPayments: __createCommunityRecurringPaymentsLoader(options),
- stripeCustomers: __createStripeCustomersLoader(options),
communityChannelCount: __createCommunityChannelCountLoader(options),
communityMemberCount: __createCommunityMemberCountLoader(options),
+ communityOnlineMemberCount: __createCommunityOnlineMemberCountLoader(options),
communitySettings: __createCommunitySettingsLoader(options),
directMessageThread: __createDirectMessageThreadLoader(options),
directMessageParticipants: __createDirectMessageParticipantsLoader(options),
directMessageSnippet: __createDirectMessageSnippetLoader(options),
+ message: __createMessageLoader(options),
messageReaction: __createReactionLoader(options),
+ threadReaction: __createThreadReactionLoader(options),
+ reaction: __createSingleReactionLoader(options),
});
export default createLoaders;
diff --git a/api/loaders/message.js b/api/loaders/message.js
new file mode 100644
index 0000000000..6950a52a01
--- /dev/null
+++ b/api/loaders/message.js
@@ -0,0 +1,14 @@
+// @flow
+import { getManyMessages } from '../models/message';
+import createLoader from './create-loader';
+import type { Loader } from './types';
+
+export const __createMessageLoader = createLoader((messages: string[]) =>
+ getManyMessages(messages)
+);
+
+export default () => {
+ throw new Error(
+ '⚠️ Do not import loaders directly, get them from the GraphQL context instead! ⚠️'
+ );
+};
diff --git a/api/loaders/reaction.js b/api/loaders/reaction.js
index ea683bd5ba..6008dc8ac6 100644
--- a/api/loaders/reaction.js
+++ b/api/loaders/reaction.js
@@ -1,5 +1,5 @@
// @flow
-import { getReactions } from '../models/reaction';
+import { getReactions, getReactionsByIds } from '../models/reaction';
import createLoader from './create-loader';
export const __createReactionLoader = createLoader(
@@ -7,6 +7,10 @@ export const __createReactionLoader = createLoader(
'group'
);
+export const __createSingleReactionLoader = createLoader(reactionIds =>
+ getReactionsByIds(reactionIds)
+);
+
export default () => {
throw new Error(
'⚠️ Do not import loaders directly, get them from the GraphQL context instead! ⚠️'
diff --git a/api/loaders/stripe.js b/api/loaders/stripe.js
deleted file mode 100644
index 8cfb15096b..0000000000
--- a/api/loaders/stripe.js
+++ /dev/null
@@ -1,7 +0,0 @@
-import { getStripeCustomersByCustomerIds } from '../models/stripeCustomers';
-import createLoader from './create-loader';
-
-export const __createStripeCustomersLoader = createLoader(
- customers => getStripeCustomersByCustomerIds(customers),
- 'group'
-);
diff --git a/api/loaders/thread.js b/api/loaders/thread.js
index 45c626757f..bc3519d9d9 100644
--- a/api/loaders/thread.js
+++ b/api/loaders/thread.js
@@ -14,11 +14,6 @@ export const __createThreadParticipantsLoader = createLoader(
'group'
);
-export const __createThreadMessageCountLoader = createLoader(
- threadIds => getMessageCountInThreads(threadIds),
- 'group'
-);
-
export default () => {
throw new Error(
'⚠️ Do not import loaders directly, get them from the GraphQL context instead! ⚠️'
diff --git a/api/loaders/threadReaction.js b/api/loaders/threadReaction.js
new file mode 100644
index 0000000000..3e6d520b99
--- /dev/null
+++ b/api/loaders/threadReaction.js
@@ -0,0 +1,14 @@
+// @flow
+import { getThreadReactions } from '../models/threadReaction';
+import createLoader from './create-loader';
+
+export const __createThreadReactionLoader = createLoader(
+ threadIds => getThreadReactions(threadIds),
+ 'group'
+);
+
+export default () => {
+ throw new Error(
+ '⚠️ Do not import loaders directly, get them from the GraphQL context instead! ⚠️'
+ );
+};
diff --git a/api/loaders/types.js b/api/loaders/types.js
index 7ac77dbca1..bf55ad90d8 100644
--- a/api/loaders/types.js
+++ b/api/loaders/types.js
@@ -2,7 +2,7 @@
export type Loader = {
load: (key: string | Array) => Promise,
- loadMany: (keys: Array) => Promise,
+ loadMany: (keys: Array<*>) => Promise,
clear: (key: string | Array) => void,
};
diff --git a/api/loaders/user.js b/api/loaders/user.js
index dd474ab552..96ea7cf462 100644
--- a/api/loaders/user.js
+++ b/api/loaders/user.js
@@ -3,8 +3,7 @@ import {
getUsers,
getUsersThreadCount,
getUsersByUsername,
-} from '../models/user';
-import { getUsersRecurringPayments } from '../models/recurringPayment';
+} from 'shared/db/queries/user';
import {
getUsersPermissionsInCommunities,
getUsersTotalReputation,
@@ -12,7 +11,6 @@ import {
import { getUsersPermissionsInChannels } from '../models/usersChannels';
import { getThreadsNotificationStatusForUsers } from '../models/usersThreads';
import createLoader from './create-loader';
-import type { Loader } from './types';
export const __createUserLoader = createLoader(users => getUsers(users), 'id');
@@ -26,11 +24,6 @@ export const __createUserThreadCountLoader = createLoader(
'id'
);
-export const __createUserRecurringPaymentsLoader = createLoader(
- users => getUsersRecurringPayments(users),
- 'group'
-);
-
export const __createUserPermissionsInCommunityLoader = createLoader(
usersCommunities => getUsersPermissionsInCommunities(usersCommunities),
input => `${input.userId}|${input.communityId}`,
diff --git a/api/migrations/20180411183454-lowercase-all-the-slugs.js b/api/migrations/20180411183454-lowercase-all-the-slugs.js
new file mode 100644
index 0000000000..d65a01f964
--- /dev/null
+++ b/api/migrations/20180411183454-lowercase-all-the-slugs.js
@@ -0,0 +1,27 @@
+exports.up = async (r, conn) => {
+ return Promise.all([
+ r
+ .table('users')
+ .update({
+ username: r.row('username').downcase(),
+ email: r.row('email').downcase(),
+ })
+ .run(conn),
+ r
+ .table('communities')
+ .update({
+ slug: r.row('slug').downcase(),
+ })
+ .run(conn),
+ r
+ .table('channels')
+ .update({
+ slug: r.row('slug').downcase(),
+ })
+ .run(conn),
+ ]);
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20180428001543-reset-slack-import-records.js b/api/migrations/20180428001543-reset-slack-import-records.js
new file mode 100644
index 0000000000..8736afbd8c
--- /dev/null
+++ b/api/migrations/20180428001543-reset-slack-import-records.js
@@ -0,0 +1,14 @@
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('slackImports')
+ .update({
+ members: r.literal(),
+ })
+ .run(conn),
+ ]).catch(err => console.error(err));
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20180504003702-encrypt-existing-slack-data.js b/api/migrations/20180504003702-encrypt-existing-slack-data.js
new file mode 100644
index 0000000000..3f904a4d59
--- /dev/null
+++ b/api/migrations/20180504003702-encrypt-existing-slack-data.js
@@ -0,0 +1,67 @@
+const { encryptString } = require('../../shared/encryption');
+
+exports.up = async (r, conn) => {
+ const encryptOldSlackImportData = async () => {
+ const records = await r
+ .table('slackImports')
+ .run(conn)
+ .then(cursor => cursor.toArray());
+
+ const recordPromises = records.map(async record => {
+ const teamId = encryptString(record.teamId);
+ const teamName = encryptString(record.teamName);
+ const token = encryptString(record.token);
+
+ return await r
+ .table('slackImports')
+ .get(record.id)
+ .update({
+ teamId,
+ teamName,
+ token,
+ })
+ .run(conn);
+ });
+
+ return await Promise.all([...recordPromises]);
+ };
+
+ const encryptNewSlackImportData = async () => {
+ const records = await r
+ .table('communitySettings')
+ .filter(row => row.hasFields('slackSettings'))
+ .run(conn)
+ .then(cursor => cursor.toArray());
+
+ const recordPromises = records.map(async record => {
+ const teamId = encryptString(record.slackSettings.teamId);
+ const teamName = encryptString(record.slackSettings.teamName);
+ const token = encryptString(record.slackSettings.token);
+ const scope = encryptString(record.slackSettings.scope);
+
+ return await r
+ .table('communitySettings')
+ .get(record.id)
+ .update({
+ slackSettings: {
+ teamId,
+ teamName,
+ token,
+ scope,
+ },
+ })
+ .run(conn);
+ });
+
+ return await Promise.all([...recordPromises]);
+ };
+
+ return await Promise.all([
+ encryptOldSlackImportData(),
+ encryptNewSlackImportData(),
+ ]).catch(err => console.error(err));
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20180517180716-enable-private-communities.js b/api/migrations/20180517180716-enable-private-communities.js
new file mode 100644
index 0000000000..d0ad106774
--- /dev/null
+++ b/api/migrations/20180517180716-enable-private-communities.js
@@ -0,0 +1,17 @@
+exports.up = async (r, conn) => {
+ return r
+ .table('communities')
+ .update({
+ isPrivate: false,
+ })
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('communities')
+ .update({
+ isPrivate: r.literal(),
+ })
+ .run(conn);
+};
diff --git a/api/migrations/20180517215503-add-ispending-to-userscommunities.js b/api/migrations/20180517215503-add-ispending-to-userscommunities.js
new file mode 100644
index 0000000000..aed213d768
--- /dev/null
+++ b/api/migrations/20180517215503-add-ispending-to-userscommunities.js
@@ -0,0 +1,17 @@
+exports.up = async (r, conn) => {
+ return r
+ .table('usersCommunities')
+ .update({
+ isPending: false,
+ })
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('usersCommunities')
+ .update({
+ isPending: r.literal(),
+ })
+ .run(conn);
+};
diff --git a/api/migrations/20180518135040-add-join-settings-to-community-settings.js b/api/migrations/20180518135040-add-join-settings-to-community-settings.js
new file mode 100644
index 0000000000..4cd7aedfb2
--- /dev/null
+++ b/api/migrations/20180518135040-add-join-settings-to-community-settings.js
@@ -0,0 +1,20 @@
+exports.up = async (r, conn) => {
+ return r
+ .table('communitySettings')
+ .update({
+ joinSettings: {
+ tokenJoinEnabled: false,
+ token: null,
+ },
+ })
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('communitySettings')
+ .update({
+ joinSettings: r.literal(),
+ })
+ .run(conn);
+};
diff --git a/api/migrations/20180621001409-thread-likes-table.js b/api/migrations/20180621001409-thread-likes-table.js
new file mode 100644
index 0000000000..19f702c997
--- /dev/null
+++ b/api/migrations/20180621001409-thread-likes-table.js
@@ -0,0 +1,22 @@
+exports.up = function(r, conn) {
+ return r
+ .tableCreate('threadReactions')
+ .run(conn)
+ .then(() => {
+ return Promise.all([
+ r
+ .table('threadReactions')
+ .indexCreate('threadId')
+ .run(conn),
+ r
+ .table('threadReactions')
+ .indexCreate('userId')
+ .run(conn),
+ ]);
+ })
+ .catch(err => console.error(err));
+};
+
+exports.down = function(r, conn) {
+ return Promise.all([r.tableDrop('threadReactions').run(conn)]);
+};
diff --git a/api/migrations/20180823115847-add-users-communities-indexes.js b/api/migrations/20180823115847-add-users-communities-indexes.js
new file mode 100644
index 0000000000..f8bf7b8af3
--- /dev/null
+++ b/api/migrations/20180823115847-add-users-communities-indexes.js
@@ -0,0 +1,61 @@
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('usersCommunities')
+ .indexCreate('communityIdAndIsMember', [
+ r.row('communityId'),
+ r.row('isMember'),
+ ])
+ .run(conn),
+ r
+ .table('usersCommunities')
+ .indexCreate('communityIdAndIsMemberAndReputation', [
+ r.row('communityId'),
+ r.row('isMember'),
+ r.row('reputation'),
+ ])
+ .run(conn),
+ r
+ .table('usersCommunities')
+ .indexCreate('communityIdAndIsModerator', [
+ r.row('communityId'),
+ r.row('isModerator'),
+ ])
+ .run(conn),
+ r
+ .table('usersCommunities')
+ .indexCreate('communityIdAndIsOwner', [
+ r.row('communityId'),
+ r.row('isOwner'),
+ ])
+ .run(conn),
+ r
+ .table('usersCommunities')
+ .indexCreate('communityIdAndIsTeamMember', [
+ r.row('communityId'),
+ r.row('isOwner').or(r.row('isModerator')),
+ ])
+ .run(conn),
+ ]);
+};
+
+exports.down = function(r, conn) {
+ return Promise.all([
+ r
+ .table('usersCommunities')
+ .indexDrop('communityIdAndIsMember')
+ .run(conn),
+ r
+ .table('usersCommunities')
+ .indexDrop('communityIdAndIsModerator')
+ .run(conn),
+ r
+ .table('usersCommunities')
+ .indexDrop('communityIdAndIsOwner')
+ .run(conn),
+ r
+ .table('usersCommunities')
+ .indexDrop('communityIdAndIsTeamMember')
+ .run(conn),
+ ]);
+};
diff --git a/api/migrations/20181001061156-thread-metadata-denormalization.js b/api/migrations/20181001061156-thread-metadata-denormalization.js
new file mode 100644
index 0000000000..1c8757d6b3
--- /dev/null
+++ b/api/migrations/20181001061156-thread-metadata-denormalization.js
@@ -0,0 +1,57 @@
+exports.up = function(r, conn) {
+ return r
+ .table('threads')
+ .update(
+ {
+ messageCount: r
+ .table('messages')
+ .getAll(r.row('id'), { index: 'threadId' })
+ .count()
+ .default(0),
+ reactionCount: r
+ .table('threadReactions')
+ .getAll(r.row('id'), { index: 'threadId' })
+ .count()
+ .default(0),
+ },
+ {
+ nonAtomic: true,
+ }
+ )
+ .run(conn)
+ .then(() => {
+ return Promise.all([
+ r
+ .table('threads')
+ .indexCreate('messageCount')
+ .run(conn),
+ r
+ .table('threads')
+ .indexCreate('reactionCount')
+ .run(conn),
+ ]);
+ })
+ .catch(err => console.error(err));
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('threads')
+ .update({
+ messageCount: r.literal(),
+ reactionCount: r.literal(),
+ })
+ .run(conn)
+ .then(() => {
+ return Promise.all([
+ r
+ .table('threads')
+ .indexDrop('messageCount')
+ .run(conn),
+ r
+ .table('threads')
+ .indexDrop('reactionCount')
+ .run(conn),
+ ]);
+ });
+};
diff --git a/api/migrations/20181001064151-fix-thread-metadata-message-counts.js b/api/migrations/20181001064151-fix-thread-metadata-message-counts.js
new file mode 100644
index 0000000000..65e120152f
--- /dev/null
+++ b/api/migrations/20181001064151-fix-thread-metadata-message-counts.js
@@ -0,0 +1,29 @@
+exports.up = function(r, conn) {
+ return r
+ .table('threads')
+ .update(
+ {
+ messageCount: r
+ .table('messages')
+ .getAll(r.row('id'), { index: 'threadId' })
+ .filter(row => r.not(row.hasFields('deletedAt')))
+ .count()
+ .default(0),
+ reactionCount: r
+ .table('threadReactions')
+ .getAll(r.row('id'), { index: 'threadId' })
+ .filter(row => r.not(row.hasFields('deletedAt')))
+ .count()
+ .default(0),
+ },
+ {
+ nonAtomic: true,
+ }
+ )
+ .run(conn)
+ .catch(err => console.error(err));
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181002060237-remove-payments.js b/api/migrations/20181002060237-remove-payments.js
new file mode 100644
index 0000000000..9662aa8042
--- /dev/null
+++ b/api/migrations/20181002060237-remove-payments.js
@@ -0,0 +1,57 @@
+exports.up = async (r, conn) => {
+ const betaSupporterIds = await r
+ .db('spectrum')
+ .table('recurringPayments')
+ .filter({ planId: 'beta-pro' })
+ .map(row => row('userId'))
+ .run(conn)
+ .then(cursor => cursor.toArray());
+
+ const addSupporterFieldToUsersPromises = async () =>
+ await r
+ .db('spectrum')
+ .table('users')
+ .getAll(...betaSupporterIds)
+ .update({
+ betaSupporter: true,
+ })
+ .run(conn);
+
+ const cleanCommunitiesModel = () =>
+ r
+ .table('communities')
+ .update({
+ stripeCustomerId: r.literal(),
+ analyticsEnabled: r.literal(),
+ prioritySupportEnabled: r.literal(),
+ ossVerified: r.literal(),
+ })
+ .run(conn);
+
+ return await Promise.all([
+ cleanCommunitiesModel(),
+ addSupporterFieldToUsersPromises(),
+ ]);
+};
+
+exports.down = async (r, conn) => {
+ return await Promise.all([
+ r
+ .db('spectrum')
+ .table('communities')
+ .update({
+ stripeCustomerId: null,
+ analyticsEnabled: false,
+ prioritySupportEnabled: false,
+ ossVerified: false,
+ })
+ .run(conn),
+ r
+ .db('spectrum')
+ .table('users')
+ .update({
+ betaSupporter: r.literal(),
+ })
+ .run(conn),
+ ]);
+};
diff --git a/api/migrations/20181003233411-thread-reactions-useridandthreadid-index.js b/api/migrations/20181003233411-thread-reactions-useridandthreadid-index.js
new file mode 100644
index 0000000000..896c0a0601
--- /dev/null
+++ b/api/migrations/20181003233411-thread-reactions-useridandthreadid-index.js
@@ -0,0 +1,13 @@
+exports.up = function(r, conn) {
+ return r
+ .table('threadReactions')
+ .indexCreate('userIdAndThreadId', [r.row('userId'), r.row('threadId')])
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('threadReactions')
+ .indexDrop('userIdAndThreadId')
+ .run(conn);
+};
diff --git a/api/migrations/20181004222636-denormalize-channel-community-member-counts.js b/api/migrations/20181004222636-denormalize-channel-community-member-counts.js
new file mode 100644
index 0000000000..98b639d238
--- /dev/null
+++ b/api/migrations/20181004222636-denormalize-channel-community-member-counts.js
@@ -0,0 +1,52 @@
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('communities')
+ .update(
+ {
+ memberCount: r
+ .table('usersCommunities')
+ .getAll(r.row('id'), { index: 'communityId' })
+ .filter(row => row('isMember').eq(true))
+ .count()
+ .default(1),
+ },
+ {
+ nonAtomic: true,
+ }
+ )
+ .run(conn),
+ r
+ .table('channels')
+ .update(
+ {
+ memberCount: r
+ .table('usersChannels')
+ .getAll(r.row('id'), { index: 'channelId' })
+ .filter(row => row('isMember').eq(true))
+ .count()
+ .default(1),
+ },
+ {
+ nonAtomic: true,
+ }
+ )
+ .run(conn),
+ ]).catch(err => console.error(err));
+};
+exports.down = function(r, conn) {
+ return Promise.all([
+ r
+ .table('communities')
+ .update({
+ memberCount: r.literal(),
+ })
+ .run(conn),
+ r
+ .table('channels')
+ .update({
+ memberCount: r.literal(),
+ })
+ .run(conn),
+ ]);
+};
diff --git a/api/migrations/20181005143053-users-notifications-useridandnotificationid-index.js b/api/migrations/20181005143053-users-notifications-useridandnotificationid-index.js
new file mode 100644
index 0000000000..5469580eeb
--- /dev/null
+++ b/api/migrations/20181005143053-users-notifications-useridandnotificationid-index.js
@@ -0,0 +1,16 @@
+exports.up = function(r, conn) {
+ return r
+ .table('usersNotifications')
+ .indexCreate('userIdAndNotificationId', [
+ r.row('userId'),
+ r.row('notificationId'),
+ ])
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('usersNotifications')
+ .indexDrop('userIdAndNotificationId')
+ .run(conn);
+};
diff --git a/api/migrations/20181005144259-users-notifications-userIdAndIsSeen-index.js b/api/migrations/20181005144259-users-notifications-userIdAndIsSeen-index.js
new file mode 100644
index 0000000000..661e6d17de
--- /dev/null
+++ b/api/migrations/20181005144259-users-notifications-userIdAndIsSeen-index.js
@@ -0,0 +1,13 @@
+exports.up = function(r, conn) {
+ return r
+ .table('usersNotifications')
+ .indexCreate('userIdAndIsSeen', [r.row('userId'), r.row('isSeen')])
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('usersNotifications')
+ .indexDrop('userIdAndIsSeen')
+ .run(conn);
+};
diff --git a/api/migrations/20181023160027-update-denormalized-member-counts.js b/api/migrations/20181023160027-update-denormalized-member-counts.js
new file mode 100644
index 0000000000..accb8af8d6
--- /dev/null
+++ b/api/migrations/20181023160027-update-denormalized-member-counts.js
@@ -0,0 +1,39 @@
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('communities')
+ .update(
+ {
+ memberCount: r
+ .table('usersCommunities')
+ .getAll(r.row('id'), { index: 'communityId' })
+ .filter(row => row('isMember').eq(true))
+ .count()
+ .default(1),
+ },
+ {
+ nonAtomic: true,
+ }
+ )
+ .run(conn),
+ r
+ .table('channels')
+ .update(
+ {
+ memberCount: r
+ .table('usersChannels')
+ .getAll(r.row('id'), { index: 'channelId' })
+ .filter(row => row('isMember').eq(true))
+ .count()
+ .default(1),
+ },
+ {
+ nonAtomic: true,
+ }
+ )
+ .run(conn),
+ ]).catch(err => console.error(err));
+};
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181024173616-indexes-for-digests.js b/api/migrations/20181024173616-indexes-for-digests.js
new file mode 100644
index 0000000000..bfe6ea3367
--- /dev/null
+++ b/api/migrations/20181024173616-indexes-for-digests.js
@@ -0,0 +1,31 @@
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('usersSettings')
+ .indexCreate(
+ 'weeklyDigestEmail',
+ r.row('notifications')('types')('weeklyDigest')('email')
+ )
+ .run(conn),
+ r
+ .table('usersSettings')
+ .indexCreate(
+ 'dailyDigestEmail',
+ r.row('notifications')('types')('dailyDigest')('email')
+ )
+ .run(conn),
+ ]);
+};
+
+exports.down = function(r, conn) {
+ return Promise.all([
+ r
+ .table('usersSettings')
+ .indexDrop('weeklyDigestEmail')
+ .run(conn),
+ r
+ .table('usersSettings')
+ .indexDrop('dailyDigestEmail')
+ .run(conn),
+ ]);
+};
diff --git a/api/migrations/20181027050052-remove-attachments-from-thread-model.js b/api/migrations/20181027050052-remove-attachments-from-thread-model.js
new file mode 100644
index 0000000000..c8e8447140
--- /dev/null
+++ b/api/migrations/20181027050052-remove-attachments-from-thread-model.js
@@ -0,0 +1,13 @@
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('threads')
+ .update({
+ attachments: r.literal(),
+ })
+ .run(conn),
+ ]).catch(err => console.error(err));
+};
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181102025454-fix-old-image-urls-in-messages.js b/api/migrations/20181102025454-fix-old-image-urls-in-messages.js
new file mode 100644
index 0000000000..022c3be6ff
--- /dev/null
+++ b/api/migrations/20181102025454-fix-old-image-urls-in-messages.js
@@ -0,0 +1,33 @@
+exports.up = async function(r, conn) {
+ const messages = await r
+ .db('spectrum')
+ .table('messages')
+ .filter({ messageType: 'media' })
+ .filter(row => row('timestamp').lt(r.epochTime(1540929600)))
+ .filter(row => row('content')('body').match('spectrum.imgix.net'))
+ .filter(row => row('content')('body').match('%20'))
+ .filter(row => row.hasFields('deletedAt').not())
+ .map(row => ({ id: row('id'), url: row('content')('body') }))
+ .run(conn)
+ .then(cursor => cursor.toArray());
+
+ const messagePromises = messages.map(async obj => {
+ return await r
+ .db('spectrum')
+ .table('messages')
+ .get(obj.id)
+ .update({
+ content: {
+ body: decodeURIComponent(obj.url),
+ },
+ imageReplaced: new Date(),
+ })
+ .run(conn);
+ });
+
+ return await Promise.all(messagePromises);
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181102040518-fix-old-image-urls-in-threads.js b/api/migrations/20181102040518-fix-old-image-urls-in-threads.js
new file mode 100644
index 0000000000..ce2f96bdf5
--- /dev/null
+++ b/api/migrations/20181102040518-fix-old-image-urls-in-threads.js
@@ -0,0 +1,71 @@
+exports.up = async function(r, conn) {
+ const threads = await r
+ .db('spectrum')
+ .table('threads')
+ .filter(row => row('modifiedAt').lt(r.epochTime(1540929600)))
+ .filter(row => row('content')('body').match('spectrum.imgix.net'))
+ .filter(row => row('content')('body').match('%20'))
+ .filter(row => row.hasFields('deletedAt').not())
+ .map(row => ({ id: row('id'), body: row('content')('body') }))
+ .run(conn)
+ .then(cursor => cursor.toArray());
+
+ const threadPromises = threads.map(async obj => {
+ const newBody = JSON.parse(obj.body);
+
+ const imageKeys = Object.keys(newBody.entityMap).filter(
+ key => newBody.entityMap[key].type.toLowerCase() === 'image'
+ );
+
+ const LEGACY_PREFIX = 'https://spectrum.imgix.net/';
+ const hasLegacyPrefix = url => url.startsWith(LEGACY_PREFIX, 0);
+ const stripLegacyPrefix = url => url.replace(LEGACY_PREFIX, '');
+
+ const processImageUrl = str => {
+ if (str.indexOf(LEGACY_PREFIX) < 0) {
+ return str;
+ }
+ if (str.indexOf('%20') < 0) {
+ return str;
+ }
+
+ const split = str.split('?');
+ const imagePath = split[0];
+
+ const decoded = decodeURIComponent(imagePath);
+
+ const processed = hasLegacyPrefix(decoded)
+ ? stripLegacyPrefix(decoded)
+ : decoded;
+
+ return processed;
+ };
+
+ imageKeys.forEach((key, index) => {
+ if (!newBody.entityMap[key]) {
+ return;
+ }
+
+ const { src } = newBody.entityMap[key].data;
+ newBody.entityMap[key].data.src = processImageUrl(src);
+ });
+
+ return await r
+ .db('spectrum')
+ .table('threads')
+ .get(obj.id)
+ .update({
+ content: {
+ body: JSON.stringify(newBody),
+ },
+ imageReplaced: new Date(),
+ })
+ .run(conn);
+ });
+
+ return await Promise.all(threadPromises);
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181102044407-fix-old-image-urls-in-communities.js b/api/migrations/20181102044407-fix-old-image-urls-in-communities.js
new file mode 100644
index 0000000000..face2a859c
--- /dev/null
+++ b/api/migrations/20181102044407-fix-old-image-urls-in-communities.js
@@ -0,0 +1,73 @@
+exports.up = async function(r, conn) {
+ const communities = await r
+ .db('spectrum')
+ .table('communities')
+ .filter(row => row('modifiedAt').lt(r.epochTime(1540929600)))
+ .filter(row =>
+ row('profilePhoto')
+ .match('spectrum.imgix.net')
+ .or(row('coverPhoto').match('spectrum.imgix.net'))
+ )
+ .filter(row =>
+ row('profilePhoto')
+ .match('%20')
+ .or(row('coverPhoto').match('%20'))
+ )
+ .filter(row => row.hasFields('deletedAt').not())
+ .map(row => ({
+ id: row('id'),
+ profilePhoto: row('profilePhoto'),
+ coverPhoto: row('coverPhoto'),
+ }))
+ .run(conn)
+ .then(cursor => cursor.toArray());
+
+ const communityPromises = communities.map(async obj => {
+ const { profilePhoto, coverPhoto } = obj;
+
+ const LEGACY_PREFIX = 'https://spectrum.imgix.net/';
+ const hasLegacyPrefix = url => url.startsWith(LEGACY_PREFIX, 0);
+ const stripLegacyPrefix = url => url.replace(LEGACY_PREFIX, '');
+
+ const processImageUrl = str => {
+ if (str.indexOf(LEGACY_PREFIX) < 0) {
+ return str;
+ }
+
+ if (str.indexOf('%20') < 0) {
+ return str;
+ }
+
+ const split = str.split('?');
+ const imagePath = split[0];
+
+ const decoded = decodeURIComponent(imagePath);
+
+ const processed = hasLegacyPrefix(decoded)
+ ? stripLegacyPrefix(decoded)
+ : decoded;
+
+ return processed;
+ };
+
+ const newProfilePhoto = processImageUrl(profilePhoto);
+ const newCoverPhoto = processImageUrl(coverPhoto);
+
+ return await r
+ .db('spectrum')
+ .table('communities')
+ .get(obj.id)
+ .update({
+ coverPhoto: newCoverPhoto,
+ profilePhoto: newProfilePhoto,
+ imageReplaced: new Date(),
+ })
+ .run(conn);
+ });
+
+ return await Promise.all(communityPromises);
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181102045821-fix-old-image-urls-in-users.js b/api/migrations/20181102045821-fix-old-image-urls-in-users.js
new file mode 100644
index 0000000000..f768f21a67
--- /dev/null
+++ b/api/migrations/20181102045821-fix-old-image-urls-in-users.js
@@ -0,0 +1,76 @@
+exports.up = async function(r, conn) {
+ const users = await r
+ .db('spectrum')
+ .table('users')
+ .filter(row => row('modifiedAt').lt(r.epochTime(1540929600)))
+ .filter(row =>
+ row.hasFields('coverPhoto').and(row.hasFields('profilePhoto'))
+ )
+ .filter(row =>
+ row('profilePhoto')
+ .match('spectrum.imgix.net')
+ .or(row('coverPhoto').match('spectrum.imgix.net'))
+ )
+ .filter(row =>
+ row('profilePhoto')
+ .match('%20')
+ .or(row('coverPhoto').match('%20'))
+ )
+ .filter(row => row.hasFields('deletedAt').not())
+ .map(row => ({
+ id: row('id'),
+ profilePhoto: row('profilePhoto'),
+ coverPhoto: row('coverPhoto'),
+ }))
+ .run(conn)
+ .then(cursor => cursor.toArray());
+
+ const userPromises = users.map(async obj => {
+ const { profilePhoto, coverPhoto } = obj;
+
+ const LEGACY_PREFIX = 'https://spectrum.imgix.net/';
+ const hasLegacyPrefix = url => url.startsWith(LEGACY_PREFIX, 0);
+ const stripLegacyPrefix = url => url.replace(LEGACY_PREFIX, '');
+
+ const processImageUrl = str => {
+ if (str.indexOf(LEGACY_PREFIX) < 0) {
+ return str;
+ }
+
+ if (str.indexOf('%20') < 0) {
+ return str;
+ }
+
+ const split = str.split('?');
+ const imagePath = split[0];
+
+ const decoded = decodeURIComponent(imagePath);
+
+ const processed = hasLegacyPrefix(decoded)
+ ? stripLegacyPrefix(decoded)
+ : decoded;
+
+ return processed;
+ };
+
+ const newProfilePhoto = processImageUrl(profilePhoto);
+ const newCoverPhoto = processImageUrl(coverPhoto);
+
+ return await r
+ .db('spectrum')
+ .table('users')
+ .get(obj.id)
+ .update({
+ coverPhoto: newCoverPhoto,
+ profilePhoto: newProfilePhoto,
+ imageReplaced: new Date(),
+ })
+ .run(conn);
+ });
+
+ return await Promise.all(userPromises);
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181102054523-fix-aws-static-url-community-photos.js b/api/migrations/20181102054523-fix-aws-static-url-community-photos.js
new file mode 100644
index 0000000000..fc88d3e667
--- /dev/null
+++ b/api/migrations/20181102054523-fix-aws-static-url-community-photos.js
@@ -0,0 +1,54 @@
+exports.up = async function(r, conn) {
+ const LEGACY_PREFIX = 'https://s3.amazonaws.com/spectrum-chat/';
+
+ const communities = await r
+ .db('spectrum')
+ .table('communities')
+ .filter(row =>
+ row('profilePhoto')
+ .match(LEGACY_PREFIX)
+ .or(row('coverPhoto').match(LEGACY_PREFIX))
+ )
+ .filter(row => row.hasFields('deletedAt').not())
+ .map(row => ({
+ id: row('id'),
+ profilePhoto: row('profilePhoto'),
+ coverPhoto: row('coverPhoto'),
+ }))
+ .run(conn)
+ .then(cursor => cursor.toArray());
+
+ const communityPromises = communities.map(async obj => {
+ const { profilePhoto, coverPhoto } = obj;
+ const hasLegacyPrefix = url => url.startsWith(LEGACY_PREFIX, 0);
+ const stripLegacyPrefix = url => url.replace(LEGACY_PREFIX, '');
+
+ const processImageUrl = str => {
+ if (str.indexOf(LEGACY_PREFIX) < 0) {
+ return str;
+ }
+
+ return stripLegacyPrefix(str);
+ };
+
+ const newProfilePhoto = processImageUrl(profilePhoto);
+ const newCoverPhoto = processImageUrl(coverPhoto);
+
+ return await r
+ .db('spectrum')
+ .table('communities')
+ .get(obj.id)
+ .update({
+ coverPhoto: newCoverPhoto,
+ profilePhoto: newProfilePhoto,
+ awsStaticReplaced: new Date(),
+ })
+ .run(conn);
+ });
+
+ return await Promise.all(communityPromises);
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181116173949-add-terms-last-accepted-field-to-users.js b/api/migrations/20181116173949-add-terms-last-accepted-field-to-users.js
new file mode 100644
index 0000000000..6a55682b80
--- /dev/null
+++ b/api/migrations/20181116173949-add-terms-last-accepted-field-to-users.js
@@ -0,0 +1,17 @@
+exports.up = async (r, conn) => {
+ return r
+ .table('users')
+ .update({
+ termsLastAcceptedAt: r.row('createdAt'),
+ })
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('users')
+ .update({
+ termsLastAcceptedAt: r.literal(),
+ })
+ .run(conn);
+};
diff --git a/api/migrations/20181121054300-resync-community-member-counts.js b/api/migrations/20181121054300-resync-community-member-counts.js
new file mode 100644
index 0000000000..accb8af8d6
--- /dev/null
+++ b/api/migrations/20181121054300-resync-community-member-counts.js
@@ -0,0 +1,39 @@
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('communities')
+ .update(
+ {
+ memberCount: r
+ .table('usersCommunities')
+ .getAll(r.row('id'), { index: 'communityId' })
+ .filter(row => row('isMember').eq(true))
+ .count()
+ .default(1),
+ },
+ {
+ nonAtomic: true,
+ }
+ )
+ .run(conn),
+ r
+ .table('channels')
+ .update(
+ {
+ memberCount: r
+ .table('usersChannels')
+ .getAll(r.row('id'), { index: 'channelId' })
+ .filter(row => row('isMember').eq(true))
+ .count()
+ .default(1),
+ },
+ {
+ nonAtomic: true,
+ }
+ )
+ .run(conn),
+ ]).catch(err => console.error(err));
+};
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181122162921-users-communities-useridandmember-index.js b/api/migrations/20181122162921-users-communities-useridandmember-index.js
new file mode 100644
index 0000000000..753a861de3
--- /dev/null
+++ b/api/migrations/20181122162921-users-communities-useridandmember-index.js
@@ -0,0 +1,13 @@
+exports.up = function(r, conn) {
+ return r
+ .table('usersCommunities')
+ .indexCreate('userIdAndIsMember', [r.row('userId'), r.row('isMember')])
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('usersCommunities')
+ .indexDrop('userIdAndIsMember')
+ .run(conn);
+};
diff --git a/api/migrations/20181126094455-users-channels-roles.js b/api/migrations/20181126094455-users-channels-roles.js
new file mode 100644
index 0000000000..0d7275d1a7
--- /dev/null
+++ b/api/migrations/20181126094455-users-channels-roles.js
@@ -0,0 +1,59 @@
+const branch = (r, field, fallback) => {
+ return r.branch(r.row(`is${field}`).eq(true), field.toLowerCase(), fallback);
+};
+
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('usersChannels')
+ .indexCreate('channelIdAndRole', [
+ r.row('channelId'),
+ branch(
+ r,
+ 'Pending',
+ branch(
+ r,
+ 'Blocked',
+ branch(
+ r,
+ 'Owner',
+ branch(r, 'Moderator', branch(r, 'Member', r.literal()))
+ )
+ )
+ ),
+ ])
+ .run(conn),
+ r
+ .table('usersChannels')
+ .indexCreate('userIdAndRole', [
+ r.row('userId'),
+ branch(
+ r,
+ 'Pending',
+ branch(
+ r,
+ 'Blocked',
+ branch(
+ r,
+ 'Owner',
+ branch(r, 'Moderator', branch(r, 'Member', r.literal()))
+ )
+ )
+ ),
+ ])
+ .run(conn),
+ ]);
+};
+
+exports.down = function(r, conn) {
+ return Promise.all([
+ r
+ .table('usersChannels')
+ .indexDrop('channelIdAndRole')
+ .run(conn),
+ r
+ .table('usersChannels')
+ .indexDrop('userIdAndRole')
+ .run(conn),
+ ]);
+};
diff --git a/api/migrations/20181127090014-communities-member-count-index.js b/api/migrations/20181127090014-communities-member-count-index.js
new file mode 100644
index 0000000000..eecdfa1163
--- /dev/null
+++ b/api/migrations/20181127090014-communities-member-count-index.js
@@ -0,0 +1,13 @@
+exports.up = function(r, conn) {
+ return r
+ .table('communities')
+ .indexCreate('memberCount')
+ .run(conn);
+};
+
+exports.down = function(r, conn) {
+ return r
+ .table('communities')
+ .indexDrop('memberCount')
+ .run(conn);
+};
diff --git a/api/migrations/20181205171559-remove-old-users-notifications.js b/api/migrations/20181205171559-remove-old-users-notifications.js
new file mode 100644
index 0000000000..560032f618
--- /dev/null
+++ b/api/migrations/20181205171559-remove-old-users-notifications.js
@@ -0,0 +1,61 @@
+exports.up = async (r, conn) => {
+ let after = 0;
+ let limit = 10000;
+ let done = false;
+
+ const getRecords = async (after, limit) => {
+ return await r
+ .table('usersNotifications')
+ .skip(after)
+ .limit(limit)
+ .run(conn)
+ .then(cursor => cursor.toArray());
+ };
+
+ const deleteRecords = async arr => {
+ if (!arr || arr.length === 0) return;
+
+ const filtered = arr
+ .filter(rec => rec.isSeen)
+ .filter(rec => {
+ const THIRTY_DAYS = 1000 * 60 * 60 * 24 * 30; //ms
+ const added = new Date(rec.entityAddedAt).getTime(); //ms
+ const now = new Date().getTime(); //ms
+ return now - added > THIRTY_DAYS;
+ })
+ .map(rec => rec.id)
+ .filter(Boolean);
+
+ return await r
+ .table('usersNotifications')
+ .getAll(...filtered)
+ .delete()
+ .run(conn);
+ };
+
+ const processUsersNotificiations = async arr => {
+ if (done) {
+ return await deleteRecords(arr);
+ }
+
+ if (arr.length < limit) {
+ done = true;
+ return await deleteRecords(arr);
+ }
+
+ return deleteRecords(arr).then(async () => {
+ after = after + limit;
+ const nextRecords = await getRecords(after, limit);
+
+ return processUsersNotificiations(nextRecords);
+ });
+ };
+
+ const initialRecordIds = await getRecords(after, limit);
+
+ return processUsersNotificiations(initialRecordIds);
+};
+
+exports.down = function(r, conn) {
+ return Promise.resolve();
+};
diff --git a/api/migrations/20181211181146-add-usersthreads-user-id-and-participant-index.js b/api/migrations/20181211181146-add-usersthreads-user-id-and-participant-index.js
new file mode 100644
index 0000000000..b876c1386b
--- /dev/null
+++ b/api/migrations/20181211181146-add-usersthreads-user-id-and-participant-index.js
@@ -0,0 +1,19 @@
+exports.up = function(r, conn) {
+ return Promise.all([
+ r
+ .table('usersThreads')
+ .indexCreate('userIdAndIsParticipant', [
+ r.row('userId'),
+ r.row('isParticipant'),
+ ])
+ .run(conn),
+ ]);
+};
+exports.down = function(r, conn) {
+ return Promise.all([
+ r
+ .table('usersThreads')
+ .indexDrop('userIdAndIsParticipant')
+ .run(conn),
+ ]);
+};
diff --git a/api/migrations/config.js b/api/migrations/config.js
index b4979a9e43..2764982df8 100644
--- a/api/migrations/config.js
+++ b/api/migrations/config.js
@@ -1,5 +1,6 @@
const path = require('path');
const fs = require('fs');
+const debug = require('debug')('migrations');
const DEFAULT_CONFIG = {
driver: 'rethinkdbdash',
@@ -9,14 +10,24 @@ const DEFAULT_CONFIG = {
migrationsDirectory: 'api/migrations',
};
+let ca;
+
+try {
+ ca = fs.readFileSync(path.join(process.cwd(), 'cacert'));
+} catch (err) {}
+
const RUN_IN_PROD = !!process.env.AWS_RETHINKDB_PASSWORD;
+if (!ca && RUN_IN_PROD)
+ throw new Error(
+ 'Please provide the SSL certificate to connect to the production database in a file called `cacert` in the root directory.'
+ );
+
if (RUN_IN_PROD && process.argv[4] === 'down') {
throw new Error('Do not drop the production database!!!!!');
- process.exit(1);
}
-if (RUN_IN_PROD) console.log('Running migration in production...');
+if (RUN_IN_PROD) debug('Running migration in production...');
module.exports = !RUN_IN_PROD
? DEFAULT_CONFIG
@@ -24,4 +35,11 @@ module.exports = !RUN_IN_PROD
password: process.env.AWS_RETHINKDB_PASSWORD,
host: process.env.AWS_RETHINKDB_URL,
port: process.env.AWS_RETHINKDB_PORT,
+ ...(ca
+ ? {
+ ssl: {
+ ca,
+ },
+ }
+ : {}),
});
diff --git a/api/migrations/seed/default/channels.js b/api/migrations/seed/default/channels.js
index 3a31897411..7c159ff130 100644
--- a/api/migrations/seed/default/channels.js
+++ b/api/migrations/seed/default/channels.js
@@ -5,6 +5,7 @@ const {
SPECTRUM_COMMUNITY_ID,
PAYMENTS_COMMUNITY_ID,
DELETED_COMMUNITY_ID,
+ PRIVATE_COMMUNITY_ID,
SPECTRUM_GENERAL_CHANNEL_ID,
SPECTRUM_PRIVATE_CHANNEL_ID,
PAYMENTS_GENERAL_CHANNEL_ID,
@@ -13,6 +14,7 @@ const {
SPECTRUM_DELETED_CHANNEL_ID,
DELETED_COMMUNITY_DELETED_CHANNEL_ID,
MODERATOR_CREATED_CHANNEL_ID,
+ PRIVATE_GENERAL_CHANNEL_ID,
} = constants;
module.exports = [
@@ -25,6 +27,7 @@ module.exports = [
slug: 'general',
isPrivate: false,
isDefault: true,
+ memberCount: 5,
},
{
@@ -36,6 +39,7 @@ module.exports = [
slug: 'private',
isPrivate: true,
isDefault: false,
+ memberCount: 5,
},
{
@@ -47,6 +51,7 @@ module.exports = [
slug: 'general',
isPrivate: false,
isDefault: true,
+ memberCount: 5,
},
{
@@ -58,6 +63,7 @@ module.exports = [
slug: 'private',
isPrivate: true,
isDefault: false,
+ memberCount: 5,
},
{
@@ -70,6 +76,7 @@ module.exports = [
isPrivate: false,
isDefault: true,
archivedAt: new Date(DATE),
+ memberCount: 3,
},
{
@@ -82,6 +89,7 @@ module.exports = [
isPrivate: false,
isDefault: false,
deletedAt: new Date(DATE),
+ memberCount: 0,
},
{
@@ -94,6 +102,7 @@ module.exports = [
isPrivate: false,
isDefault: false,
deletedAt: new Date(DATE),
+ memberCount: 1,
},
{
@@ -105,5 +114,18 @@ module.exports = [
slug: 'moderator-created',
isPrivate: false,
isDefault: false,
+ memberCount: 1,
+ },
+
+ {
+ id: PRIVATE_GENERAL_CHANNEL_ID,
+ communityId: PRIVATE_COMMUNITY_ID,
+ createdAt: new Date(DATE),
+ name: 'General',
+ description: 'General',
+ slug: 'private-general',
+ isPrivate: false,
+ isDefault: false,
+ memberCount: 1,
},
];
diff --git a/api/migrations/seed/default/communities.js b/api/migrations/seed/default/communities.js
index ec2e32fd70..b0e93a19f1 100644
--- a/api/migrations/seed/default/communities.js
+++ b/api/migrations/seed/default/communities.js
@@ -5,12 +5,14 @@ const {
SPECTRUM_COMMUNITY_ID,
PAYMENTS_COMMUNITY_ID,
DELETED_COMMUNITY_ID,
+ PRIVATE_COMMUNITY_ID,
} = constants;
module.exports = [
{
id: SPECTRUM_COMMUNITY_ID,
createdAt: new Date(DATE),
+ isPrivate: false,
name: 'Spectrum',
description: 'The future of communities',
website: 'https://spectrum.chat',
@@ -19,10 +21,12 @@ module.exports = [
coverPhoto:
'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Header.png.0.3303118636071434',
slug: 'spectrum',
+ memberCount: 4,
},
{
id: PAYMENTS_COMMUNITY_ID,
createdAt: new Date(DATE),
+ isPrivate: false,
name: 'Payments',
description: 'Where payments are tested',
website: 'https://spectrum.chat',
@@ -31,11 +35,13 @@ module.exports = [
coverPhoto:
'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Header.png.0.3303118636071434',
slug: 'payments',
+ memberCount: 5,
},
{
id: DELETED_COMMUNITY_ID,
createdAt: new Date(DATE),
deletedAt: new Date(DATE),
+ isPrivate: false,
name: 'Deleted',
description: 'Things didnt work out',
website: 'https://spectrum.chat',
@@ -44,5 +50,20 @@ module.exports = [
coverPhoto:
'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Header.png.0.3303118636071434',
slug: 'deleted',
+ memberCount: 0,
+ },
+ {
+ id: PRIVATE_COMMUNITY_ID,
+ createdAt: new Date(DATE),
+ isPrivate: true,
+ name: 'Private community',
+ description: 'Private community',
+ website: 'https://spectrum.chat',
+ profilePhoto:
+ 'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Profile.png.0.6225566835336693',
+ coverPhoto:
+ 'https://spectrum.imgix.net/communities/-Kh6RfPYjmSaIWbkck8i/Twitter Header.png.0.3303118636071434',
+ slug: 'private',
+ memberCount: 1,
},
];
diff --git a/api/migrations/seed/default/constants.js b/api/migrations/seed/default/constants.js
index 9f0156c5de..eff3218ab3 100644
--- a/api/migrations/seed/default/constants.js
+++ b/api/migrations/seed/default/constants.js
@@ -22,6 +22,7 @@ const COMMUNITY_MODERATOR_USER_ID = '9';
const SPECTRUM_COMMUNITY_ID = '1';
const PAYMENTS_COMMUNITY_ID = '2';
const DELETED_COMMUNITY_ID = '3';
+const PRIVATE_COMMUNITY_ID = '4';
// channels
const SPECTRUM_GENERAL_CHANNEL_ID = '1';
@@ -32,6 +33,7 @@ const SPECTRUM_ARCHIVED_CHANNEL_ID = '5';
const SPECTRUM_DELETED_CHANNEL_ID = '6';
const DELETED_COMMUNITY_DELETED_CHANNEL_ID = '7';
const MODERATOR_CREATED_CHANNEL_ID = '8';
+const PRIVATE_GENERAL_CHANNEL_ID = '9';
module.exports = {
DATE,
@@ -47,6 +49,7 @@ module.exports = {
SPECTRUM_COMMUNITY_ID,
PAYMENTS_COMMUNITY_ID,
DELETED_COMMUNITY_ID,
+ PRIVATE_COMMUNITY_ID,
SPECTRUM_GENERAL_CHANNEL_ID,
SPECTRUM_PRIVATE_CHANNEL_ID,
PAYMENTS_GENERAL_CHANNEL_ID,
@@ -55,4 +58,5 @@ module.exports = {
SPECTRUM_DELETED_CHANNEL_ID,
DELETED_COMMUNITY_DELETED_CHANNEL_ID,
MODERATOR_CREATED_CHANNEL_ID,
+ PRIVATE_GENERAL_CHANNEL_ID,
};
diff --git a/api/migrations/seed/default/directMessageThreads.js b/api/migrations/seed/default/directMessageThreads.js
index d4f024fcf1..f738be291f 100644
--- a/api/migrations/seed/default/directMessageThreads.js
+++ b/api/migrations/seed/default/directMessageThreads.js
@@ -9,4 +9,10 @@ module.exports = [
name: null,
threadLastActive: new Date(DATE),
},
+ {
+ id: 'dm-2',
+ createdAt: new Date(DATE - 1),
+ name: null,
+ threadLastActive: new Date(DATE - 1),
+ },
];
diff --git a/api/migrations/seed/default/index.js b/api/migrations/seed/default/index.js
index 89b1d89950..d1f58072c8 100644
--- a/api/migrations/seed/default/index.js
+++ b/api/migrations/seed/default/index.js
@@ -9,7 +9,11 @@ const defaultDirectMessageThreads = require('./directMessageThreads');
const defaultUsersDirectMessageThreads = require('./usersDirectMessageThreads');
const defaultUsersCommunities = require('./usersCommunities');
const defaultUsersChannels = require('./usersChannels');
+const defaultUsersSettings = require('./usersSettings')();
const defaultMessages = require('./messages');
+const defaultReactions = require('./reactions');
+const defaultUsersNotifications = require('./usersNotifications');
+const defaultNotifications = require('./notifications');
module.exports = {
constants,
@@ -23,8 +27,10 @@ module.exports = {
defaultUsersCommunities,
defaultUsersChannels,
defaultMessages,
- defaultNotifications: [],
+ defaultUsersSettings,
+ defaultNotifications,
+ defaultUsersNotifications,
defaultCommunitySettings: [],
defaultChannelSettings: [],
- defaultUsersSettings: [],
+ defaultReactions,
};
diff --git a/api/migrations/seed/default/messages.js b/api/migrations/seed/default/messages.js
index 4989c6d87e..a34c0c8898 100644
--- a/api/migrations/seed/default/messages.js
+++ b/api/migrations/seed/default/messages.js
@@ -7,7 +7,6 @@ module.exports = [
{
id: '1',
threadId: 'thread-1',
- attachments: [],
content: {
body: JSON.stringify({
blocks: [
@@ -32,7 +31,6 @@ module.exports = [
{
id: '2',
threadId: 'thread-1',
- attachments: [],
content: {
body: JSON.stringify(
toJSON(fromPlainText('This is the second message!'))
@@ -46,7 +44,6 @@ module.exports = [
{
id: '3',
threadId: 'thread-1',
- attachments: [],
content: {
body: JSON.stringify(
toJSON(fromPlainText('The next one is an emoji-only one :scream:'))
@@ -60,7 +57,6 @@ module.exports = [
{
id: '4',
threadId: 'thread-1',
- attachments: [],
content: {
body: JSON.stringify(toJSON(fromPlainText('🎉'))),
},
@@ -73,7 +69,6 @@ module.exports = [
{
id: '5',
threadId: 'thread-2',
- attachments: [],
content: {
body: JSON.stringify({
blocks: [
@@ -98,7 +93,6 @@ module.exports = [
{
id: '6',
threadId: 'thread-2',
- attachments: [],
content: {
body: JSON.stringify(
toJSON(fromPlainText('This is the second message!'))
@@ -112,7 +106,6 @@ module.exports = [
{
id: '7',
threadId: 'thread-2',
- attachments: [],
content: {
body: JSON.stringify(
toJSON(fromPlainText('The next one is an emoji-only one :scream:'))
@@ -126,7 +119,6 @@ module.exports = [
{
id: '8',
threadId: 'thread-2',
- attachments: [],
content: {
body: JSON.stringify(toJSON(fromPlainText('🎉'))),
},
@@ -141,7 +133,6 @@ module.exports = [
id: '9',
threadId: 'dm-1',
threadType: 'directMessageThread',
- attachments: [],
content: {
body: JSON.stringify(
toJSON(fromPlainText('Direct message thread message!'))
@@ -155,7 +146,6 @@ module.exports = [
id: '10',
threadId: 'dm-1',
threadType: 'directMessageThread',
- attachments: [],
content: {
body: JSON.stringify(toJSON(fromPlainText('A second one'))),
},
@@ -167,7 +157,6 @@ module.exports = [
id: '11',
threadId: 'dm-1',
threadType: 'directMessageThread',
- attachments: [],
content: {
body: JSON.stringify(toJSON(fromPlainText('A third one'))),
},
@@ -179,7 +168,6 @@ module.exports = [
id: '12',
threadId: 'dm-1',
threadType: 'directMessageThread',
- attachments: [],
content: {
body: JSON.stringify(toJSON(fromPlainText('A fourth one'))),
},
@@ -191,7 +179,6 @@ module.exports = [
id: '13',
threadId: 'dm-1',
threadType: 'directMessageThread',
- attachments: [],
content: {
body: JSON.stringify(toJSON(fromPlainText('A fifth one'))),
},
diff --git a/api/migrations/seed/default/notifications.js b/api/migrations/seed/default/notifications.js
new file mode 100644
index 0000000000..5eb2506e65
--- /dev/null
+++ b/api/migrations/seed/default/notifications.js
@@ -0,0 +1,35 @@
+// @flow
+const constants = require('./constants');
+const users = require('./users');
+
+const { DATE, BRIAN_ID, PREVIOUS_MEMBER_USER_ID } = constants;
+
+module.exports = [
+ {
+ actors: [
+ {
+ id: PREVIOUS_MEMBER_USER_ID,
+ payload: JSON.stringify(
+ users.find(u => u.id === PREVIOUS_MEMBER_USER_ID)
+ ),
+ type: 'USER',
+ },
+ ],
+ context: {
+ id: 'dm-2',
+ payload: '',
+ type: 'DIRECT_MESSAGE_THREAD',
+ },
+ createdAt: new Date(DATE + 1),
+ entities: [
+ {
+ id: '1',
+ payload: '',
+ type: 'MESSAGE',
+ },
+ ],
+ event: 'MESSAGE_CREATED',
+ id: '1',
+ modifiedAt: new Date(DATE + 1),
+ },
+];
diff --git a/api/migrations/seed/default/reactions.js b/api/migrations/seed/default/reactions.js
new file mode 100644
index 0000000000..0b86fbacaa
--- /dev/null
+++ b/api/migrations/seed/default/reactions.js
@@ -0,0 +1,13 @@
+// @flow
+const constants = require('./constants');
+const { DATE, MAX_ID } = constants;
+
+module.exports = [
+ {
+ id: '1',
+ messageId: '4',
+ type: 'like',
+ senderId: MAX_ID,
+ timestamp: new Date(DATE + 4),
+ },
+];
diff --git a/api/migrations/seed/default/threads.js b/api/migrations/seed/default/threads.js
index e6bb926413..c7df1aef87 100644
--- a/api/migrations/seed/default/threads.js
+++ b/api/migrations/seed/default/threads.js
@@ -6,17 +6,14 @@ const {
BRIAN_ID,
MAX_ID,
BRYN_ID,
- CHANNEL_MODERATOR_USER_ID,
SPECTRUM_GENERAL_CHANNEL_ID,
+ PRIVATE_GENERAL_CHANNEL_ID,
SPECTRUM_PRIVATE_CHANNEL_ID,
- PAYMENTS_GENERAL_CHANNEL_ID,
- PAYMENTS_PRIVATE_CHANNEL_ID,
- SPECTRUM_DELETED_CHANNEL_ID,
DELETED_COMMUNITY_DELETED_CHANNEL_ID,
MODERATOR_CREATED_CHANNEL_ID,
DELETED_COMMUNITY_ID,
SPECTRUM_COMMUNITY_ID,
- PAYMENTS_COMMUNITY_ID,
+ PRIVATE_COMMUNITY_ID,
SPECTRUM_ARCHIVED_CHANNEL_ID,
} = constants;
@@ -36,7 +33,6 @@ module.exports = [
toJSON(fromPlainText('This is it, we got a thread here'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE),
@@ -50,6 +46,8 @@ module.exports = [
],
modifiedAt: new Date(DATE),
lastActive: new Date(DATE),
+ messageCount: 4,
+ reactionCount: 0,
},
{
id: 'thread-2',
@@ -66,7 +64,6 @@ module.exports = [
toJSON(fromPlainText('This is just another thread'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE + 1),
@@ -80,6 +77,8 @@ module.exports = [
],
modifiedAt: new Date(DATE + 1),
lastActive: new Date(DATE + 1),
+ messageCount: 4,
+ reactionCount: 0,
},
{
id: 'thread-3',
@@ -96,7 +95,6 @@ module.exports = [
toJSON(fromPlainText('This is just another thread'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE + 2),
@@ -110,6 +108,8 @@ module.exports = [
],
modifiedAt: new Date(DATE + 2),
lastActive: new Date(DATE + 2),
+ messageCount: 0,
+ reactionCount: 0,
},
{
@@ -127,7 +127,6 @@ module.exports = [
toJSON(fromPlainText('This is it, we got a thread here'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE),
@@ -141,6 +140,8 @@ module.exports = [
],
modifiedAt: new Date(DATE),
lastActive: new Date(DATE),
+ messageCount: 0,
+ reactionCount: 0,
},
{
id: 'thread-5',
@@ -157,7 +158,6 @@ module.exports = [
toJSON(fromPlainText('This is just another thread'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE + 1),
@@ -171,6 +171,8 @@ module.exports = [
],
modifiedAt: new Date(DATE + 1),
lastActive: new Date(DATE + 1),
+ messageCount: 0,
+ reactionCount: 0,
},
{
id: 'thread-6',
@@ -187,7 +189,6 @@ module.exports = [
toJSON(fromPlainText('This is just another thread'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE + 2),
@@ -201,6 +202,8 @@ module.exports = [
],
modifiedAt: new Date(DATE + 2),
lastActive: new Date(DATE + 2),
+ messageCount: 0,
+ reactionCount: 0,
},
{
id: 'thread-7',
@@ -217,7 +220,6 @@ module.exports = [
toJSON(fromPlainText('This is just another thread'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE + 2),
@@ -232,6 +234,8 @@ module.exports = [
modifiedAt: new Date(DATE + 2),
lastActive: new Date(DATE + 2),
deletedAt: new Date(DATE + 3),
+ messageCount: 0,
+ reactionCount: 0,
},
{
id: 'thread-8',
@@ -248,7 +252,6 @@ module.exports = [
toJSON(fromPlainText('This is just another thread'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE + 2),
@@ -262,6 +265,8 @@ module.exports = [
],
modifiedAt: new Date(DATE + 2),
lastActive: new Date(DATE + 2),
+ messageCount: 0,
+ reactionCount: 0,
},
{
id: 'thread-9',
@@ -278,7 +283,6 @@ module.exports = [
toJSON(fromPlainText('This is just another thread'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE + 2),
@@ -309,7 +313,6 @@ module.exports = [
toJSON(fromPlainText('This is just another thread'))
),
},
- attachments: [],
edits: [
{
timestamp: new Date(DATE + 2),
@@ -323,5 +326,102 @@ module.exports = [
],
modifiedAt: new Date(DATE + 2),
lastActive: new Date(DATE + 2),
+ messageCount: 0,
+ reactionCount: 0,
+ },
+ {
+ id: 'thread-11',
+ createdAt: new Date(DATE + 2),
+ creatorId: BRYN_ID,
+ channelId: SPECTRUM_GENERAL_CHANNEL_ID,
+ communityId: SPECTRUM_COMMUNITY_ID,
+ isPublished: true,
+ isLocked: true,
+ type: 'DRAFTJS',
+ content: {
+ title: 'Deleted thread',
+ body: JSON.stringify(toJSON(fromPlainText('This is a deleted thread'))),
+ },
+ edits: [
+ {
+ timestamp: new Date(DATE + 2),
+ content: {
+ title: 'Deleted thread',
+ body: JSON.stringify(
+ toJSON(fromPlainText('This is a deleted thread'))
+ ),
+ },
+ },
+ ],
+ modifiedAt: new Date(DATE + 2),
+ lastActive: new Date(DATE + 2),
+ deletedAt: new Date(DATE + 3),
+ messageCount: 0,
+ reactionCount: 0,
+ },
+
+ {
+ id: 'thread-12',
+ createdAt: new Date(DATE + 2),
+ creatorId: BRYN_ID,
+ channelId: DELETED_COMMUNITY_DELETED_CHANNEL_ID,
+ communityId: DELETED_COMMUNITY_ID,
+ isPublished: true,
+ isLocked: false,
+ type: 'DRAFTJS',
+ content: {
+ title: 'Yet another thread',
+ body: JSON.stringify(
+ toJSON(fromPlainText('This is just another thread'))
+ ),
+ },
+ edits: [
+ {
+ timestamp: new Date(DATE + 2),
+ content: {
+ title: 'Yet another thread',
+ body: JSON.stringify(
+ toJSON(fromPlainText('This is just another thread'))
+ ),
+ },
+ },
+ ],
+ modifiedAt: new Date(DATE + 2),
+ lastActive: new Date(DATE + 2),
+ deletedAt: new Date(DATE),
+ messageCount: 0,
+ reactionCount: 0,
+ },
+
+ {
+ id: 'thread-13',
+ createdAt: new Date(DATE + 2),
+ creatorId: MAX_ID,
+ channelId: PRIVATE_GENERAL_CHANNEL_ID,
+ communityId: PRIVATE_COMMUNITY_ID,
+ isPublished: true,
+ isLocked: false,
+ type: 'DRAFTJS',
+ content: {
+ title: 'Yet another thread',
+ body: JSON.stringify(
+ toJSON(fromPlainText('This is just another thread'))
+ ),
+ },
+ edits: [
+ {
+ timestamp: new Date(DATE + 2),
+ content: {
+ title: 'Yet another thread',
+ body: JSON.stringify(
+ toJSON(fromPlainText('This is just another thread'))
+ ),
+ },
+ },
+ ],
+ modifiedAt: new Date(DATE + 2),
+ lastActive: new Date(DATE + 2),
+ messageCount: 0,
+ reactionCount: 0,
},
];
diff --git a/api/migrations/seed/default/usersChannels.js b/api/migrations/seed/default/usersChannels.js
index 2de1a4621c..14aaee961c 100644
--- a/api/migrations/seed/default/usersChannels.js
+++ b/api/migrations/seed/default/usersChannels.js
@@ -6,13 +6,14 @@ const {
MAX_ID,
BRYN_ID,
BLOCKED_USER_ID,
- PENDING_USER_ID,
PREVIOUS_MEMBER_USER_ID,
CHANNEL_MODERATOR_USER_ID,
COMMUNITY_MODERATOR_USER_ID,
SPECTRUM_GENERAL_CHANNEL_ID,
+ PRIVATE_GENERAL_CHANNEL_ID,
SPECTRUM_ARCHIVED_CHANNEL_ID,
SPECTRUM_PRIVATE_CHANNEL_ID,
+ DELETED_COMMUNITY_DELETED_CHANNEL_ID,
PAYMENTS_GENERAL_CHANNEL_ID,
PAYMENTS_PRIVATE_CHANNEL_ID,
MODERATOR_CREATED_CHANNEL_ID,
@@ -359,4 +360,40 @@ module.exports = [
isPending: false,
receiveNotifications: true,
},
+ {
+ id: '29',
+ createdAt: new Date(DATE),
+ userId: BRIAN_ID,
+ channelId: DELETED_COMMUNITY_DELETED_CHANNEL_ID,
+ isOwner: false,
+ isModerator: false,
+ isMember: true,
+ isBlocked: false,
+ isPending: false,
+ receiveNotifications: true,
+ },
+ {
+ id: '30',
+ createdAt: new Date(DATE),
+ userId: PREVIOUS_MEMBER_USER_ID,
+ channelId: SPECTRUM_GENERAL_CHANNEL_ID,
+ isOwner: false,
+ isModerator: false,
+ isMember: false,
+ isBlocked: false,
+ isPending: false,
+ receiveNotifications: false,
+ },
+ {
+ id: '31',
+ createdAt: new Date(DATE),
+ userId: MAX_ID,
+ channelId: PRIVATE_GENERAL_CHANNEL_ID,
+ isOwner: true,
+ isModerator: false,
+ isMember: true,
+ isBlocked: false,
+ isPending: false,
+ receiveNotifications: false,
+ },
];
diff --git a/api/migrations/seed/default/usersCommunities.js b/api/migrations/seed/default/usersCommunities.js
index 2599911242..63f9993373 100644
--- a/api/migrations/seed/default/usersCommunities.js
+++ b/api/migrations/seed/default/usersCommunities.js
@@ -11,6 +11,7 @@ const {
COMMUNITY_MODERATOR_USER_ID,
SPECTRUM_COMMUNITY_ID,
PAYMENTS_COMMUNITY_ID,
+ PRIVATE_COMMUNITY_ID,
} = constants;
module.exports = [
@@ -23,6 +24,7 @@ module.exports = [
isModerator: false,
isMember: true,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -35,6 +37,7 @@ module.exports = [
isModerator: false,
isMember: true,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -47,6 +50,7 @@ module.exports = [
isModerator: false,
isMember: true,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -59,6 +63,7 @@ module.exports = [
isModerator: false,
isMember: false,
isBlocked: true,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -71,6 +76,7 @@ module.exports = [
isModerator: false,
isMember: false,
isBlocked: false,
+ isPending: false,
receiveNotifications: false,
reputation: 100,
},
@@ -84,6 +90,7 @@ module.exports = [
isModerator: false,
isMember: true,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -96,6 +103,7 @@ module.exports = [
isModerator: false,
isMember: true,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -108,6 +116,7 @@ module.exports = [
isModerator: false,
isMember: true,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -120,6 +129,7 @@ module.exports = [
isModerator: false,
isMember: true,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -132,6 +142,7 @@ module.exports = [
isModerator: false,
isMember: true,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -144,6 +155,7 @@ module.exports = [
isModerator: true,
isMember: false,
isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
@@ -156,6 +168,34 @@ module.exports = [
isModerator: true,
isMember: true,
isBlocked: false,
+ isPending: false,
+ receiveNotifications: true,
+ reputation: 100,
+ },
+ {
+ id: '14',
+ createdAt: new Date(DATE),
+ userId: MAX_ID,
+ communityId: PRIVATE_COMMUNITY_ID,
+ isOwner: true,
+ isModerator: false,
+ isMember: true,
+ isBlocked: false,
+ isPending: false,
+ receiveNotifications: true,
+ reputation: 100,
+ },
+
+ {
+ id: '15',
+ createdAt: new Date(DATE),
+ userId: BRIAN_ID,
+ communityId: PRIVATE_COMMUNITY_ID,
+ isOwner: false,
+ isModerator: false,
+ isMember: false,
+ isBlocked: false,
+ isPending: false,
receiveNotifications: true,
reputation: 100,
},
diff --git a/api/migrations/seed/default/usersDirectMessageThreads.js b/api/migrations/seed/default/usersDirectMessageThreads.js
index 58ecce7c0b..be3fa186f3 100644
--- a/api/migrations/seed/default/usersDirectMessageThreads.js
+++ b/api/migrations/seed/default/usersDirectMessageThreads.js
@@ -1,6 +1,6 @@
// @flow
const constants = require('./constants');
-const { DATE, BRIAN_ID, MAX_ID, BRYN_ID } = constants;
+const { DATE, BRIAN_ID, MAX_ID, BRYN_ID, PREVIOUS_MEMBER_USER_ID } = constants;
module.exports = [
{
@@ -30,4 +30,22 @@ module.exports = [
lastSeen: new Date(DATE),
receiveNotifications: true,
},
+ {
+ id: '4',
+ createdAt: new Date(DATE),
+ userId: BRIAN_ID,
+ threadId: 'dm-2',
+ lastActive: new Date(DATE - 1),
+ lastSeen: null,
+ receiveNotifications: true,
+ },
+ {
+ id: '5',
+ createdAt: new Date(DATE),
+ userId: PREVIOUS_MEMBER_USER_ID,
+ threadId: 'dm-2',
+ lastActive: new Date(DATE - 1),
+ lastSeen: new Date(DATE - 1),
+ receiveNotifications: true,
+ },
];
diff --git a/api/migrations/seed/default/usersNotifications.js b/api/migrations/seed/default/usersNotifications.js
new file mode 100644
index 0000000000..9833127f7e
--- /dev/null
+++ b/api/migrations/seed/default/usersNotifications.js
@@ -0,0 +1,15 @@
+// @flow
+const constants = require('./constants');
+const { DATE, BRIAN_ID } = constants;
+
+module.exports = [
+ {
+ id: '1',
+ notificationId: '1',
+ createdAt: new Date(DATE),
+ userId: BRIAN_ID,
+ entityAddedAt: new Date(DATE + 1),
+ isRead: false,
+ isSeen: false,
+ },
+];
diff --git a/api/migrations/seed/default/usersSettings.js b/api/migrations/seed/default/usersSettings.js
new file mode 100644
index 0000000000..c46e54c28b
--- /dev/null
+++ b/api/migrations/seed/default/usersSettings.js
@@ -0,0 +1,33 @@
+// @flow
+
+module.exports = () => {
+ let settings = [];
+ for (let step = 0; step < 10; step++) {
+ settings.push({
+ userId: step.toString(),
+ notifications: {
+ types: {
+ newMessageInThreads: {
+ email: true,
+ },
+ newMention: {
+ email: true,
+ },
+ newDirectMessage: {
+ email: true,
+ },
+ newThreadCreated: {
+ email: true,
+ },
+ dailyDigest: {
+ email: true,
+ },
+ weeklyDigest: {
+ email: true,
+ },
+ },
+ },
+ });
+ }
+ return settings;
+};
diff --git a/api/migrations/seed/generate.js b/api/migrations/seed/generate.js
index 4d5bdf92b6..cfc4544152 100644
--- a/api/migrations/seed/generate.js
+++ b/api/migrations/seed/generate.js
@@ -181,7 +181,6 @@ const generateThread = (communityId, channelId, creatorId) => {
communityId,
isPublished: faker.random.boolean(),
content,
- attachments: [],
type: 'DRAFTJS',
lastActive: faker.date.between(createdAt, new Date()),
edits: [
@@ -244,7 +243,6 @@ const generateMessage = (senderId, threadId, threadType) => {
content: {
body: casual.text(),
},
- attachments: [],
messageType: 'text',
timestamp: faker.date.past(2),
};
diff --git a/api/migrations/seed/index.js b/api/migrations/seed/index.js
index 77f350f8b9..8bc67cf946 100644
--- a/api/migrations/seed/index.js
+++ b/api/migrations/seed/index.js
@@ -61,6 +61,7 @@ users.forEach(user => {
debug('Generating channels...');
let channels = defaultChannels;
communities.forEach(community => {
+ if (community.deletedAt) return;
randomAmount({ max: 10 }, () => {
channels.push(generateChannel(community.id));
});
@@ -78,6 +79,11 @@ generatedUsersChannels.map(elem => {
debug('Generating threads...');
let threads = defaultThreads;
channels.forEach(channel => {
+ const community = communities.find(
+ community => community.id === channel.communityId
+ );
+ if (community.deletedAt) return;
+
randomAmount({ max: 10 }, () => {
const creator = faker.random.arrayElement(users);
const thread = generateThread(channel.communityId, channel.id, creator.id);
@@ -149,7 +155,7 @@ messages.map(message => {
debug('Connecting to db...');
// $FlowFixMe
-const db = require('rethinkdbdash')({
+const db = require('rethinkhaberdashery')({
db: 'spectrum',
});
@@ -229,5 +235,6 @@ Promise.all([
debug(
'Encountered error while inserting data (see below), please run yarn run db:drop and yarn run db:migrate to restore tables to original condition, then run this script again.'
);
- debug(err);
+ console.error('❌ Error in job:\n');
+ console.error(err);
});
diff --git a/api/models/channel.js b/api/models/channel.js
index 0889714cef..5b2cedd2c4 100644
--- a/api/models/channel.js
+++ b/api/models/channel.js
@@ -1,16 +1,40 @@
// @flow
-const { db } = require('./db');
+const { db } = require('shared/db');
import { sendChannelNotificationQueue } from 'shared/bull/queues';
+import { events } from 'shared/analytics';
+import { trackQueue } from 'shared/bull/queues';
import type { DBChannel } from 'shared/types';
-const getChannelsByCommunity = (
- communityId: string
-): Promise> => {
- return db
+// reusable query parts -- begin
+const channelsByCommunitiesQuery = (...communityIds: string[]) =>
+ db
.table('channels')
- .getAll(communityId, { index: 'communityId' })
- .filter(channel => db.not(channel.hasFields('deletedAt')))
- .run();
+ .getAll(...communityIds, { index: 'communityId' })
+ .filter(channel => channel.hasFields('deletedAt').not());
+
+const channelsByIdsQuery = (...channelIds: string[]) =>
+ db
+ .table('channels')
+ .getAll(...channelIds)
+ .filter(channel => channel.hasFields('deletedAt').not());
+
+const threadsByChannelsQuery = (...channelIds: string[]) =>
+ channelsByIdsQuery(...channelIds)
+ .eqJoin('id', db.table('threads'), { index: 'channelId' })
+ .map(row => row('right'))
+ .filter(thread => db.not(thread.hasFields('deletedAt')));
+
+const membersByChannelsQuery = (...channelIds: string[]) =>
+ channelsByIdsQuery(...channelIds)
+ .eqJoin('id', db.table('usersChannels'), { index: 'channelId' })
+ .map(row => row('right'))
+ .filter({ isBlocked: false, isPending: false, isMember: true });
+
+// reusable query parts -- end
+
+// prettier-ignore
+const getChannelsByCommunity = (communityId: string): Promise> => {
+ return channelsByCommunitiesQuery(communityId).run();
};
/*
@@ -18,13 +42,9 @@ const getChannelsByCommunity = (
from public channels. We use this function to return an array of channelIds
that are public, and pass them into a getThreads function
*/
-const getPublicChannelsByCommunity = (
- communityId: string
-): Promise> => {
- return db
- .table('channels')
- .getAll(communityId, { index: 'communityId' })
- .filter(channel => db.not(channel.hasFields('deletedAt')))
+// prettier-ignore
+const getPublicChannelsByCommunity = (communityId: string): Promise> => {
+ return channelsByCommunitiesQuery(communityId)
.filter({ isPrivate: false })
.map(c => c('id'))
.run();
@@ -37,14 +57,9 @@ const getPublicChannelsByCommunity = (
to a channelId. This array of IDs will be passed into a threads method which
will only return threads in those channels
*/
-const getChannelsByUserAndCommunity = async (
- communityId: string,
- userId: string
-): Promise> => {
- const channels = await db
- .table('channels')
- .getAll(communityId, { index: 'communityId' })
- .run();
+// prettier-ignore
+const getChannelsByUserAndCommunity = async (communityId: string, userId: string): Promise> => {
+ const channels = await getChannelsByCommunity(communityId);
const channelIds = channels.map(c => c.id);
const publicChannels = channels.filter(c => !c.isPrivate).map(c => c.id);
@@ -60,57 +75,51 @@ const getChannelsByUserAndCommunity = async (
const usersChannelsIds = usersChannels.map(c => c.channelId);
const allPossibleChannels = [...publicChannels, ...usersChannelsIds];
- const distinct = allPossibleChannels.filter((x, i, a) => a.indexOf(x) == i);
+ const distinct = allPossibleChannels.filter((x, i, a) => a.indexOf(x) === i);
return distinct;
};
const getChannelsByUser = (userId: string): Promise> => {
- return (
- db
- .table('usersChannels')
- // get all the user's channels
- .getAll(userId, { index: 'userId' })
- // only return channels where the user is a member
- .filter({ isMember: true })
- // get the channel objects for each channel
- .eqJoin('channelId', db.table('channels'))
- // get rid of unnecessary info from the usersChannels object on the left
- .without({ left: ['id', 'channelId', 'userId', 'createdAt'] })
- // zip the tables
- .zip()
- // ensure we don't return any deleted channels
- .filter(channel => db.not(channel.hasFields('deletedAt')))
- .run()
- );
+ return db
+ .table('usersChannels')
+ .getAll([userId, 'member'], [userId, 'moderator'], [userId, 'owner'], {
+ index: 'userIdAndRole',
+ })
+ .eqJoin('channelId', db.table('channels'))
+ .without({ left: ['id', 'channelId', 'userId', 'createdAt'] })
+ .zip()
+ .filter(channel => db.not(channel.hasFields('deletedAt')))
+ .run();
};
-const getChannelBySlug = (
+const getChannelBySlug = async (
channelSlug: string,
communitySlug: string
-): Promise => {
+): Promise => {
+ const [communityId] = await db
+ .table('communities')
+ .getAll(communitySlug, { index: 'slug' })('id')
+ .run();
+
+ if (!communityId) return null;
+
return db
.table('channels')
+ .getAll(communityId, { index: 'communityId' })
.filter(channel =>
channel('slug')
.eq(channelSlug)
.and(db.not(channel.hasFields('deletedAt')))
)
- .eqJoin('communityId', db.table('communities'))
- .filter({ right: { slug: communitySlug } })
.run()
- .then(result => {
- if (result && result[0]) {
- return result[0].left;
- }
+ .then(res => {
+ if (Array.isArray(res) && res.length > 0) return res[0];
return null;
});
};
-const getChannelById = (id: string) => {
- return db
- .table('channels')
- .get(id)
- .run();
+const getChannelById = async (id: string) => {
+ return (await channelsByIdsQuery(id).run())[0] || null;
};
type GetChannelByIdArgs = {|
@@ -125,28 +134,7 @@ type GetChannelBySlugArgs = {|
export type GetChannelArgs = GetChannelByIdArgs | GetChannelBySlugArgs;
const getChannels = (channelIds: Array): Promise> => {
- return db
- .table('channels')
- .getAll(...channelIds)
- .filter(channel => db.not(channel.hasFields('deletedAt')))
- .run();
-};
-
-const getChannelMetaData = (channelId: string): Promise> => {
- const getThreadCount = db
- .table('threads')
- .getAll(channelId, { index: 'channelId' })
- .count()
- .run();
-
- const getMemberCount = db
- .table('usersChannels')
- .getAll(channelId, { index: 'channelId' })
- .filter({ isBlocked: false, isPending: false })
- .count()
- .run();
-
- return Promise.all([getThreadCount, getMemberCount]);
+ return channelsByIdsQuery(...channelIds).run();
};
type GroupedCount = {
@@ -154,24 +142,17 @@ type GroupedCount = {
reduction: number,
};
-const getChannelsThreadCounts = (
- channelIds: Array
-): Promise> => {
- return db
- .table('threads')
- .getAll(...channelIds, { index: 'channelId' })
+// prettier-ignore
+const getChannelsThreadCounts = (channelIds: Array): Promise> => {
+ return threadsByChannelsQuery(...channelIds)
.group('channelId')
.count()
.run();
};
-const getChannelsMemberCounts = (
- channelIds: Array
-): Promise> => {
- return db
- .table('usersChannels')
- .getAll(...channelIds, { index: 'channelId' })
- .filter({ isBlocked: false, isPending: false, isMember: true })
+// prettier-ignore
+const getChannelsMemberCounts = (channelIds: Array): Promise> => {
+ return membersByChannelsQuery(...channelIds)
.group('channelId')
.count()
.run();
@@ -198,12 +179,10 @@ export type EditChannelInput = {
},
};
-const createChannel = (
- {
- input: { communityId, name, slug, description, isPrivate, isDefault },
- }: CreateChannelInput,
- userId: string
-): Promise => {
+// prettier-ignore
+const createChannel = ({ input }: CreateChannelInput, userId: string): Promise => {
+ const { communityId, name, slug, description, isPrivate, isDefault } = input;
+
return db
.table('channels')
.insert(
@@ -215,12 +194,19 @@ const createChannel = (
slug,
isPrivate,
isDefault: isDefault ? true : false,
+ memberCount: 0,
},
{ returnChanges: true }
)
.run()
.then(result => result.changes[0].new_val)
.then(channel => {
+ trackQueue.add({
+ userId: userId,
+ event: events.CHANNEL_CREATED,
+ context: { channelId: channel.id },
+ });
+
// only trigger a new channel notification is the channel is public
if (!channel.isPrivate) {
sendChannelNotificationQueue.add({ channel, userId });
@@ -230,10 +216,8 @@ const createChannel = (
});
};
-const createGeneralChannel = (
- communityId: string,
- userId: string
-): Promise => {
+// prettier-ignore
+const createGeneralChannel = (communityId: string, userId: string): Promise => {
return createChannel(
{
input: {
@@ -249,9 +233,10 @@ const createGeneralChannel = (
);
};
-const editChannel = async ({
- input: { name, slug, description, isPrivate, channelId },
-}: EditChannelInput): Promise => {
+// prettier-ignore
+const editChannel = async ({ input }: EditChannelInput, userId: string): Promise => {
+ const { name, slug, description, isPrivate, channelId } = input;
+
const channelRecord = await db
.table('channels')
.get(channelId)
@@ -273,11 +258,26 @@ const editChannel = async ({
.then(result => {
// if an update happened
if (result.replaced === 1) {
+ trackQueue.add({
+ userId,
+ event: events.CHANNEL_EDITED,
+ context: { channelId: channelId },
+ });
+
return result.changes[0].new_val;
}
// an update was triggered from the client, but no data was changed
if (result.unchanged === 1) {
+ trackQueue.add({
+ userId,
+ event: events.CHANNEL_EDITED_FAILED,
+ context: { channelId: channelId },
+ properties: {
+ reason: 'no changes',
+ },
+ });
+
return result.changes[0].old_val;
}
@@ -285,16 +285,13 @@ const editChannel = async ({
});
};
-/*
- We delete data non-destructively, meaning the record does not get cleared
- from the db.
-*/
-const deleteChannel = (channelId: string): Promise => {
+const deleteChannel = (channelId: string, userId: string): Promise => {
return db
.table('channels')
.get(channelId)
.update(
{
+ deletedBy: userId,
deletedAt: new Date(),
slug: db.uuid(),
},
@@ -303,48 +300,164 @@ const deleteChannel = (channelId: string): Promise => {
nonAtomic: true,
}
)
- .run();
+ .run()
+ .then(() => {
+ trackQueue.add({
+ userId,
+ event: events.CHANNEL_DELETED,
+ context: { channelId },
+ });
+ });
};
-const getChannelMemberCount = (channelId: string): number => {
+// prettier-ignore
+const archiveChannel = (channelId: string, userId: string): Promise => {
return db
.table('channels')
- .get(channelId)('members')
- .count()
+ .get(channelId)
+ .update({ archivedAt: new Date() }, { returnChanges: 'always' })
+ .run()
+ .then(result => {
+ trackQueue.add({
+ userId: userId,
+ event: events.CHANNEL_ARCHIVED,
+ context: { channelId },
+ });
+
+ return result.changes[0].new_val || result.changes[0].old_val;
+ });
+};
+
+// prettier-ignore
+const restoreChannel = (channelId: string, userId: string): Promise => {
+ return db
+ .table('channels')
+ .get(channelId)
+ .update({ archivedAt: db.literal() }, { returnChanges: 'always' })
+ .run()
+ .then(result => {
+ trackQueue.add({
+ userId,
+ event: events.CHANNEL_RESTORED,
+ context: { channelId },
+ });
+
+ return result.changes[0].new_val || result.changes[0].old_val;
+ });
+};
+
+// prettier-ignore
+const archiveAllPrivateChannels = async (communityId: string, userId: string) => {
+ const channels = await db
+ .table('channels')
+ .getAll(communityId, { index: 'communityId' })
+ .filter({ isPrivate: true })
+ .run();
+
+ if (!channels || channels.length === 0) return;
+
+ const trackingPromises = channels.map(channel => {
+ return trackQueue.add({
+ userId,
+ event: events.CHANNEL_ARCHIVED,
+ context: { channelId: channel.id },
+ });
+ });
+
+ const archivePromise = db
+ .table('channels')
+ .getAll(communityId, { index: 'communityId' })
+ .filter({ isPrivate: true })
+ .update({ archivedAt: new Date() })
.run();
+
+ return await Promise.all([...trackingPromises, archivePromise]);
};
-const archiveChannel = (channelId: string) => {
+const incrementMemberCount = (channelId: string): Promise => {
return db
.table('channels')
.get(channelId)
- .update({ archivedAt: new Date() }, { returnChanges: 'always' })
+ .update(
+ {
+ memberCount: db
+ .row('memberCount')
+ .default(0)
+ .add(1),
+ },
+ { returnChanges: true }
+ )
.run()
.then(result => result.changes[0].new_val || result.changes[0].old_val);
};
-const restoreChannel = (channelId: string) => {
+const decrementMemberCount = (channelId: string): Promise => {
return db
.table('channels')
.get(channelId)
- .update({ archivedAt: db.literal() }, { returnChanges: 'always' })
+ .update(
+ {
+ memberCount: db
+ .row('memberCount')
+ .default(1)
+ .sub(1),
+ },
+ { returnChanges: true }
+ )
.run()
.then(result => result.changes[0].new_val || result.changes[0].old_val);
};
-const archiveAllPrivateChannels = (communityId: string) => {
+const setMemberCount = (
+ channelId: string,
+ value: number
+): Promise => {
return db
.table('channels')
- .getAll(communityId, { index: 'communityId' })
- .filter({ isPrivate: true })
- .update({ archivedAt: new Date() })
+ .get(channelId)
+ .update(
+ {
+ memberCount: value,
+ },
+ { returnChanges: true }
+ )
+ .run()
+ .then(result => result.changes[0].new_val || result.changes[0].old_val);
+};
+
+const getChannelsOnlineMemberCounts = (channelIds: Array) => {
+ return db
+ .table('usersChannels')
+ .getAll(...channelIds, {
+ index: 'channelId',
+ })
+ .filter({ isBlocked: false, isMember: true })
+ .pluck(['channelId', 'userId'])
+ .eqJoin('userId', db.table('users'))
+ .pluck('left', { right: ['lastSeen', 'isOnline'] })
+ .zip()
+ .filter(rec =>
+ rec('isOnline')
+ .eq(true)
+ .or(
+ rec('lastSeen')
+ .toEpochTime()
+ .ge(
+ db
+ .now()
+ .toEpochTime()
+ .sub(86400)
+ )
+ )
+ )
+ .group('channelId')
+ .count()
.run();
};
module.exports = {
getChannelBySlug,
getChannelById,
- getChannelMetaData,
getChannelsByUser,
getChannelsByCommunity,
getPublicChannelsByCommunity,
@@ -353,11 +466,20 @@ module.exports = {
createGeneralChannel,
editChannel,
deleteChannel,
- getChannelMemberCount,
getChannelsMemberCounts,
getChannelsThreadCounts,
getChannels,
archiveChannel,
restoreChannel,
archiveAllPrivateChannels,
+ incrementMemberCount,
+ decrementMemberCount,
+ setMemberCount,
+ getChannelsOnlineMemberCounts,
+ __forQueryTests: {
+ channelsByCommunitiesQuery,
+ channelsByIdsQuery,
+ threadsByChannelsQuery,
+ membersByChannelsQuery,
+ },
};
diff --git a/api/models/channelSettings.js b/api/models/channelSettings.js
index eab1fea066..6716ada3ee 100644
--- a/api/models/channelSettings.js
+++ b/api/models/channelSettings.js
@@ -1,32 +1,49 @@
// @flow
-const { db } = require('./db');
-import type { DBChannelSettings } from 'shared/types';
+const { db } = require('shared/db');
+import type { DBChannelSettings, DBChannel } from 'shared/types';
import { getChannelById } from './channel';
-import shortid from 'shortid';
+import { events } from 'shared/analytics';
+import { trackQueue } from 'shared/bull/queues';
+import uuidv4 from 'uuid/v4';
const defaultSettings = {
joinSettings: {
tokenJoinEnabled: false,
message: null,
},
+ slackSettings: {
+ botLinks: {
+ threadCreated: null,
+ },
+ },
};
-export const getChannelSettings = (id: string) => {
- return db
+// prettier-ignore
+export const getOrCreateChannelSettings = async (channelId: string): Promise => {
+ const settings = await db
.table('channelSettings')
- .getAll(id, { index: 'channelId' })
- .run()
- .then(data => {
- if (!data || data.length === 0) {
- return defaultSettings;
- }
- return data[0];
- });
+ .getAll(channelId, { index: 'channelId' })
+ .run();
+
+ if (!settings || settings.length === 0) {
+ return await db
+ .table('channelSettings')
+ .insert(
+ {
+ ...defaultSettings,
+ channelId,
+ },
+ { returnChanges: true }
+ )
+ .run()
+ .then(results => results.changes[0].new_val);
+ }
+
+ return settings[0];
};
-export const getChannelsSettings = (
- channelIds: Array
-): Promise => {
+// prettier-ignore
+export const getChannelsSettings = (channelIds: Array): Promise => {
return db
.table('channelSettings')
.getAll(...channelIds, { index: 'channelId' })
@@ -50,57 +67,118 @@ export const getChannelsSettings = (
});
};
-export const createChannelSettings = (id: string) => {
+export const enableChannelTokenJoin = (channelId: string, userId: string) => {
return db
.table('channelSettings')
- .insert({
- channelId: id,
+ .getAll(channelId, { index: 'channelId' })
+ .update({
joinSettings: {
- token: null,
- tokenJoinEnabled: false,
+ tokenJoinEnabled: true,
+ token: uuidv4(),
},
})
.run()
- .then(async () => await getChannelById(id));
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.CHANNEL_JOIN_TOKEN_ENABLED,
+ context: { channelId },
+ });
+
+ return await getChannelById(channelId);
+ });
};
-export const enableChannelTokenJoin = (id: string) => {
+export const disableChannelTokenJoin = (channelId: string, userId: string) => {
return db
.table('channelSettings')
- .getAll(id, { index: 'channelId' })
+ .getAll(channelId, { index: 'channelId' })
.update({
joinSettings: {
- tokenJoinEnabled: true,
- token: shortid.generate(),
+ tokenJoinEnabled: false,
+ token: null,
},
})
.run()
- .then(async () => await getChannelById(id));
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.CHANNEL_JOIN_TOKEN_DISABLED,
+ context: { channelId },
+ });
+
+ return await getChannelById(channelId);
+ });
};
-export const disableChannelTokenJoin = (id: string) => {
+export const resetChannelJoinToken = (channelId: string, userId: string) => {
return db
.table('channelSettings')
- .getAll(id, { index: 'channelId' })
+ .getAll(channelId, { index: 'channelId' })
.update({
joinSettings: {
- tokenJoinEnabled: false,
- token: null,
+ token: uuidv4(),
},
})
.run()
- .then(async () => await getChannelById(id));
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.CHANNEL_JOIN_TOKEN_RESET,
+ context: { channelId },
+ });
+
+ return await getChannelById(channelId);
+ });
};
-export const resetChannelJoinToken = (id: string) => {
+type UpdateInput = {
+ channelId: string,
+ slackChannelId: ?string,
+ eventType: 'threadCreated',
+};
+
+// prettier-ignore
+export const updateChannelSlackBotLinks = async ({ channelId, slackChannelId, eventType }: UpdateInput, userId: string): Promise => {
+ const settings: DBChannelSettings = await getOrCreateChannelSettings(
+ channelId
+ );
+
+ let newSettings;
+ if (!settings.slackSettings) {
+ settings.slackSettings = {
+ botLinks: {
+ [eventType]:
+ slackChannelId && slackChannelId.length > 0 ? slackChannelId : null,
+ },
+ };
+ newSettings = Object.assign({}, settings);
+ } else {
+ newSettings = Object.assign({}, settings, {
+ slackSettings: {
+ botLinks: {
+ [eventType]:
+ slackChannelId && slackChannelId.length > 0 ? slackChannelId : null,
+ },
+ },
+ });
+ }
+
return db
.table('channelSettings')
- .getAll(id, { index: 'channelId' })
+ .getAll(channelId, { index: 'channelId' })
.update({
- joinSettings: {
- token: shortid.generate(),
- },
+ ...newSettings,
})
.run()
- .then(async () => await getChannelById(id));
+ .then(async () => {
+
+ trackQueue.add({
+ userId,
+ event: events.CHANNEL_SLACK_BOT_LINK_UPDATED,
+ context: { channelId },
+ });
+
+ return await getChannelById(channelId)
+ });
};
diff --git a/api/models/community.js b/api/models/community.js
index 6597de3557..db4920c35e 100644
--- a/api/models/community.js
+++ b/api/models/community.js
@@ -1,14 +1,17 @@
// @flow
-const { db } = require('./db');
+const { db } = require('shared/db');
+import intersection from 'lodash.intersection';
import { parseRange } from './utils';
-import { uploadImage } from '../utils/s3';
+import { uploadImage } from '../utils/file-storage';
import getRandomDefaultPhoto from '../utils/get-random-default-photo';
import {
sendNewCommunityWelcomeEmailQueue,
_adminSendCommunityCreatedEmailQueue,
+ searchQueue,
+ trackQueue,
} from 'shared/bull/queues';
-import { removeMemberInChannel } from './usersChannels';
-import type { DBCommunity } from 'shared/types';
+import { events } from 'shared/analytics';
+import type { DBCommunity, DBUser } from 'shared/types';
import type { Timeframe } from './utils';
export const getCommunityById = (id: string): Promise => {
@@ -22,9 +25,8 @@ export const getCommunityById = (id: string): Promise => {
});
};
-export const getCommunities = (
- communityIds: Array
-): Promise> => {
+// prettier-ignore
+export const getCommunities = (communityIds: Array): Promise> => {
return db
.table('communities')
.getAll(...communityIds)
@@ -32,9 +34,8 @@ export const getCommunities = (
.run();
};
-export const getCommunitiesBySlug = (
- slugs: Array
-): Promise> => {
+// prettier-ignore
+export const getCommunitiesBySlug = (slugs: Array): Promise> => {
return db
.table('communities')
.getAll(...slugs, { index: 'slug' })
@@ -42,16 +43,25 @@ export const getCommunitiesBySlug = (
.run();
};
-export const getCommunitiesByUser = (
- userId: string
-): Promise> => {
+export const getCommunityBySlug = (slug: string): Promise => {
+ return db
+ .table('communities')
+ .getAll(slug, { index: 'slug' })
+ .filter(community => db.not(community.hasFields('deletedAt')))
+ .run()
+ .then(results => {
+ if (!results || results.length === 0) return null;
+ return results[0];
+ });
+};
+
+// prettier-ignore
+export const getCommunitiesByUser = (userId: string): Promise> => {
return (
db
.table('usersCommunities')
// get all the user's communities
- .getAll(userId, { index: 'userId' })
- // only return communities the user is a member of
- .filter({ isMember: true })
+ .getAll([userId, true], { index: 'userIdAndIsMember' })
// get the community objects for each community
.eqJoin('communityId', db.table('communities'))
// get rid of unnecessary info from the usersCommunities object on the left
@@ -64,6 +74,70 @@ export const getCommunitiesByUser = (
);
};
+// prettier-ignore
+export const getVisibleCommunitiesByUser = async (evaluatingUserId: string, currentUserId: string) => {
+ const evaluatingUserMemberships = await db
+ .table('usersCommunities')
+ // get all the user's communities
+ .getAll([evaluatingUserId, true], { index: 'userIdAndIsMember' })
+ // get the community objects for each community
+ .eqJoin('communityId', db.table('communities'))
+ // get rid of unnecessary info from the usersCommunities object on the left
+ .without({ left: ['id', 'communityId', 'userId', 'createdAt'] })
+ // zip the tables
+ .zip()
+ // ensure we don't return any deleted communities
+ .filter(community => db.not(community.hasFields('deletedAt')))
+ .run()
+
+ const currentUserMemberships = await db
+ .table('usersCommunities')
+ // get all the user's communities
+ .getAll([currentUserId, true], { index: 'userIdAndIsMember' })
+ // get the community objects for each community
+ .eqJoin('communityId', db.table('communities'))
+ // get rid of unnecessary info from the usersCommunities object on the left
+ .without({ left: ['id', 'communityId', 'userId', 'createdAt'] })
+ // zip the tables
+ .zip()
+ // ensure we don't return any deleted communities
+ .filter(community => db.not(community.hasFields('deletedAt')))
+ .run()
+
+ const evaluatingUserCommunityIds = evaluatingUserMemberships.map(community => community.id)
+ const currentUserCommunityIds = currentUserMemberships.map(community => community.id)
+ const publicCommunityIds = evaluatingUserMemberships
+ .filter(community => !community.isPrivate)
+ .map(community => community.id)
+
+ const overlappingMemberships = intersection(evaluatingUserCommunityIds, currentUserCommunityIds)
+ const allVisibleCommunityIds = [...publicCommunityIds, ...overlappingMemberships]
+ const distinctCommunityIds = allVisibleCommunityIds.filter((x, i, a) => a.indexOf(x) === i)
+
+ return await db
+ .table('communities')
+ .getAll(...distinctCommunityIds)
+ .run()
+}
+
+export const getPublicCommunitiesByUser = async (userId: string) => {
+ return await db
+ .table('usersCommunities')
+ // get all the user's communities
+ .getAll([userId, true], { index: 'userIdAndIsMember' })
+ // get the community objects for each community
+ .eqJoin('communityId', db.table('communities'))
+ // only return public community ids
+ .filter(row => row('right')('isPrivate').eq(false))
+ // get rid of unnecessary info from the usersCommunities object on the left
+ .without({ left: ['id', 'communityId', 'userId', 'createdAt'] })
+ // zip the tables
+ .zip()
+ // ensure we don't return any deleted communities
+ .filter(community => db.not(community.hasFields('deletedAt')))
+ .run();
+};
+
export const getCommunitiesChannelCounts = (communityIds: Array) => {
return db
.table('channels')
@@ -77,38 +151,41 @@ export const getCommunitiesChannelCounts = (communityIds: Array) => {
export const getCommunitiesMemberCounts = (communityIds: Array) => {
return db
.table('usersCommunities')
- .getAll(...communityIds, { index: 'communityId' })
- .filter({ isBlocked: false, isMember: true })
+ .getAll(...communityIds.map(id => [id, true]), {
+ index: 'communityIdAndIsMember',
+ })
.group('communityId')
.count()
.run();
};
-export const getCommunityMetaData = (
- communityId: string
-): Promise> => {
- const getChannelCount = db
- .table('channels')
- .getAll(communityId, { index: 'communityId' })
- .filter(channel => db.not(channel.hasFields('deletedAt')))
- .count()
- .run();
-
- const getMemberCount = db
- .table('usersCommunities')
- .getAll(communityId, { index: 'communityId' })
- .filter({ isBlocked: false, isMember: true })
- .count()
- .run();
-
- return Promise.all([getChannelCount, getMemberCount]);
-};
-
-export const getMemberCount = (communityId: string): Promise => {
+export const getCommunitiesOnlineMemberCounts = (
+ communityIds: Array
+) => {
return db
.table('usersCommunities')
- .getAll(communityId, { index: 'communityId' })
- .filter({ isBlocked: false, isMember: true })
+ .getAll(...communityIds.map(id => [id, true]), {
+ index: 'communityIdAndIsMember',
+ })
+ .pluck(['communityId', 'userId'])
+ .eqJoin('userId', db.table('users'))
+ .pluck('left', { right: ['lastSeen', 'isOnline'] })
+ .zip()
+ .filter(rec =>
+ rec('isOnline')
+ .eq(true)
+ .or(
+ rec('lastSeen')
+ .toEpochTime()
+ .ge(
+ db
+ .now()
+ .toEpochTime()
+ .sub(86400)
+ )
+ )
+ )
+ .group('communityId')
.count()
.run();
};
@@ -121,6 +198,7 @@ export type CreateCommunityInput = {
website: string,
file: Object,
coverFile: Object,
+ isPrivate: boolean,
},
};
@@ -132,19 +210,15 @@ export type EditCommunityInput = {
website: string,
file: Object,
coverFile: Object,
+ coverPhoto: string,
communityId: string,
},
};
-// TODO(@mxstbr): Use DBUser type
-type CommunityCreator = Object;
+// prettier-ignore
+export const createCommunity = ({ input }: CreateCommunityInput, user: DBUser): Promise => {
+ const { name, slug, description, website, file, coverFile, isPrivate } = input
-export const createCommunity = (
- {
- input: { name, slug, description, website, file, coverFile },
- }: CreateCommunityInput,
- user: CommunityCreator
-): Promise => {
return db
.table('communities')
.insert(
@@ -159,13 +233,26 @@ export const createCommunity = (
modifiedAt: null,
creatorId: user.id,
administratorEmail: user.email,
- stripeCustomerId: null,
+ isPrivate,
+ memberCount: 0,
},
{ returnChanges: true }
)
.run()
.then(result => result.changes[0].new_val)
.then(community => {
+ trackQueue.add({
+ userId: user.id,
+ event: events.COMMUNITY_CREATED,
+ context: { communityId: community.id },
+ });
+
+ searchQueue.add({
+ id: community.id,
+ type: 'community',
+ event: 'created'
+ })
+
// send a welcome email to the community creator
sendNewCommunityWelcomeEmailQueue.add({ user, community });
// email brian with info about the community and owner
@@ -199,8 +286,8 @@ export const createCommunity = (
if (file || coverFile) {
if (file && !coverFile) {
const { coverPhoto } = getRandomDefaultPhoto();
- return uploadImage(file, 'communities', community.id).then(
- profilePhoto => {
+ return uploadImage(file, 'communities', community.id)
+ .then(profilePhoto => {
return (
db
.table('communities')
@@ -227,12 +314,14 @@ export const createCommunity = (
}
})
);
- }
- );
+ })
+ .catch(err => {
+ console.error(err);
+ });
} else if (!file && coverFile) {
const { profilePhoto } = getRandomDefaultPhoto();
- return uploadImage(coverFile, 'communities', community.id).then(
- coverPhoto => {
+ return uploadImage(coverFile, 'communities', community.id)
+ .then(coverPhoto => {
// update the community with the profilePhoto
return (
db
@@ -262,15 +351,23 @@ export const createCommunity = (
return null;
})
);
- }
- );
+ })
+ .catch(err => {
+ console.error(err);
+ });
} else if (file && coverFile) {
const uploadFile = file => {
- return uploadImage(file, 'communities', community.id);
+ return uploadImage(file, 'communities', community.id).catch(err => {
+ console.error(err);
+ });
};
const uploadCoverFile = coverFile => {
- return uploadImage(coverFile, 'communities', community.id);
+ return uploadImage(coverFile, 'communities', community.id).catch(
+ err => {
+ console.error(err);
+ }
+ );
};
return Promise.all([
@@ -311,9 +408,11 @@ export const createCommunity = (
});
};
-export const editCommunity = ({
- input: { name, slug, description, website, file, coverFile, communityId },
-}: EditCommunityInput): Promise => {
+// prettier-ignore
+export const editCommunity = ({ input }: EditCommunityInput, userId: string): Promise => {
+ const { name, slug, description, website, file, coverFile, communityId } = input
+ let { coverPhoto } = input
+
return db
.table('communities')
.get(communityId)
@@ -328,21 +427,44 @@ export const editCommunity = ({
});
})
.then(community => {
+ searchQueue.add({
+ id: community.id,
+ type: 'community',
+ event: 'edited'
+ })
+
// if no file was uploaded, update the community with new string values
if (!file && !coverFile) {
+ // if the coverPhoto was deleted, reset to default
+ if (!coverPhoto) {
+ ({ coverPhoto } = getRandomDefaultPhoto())
+ }
return db
.table('communities')
.get(communityId)
- .update({ ...community }, { returnChanges: 'always' })
- .run()
+ .update({ ...community, coverPhoto }, { returnChanges: 'always' })
+ .run()
.then(result => {
// if an update happened
if (result.replaced === 1) {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_EDITED,
+ context: { communityId }
+ })
return result.changes[0].new_val;
}
// an update was triggered from the client, but no data was changed
if (result.unchanged === 1) {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_EDITED_FAILED,
+ context: { communityId },
+ properties: {
+ reason: 'no changes'
+ }
+ })
return result.changes[0].old_val;
}
});
@@ -350,6 +472,10 @@ export const editCommunity = ({
if (file || coverFile) {
if (file && !coverFile) {
+ // if the coverPhoto was deleted, reset to default
+ if (!coverPhoto) {
+ ({ coverPhoto } = getRandomDefaultPhoto())
+ }
return uploadImage(file, 'communities', community.id).then(
profilePhoto => {
// update the community with the profilePhoto
@@ -361,6 +487,7 @@ export const editCommunity = ({
{
...community,
profilePhoto,
+ coverPhoto
},
{ returnChanges: 'always' }
)
@@ -458,23 +585,14 @@ export const editCommunity = ({
});
};
-/*
- We delete data non-destructively, meaning the record does not get cleared
- from the db. Instead, we set a 'deleted' field on the object with a value
- of the current time on the db.
-
- We set the value as a timestamp so that in the future we have option value
- to perform actions like:
- - permanantely delete records that were deleted > X days ago
- - run logs for deletions over time
- - etc
-*/
-export const deleteCommunity = (communityId: string): Promise => {
+// prettier-ignore
+export const deleteCommunity = (communityId: string, userId: string): Promise => {
return db
.table('communities')
.get(communityId)
.update(
{
+ deletedBy: userId,
deletedAt: new Date(),
slug: db.uuid(),
},
@@ -483,13 +601,24 @@ export const deleteCommunity = (communityId: string): Promise => {
nonAtomic: true,
}
)
- .run();
+ .run()
+ .then(() => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_DELETED,
+ context: { communityId },
+ });
+
+ searchQueue.add({
+ id: communityId,
+ type: 'community',
+ event: 'deleted'
+ })
+ });
};
-export const setPinnedThreadInCommunity = (
- communityId: string,
- value: string
-): Promise => {
+// prettier-ignore
+export const setPinnedThreadInCommunity = (communityId: string, value: string, userId: string): Promise => {
return db
.table('communities')
.get(communityId)
@@ -500,39 +629,22 @@ export const setPinnedThreadInCommunity = (
{ returnChanges: 'always' }
)
.run()
- .then(result => result.changes[0].new_val);
-};
+ .then(result => {
+ // prettier-ignore
+ const event = value ? events.THREAD_PINNED : events.THREAD_UNPINNED;
-export const unsubscribeFromAllChannelsInCommunity = (
- communityId: string,
- userId: string
-): Promise> => {
- return db
- .table('channels')
- .getAll(communityId, { index: 'communityId' })
- .run()
- .then(channels => {
- return channels.map(channel => removeMemberInChannel(channel.id, userId));
- });
-};
+ trackQueue.add({
+ userId,
+ event: event,
+ context: { threadId: value },
+ });
-export const userIsMemberOfCommunity = (
- communityId: string,
- userId: string
-): Promise => {
- return db
- .table('communities')
- .get(communityId)
- .run()
- .then(community => {
- return community.members.indexOf(userId) > -1;
+ return result.changes[0].new_val
});
};
-export const userIsMemberOfAnyChannelInCommunity = (
- communityId: string,
- userId: string
-): Promise => {
+// prettier-ignore
+export const userIsMemberOfAnyChannelInCommunity = (communityId: string, userId: string): Promise => {
return db('spectrum')
.table('channels')
.getAll(communityId, { index: 'communityId' })
@@ -541,10 +653,7 @@ export const userIsMemberOfAnyChannelInCommunity = (
.filter({ userId })
.pluck('isMember')
.run()
- .then(channels => {
- // if any of the channels return true for isMember, we return true
- return channels.some(channel => channel.isMember);
- });
+ .then(channels => channels.some(channel => channel.isMember));
};
export const getRecentCommunities = (): Array => {
@@ -556,32 +665,6 @@ export const getRecentCommunities = (): Array => {
.run();
};
-export const getCommunitiesBySearchString = (
- string: string,
- amount: number
-): Promise> => {
- return db
- .table('communities')
- .filter(community => community.coerceTo('string').match(`(?i)${string}`))
- .filter(community => db.not(community.hasFields('deletedAt')))
- .limit(amount)
- .run();
-};
-
-// TODO(@mxstbr): Replace Array with Array
-export const searchThreadsInCommunity = (
- channels: Array,
- searchString: string
-): Promise> => {
- return db
- .table('threads')
- .getAll(...channels, { index: 'channelId' })
- .filter(thread => thread.coerceTo('string').match(`(?i)${searchString}`))
- .filter(thread => db.not(thread.hasFields('deletedAt')))
- .orderBy(db.desc('lastActive'))
- .run();
-};
-
export const getThreadCount = (communityId: string) => {
return db
.table('threads')
@@ -623,33 +706,44 @@ export const getCommunityGrowth = async (
};
};
-export const setCommunityPendingAdministratorEmail = (
- communityId: string,
- pendingAdministratorEmail: string
-): Promise => {
+// prettier-ignore
+export const setCommunityPendingAdministratorEmail = (communityId: string, email: string, userId: string): Promise => {
return db
.table('communities')
.get(communityId)
.update({
- pendingAdministratorEmail,
+ pendingAdministratorEmail: email,
})
.run()
- .then(() => getCommunityById(communityId));
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_ADMINISTRATOR_EMAIL_ADDED,
+ context: { communityId },
+ });
+
+ return await getCommunityById(communityId)
+ });
};
-export const updateCommunityAdministratorEmail = (
- communityId: string,
- administratorEmail: string
-): Promise => {
+// prettier-ignore
+export const updateCommunityAdministratorEmail = (communityId: string, email: string, userId: string): Promise => {
return db
.table('communities')
.get(communityId)
.update({
- administratorEmail,
+ administratorEmail: email,
pendingAdministratorEmail: db.literal(),
})
.run()
- .then(() => getCommunityById(communityId));
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_ADMINISTRATOR_EMAIL_VERIFIED,
+ context: { communityId },
+ });
+ return await getCommunityById(communityId)
+ });
};
export const resetCommunityAdministratorEmail = (communityId: string) => {
@@ -663,51 +757,57 @@ export const resetCommunityAdministratorEmail = (communityId: string) => {
.run();
};
-export const setStripeCustomerId = (
- communityId: string,
- stripeCustomerId: string
+export const incrementMemberCount = (
+ communityId: string
): Promise => {
return db
.table('communities')
.get(communityId)
.update(
{
- stripeCustomerId,
+ memberCount: db
+ .row('memberCount')
+ .default(0)
+ .add(1),
},
- {
- returnChanges: 'always',
- }
+ { returnChanges: true }
)
.run()
.then(result => result.changes[0].new_val || result.changes[0].old_val);
};
-export const disablePaidFeatureFlags = (communityId: string) => {
+export const decrementMemberCount = (
+ communityId: string
+): Promise => {
return db
.table('communities')
.get(communityId)
- .update({
- analyticsEnabled: false,
- prioritySupportEnabled: false,
- })
- .run();
+ .update(
+ {
+ memberCount: db
+ .row('memberCount')
+ .default(1)
+ .sub(1),
+ },
+ { returnChanges: true }
+ )
+ .run()
+ .then(result => result.changes[0].new_val || result.changes[0].old_val);
};
-export const updateCommunityPaidFeature = (
+export const setMemberCount = (
communityId: string,
- feature: string,
- value: boolean
-) => {
- const obj = { [feature]: value };
+ value: number
+): Promise => {
return db
.table('communities')
.get(communityId)
- .update(obj, { returnChanges: 'always' })
+ .update(
+ {
+ memberCount: value,
+ },
+ { returnChanges: true }
+ )
.run()
- .then(result => {
- if (result && result.changes.length > 0) {
- return result.changes[0].new_val || result.changes[0].old_val;
- }
- return { id: communityId };
- });
+ .then(result => result.changes[0].new_val || result.changes[0].old_val);
};
diff --git a/api/models/communitySettings.js b/api/models/communitySettings.js
index 201247c77c..f71ae32d41 100644
--- a/api/models/communitySettings.js
+++ b/api/models/communitySettings.js
@@ -1,16 +1,61 @@
// @flow
-const { db } = require('./db');
-import type { DBCommunitySettings } from 'shared/types';
+const { db } = require('shared/db');
+import type { DBCommunitySettings, DBCommunity } from 'shared/types';
import { getCommunityById } from './community';
+import uuidv4 from 'uuid/v4';
+import axios from 'axios';
+import { decryptString } from 'shared/encryption';
+import { trackQueue } from 'shared/bull/queues';
+import { events } from 'shared/analytics';
const defaultSettings = {
brandedLogin: {
isEnabled: false,
message: null,
},
+ slackSettings: {
+ connectedAt: null,
+ connectedBy: null,
+ teamName: null,
+ teamId: null,
+ scope: null,
+ token: null,
+ invitesSentAt: null,
+ invitesMemberCount: null,
+ invitesCustomMessage: null,
+ },
+ joinSettings: {
+ tokenJoinEnabled: false,
+ token: null,
+ },
+};
+
+// prettier-ignore
+export const getOrCreateCommunitySettings = async (communityId: string): Promise => {
+ const settings = await db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .run();
+
+ if (!settings || settings.length === 0) {
+ return await db
+ .table('communitySettings')
+ .insert(
+ {
+ ...defaultSettings,
+ communityId,
+ },
+ { returnChanges: true }
+ )
+ .run()
+ .then(results => results.changes[0].new_val);
+ }
+
+ return settings[0];
};
-export const getCommunitySettings = (id: string) => {
+// prettier-ignore
+export const getCommunitySettings = (id: string): Promise => {
return db
.table('communitySettings')
.getAll(id, { index: 'communityId' })
@@ -23,19 +68,19 @@ export const getCommunitySettings = (id: string) => {
});
};
-export const getCommunitiesSettings = (
- communityIds: Array
-): Promise => {
+// prettier-ignore
+export const getCommunitiesSettings = (communityIds: Array): Promise => {
return db
.table('communitySettings')
.getAll(...communityIds, { index: 'communityId' })
.run()
.then(data => {
- if (!data || data.length === 0)
+ if (!data || data.length === 0) {
return Array.from({ length: communityIds.length }, (_, index) => ({
...defaultSettings,
communityId: communityIds[index],
}));
+ }
if (data.length === communityIds.length) {
return data.map(
@@ -50,70 +95,361 @@ export const getCommunitiesSettings = (
}
if (data.length < communityIds.length) {
- return communityIds.map(community => {
- const record = data.find(o => o.communityId === community);
+ return communityIds.map(communityId => {
+ const record = data.find(o => o.communityId === communityId);
+ if (record) return record;
+ return {
+ ...defaultSettings,
+ communityId,
+ };
+ });
+ }
+
+ if (data.length > communityIds.length) {
+ return communityIds.map(communityId => {
+ const record = data.find(o => o.communityId === communityId);
if (record) return record;
return {
...defaultSettings,
- communityId: community,
+ communityId,
};
});
}
});
};
-export const createCommunitySettings = (id: string) => {
+// prettier-ignore
+export const createCommunitySettings = (communityId: string): Promise => {
return db
.table('communitySettings')
.insert({
- communityId: id,
- brandedLogin: {
- isEnabled: false,
- message: null,
- },
+ communityId,
+ ...defaultSettings
})
.run()
- .then(async () => await getCommunityById(id));
+ .then(async () => await getCommunityById(communityId));
};
-export const enableCommunityBrandedLogin = (id: string) => {
+// prettier-ignore
+export const enableCommunityBrandedLogin = (communityId: string, userId: string): Promise => {
return db
.table('communitySettings')
- .getAll(id, { index: 'communityId' })
+ .getAll(communityId, { index: 'communityId' })
.update({
brandedLogin: {
isEnabled: true,
},
})
.run()
- .then(async () => await getCommunityById(id));
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_BRANDED_LOGIN_ENABLED,
+ context: { communityId }
+ })
+ return await getCommunityById(communityId)
+ });
};
-export const disableCommunityBrandedLogin = (id: string) => {
+// prettier-ignore
+export const disableCommunityBrandedLogin = (communityId: string, userId: string): Promise => {
return db
.table('communitySettings')
- .getAll(id, { index: 'communityId' })
+ .getAll(communityId, { index: 'communityId' })
.update({
brandedLogin: {
isEnabled: false,
},
})
.run()
- .then(async () => await getCommunityById(id));
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_BRANDED_LOGIN_DISABLED,
+ context: { communityId }
+ })
+ return await getCommunityById(communityId)
+ });
};
-export const updateCommunityBrandedLoginMessage = (
- id: string,
- message: ?string
-) => {
+// prettier-ignore
+export const updateCommunityBrandedLoginMessage = (communityId: string, message: ?string, userId: string): Promise => {
return db
.table('communitySettings')
- .getAll(id, { index: 'communityId' })
+ .getAll(communityId, { index: 'communityId' })
.update({
brandedLogin: {
message: message,
},
})
.run()
- .then(async () => await getCommunityById(id));
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_BRANDED_LOGIN_SETTINGS_SAVED,
+ context: { communityId }
+ })
+ return await getCommunityById(communityId)
+ });
+};
+
+type UpdateSlackSettingsInput = {
+ token: string,
+ teamName: string,
+ teamId: string,
+ connectedBy: string,
+ scope: string,
+};
+export const updateSlackSettingsAfterConnection = async (
+ communityId: string,
+ input: UpdateSlackSettingsInput,
+ userId: string
+): Promise => {
+ const settings = await db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .run();
+
+ if (!settings || settings.length === 0) {
+ return await createCommunitySettings(communityId)
+ .then(() => {
+ return db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .update({
+ slackSettings: {
+ ...defaultSettings.slackSettings,
+ ...input,
+ connectedAt: new Date(),
+ },
+ })
+ .run();
+ })
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_SLACK_TEAM_CONNECTED,
+ context: { communityId },
+ });
+
+ return await getCommunityById(communityId);
+ });
+ }
+
+ return await db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .update({
+ slackSettings: {
+ ...defaultSettings.slackSettings,
+ ...input,
+ connectedAt: new Date(),
+ },
+ })
+ .run()
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_SLACK_TEAM_CONNECTED,
+ context: { communityId },
+ });
+
+ return await getCommunityById(communityId);
+ });
+};
+
+export const markInitialSlackInvitationsSent = async (
+ communityId: string,
+ inviteCustomMessage: ?string,
+ userId: string
+): Promise => {
+ return db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .update({
+ slackSettings: {
+ invitesSentAt: new Date(),
+ invitesCustomMessage: inviteCustomMessage,
+ },
+ })
+ .run()
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_SLACK_TEAM_INVITES_SENT,
+ context: { communityId },
+ });
+
+ return await getCommunityById(communityId);
+ });
+};
+
+const resetSlackSettings = async (communityId: string) => {
+ return db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .update({
+ slackSettings: {
+ ...defaultSettings.slackSettings,
+ },
+ })
+ .run()
+ .then(() => []);
+};
+
+// prettier-ignore
+export const getSlackPublicChannelList = (communityId: string, token: string) => {
+ if (!token) return [];
+ const decryptedToken = decryptString(token);
+
+ return axios
+ .get(
+ `https://slack.com/api/channels.list?token=${decryptedToken}&exclude_archived=true&exclude_members=true`
+ )
+ .then(response => {
+ return handleSlackChannelResponse(response.data, communityId);
+ })
+ .catch(error => {
+ console.error('\n\nerror', error);
+ return [];
+ });
+};
+
+// prettier-ignore
+export const getSlackPrivateChannelList = (communityId: string, token: ?string) => {
+ if (!token) return [];
+ const decryptedToken = decryptString(token);
+
+ return axios
+ .get(
+ `https://slack.com/api/groups.list?token=${decryptedToken}&exclude_archived=true&exclude_members=true`
+ )
+ .then(response => {
+ return handleSlackChannelResponse(response.data, communityId);
+ })
+ .catch(error => {
+ console.error('\n\nerror', error);
+ return [];
+ });
+};
+
+// prettier-ignore
+const handleSlackChannelResponse = async (data: Object, communityId: string) => {
+ const mapData = (arr: Array) =>
+ arr &&
+ arr.length > 0 &&
+ arr.map(
+ o =>
+ o && {
+ id: o.id,
+ name: o.name,
+ }
+ );
+
+ if (data && data.ok) {
+ if (data.groups) {
+ return mapData(data.groups) || [];
+ }
+
+ if (data.channels) {
+ return mapData(data.channels) || [];
+ }
+ }
+
+ const errorsToTriggerRest = [
+ 'token_revoked',
+ 'not_authed',
+ 'invalid_auth',
+ 'account_inactive',
+ 'no_permission',
+ ];
+
+ if (data.error && errorsToTriggerRest.indexOf(data.error) >= 0) {
+ trackQueue.add({
+ userId: 'ADMIN',
+ event: events.COMMUNITY_SLACK_TEAM_RESET,
+ context: { communityId },
+ properties: {
+ error: data.error
+ }
+ })
+
+ return resetSlackSettings(communityId);
+ }
+
+ return [];
+};
+
+export const enableCommunityTokenJoin = (
+ communityId: string,
+ userId: string
+) => {
+ return db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .update({
+ joinSettings: {
+ tokenJoinEnabled: true,
+ token: uuidv4(),
+ },
+ })
+ .run()
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_JOIN_TOKEN_ENABLED,
+ context: { communityId },
+ });
+
+ return await getCommunityById(communityId);
+ });
+};
+
+export const disableCommunityTokenJoin = (
+ communityId: string,
+ userId: string
+) => {
+ return db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .update({
+ joinSettings: {
+ tokenJoinEnabled: false,
+ token: null,
+ },
+ })
+ .run()
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_JOIN_TOKEN_DISABLED,
+ context: { communityId },
+ });
+
+ return await getCommunityById(communityId);
+ });
+};
+
+export const resetCommunityJoinToken = (
+ communityId: string,
+ userId: string
+) => {
+ return db
+ .table('communitySettings')
+ .getAll(communityId, { index: 'communityId' })
+ .update({
+ joinSettings: {
+ token: uuidv4(),
+ },
+ })
+ .run()
+ .then(async () => {
+ trackQueue.add({
+ userId,
+ event: events.COMMUNITY_JOIN_TOKEN_RESET,
+ context: { communityId },
+ });
+
+ return await getCommunityById(communityId);
+ });
};
diff --git a/api/models/curatedContent.js b/api/models/curatedContent.js
index dd15d9ce93..17ed52608f 100644
--- a/api/models/curatedContent.js
+++ b/api/models/curatedContent.js
@@ -1,11 +1,10 @@
//@flow
-const { db } = require('./db');
+const { db } = require('shared/db');
import type { DBCommunity } from 'shared/types';
import { getCommunitiesBySlug } from './community';
-export const getCuratedCommunities = (
- type: string
-): Promise> => {
+// prettier-ignore
+export const getCuratedCommunities = (type: string): Promise> => {
return db
.table('curatedContent')
.filter({ type })
diff --git a/api/models/db.js b/api/models/db.js
deleted file mode 100644
index 136302afd2..0000000000
--- a/api/models/db.js
+++ /dev/null
@@ -1,52 +0,0 @@
-// @flow
-/**
- * Database setup is done here
- */
-const IS_PROD = !process.env.FORCE_DEV && process.env.NODE_ENV === 'production';
-
-const DEFAULT_CONFIG = {
- // Connect to the test database when, well, testing
- db: !process.env.TEST_DB ? 'spectrum' : 'testing',
- max: 500, // Maximum number of connections, default is 1000
- buffer: 5, // Minimum number of connections open at any given moment, default is 50
- timeoutGb: 60 * 1000, // How long should an unused connection stick around, default is an hour, this is a minute
-};
-
-const PRODUCTION_CONFIG = {
- password: process.env.AWS_RETHINKDB_PASSWORD,
- host: process.env.AWS_RETHINKDB_URL,
- port: process.env.AWS_RETHINKDB_PORT,
-};
-
-const config = IS_PROD
- ? {
- ...DEFAULT_CONFIG,
- ...PRODUCTION_CONFIG,
- }
- : {
- ...DEFAULT_CONFIG,
- };
-
-var r = require('rethinkdbdash')(config);
-
-if (process.env.NODE_ENV === 'development') {
- const fs = require('fs');
- const inspect = require('rethinkdb-inspector');
- const queries = [];
- inspect(r, {
- onQueryComplete: (query, { size, time }) => {
- if (query.indexOf('.changes') > -1) return;
- queries.push({ query, time, size });
- fs.writeFileSync(
- 'queries-by-time.js',
- JSON.stringify(queries.sort((a, b) => b.time - a.time), null, 2)
- );
- fs.writeFileSync(
- 'queries-by-response-size.js',
- JSON.stringify(queries.sort((a, b) => b.size - a.size), null, 2)
- );
- },
- });
-}
-
-module.exports = { db: r };
diff --git a/api/models/directMessageThread.js b/api/models/directMessageThread.js
index fad5845577..ad6ac85b54 100644
--- a/api/models/directMessageThread.js
+++ b/api/models/directMessageThread.js
@@ -1,7 +1,9 @@
//@flow
-const { db } = require('./db');
+const { db } = require('shared/db');
import { NEW_DOCUMENTS } from './utils';
import { createChangefeed } from 'shared/changefeed-utils';
+import { trackQueue } from 'shared/bull/queues';
+import { events } from 'shared/analytics';
export type DBDirectMessageThread = {
createdAt: Date,
@@ -10,21 +12,21 @@ export type DBDirectMessageThread = {
threadLastActive: Date,
};
-const getDirectMessageThread = (
- directMessageThreadId: string
-): Promise => {
+// prettier-ignore
+const getDirectMessageThread = (directMessageThreadId: string): Promise => {
return db
.table('directMessageThreads')
.get(directMessageThreadId)
- .run();
+ .run()
+ .then(res => res && !res.deletedAt ? res : null);
};
-const getDirectMessageThreads = (
- ids: Array
-): Promise> => {
+// prettier-ignore
+const getDirectMessageThreads = (ids: Array): Promise> => {
return db
.table('directMessageThreads')
.getAll(...ids)
+ .filter(row => row.hasFields('deletedAt').not())
.run();
};
@@ -36,6 +38,7 @@ const getDirectMessageThreadsByUser = (
return db
.table('usersDirectMessageThreads')
.getAll(userId, { index: 'userId' })
+ .filter(row => row.hasFields('deletedAt').not())
.eqJoin('threadId', db.table('directMessageThreads'))
.without({
left: ['id', 'createdAt', 'threadId', 'userId', 'lastActive', 'lastSeen'],
@@ -47,7 +50,8 @@ const getDirectMessageThreadsByUser = (
.run();
};
-const createDirectMessageThread = (isGroup: boolean): DBDirectMessageThread => {
+// prettier-ignore
+const createDirectMessageThread = (isGroup: boolean, userId: string): DBDirectMessageThread => {
return db
.table('directMessageThreads')
.insert(
@@ -60,12 +64,20 @@ const createDirectMessageThread = (isGroup: boolean): DBDirectMessageThread => {
{ returnChanges: true }
)
.run()
- .then(result => result.changes[0].new_val);
+ .then(result => {
+ trackQueue.add({
+ userId,
+ event: events.DIRECT_MESSAGE_THREAD_CREATED,
+ properties: {
+ isGroup
+ }
+ })
+ return result.changes[0].new_val
+ });
};
-const setDirectMessageThreadLastActive = (
- id: string
-): DBDirectMessageThread => {
+// prettier-ignore
+const setDirectMessageThreadLastActive = (id: string): DBDirectMessageThread => {
return db
.table('directMessageThreads')
.get(id)
diff --git a/api/models/expo-push-subscription.js b/api/models/expo-push-subscription.js
deleted file mode 100644
index 23c2e0daa8..0000000000
--- a/api/models/expo-push-subscription.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// @flow
-const debug = require('debug')('api:models:expo-push-subscription');
-const { db } = require('./db');
-import type { DBExpoPushSubscription } from 'shared/types';
-
-export const storeExpoSubscription = (token: string, userId: string) => {
- debug(`store subscription for user#${userId}`);
- return db
- .table('expoPushSubscriptions')
- .insert({
- token,
- userId,
- })
- .run();
-};
-
-export const getExpoSubscriptions = (
- userId: string
-): Promise> => {
- debug(`get subscriptions for user#${userId}`);
- return db
- .table('expoPushSubscriptions')
- .getAll(userId, { index: 'userId' })
- .run();
-};
-
-export const removeExpoSubscription = (token: string) => {
- debug(`remove subscription ${token}`);
- return db
- .table('expoPushSubscriptions')
- .getAll(token, { index: 'token' })
- .delete()
- .run();
-};
diff --git a/api/models/invoice.js b/api/models/invoice.js
deleted file mode 100644
index 050fb5c45d..0000000000
--- a/api/models/invoice.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// @flow
-import { db } from './db';
-import {
- sendCommunityInvoicePaidNotificationQueue,
- sendProInvoicePaidNotificationQueue,
-} from 'shared/bull/queues';
-
-export const getInvoice = (id: string): Promise> => {
- return db
- .table('invoices')
- .get(id)
- .run();
-};
-
-export const getInvoicesByCommunity = (id: string): Promise> => {
- return db
- .table('invoices')
- .getAll(id, { index: 'communityId' })
- .run();
-};
-
-export const getInvoicesByUser = (id: string): Promise> => {
- return db
- .table('invoices')
- .getAll(id, { index: 'userId' })
- .filter({ planId: 'beta-pro' })
- .run();
-};
-
-export const createInvoice = (
- event: Object,
- subscription: Object,
- customer: Object,
- recurringPayment: Object
-): Promise => {
- return db
- .table('invoices')
- .insert(
- {
- status: event.paid ? 'paid' : 'unpaid',
- customerId: event.customer,
- subscriptionId: event.subscription,
- amount: event.total,
- planId: subscription.plan.id,
- planName: subscription.plan.name,
- quantity: subscription.quantity,
- paidAt: event.date,
- chargeId: event.charge,
- sourceBrand: customer.sources.data[0].brand,
- sourceLast4: customer.sources.data[0].last4,
- communityId: recurringPayment.communityId,
- userId: recurringPayment.userId,
- },
- { returnChanges: true }
- )
- .run()
- .then(result => {
- // in the future if we have more plans we can check for each plan name individually to return the correct queue name
- const queueName =
- subscription.plan.id === 'community-standard'
- ? 'community invoice paid notification'
- : 'pro invoice paid notification';
-
- const queue =
- subscription.plan.id === 'community-standard'
- ? sendCommunityInvoicePaidNotificationQueue
- : sendProInvoicePaidNotificationQueue;
-
- const invoice = result.changes[0].new_val;
-
- // trigger an email to the user for the invoice receipt
- queue.add({ invoice });
- return invoice;
- });
-};
-
-export const getInvoiceByChargeId = (chargeId: string): Promise => {
- return db
- .table('invoices')
- .filter({ chargeId })
- .run()
- .then(result => {
- if (!result || result.length === 0) return false;
- return true;
- });
-};
diff --git a/api/models/message.js b/api/models/message.js
index 9619c9e5db..12af8881cd 100644
--- a/api/models/message.js
+++ b/api/models/message.js
@@ -1,20 +1,26 @@
//@flow
-const { db } = require('./db');
+const { db } = require('shared/db');
import {
sendMessageNotificationQueue,
sendDirectMessageNotificationQueue,
processReputationEventQueue,
_adminProcessToxicMessageQueue,
+ trackQueue,
+ searchQueue,
} from 'shared/bull/queues';
import { NEW_DOCUMENTS } from './utils';
import { createChangefeed } from 'shared/changefeed-utils';
-import { setThreadLastActive } from './thread';
+import {
+ setThreadLastActive,
+ incrementMessageCount,
+ decrementMessageCount,
+} from './thread';
+import { events } from 'shared/analytics';
+import type { DBMessage } from 'shared/types';
export type MessageTypes = 'text' | 'media';
-// TODO: Fix this
-export type Message = Object;
-export const getMessage = (messageId: string): Promise => {
+export const getMessage = (messageId: string): Promise => {
return db
.table('messages')
.get(messageId)
@@ -25,12 +31,20 @@ export const getMessage = (messageId: string): Promise => {
});
};
+export const getManyMessages = (messageIds: string[]): Promise => {
+ return db
+ .table('messages')
+ .getAll(...messageIds)
+ .run()
+ .then(messages => {
+ return messages.filter(message => message && !message.deletedAt);
+ });
+};
+
type BackwardsPaginationOptions = { last?: number, before?: number | Date };
-const getBackwardsMessages = (
- threadId: string,
- { last, before }: BackwardsPaginationOptions
-) => {
+// prettier-ignore
+const getBackwardsMessages = (threadId: string, { last, before }: BackwardsPaginationOptions) => {
return db
.table('messages')
.between(
@@ -46,10 +60,8 @@ const getBackwardsMessages = (
type ForwardsPaginationOptions = { first?: number, after?: number | Date };
-const getForwardMessages = (
- threadId: string,
- { first, after }: ForwardsPaginationOptions
-) => {
+// prettier-ignore
+const getForwardMessages = (threadId: string, { first, after }: ForwardsPaginationOptions) => {
return db
.table('messages')
.between(
@@ -71,46 +83,46 @@ export const getMessages = (
last,
before,
}: { ...BackwardsPaginationOptions, ...ForwardsPaginationOptions }
-): Promise> => {
+): Promise> => {
// $FlowIssue
if (last || before) return getBackwardsMessages(threadId, { last, before });
// $FlowIssue
return getForwardMessages(threadId, { first, after });
};
-export const getLastMessage = (threadId: string): Promise => {
+export const getLastMessage = (threadId: string): Promise => {
return db
.table('messages')
- .getAll(threadId, { index: 'threadId' })
+ .between([threadId, db.minval], [threadId, db.maxval], {
+ index: 'threadIdAndTimestamp',
+ leftBound: 'open',
+ rightBound: 'closed',
+ })
+ .orderBy({ index: db.desc('threadIdAndTimestamp') })
.filter(db.row.hasFields('deletedAt').not())
- .max('timestamp')
- .run();
+ .limit(1)
+ .run()
+ .then(res => (Array.isArray(res) && res.length > 0 ? res[0] : null));
};
-export const getLastMessages = (threadIds: Array): Promise => {
- return db
- .table('messages')
- .getAll(...threadIds, { index: 'threadId' })
- .filter(db.row.hasFields('deletedAt').not())
- .group('threadId')
- .max(row => row('timestamp'))
- .run();
+export const getLastMessageOfThreads = (
+ threadIds: Array
+): Promise> => {
+ return Promise.all(threadIds.map(id => getLastMessage(id)));
};
-export const getMediaMessagesForThread = (
- threadId: string
-): Promise> => {
+// prettier-ignore
+export const getMediaMessagesForThread = (threadId: string): Promise> => {
return db
.table('messages')
.getAll(threadId, { index: 'threadId' })
.filter({ messageType: 'media' })
+ .filter(db.row.hasFields('deletedAt').not())
.run();
};
-export const storeMessage = (
- message: Message,
- userId: string
-): Promise => {
+// prettier-ignore
+export const storeMessage = (message: Object, userId: string): Promise => {
// Insert a message
return db
.table('messages')
@@ -130,20 +142,41 @@ export const storeMessage = (
)
.run()
.then(result => result.changes[0].new_val)
- .then(message => {
+ .then(async message => {
if (message.threadType === 'directMessageThread') {
- sendDirectMessageNotificationQueue.add({ message, userId });
+ await Promise.all([
+ trackQueue.add({
+ userId,
+ event: events.DIRECT_MESSAGE_SENT,
+ context: { messageId: message.id },
+ }),
+ sendDirectMessageNotificationQueue.add({ message, userId }),
+ ])
}
if (message.threadType === 'story') {
- sendMessageNotificationQueue.add({ message });
- _adminProcessToxicMessageQueue.add({ message });
+ await Promise.all([
+ sendMessageNotificationQueue.add({ message }),
+ searchQueue.add({
+ id: message.id,
+ type: 'message',
+ event: 'created'
+ }),
processReputationEventQueue.add({
userId,
type: 'message created',
entityId: message.threadId,
- });
- setThreadLastActive(message.threadId, message.timestamp);
+ }),
+ trackQueue.add({
+ userId,
+ event: events.MESSAGE_SENT,
+ context: { messageId: message.id },
+ }),
+ _adminProcessToxicMessageQueue.add({ message }),
+
+ setThreadLastActive(message.threadId, message.timestamp),
+ incrementMessageCount(message.threadId)
+ ])
}
return message;
@@ -172,9 +205,8 @@ export const getMessageCount = (threadId: string): Promise => {
.run();
};
-export const getMessageCountInThreads = (
- threadIds: Array
-): Promise> => {
+// prettier-ignore
+export const getMessageCountInThreads = (threadIds: Array): Promise> => {
return db
.table('messages')
.getAll(...threadIds, { index: 'threadId' })
@@ -184,32 +216,97 @@ export const getMessageCountInThreads = (
.run();
};
-export const deleteMessage = (userId: string, id: string) => {
+export const deleteMessage = (userId: string, messageId: string) => {
return db
.table('messages')
- .get(id)
- .update({
- deletedAt: new Date(),
- })
+ .get(messageId)
+ .update(
+ {
+ deletedBy: userId,
+ deletedAt: new Date(),
+ },
+ { returnChanges: 'always' }
+ )
.run()
- .then(res => {
- processReputationEventQueue.add({
- userId,
- type: 'message deleted',
- entityId: id,
- });
- return res;
+ .then(result => result.changes[0].new_val || result.changes[0].old_val)
+ .then(async message => {
+ const event =
+ message.threadType === 'story'
+ ? events.MESSAGE_DELETED
+ : events.DIRECT_MESSAGE_DELETED;
+
+ await Promise.all([
+ trackQueue.add({
+ userId,
+ event,
+ context: { messageId },
+ }),
+ processReputationEventQueue.add({
+ userId,
+ type: 'message deleted',
+ entityId: messageId,
+ }),
+ message.threadType === 'story'
+ ? decrementMessageCount(message.threadId)
+ : Promise.resolve(),
+ message.threadType === 'story'
+ ? searchQueue.add({
+ id: message.id,
+ type: 'message',
+ event: 'deleted',
+ })
+ : Promise.resolve(),
+ ]);
+
+ return message;
});
};
-export const deleteMessagesInThread = (threadId: string) => {
- return db
+// prettier-ignore
+export const deleteMessagesInThread = async (threadId: string, userId: string) => {
+ const messages = await db
+ .table('messages')
+ .getAll(threadId, { index: 'threadId' })
+ .run();
+
+ if (!messages || messages.length === 0) return;
+
+ const trackingPromises = messages.map(message => {
+ const event = message.threadType === 'story'
+ ? events.MESSAGE_DELETED
+ : events.DIRECT_MESSAGE_DELETED
+ return trackQueue.add({
+ userId,
+ event,
+ context: { messageId: message.id },
+ });
+ });
+
+ const searchPromises = messages.map(message => {
+ if (message.threadType !== 'story') return null
+ return searchQueue.add({
+ id: message.id,
+ type: 'message',
+ event: 'deleted'
+ })
+ })
+
+ const deletePromise = db
.table('messages')
.getAll(threadId, { index: 'threadId' })
.update({
+ deletedBy: userId,
deletedAt: new Date(),
})
.run();
+
+ return await Promise.all([
+ ...trackingPromises,
+ deletePromise,
+ ...searchPromises
+ ]).then(() => {
+ return Promise.all(Array.from({ length: messages.length }).map(() => decrementMessageCount(threadId)))
+ });
};
export const userHasMessagesInThread = (threadId: string, userId: string) => {
@@ -220,3 +317,62 @@ export const userHasMessagesInThread = (threadId: string, userId: string) => {
.contains(userId)
.run();
};
+
+type EditInput = {
+ id: string,
+ content: {
+ body: string,
+ },
+};
+
+// prettier-ignore
+export const editMessage = (message: EditInput, userId: string): Promise => {
+ // Insert a message
+ return db
+ .table('messages')
+ .get(message.id)
+ .update(
+ {
+ content: message.content,
+ modifiedAt: new Date(),
+ edits: db.branch(
+ db.row.hasFields('edits'),
+ db.row('edits').append({
+ content: db.row('content'),
+ timestamp: db.row('modifiedAt'),
+ }),
+ [{
+ content: db.row('content'),
+ timstamp: db.row('timestamp')
+ }]
+ ),
+ },
+ { returnChanges: 'always' }
+ )
+ .run()
+ .then(result => result.changes[0].new_val || result.changes[0].old_val)
+ .then(message => {
+ if (message.threadType === 'directMessageThread') {
+ trackQueue.add({
+ userId,
+ event: events.DIRECT_MESSAGE_EDITED,
+ context: { messageId: message.id },
+ });
+ }
+ if (message.threadType === 'story') {
+ trackQueue.add({
+ userId,
+ event: events.MESSAGE_EDITED,
+ context: { messageId: message.id },
+ });
+
+ searchQueue.add({
+ id: message.id,
+ type: 'message',
+ event: 'edited'
+ })
+ }
+
+ return message;
+ });
+};
diff --git a/api/models/meta.js b/api/models/meta.js
index c450034c30..6f78ca7a9e 100644
--- a/api/models/meta.js
+++ b/api/models/meta.js
@@ -1,6 +1,6 @@
// @flow
-const { db } = require('./db');
-import { getUserById } from '../models/user';
+const { db } = require('shared/db');
+import { getUserById } from 'shared/db/queries/user';
/*
===========================================================
@@ -19,8 +19,7 @@ const saveUserCommunityPermissions = (
): Promise => {
return db
.table('usersCommunities')
- .getAll(userId, { index: 'userId' })
- .filter({ communityId })
+ .getAll([userId, communityId], { index: 'userIdAndCommunityId' })
.update(
{
...permissions,
diff --git a/api/models/notification.js b/api/models/notification.js
index c43414aec4..c452decbee 100644
--- a/api/models/notification.js
+++ b/api/models/notification.js
@@ -1,12 +1,20 @@
// @flow
-const { db } = require('./db');
+const { db } = require('shared/db');
import { NEW_DOCUMENTS } from './utils';
import { createChangefeed } from 'shared/changefeed-utils';
+import type { DBNotification } from 'shared/types';
-export const getNotificationsByUser = (
- userId: string,
- { first, after }: { first: number, after: Date }
-) => {
+// prettier-ignore
+export const getNotification = (notificationId: string): Promise => {
+ return db
+ .table('notifications')
+ .get(notificationId)
+ .run();
+};
+
+type InputType = { first: number, after: Date };
+export const getNotificationsByUser = (userId: string, input: InputType) => {
+ const { first, after } = input;
return db
.table('usersNotifications')
.between(
@@ -29,10 +37,10 @@ export const getNotificationsByUser = (
.run();
};
-export const getUnreadDirectMessageNotifications = (
- userId: string,
- { first, after }: { first: number, after: Date }
-): Promise> => {
+// prettier-ignore
+export const getUnreadDirectMessageNotifications = (userId: string, input: InputType,): Promise> => {
+ const { first, after } = input
+
return db
.table('usersNotifications')
.between(
@@ -61,7 +69,7 @@ const hasChanged = (field: string) =>
.row('old_val')(field)
.ne(db.row('new_val')(field));
-const MODIFIED_AT_CHANGED = hasChanged('entityAddedAt');
+const ENTITY_ADDED = hasChanged('entityAddedAt');
const getNewNotificationsChangefeed = () =>
db
@@ -69,7 +77,7 @@ const getNewNotificationsChangefeed = () =>
.changes({
includeInitial: false,
})
- .filter(NEW_DOCUMENTS.or(MODIFIED_AT_CHANGED))('new_val')
+ .filter(NEW_DOCUMENTS.or(ENTITY_ADDED))('new_val')
.eqJoin('notificationId', db.table('notifications'))
.without({
left: ['notificationId', 'createdAt', 'id', 'entityAddedAt'],
@@ -92,7 +100,7 @@ const getNewDirectMessageNotificationsChangefeed = () =>
.changes({
includeInitial: false,
})
- .filter(NEW_DOCUMENTS.or(MODIFIED_AT_CHANGED))('new_val')
+ .filter(NEW_DOCUMENTS.or(ENTITY_ADDED))('new_val')
.eqJoin('notificationId', db.table('notifications'))
.without({
left: ['notificationId', 'createdAt', 'id', 'entityAddedAt'],
diff --git a/api/models/reaction.js b/api/models/reaction.js
index aab373b5ef..f4f8bb96df 100644
--- a/api/models/reaction.js
+++ b/api/models/reaction.js
@@ -1,32 +1,27 @@
// @flow
-import { db } from './db';
+import { db } from 'shared/db';
import {
sendReactionNotificationQueue,
processReputationEventQueue,
} from 'shared/bull/queues';
+import type { DBReaction } from 'shared/types';
+import { events } from 'shared/analytics';
+import { trackQueue } from 'shared/bull/queues';
type ReactionType = 'like';
-type DBReaction = {
- id: string,
- messageId: string,
- timestamp: Date,
- type: ReactionType,
- userId: string,
-};
-
export type ReactionInput = {
messageId: string,
type: ReactionType,
};
-export const getReactions = (
- messageIds: Array
-): Promise> => {
+// prettier-ignore
+export const getReactions = (messageIds: Array): Promise> => {
const distinctMessageIds = messageIds.filter((x, i, a) => a.indexOf(x) == i);
return db
.table('reactions')
.getAll(...distinctMessageIds, { index: 'messageId' })
+ .filter(row => row.hasFields('deletedAt').not())
.group('messageId')
.run();
};
@@ -38,56 +33,105 @@ export const getReaction = (reactionId: string): Promise => {
.run();
};
-export const toggleReaction = (
- reaction: ReactionInput,
- userId: string
-): Promise => {
+// prettier-ignore
+export const getReactionsByIds = (reactionIds: Array): Promise> => {
+ return db
+ .table('reactions')
+ .getAll(...reactionIds)
+ .run();
+};
+
+// prettier-ignore
+export const toggleReaction = (reaction: ReactionInput, userId: string): Promise => {
return db
.table('reactions')
.getAll(reaction.messageId, { index: 'messageId' })
.filter({ userId })
.run()
- .then(result => {
- // this user has already reacted to the message, remove the reaction
- if (result.length > 0) {
- const existing = result[0];
+ .then(async result => {
+ // user has already reacted
+ if (result && result.length > 0) {
+ const thisReaction = result[0];
- processReputationEventQueue.add({
+ // user is re-reacting
+ if (thisReaction.deletedAt) {
+ trackQueue.add({
+ userId,
+ event: events.REACTION_CREATED,
+ context: {
+ reactionId: thisReaction.id,
+ },
+ });
+
+ processReputationEventQueue.add({
+ userId,
+ type: 'reaction created',
+ entityId: thisReaction.messageId,
+ });
+
+ return db
+ .table('reactions')
+ .get(thisReaction.id)
+ .update({
+ deletedAt: db.literal(),
+ })
+ .run();
+ }
+
+ // deleting reaction
+ trackQueue.add({
userId,
- type: 'reaction deleted',
- entityId: existing.messageId,
+ event: events.REACTION_DELETED,
+ context: {
+ reactionId: thisReaction.id,
+ },
});
- return db
- .table('reactions')
- .get(existing.id)
- .delete()
- .run();
- } else {
processReputationEventQueue.add({
userId,
- type: 'reaction created',
- entityId: reaction.messageId,
+ type: 'reaction deleted',
+ entityId: thisReaction.messageId,
});
return db
.table('reactions')
- .insert(
- {
- ...reaction,
- userId,
- timestamp: Date.now(),
- },
- { returnChanges: true }
- )
- .run()
- .then(result => result.changes[0].new_val)
- .then(reaction => {
- sendReactionNotificationQueue.add({ reaction, userId });
-
- return reaction;
- });
+ .get(thisReaction.id)
+ .update({
+ deletedAt: new Date(),
+ })
+ .run();
}
+
+ // user has not reacted yet
+ return db
+ .table('reactions')
+ .insert(
+ {
+ ...reaction,
+ userId,
+ timestamp: Date.now(),
+ },
+ { returnChanges: true }
+ )
+ .run()
+ .then(result => result.changes[0].new_val)
+ .then(reaction => {
+ trackQueue.add({
+ userId,
+ event: events.REACTION_CREATED,
+ context: { reactionId: reaction.id },
+ });
+
+ sendReactionNotificationQueue.add({ reaction, userId });
+
+ processReputationEventQueue.add({
+ userId,
+ type: 'reaction created',
+ entityId: reaction.messageId,
+ });
+
+ return reaction;
+ });
})
.then(() => {
// return the message object itself in order to more easily update the UI with the apollo store
diff --git a/api/models/recurringPayment.js b/api/models/recurringPayment.js
deleted file mode 100644
index 1d0bf8c587..0000000000
--- a/api/models/recurringPayment.js
+++ /dev/null
@@ -1,126 +0,0 @@
-import { db } from './db';
-
-const parseStripeDataToDb = (stripeData): Object => ({
- customerId: stripeData.customer,
- subscriptionId: stripeData.id,
- planId: stripeData.plan.id,
- planName: stripeData.plan.name,
- amount: stripeData.plan.amount,
- quantity: stripeData.quantity,
- status: stripeData.status,
- currentPeriodStart: stripeData.current_period_start,
- currentPeriodEnd: stripeData.current_period_end,
- createdAt: stripeData.created,
- canceledAt: stripeData.status === 'canceled' ? new Date() : null,
- sourceBrand: stripeData.sourceBrand,
- sourceLast4: stripeData.sourceLast4,
-});
-
-export const createRecurringPayment = (props): Promise => {
- const { userId, communityId, stripeData } = props;
-
- return db
- .table('recurringPayments')
- .insert({
- userId: userId ? userId : null,
- communityId: communityId ? communityId : null,
- ...parseStripeDataToDb(stripeData),
- })
- .run();
-};
-
-/*
- Stripe returns a full subscription object with a new 'status' field that equals
- 'canceled' - this will cause the 'isPro' checks on the client side to return
- false, without having to do anything destructive or complicated with the
- subscription record itself in the db
-*/
-export const updateRecurringPayment = (props): Promise => {
- const { id, stripeData } = props;
- return db
- .table('recurringPayments')
- .get(id)
- .update({
- ...parseStripeDataToDb(stripeData),
- })
- .run();
-};
-
-// when a subscription is paid in the background, stripe sends a webhook event to our server which triggers this function. The only thing we want to do is find the right recurringPayment record and update the currentPeriodEnd and currentPeriodStart timestamps so that in the UI we can show when the user's next billing event will occur
-export const updateRecurringPaymentPeriod = (
- event: Object
-): Promise => {
- return db
- .table('recurringPayments')
- .filter({
- customerId: event.customer,
- subscriptionId: event.subscription,
- })
- .run()
- .then(results => {
- if (!results || results.length === 0) return;
- const subToUpdate = results[0];
- return db
- .table('recurringPayments')
- .get(subToUpdate.id)
- .update(
- {
- currentPeriodEnd: event.period_end,
- currentPeriodStart: event.period_start,
- },
- { returnChanges: true }
- )
- .run()
- .then(result => result.changes[0].new_val);
- });
-};
-
-export const getUserRecurringPayments = (userId: string): Promise => {
- return db
- .table('recurringPayments')
- .getAll(userId, { index: 'userId' })
- .run()
- .then(result => (result && result.length > 0 ? result : null));
-};
-
-export const getCommunityRecurringPayments = (
- communityId: string
-): Promise => {
- return db
- .table('recurringPayments')
- .getAll(communityId, { index: 'communityId' })
- .run();
-};
-
-export const getCommunitiesRecurringPayments = (
- communityIds: Array
-): Promise> => {
- return db
- .table('recurringPayments')
- .getAll(...communityIds, { index: 'communityId' })
- .group('communityId')
- .run();
-};
-
-export const getUsersRecurringPayments = (
- userIds: Array
-): Promise => {
- return db
- .table('recurringPayments')
- .getAll(...userIds, { index: 'userId' })
- .group('userId')
- .run();
-};
-
-export const getRecurringPaymentFromSubscriptionId = (
- subscriptionId: string
-): Promise => {
- return db
- .table('recurringPayments')
- .filter({ subscriptionId })
- .run()
- .then(results => {
- if (!results || results.length === 0) return null;
- return results[0];
- });
-};
diff --git a/api/models/reputationEvents.js b/api/models/reputationEvents.js
index 278b50bfd7..d0c7054814 100644
--- a/api/models/reputationEvents.js
+++ b/api/models/reputationEvents.js
@@ -1,10 +1,9 @@
// @flow
-import { db } from './db';
+import { db } from 'shared/db';
import { parseRange } from './utils';
-export const getTopMembersInCommunity = (
- communityId: string
-): Promise> => {
+// prettier-ignore
+export const getTopMembersInCommunity = (communityId: string): Promise> => {
const { current } = parseRange('weekly');
return db
@@ -14,7 +13,7 @@ export const getTopMembersInCommunity = (
.group('userId')
.run()
.then(results => {
- if (!results) return null;
+ if (!results) return [];
const sorted = results
.map(c => ({
userId: c.group,
diff --git a/api/models/search.js b/api/models/search.js
index b65a3e5eb0..c92871acf4 100644
--- a/api/models/search.js
+++ b/api/models/search.js
@@ -1,9 +1,8 @@
//@flow
-const { db } = require('./db');
+const { db } = require('shared/db');
-export const getPublicChannelIdsInCommunity = (
- communityId: string
-): Promise> => {
+// prettier-ignore
+export const getPublicChannelIdsInCommunity = (communityId: string): Promise> => {
return db
.table('channels')
.getAll(communityId, { index: 'communityId' })
@@ -17,9 +16,8 @@ export const getPublicChannelIdsInCommunity = (
.run();
};
-export const getPrivateChannelIdsInCommunity = (
- communityId: string
-): Promise> => {
+// prettier-ignore
+export const getPrivateChannelIdsInCommunity = (communityId: string): Promise> => {
return db
.table('channels')
.getAll(communityId, { index: 'communityId' })
@@ -33,9 +31,8 @@ export const getPrivateChannelIdsInCommunity = (
.run();
};
-export const getPublicChannelIdsForUsersThreads = (
- userId: string
-): Promise> => {
+// prettier-ignore
+export const getPublicChannelIdsForUsersThreads = (userId: string): Promise> => {
return db
.table('threads')
.getAll(userId, { index: 'creatorId' })
@@ -47,9 +44,22 @@ export const getPublicChannelIdsForUsersThreads = (
.run();
};
-export const getPrivateChannelIdsForUsersThreads = (
+export const getPublicCommunityIdsForUsersThreads = (
userId: string
): Promise> => {
+ return db
+ .table('threads')
+ .getAll(userId, { index: 'creatorId' })
+ .filter(row => row.hasFields('deletedAt').not())
+ .eqJoin('communityId', db.table('communities'))
+ .filter(row => row('right')('isPrivate').eq(false))
+ .zip()
+ .map(row => row('communityId'))
+ .run();
+};
+
+// prettier-ignore
+export const getPrivateChannelIdsForUsersThreads = (userId: string): Promise> => {
return db
.table('threads')
.getAll(userId, { index: 'creatorId' })
@@ -61,26 +71,64 @@ export const getPrivateChannelIdsForUsersThreads = (
.run();
};
-export const getUsersJoinedChannels = (
+export const getPrivateCommunityIdsForUsersThreads = (
userId: string
): Promise> => {
+ return db
+ .table('threads')
+ .getAll(userId, { index: 'creatorId' })
+ .filter(row => row.hasFields('deletedAt').not())
+ .eqJoin('communityId', db.table('communities'))
+ .filter(row => row('right')('isPrivate').eq(true))
+ .zip()
+ .map(row => row('communityId'))
+ .run();
+};
+
+// prettier-ignore
+export const getUsersJoinedChannels = (userId: string): Promise> => {
return db
.table('usersChannels')
- .getAll(userId, { index: 'userId' })
- .filter({ isMember: true })
+ .getAll([userId, "member"], [userId, "moderator"], [userId, "owner"], { index: 'userIdAndRole' })
+ .eqJoin('channelId', db.table('channels'))
+ .filter(row => row('right').hasFields('deletedAt').not())
+ .zip()
.map(row => row('channelId'))
.run();
};
-export const getUsersJoinedPrivateChannelIds = (
- userId: string
-): Promise> => {
+// prettier-ignore
+export const getUsersJoinedCommunities = (userId: string): Promise> => {
+ return db
+ .table('usersCommunities')
+ .getAll([userId, true], { index: 'userIdAndIsMember' })
+ .eqJoin('communityId', db.table('communities'))
+ .filter(row => row('right').hasFields('deletedAt').not())
+ .zip()
+ .map(row => row('communityId'))
+ .run();
+};
+
+// prettier-ignore
+export const getUsersJoinedPrivateChannelIds = (userId: string): Promise> => {
return db
.table('usersChannels')
- .getAll(userId, { index: 'userId' })
- .filter({ isMember: true })
+ .getAll([userId, "member"], [userId, "moderator"], [userId, "owner"], { index: 'userIdAndRole' })
.eqJoin('channelId', db.table('channels'))
- .filter(row => row('right')('isPrivate').eq(true))
+ .filter(row => row('right')('isPrivate').eq(true).and(row('right').hasFields('deletedAt').not()))
+ .without({ left: ['id'] })
+ .zip()
+ .map(row => row('id'))
+ .run();
+};
+
+// prettier-ignore
+export const getUsersJoinedPrivateCommunityIds = (userId: string): Promise> => {
+ return db
+ .table('usersCommunities')
+ .getAll([userId, true], { index: 'userIdAndIsMember' })
+ .eqJoin('communityId', db.table('communities'))
+ .filter(row => row('right')('isPrivate').eq(true).and(row('right').hasFields('deletedAt').not()))
.without({ left: ['id'] })
.zip()
.map(row => row('id'))
diff --git a/api/models/session.js b/api/models/session.js
index 1f99dd16fd..404aa2d1f2 100644
--- a/api/models/session.js
+++ b/api/models/session.js
@@ -1,6 +1,10 @@
// @flow
-import { db } from './db';
+import { db } from 'shared/db';
export const destroySession = (id: string) => {
- return db.table('sessions').get(id).delete().run();
+ return db
+ .table('sessions')
+ .get(id)
+ .delete()
+ .run();
};
diff --git a/api/models/slackImport.js b/api/models/slackImport.js
index 18f48a8392..f1e8adc227 100644
--- a/api/models/slackImport.js
+++ b/api/models/slackImport.js
@@ -2,23 +2,30 @@
require('now-env');
import axios from 'axios';
const querystring = require('querystring');
-const { db } = require('./db');
-import { slackImportQueue } from 'shared/bull/queues';
-const IS_PROD = process.env.NODE_ENV === 'production';
+const { db } = require('shared/db');
let SLACK_SECRET = process.env.SLACK_SECRET;
-if (!IS_PROD) {
- SLACK_SECRET = SLACK_SECRET || 'asdf123';
+if (!SLACK_SECRET) {
+ SLACK_SECRET = process.env.SLACK_SECRET_DEVELOPMENT || 'asdf123';
}
-export const generateOAuthToken = (code: string, redirect_uri: string) => {
+type SlackData = {
+ access_token: string,
+ team_id: string,
+ team_name: string,
+ scope: string,
+};
+
+// prettier-ignore
+export const generateOAuthToken = (code: string, redirect_uri: string): Promise => {
return axios
.post(
'https://slack.com/api/oauth.access',
querystring.stringify({
code: code,
- scope: 'users:read.email,users:read,admin,chat:write',
- client_id: '201769987287.200380534417',
+ scope:
+ 'users:read.email,users:read,chat:write,bot,chat:write:bot,channels:read,groups:read',
+ client_id: '201769987287.271382863153',
client_secret: SLACK_SECRET,
redirect_uri,
})
@@ -30,11 +37,12 @@ export const generateOAuthToken = (code: string, redirect_uri: string) => {
access_token: response.data.access_token,
team_id: response.data.team_id,
team_name: response.data.team_name,
+ scope: response.data.scope,
};
}
})
.catch(error => {
- console.log('\n\nerror', error);
+ console.error('\n\nerror', error);
return null;
});
};
@@ -70,11 +78,6 @@ export const createSlackImportRecord = (input: CreateSlackImportType) => {
.then(result => {
// kick off a queue worker to get the member data from slack
const data = result.changes[0].new_val;
- const token = data.token;
- const importId = data.id;
-
- slackImportQueue.add({ token, importId });
-
return data;
});
});
@@ -90,19 +93,3 @@ export const getSlackImport = (communityId: string) => {
return results[0];
});
};
-
-export const markSlackImportAsSent = (communityId: string) => {
- return db
- .table('slackImports')
- .getAll(communityId, { index: 'communityId' })
- .update(
- {
- sent: new Date(),
- },
- { returnChanges: true }
- )
- .run()
- .then(results => {
- return results.changes[0].new_val;
- });
-};
diff --git a/api/models/stripeCustomers.js b/api/models/stripeCustomers.js
deleted file mode 100644
index c01a504322..0000000000
--- a/api/models/stripeCustomers.js
+++ /dev/null
@@ -1,90 +0,0 @@
-// @flow
-import { db } from './db';
-import type { RawCustomer } from 'shared/stripe/types/customer';
-const debug = require('debug')('api:models:stripe-customers');
-
-export const getStripeCustomer = (customerId: string): Promise => {
- return db
- .table('stripeCustomers')
- .get(customerId)
- .run();
-};
-
-export const getStripeCustomersByCustomerIds = (
- customerIds: Array
-): Promise> => {
- return db
- .table('stripeCustomers')
- .getAll(...customerIds)
- .group('customerId')
- .run();
-};
-
-export const recordExists = async (customerId: string): Promise => {
- debug(`Checking for duplicate records ${customerId}`);
- return await db
- .table('stripeCustomers')
- .getAll(customerId)
- .run()
- .then(
- result =>
- debug(`\nRecord exists for ${customerId}`) ||
- (result && result.length > 0)
- )
- .catch(err => {
- console.log('ERROR: ', err);
- return new Error(err);
- });
-};
-
-export const insertStripeCustomer = async (record: Object): Promise => {
- debug(`Inserting ${record.id}`);
- const expanded = Object.assign({}, record, { customerId: record.id });
- return await db
- .table('stripeCustomers')
- .insert(expanded, { returnChanges: 'always' })
- .run()
- .then(
- result =>
- debug('\nInserted') ||
- result.changes[0].new_val ||
- result.changes[0].old_val
- )
- .catch(err => {
- console.log('ERROR: ', err);
- return new Error(err);
- });
-};
-
-export const replaceStripeCustomer = async (
- customerId: string,
- record: Object
-): Promise => {
- const expanded = Object.assign({}, record, { customerId: record.id });
- return await db
- .table('stripeCustomers')
- .getAll(customerId)
- .replace(expanded, { returnChanges: 'always' })
- .run()
- .then(
- result =>
- debug('\nReplaced') ||
- result.changes[0].new_val ||
- result.changes[0].old_val
- )
- .catch(err => {
- console.log('ERROR: ', err);
- return new Error(err);
- });
-};
-
-export const insertOrReplaceStripeCustomer = async (customer: RawCustomer) => {
- const exists = await recordExists(customer.id);
- if (exists) {
- debug(`Customer record exists, replacing ${customer.id}`);
- return await replaceStripeCustomer(customer.id, customer);
- } else {
- debug(`Customer does not exist, inserting ${customer.id}`);
- return await insertStripeCustomer(customer);
- }
-};
diff --git a/api/models/stripeInvoices.js b/api/models/stripeInvoices.js
deleted file mode 100644
index 452b5964c6..0000000000
--- a/api/models/stripeInvoices.js
+++ /dev/null
@@ -1,20 +0,0 @@
-// @flow
-import { db } from './db';
-
-export const getInvoices = (
- invoices: Array
-): Promise> => {
- return db
- .table('stripeInvoices')
- .getAll(...invoices)
- .run();
-};
-
-// prettier-ignore
-export const getInvoicesByCustomerId = async (customerId: ?string): Promise> => {
- if (!customerId) return Promise.resolve([]);
- return db
- .table('stripeInvoices')
- .getAll(customerId, { index: 'customerId' })
- .run();
-};
diff --git a/api/models/stripeSources.js b/api/models/stripeSources.js
deleted file mode 100644
index 96b2cff6b2..0000000000
--- a/api/models/stripeSources.js
+++ /dev/null
@@ -1,29 +0,0 @@
-// @flow
-import { db } from './db';
-
-export const getSources = (sources: Array): Promise> => {
- return db
- .table('stripeSources')
- .getAll(...sources)
- .run();
-};
-
-export const getSourcesByCustomerId = async (
- customerId: ?string
-): Promise> => {
- if (!customerId) return await [];
- return db
- .table('stripeSources')
- .getAll(customerId, { index: 'customerId' })
- .run();
-};
-
-export const getStripeSourcesByCustomers = (
- customerIds: Array
-): Promise> => {
- return db
- .table('stripeSources')
- .getAll(...customerIds, { index: 'customerId' })
- .group('customerId')
- .run();
-};
diff --git a/api/models/stripeSubscriptions.js b/api/models/stripeSubscriptions.js
deleted file mode 100644
index 48db3b7e1f..0000000000
--- a/api/models/stripeSubscriptions.js
+++ /dev/null
@@ -1,21 +0,0 @@
-// @flow
-import { db } from './db';
-
-export const getSubscriptions = (
- subscriptions: Array
-): Promise> => {
- return db
- .table('stripeSubscriptions')
- .getAll(...subscriptions)
- .run();
-};
-
-export const getSubscriptionsByCustomerId = async (
- customerId: ?string
-): Promise> => {
- if (!customerId) return await [];
- return db
- .table('stripeSubscriptions')
- .getAll(customerId, { index: 'customerId' })
- .run();
-};
diff --git a/api/models/test/__snapshots__/channel.test.js.snap b/api/models/test/__snapshots__/channel.test.js.snap
new file mode 100644
index 0000000000..1ce9af67ec
--- /dev/null
+++ b/api/models/test/__snapshots__/channel.test.js.snap
@@ -0,0 +1,201 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`models/channel getChannels excludes deleted channels 1`] = `
+Array [
+ Object {
+ "communityId": "1",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "General chatter",
+ "id": "1",
+ "isDefault": true,
+ "isPrivate": false,
+ "memberCount": 5,
+ "name": "General",
+ "slug": "general",
+ },
+]
+`;
+
+exports[`models/channel getChannelsByCommunity returns correct set of channels 1`] = `
+Array [
+ Object {
+ "archivedAt": 2016-12-31T23:00:00.000Z,
+ "communityId": "1",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "Testing archiving",
+ "id": "5",
+ "isDefault": true,
+ "isPrivate": false,
+ "memberCount": 3,
+ "name": "Archived",
+ "slug": "archived",
+ },
+ Object {
+ "communityId": "1",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "General chatter",
+ "id": "1",
+ "isDefault": true,
+ "isPrivate": false,
+ "memberCount": 5,
+ "name": "General",
+ "slug": "general",
+ },
+ Object {
+ "communityId": "1",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "Private chatter",
+ "id": "2",
+ "isDefault": false,
+ "isPrivate": true,
+ "memberCount": 5,
+ "name": "Private",
+ "slug": "private",
+ },
+ Object {
+ "communityId": "1",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "Moderator created channel",
+ "id": "8",
+ "isDefault": false,
+ "isPrivate": false,
+ "memberCount": 1,
+ "name": "Moderator created",
+ "slug": "moderator-created",
+ },
+]
+`;
+
+exports[`models/channel getChannelsByUser returns correct set of channels 1`] = `
+Array [
+ Object {
+ "communityId": "2",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "Private chatter",
+ "id": "4",
+ "isBlocked": false,
+ "isDefault": false,
+ "isMember": true,
+ "isModerator": false,
+ "isOwner": false,
+ "isPending": false,
+ "isPrivate": true,
+ "memberCount": 5,
+ "name": "Private",
+ "receiveNotifications": true,
+ "slug": "private",
+ },
+ Object {
+ "communityId": "1",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "Private chatter",
+ "id": "2",
+ "isBlocked": false,
+ "isDefault": false,
+ "isMember": true,
+ "isModerator": false,
+ "isOwner": false,
+ "isPending": false,
+ "isPrivate": true,
+ "memberCount": 5,
+ "name": "Private",
+ "receiveNotifications": true,
+ "slug": "private",
+ },
+ Object {
+ "communityId": "1",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "General chatter",
+ "id": "1",
+ "isBlocked": false,
+ "isDefault": true,
+ "isMember": true,
+ "isModerator": false,
+ "isOwner": false,
+ "isPending": false,
+ "isPrivate": false,
+ "memberCount": 5,
+ "name": "General",
+ "receiveNotifications": true,
+ "slug": "general",
+ },
+ Object {
+ "communityId": "2",
+ "createdAt": 2016-12-31T23:00:00.000Z,
+ "description": "General chatter",
+ "id": "3",
+ "isBlocked": false,
+ "isDefault": true,
+ "isMember": true,
+ "isModerator": false,
+ "isOwner": false,
+ "isPending": false,
+ "isPrivate": false,
+ "memberCount": 5,
+ "name": "General",
+ "receiveNotifications": true,
+ "slug": "general",
+ },
+]
+`;
+
+exports[`models/channel getChannelsByUserAndCommunity returns correct set of channels 1`] = `
+Array [
+ "5",
+ "1",
+ "8",
+ "2",
+]
+`;
+
+exports[`models/channel getChannelsMemberCounts excludes deleted channels 1`] = `
+Array [
+ Object {
+ "group": "1",
+ "reduction": 5,
+ },
+]
+`;
+
+exports[`models/channel getChannelsMemberCounts excludes non-members 1`] = `
+Array [
+ Object {
+ "group": "1",
+ "reduction": 5,
+ },
+ Object {
+ "group": "2",
+ "reduction": 5,
+ },
+]
+`;
+
+exports[`models/channel getChannelsThreadCounts excludes deleted channels 1`] = `
+Array [
+ Object {
+ "group": "1",
+ "reduction": 4,
+ },
+]
+`;
+
+exports[`models/channel getChannelsThreadCounts excludes deleted threads 1`] = `
+Array [
+ Object {
+ "group": "1",
+ "reduction": 4,
+ },
+ Object {
+ "group": "2",
+ "reduction": 3,
+ },
+]
+`;
+
+exports[`models/channel getPublicChannelsByCommunity returns correct set of channels 1`] = `
+Array [
+ "5",
+ "1",
+ "8",
+]
+`;
diff --git a/api/models/test/channel.test.js b/api/models/test/channel.test.js
new file mode 100644
index 0000000000..f706e8f5c9
--- /dev/null
+++ b/api/models/test/channel.test.js
@@ -0,0 +1,175 @@
+// @flow
+
+import * as channel from '../channel';
+
+const queries = channel.__forQueryTests;
+
+import {
+ BRIAN_ID,
+ MAX_ID,
+ SPECTRUM_COMMUNITY_ID,
+ SPECTRUM_GENERAL_CHANNEL_ID,
+ SPECTRUM_PRIVATE_CHANNEL_ID,
+ DELETED_COMMUNITY_DELETED_CHANNEL_ID,
+} from 'api/migrations/seed/default/constants';
+
+describe('models/channel', () => {
+ describe('channelsByCommunitiesQuery', () => {
+ it('excludes deleted channels', async () => {
+ const channels = await queries
+ .channelsByCommunitiesQuery(SPECTRUM_COMMUNITY_ID)
+ .run();
+ expect(
+ channels.filter(channel => channel.deletedAt !== undefined)
+ ).toEqual([]);
+ });
+ });
+
+ describe('channelsByIdsQuery', () => {
+ it('excludes deleted channels', async () => {
+ const channels = await queries
+ .channelsByIdsQuery(
+ SPECTRUM_GENERAL_CHANNEL_ID,
+ DELETED_COMMUNITY_DELETED_CHANNEL_ID
+ )
+ .run();
+ expect(
+ channels.filter(channel => channel.deletedAt !== undefined)
+ ).toEqual([]);
+ });
+ });
+
+ describe('threadsByChannelsQuery', () => {
+ it('excludes deleted channels', async () => {
+ const threads = await queries
+ .threadsByChannelsQuery(DELETED_COMMUNITY_DELETED_CHANNEL_ID)
+ .run();
+ expect(threads).toEqual([]);
+ });
+
+ it('excludes deleted threads', async () => {
+ const threads = await queries
+ .threadsByChannelsQuery(SPECTRUM_GENERAL_CHANNEL_ID)
+ .run();
+ expect(threads.filter(thread => thread.deletedAt !== undefined)).toEqual(
+ []
+ );
+ });
+ });
+
+ describe('membersByChannelsQuery', () => {
+ it('excludes deleted channels', async () => {
+ const members = await queries
+ .membersByChannelsQuery(DELETED_COMMUNITY_DELETED_CHANNEL_ID)
+ .run();
+ expect(members).toEqual([]);
+ });
+
+ it('excludes removed members', async () => {
+ const members = await queries
+ .membersByChannelsQuery(SPECTRUM_GENERAL_CHANNEL_ID)
+ .run();
+ expect(members.filter(member => !member.isMember)).toEqual([]);
+ });
+ });
+
+ describe('getChannelsByCommunity', () => {
+ it('returns correct set of channels', async () => {
+ expect(
+ await channel.getChannelsByCommunity(SPECTRUM_COMMUNITY_ID)
+ ).toMatchSnapshot();
+ });
+ });
+
+ describe('getPublicChannelsByCommunity', () => {
+ it('returns correct set of channels', async () => {
+ expect(
+ await channel.getPublicChannelsByCommunity(SPECTRUM_COMMUNITY_ID)
+ ).toMatchSnapshot();
+ });
+ });
+
+ describe('getChannelsByUserAndCommunity', () => {
+ it('returns correct set of channels', async () => {
+ expect(
+ await channel.getChannelsByUserAndCommunity(
+ SPECTRUM_COMMUNITY_ID,
+ MAX_ID
+ )
+ ).toMatchSnapshot();
+ });
+ });
+
+ describe('getChannelsByUser', () => {
+ it('returns correct set of channels', async () => {
+ expect(await channel.getChannelsByUser(BRIAN_ID)).toMatchSnapshot();
+ });
+ });
+
+ describe('getChannelBySlug', () => {
+ it('excludes deleted channels', async () => {
+ expect(await channel.getChannelBySlug('deleted', 'spectrum')).toEqual(
+ null
+ );
+ });
+ });
+
+ describe('getChannelById', () => {
+ it('excludes deleted channels', async () => {
+ expect(
+ await channel.getChannelById(DELETED_COMMUNITY_DELETED_CHANNEL_ID)
+ ).toEqual(null);
+ });
+ });
+
+ describe('getChannels', () => {
+ it('excludes deleted channels', async () => {
+ expect(
+ await channel.getChannels([
+ SPECTRUM_GENERAL_CHANNEL_ID,
+ DELETED_COMMUNITY_DELETED_CHANNEL_ID,
+ ])
+ ).toMatchSnapshot();
+ });
+ });
+
+ describe('getChannelsThreadCounts', () => {
+ it('excludes deleted channels', async () => {
+ expect(
+ await channel.getChannelsThreadCounts([
+ SPECTRUM_GENERAL_CHANNEL_ID,
+ DELETED_COMMUNITY_DELETED_CHANNEL_ID,
+ ])
+ ).toMatchSnapshot();
+ });
+
+ it('excludes deleted threads', async () => {
+ expect(
+ await channel.getChannelsThreadCounts([
+ SPECTRUM_GENERAL_CHANNEL_ID,
+ SPECTRUM_PRIVATE_CHANNEL_ID,
+ ])
+ ).toMatchSnapshot();
+ });
+ });
+
+ describe('getChannelsMemberCounts', () => {
+ it('excludes deleted channels', async () => {
+ expect(
+ await channel.getChannelsMemberCounts([
+ SPECTRUM_GENERAL_CHANNEL_ID,
+ DELETED_COMMUNITY_DELETED_CHANNEL_ID,
+ ])
+ ).toMatchSnapshot();
+ });
+
+ it('excludes non-members', async () => {
+ expect(
+ await channel.getChannelsMemberCounts([
+ SPECTRUM_GENERAL_CHANNEL_ID,
+ SPECTRUM_PRIVATE_CHANNEL_ID,
+ ])
+ ).toMatchSnapshot();
+ });
+ });
+});
diff --git a/api/models/thread.js b/api/models/thread.js
index 9a8ee4d5d0..137e6d657a 100644
--- a/api/models/thread.js
+++ b/api/models/thread.js
@@ -1,10 +1,10 @@
// @flow
-const { db } = require('./db');
+const { db } = require('shared/db');
import intersection from 'lodash.intersection';
import {
processReputationEventQueue,
- sendThreadNotificationQueue,
- _adminProcessToxicThreadQueue,
+ trackQueue,
+ searchQueue,
} from 'shared/bull/queues';
const { NEW_DOCUMENTS, parseRange } = require('./utils');
import { createChangefeed } from 'shared/changefeed-utils';
@@ -13,6 +13,7 @@ import { turnOffAllThreadNotifications } from '../models/usersThreads';
import type { PaginationOptions } from '../utils/paginate-arrays';
import type { DBThread, FileUpload } from 'shared/types';
import type { Timeframe } from './utils';
+import { events } from 'shared/analytics';
export const getThread = (threadId: string): Promise => {
return db
@@ -21,9 +22,8 @@ export const getThread = (threadId: string): Promise => {
.run();
};
-export const getThreads = (
- threadIds: Array
-): Promise> => {
+// prettier-ignore
+export const getThreads = (threadIds: Array): Promise> => {
return db
.table('threads')
.getAll(...threadIds)
@@ -31,6 +31,18 @@ export const getThreads = (
.run();
};
+export const getThreadById = (threadId: string): Promise => {
+ return db
+ .table('threads')
+ .getAll(threadId)
+ .filter(thread => db.not(thread.hasFields('deletedAt')))
+ .run()
+ .then(results => {
+ if (!results || results.length === 0) return null;
+ return results[0];
+ });
+};
+
// this is used to get all threads that need to be marked as deleted whenever a channel is deleted
export const getThreadsByChannelToDelete = (channelId: string) => {
return db
@@ -40,10 +52,10 @@ export const getThreadsByChannelToDelete = (channelId: string) => {
.run();
};
-export const getThreadsByChannel = (
- channelId: string,
- { first, after }: PaginationOptions
-): Promise> => {
+// prettier-ignore
+export const getThreadsByChannel = (channelId: string, options: PaginationOptions): Promise> => {
+ const { first, after } = options
+
return db
.table('threads')
.between(
@@ -61,23 +73,35 @@ export const getThreadsByChannel = (
.run();
};
+// prettier-ignore
+type GetThreadsByChannelPaginationOptions = {
+ first: number,
+ after: number,
+ sort: 'latest' | 'trending'
+};
+
export const getThreadsByChannels = (
channelIds: Array,
- { first, after }: PaginationOptions
+ options: GetThreadsByChannelPaginationOptions
): Promise> => {
+ const { first, after, sort = 'latest' } = options;
+
+ let order = [db.desc('lastActive'), db.desc('createdAt')];
+ // If we want the top threads, first sort by the score and then lastActive
+ if (sort === 'trending') order.unshift(db.desc('score'));
+
return db
.table('threads')
.getAll(...channelIds, { index: 'channelId' })
.filter(thread => db.not(thread.hasFields('deletedAt')))
- .orderBy(db.desc('lastActive'), db.desc('createdAt'))
+ .orderBy(...order)
.skip(after || 0)
.limit(first || 999999)
.run();
};
-export const getThreadsByCommunity = (
- communityId: string
-): Promise> => {
+// prettier-ignore
+export const getThreadsByCommunity = (communityId: string): Promise> => {
return db
.table('threads')
.between([communityId, db.minval], [communityId, db.maxval], {
@@ -90,10 +114,8 @@ export const getThreadsByCommunity = (
.run();
};
-export const getThreadsByCommunityInTimeframe = (
- communityId: string,
- range: Timeframe
-): Promise> => {
+// prettier-ignore
+export const getThreadsByCommunityInTimeframe = (communityId: string, range: Timeframe): Promise> => {
const { current } = parseRange(range);
return db
.table('threads')
@@ -103,9 +125,8 @@ export const getThreadsByCommunityInTimeframe = (
.run();
};
-export const getThreadsInTimeframe = (
- range: Timeframe
-): Promise> => {
+// prettier-ignore
+export const getThreadsInTimeframe = (range: Timeframe): Promise> => {
const { current } = parseRange(range);
return db
.table('threads')
@@ -114,6 +135,17 @@ export const getThreadsInTimeframe = (
.run();
};
+// We do not filter by deleted threads intentionally to prevent users from spam
+// creating/deleting threads
+// prettier-ignore
+export const getThreadsByUserAsSpamCheck = (userId: string, timeframe: number = 60 * 10): Promise> => {
+ return db
+ .table('threads')
+ .getAll(userId, { index: 'creatorId' })
+ .filter(db.row('createdAt').during(db.now().sub(timeframe), db.now()))
+ .run();
+};
+
/*
When viewing a user profile we have to take two arguments into account:
1. The user who is being viewed
@@ -126,16 +158,29 @@ export const getThreadsInTimeframe = (
export const getViewableThreadsByUser = async (
evalUser: string,
currentUser: string,
- { first, after }: PaginationOptions
+ options: PaginationOptions
): Promise> => {
+ const { first, after } = options;
// get a list of the channelIds the current user is allowed to see threads
const getCurrentUsersChannelIds = db
.table('usersChannels')
- .getAll(currentUser, { index: 'userId' })
- .filter({ isBlocked: false, isMember: true })
+ .getAll(
+ [currentUser, 'member'],
+ [currentUser, 'moderator'],
+ [currentUser, 'owner'],
+ {
+ index: 'userIdAndRole',
+ }
+ )
.map(userChannel => userChannel('channelId'))
.run();
+ const getCurrentUserCommunityIds = db
+ .table('usersCommunities')
+ .getAll([currentUser, true], { index: 'userIdAndIsMember' })
+ .map(userCommunity => userCommunity('communityId'))
+ .run();
+
// get a list of the channels where the user posted a thread
const getPublishedChannelIds = db
.table('threads')
@@ -143,9 +188,22 @@ export const getViewableThreadsByUser = async (
.map(thread => thread('channelId'))
.run();
- const [currentUsersChannelIds, publishedChannelIds] = await Promise.all([
+ const getPublishedCommunityIds = db
+ .table('threads')
+ .getAll(evalUser, { index: 'creatorId' })
+ .map(thread => thread('communityId'))
+ .run();
+
+ const [
+ currentUsersChannelIds,
+ publishedChannelIds,
+ currentUsersCommunityIds,
+ publishedCommunityIds,
+ ] = await Promise.all([
getCurrentUsersChannelIds,
getPublishedChannelIds,
+ getCurrentUserCommunityIds,
+ getPublishedCommunityIds,
]);
// get a list of all the channels that are public
@@ -156,16 +214,32 @@ export const getViewableThreadsByUser = async (
.map(channel => channel('id'))
.run();
- const allIds = [...currentUsersChannelIds, ...publicChannelIds];
- const distinctIds = allIds.filter((x, i, a) => a.indexOf(x) == i);
- const validIds = intersection(distinctIds, publishedChannelIds);
+ const publicCommunityIds = await db
+ .table('communities')
+ .getAll(...publishedCommunityIds)
+ .filter({ isPrivate: false })
+ .map(community => community('id'))
+ .run();
+
+ const allIds = [
+ ...currentUsersChannelIds,
+ ...currentUsersCommunityIds,
+ ...publicChannelIds,
+ ...publicCommunityIds,
+ ];
+ const distinctIds = allIds.filter((x, i, a) => a.indexOf(x) === i);
+ let validChannelIds = intersection(distinctIds, publishedChannelIds);
+ let validCommunityIds = intersection(distinctIds, publishedCommunityIds);
// takes ~70ms for a heavy load
return await db
.table('threads')
.getAll(evalUser, { index: 'creatorId' })
.filter(thread => db.not(thread.hasFields('deletedAt')))
- .filter(thread => db.expr(validIds).contains(thread('channelId')))
+ .filter(thread => db.expr(validChannelIds).contains(thread('channelId')))
+ .filter(thread =>
+ db.expr(validCommunityIds).contains(thread('communityId'))
+ )
.orderBy(db.desc('lastActive'), db.desc('createdAt'))
.skip(after || 0)
.limit(first)
@@ -175,10 +249,9 @@ export const getViewableThreadsByUser = async (
});
};
-export const getPublicThreadsByUser = (
- evalUser: string,
- { first, after }: PaginationOptions
-): Promise> => {
+// prettier-ignore
+export const getPublicThreadsByUser = (evalUser: string, options: PaginationOptions): Promise> => {
+ const { first, after } = options
return db
.table('threads')
.getAll(evalUser, { index: 'creatorId' })
@@ -187,6 +260,10 @@ export const getPublicThreadsByUser = (
.filter({ right: { isPrivate: false } })
.without('right')
.zip()
+ .eqJoin('communityId', db.table('communities'))
+ .filter({ right: { isPrivate: false } })
+ .without('right')
+ .zip()
.orderBy(db.desc('lastActive'), db.desc('createdAt'))
.skip(after || 0)
.limit(first || 10)
@@ -196,35 +273,66 @@ export const getPublicThreadsByUser = (
export const getViewableParticipantThreadsByUser = async (
evalUser: string,
currentUser: string,
- { first, after }: PaginationOptions
+ options: PaginationOptions
): Promise> => {
+ const { first, after } = options;
// get a list of the channelIds the current user is allowed to see threads for
const getCurrentUsersChannelIds = db
.table('usersChannels')
- .getAll(currentUser, { index: 'userId' })
- .filter({ isBlocked: false, isMember: true })
+ .getAll(
+ [currentUser, 'member'],
+ [currentUser, 'moderator'],
+ [currentUser, 'owner'],
+ {
+ index: 'userIdAndRole',
+ }
+ )
.map(userChannel => userChannel('channelId'))
.run();
+ const getCurrentUserCommunityIds = db
+ .table('usersCommunities')
+ .getAll([currentUser, true], { index: 'userIdAndIsMember' })
+ .map(userCommunity => userCommunity('communityId'))
+ .run();
+
// get a list of the channels where the user participated in a thread
const getParticipantChannelIds = db
.table('usersThreads')
- .getAll(evalUser, { index: 'userId' })
- .filter({ isParticipant: true })
+ .getAll([evalUser, true], { index: 'userIdAndIsParticipant' })
.eqJoin('threadId', db.table('threads'))
.zip()
.pluck('channelId', 'threadId')
.run();
- const [currentUsersChannelIds, participantChannelIds] = await Promise.all([
+ const getParticipantCommunityIds = db
+ .table('usersThreads')
+ .getAll([evalUser, true], { index: 'userIdAndIsParticipant' })
+ .eqJoin('threadId', db.table('threads'))
+ .zip()
+ .pluck('communityId', 'threadId')
+ .run();
+
+ const [
+ currentUsersChannelIds,
+ participantChannelIds,
+ currentUsersCommunityIds,
+ participantCommunityIds,
+ ] = await Promise.all([
getCurrentUsersChannelIds,
getParticipantChannelIds,
+ getCurrentUserCommunityIds,
+ getParticipantCommunityIds,
]);
- const participantThreadIds = participantChannelIds.map(c => c.threadId);
+ const participantThreadIds = participantChannelIds.map(c => c && c.threadId);
const distinctParticipantChannelIds = participantChannelIds
.map(c => c.channelId)
- .filter((x, i, a) => a.indexOf(x) == i);
+ .filter((x, i, a) => a.indexOf(x) === i);
+
+ const distinctParticipantCommunityIds = participantCommunityIds
+ .map(c => c.communityId)
+ .filter((x, i, a) => a.indexOf(x) === i);
// get a list of all the channels that are public
const publicChannelIds = await db
@@ -234,15 +342,37 @@ export const getViewableParticipantThreadsByUser = async (
.map(channel => channel('id'))
.run();
- const allIds = [...currentUsersChannelIds, ...publicChannelIds];
- const distinctIds = allIds.filter((x, i, a) => a.indexOf(x) == i);
- const validIds = intersection(distinctIds, distinctParticipantChannelIds);
+ const publicCommunityIds = await db
+ .table('communities')
+ .getAll(...distinctParticipantCommunityIds)
+ .filter({ isPrivate: false })
+ .map(community => community('id'))
+ .run();
+
+ const allIds = [
+ ...currentUsersChannelIds,
+ ...publicChannelIds,
+ ...currentUsersCommunityIds,
+ ...publicCommunityIds,
+ ];
+ const distinctIds = allIds.filter((x, i, a) => a.indexOf(x) === i);
+ let validChannelIds = intersection(
+ distinctIds,
+ distinctParticipantChannelIds
+ );
+ let validCommunityIds = intersection(
+ distinctIds,
+ distinctParticipantCommunityIds
+ );
return await db
.table('threads')
.getAll(...participantThreadIds)
.filter(thread => db.not(thread.hasFields('deletedAt')))
- .filter(thread => db.expr(validIds).contains(thread('channelId')))
+ .filter(thread => db.expr(validChannelIds).contains(thread('channelId')))
+ .filter(thread =>
+ db.expr(validCommunityIds).contains(thread('communityId'))
+ )
.orderBy(db.desc('lastActive'), db.desc('createdAt'))
.skip(after || 0)
.limit(first)
@@ -252,14 +382,12 @@ export const getViewableParticipantThreadsByUser = async (
});
};
-export const getPublicParticipantThreadsByUser = (
- evalUser: string,
- { first, after }: PaginationOptions
-): Promise> => {
+// prettier-ignore
+export const getPublicParticipantThreadsByUser = (evalUser: string, options: PaginationOptions): Promise> => {
+ const { first, after } = options
return db
.table('usersThreads')
- .getAll(evalUser, { index: 'userId' })
- .filter({ isParticipant: true })
+ .getAll([evalUser, true], { index: 'userIdAndIsParticipant' })
.eqJoin('threadId', db.table('threads'))
.without({
left: [
@@ -277,6 +405,10 @@ export const getPublicParticipantThreadsByUser = (
.filter({ right: { isPrivate: false } })
.without('right')
.zip()
+ .eqJoin('communityId', db.table('communities'))
+ .filter({ right: { isPrivate: false } })
+ .without('right')
+ .zip()
.orderBy(db.desc('lastActive'), db.desc('createdAt'))
.skip(after || 0)
.limit(first || 10)
@@ -286,11 +418,6 @@ export const getPublicParticipantThreadsByUser = (
});
};
-/*
- A thread may receive a field 'filesToUpload' if it contains images. We destructure
- the incoming argument in order to ignore that field and only return the rest
- of the thread fields
-*/
export const publishThread = (
// eslint-disable-next-line
{ filesToUpload, ...thread }: Object,
@@ -307,29 +434,33 @@ export const publishThread = (
isPublished: true,
isLocked: false,
edits: [],
+ reactionCount: 0,
+ messageCount: 0,
}),
{ returnChanges: true }
)
.run()
.then(result => {
const thread = result.changes[0].new_val;
- sendThreadNotificationQueue.add({ thread });
- processReputationEventQueue.add({
+
+ searchQueue.add({
+ id: thread.id,
+ type: 'thread',
+ event: 'created',
+ });
+
+ trackQueue.add({
userId,
- type: 'thread created',
- entityId: thread.id,
+ event: events.THREAD_CREATED,
+ context: { threadId: thread.id },
});
- _adminProcessToxicThreadQueue.add({ thread });
return thread;
});
};
-export const setThreadLock = (
- threadId: string,
- value: boolean,
- userId: string
-): Promise => {
+// prettier-ignore
+export const setThreadLock = (threadId: string, value: boolean, userId: string, byModerator: boolean = false): Promise => {
return (
db
.table('threads')
@@ -345,35 +476,44 @@ export const setThreadLock = (
{ returnChanges: true }
)
.run()
- .then(
- result =>
- result.changes.length > 0
- ? result.changes[0].new_val
- : db
- .table('threads')
- .get(threadId)
- .run()
- )
+ .then(async () => {
+ const thread = await getThreadById(threadId)
+
+ const event = value
+ ? byModerator
+ ? events.THREAD_LOCKED_BY_MODERATOR
+ : events.THREAD_LOCKED
+ : byModerator
+ ? events.THREAD_UNLOCKED_BY_MODERATOR
+ : events.THREAD_UNLOCKED
+
+ trackQueue.add({
+ userId,
+ event,
+ context: { threadId }
+ })
+
+ return thread
+ })
);
};
-export const setThreadLastActive = (threadId: string, value: Date) =>
- db
+export const setThreadLastActive = (threadId: string, value: Date) => {
+ return db
.table('threads')
.get(threadId)
.update({ lastActive: value })
.run();
+};
-/*
- Non-destructively delete a thread by setting the `deletedAt` field to a date.
- After a thread is deleted, set `receiveNotifications` to false for all users who were participants or had subscribed to notifications.
-*/
-export const deleteThread = (threadId: string): Promise => {
+// prettier-ignore
+export const deleteThread = (threadId: string, userId: string): Promise => {
return db
.table('threads')
.get(threadId)
.update(
{
+ deletedBy: userId,
deletedAt: new Date(),
},
{
@@ -386,12 +526,24 @@ export const deleteThread = (threadId: string): Promise => {
Promise.all([
result,
turnOffAllThreadNotifications(threadId),
- deleteMessagesInThread(threadId),
+ deleteMessagesInThread(threadId, userId),
])
)
.then(([result]) => {
const thread = result.changes[0].new_val;
+ searchQueue.add({
+ id: thread.id,
+ type: 'thread',
+ event: 'deleted'
+ })
+
+ trackQueue.add({
+ userId,
+ event: events.THREAD_DELETED,
+ context: { threadId },
+ });
+
processReputationEventQueue.add({
userId: thread.creatorId,
type: 'thread deleted',
@@ -404,36 +556,27 @@ export const deleteThread = (threadId: string): Promise => {
type File = FileUpload;
-type Attachment = {
- attachmentType: string,
- data: string,
-};
-
export type EditThreadInput = {
threadId: string,
content: {
title: string,
body: ?string,
},
- attachments?: ?Array,
filesToUpload?: ?Array,
};
+
// shouldUpdate arguemnt is used to prevent a thread from being marked as edited when the images are uploaded at publish time
-export const editThread = (
- input: EditThreadInput,
- shouldUpdate: boolean = true
-): Promise => {
+// prettier-ignore
+export const editThread = (input: EditThreadInput, userId: string, shouldUpdate: boolean = true): Promise => {
return db
.table('threads')
.get(input.threadId)
.update(
{
content: input.content,
- attachments: input.attachments,
modifiedAt: shouldUpdate ? new Date() : null,
edits: db.row('edits').append({
content: db.row('content'),
- attachments: db.row('attachments'),
timestamp: new Date(),
}),
},
@@ -444,9 +587,31 @@ export const editThread = (
// if an update happened
if (result.replaced === 1) {
const thread = result.changes[0].new_val;
+
+ searchQueue.add({
+ id: thread.id,
+ type: 'thread',
+ event: 'edited'
+ })
+
+ trackQueue.add({
+ userId,
+ event: events.THREAD_EDITED,
+ context: { threadId: input.threadId }
+ })
+
return thread;
}
+ trackQueue.add({
+ userId,
+ event: events.THREAD_EDITED_FAILED,
+ context: { threadId: input.threadId },
+ properties: {
+ reason: 'no changes'
+ }
+ })
+
// an update was triggered from the client, but no data was changed
return result.changes[0].old_val;
});
@@ -480,7 +645,7 @@ export const updateThreadWithImages = (id: string, body: string) => {
});
};
-export const moveThread = (id: string, channelId: string) => {
+export const moveThread = (id: string, channelId: string, userId: string) => {
return db
.table('threads')
.get(id)
@@ -492,11 +657,89 @@ export const moveThread = (id: string, channelId: string) => {
)
.run()
.then(result => {
- if (result.replaced === 1) return result.changes[0].new_val;
+ if (result.replaced === 1) {
+ const thread = result.changes[0].new_val;
+
+ searchQueue.add({
+ id: thread.id,
+ type: 'thread',
+ event: 'moved',
+ });
+
+ trackQueue.add({
+ userId,
+ event: events.THREAD_MOVED,
+ context: { threadId: id },
+ });
+
+ return thread;
+ }
+
+ trackQueue.add({
+ userId,
+ event: events.THREAD_MOVED_FAILED,
+ context: { threadId: id },
+ properties: {
+ reason: 'no changes',
+ },
+ });
+
return null;
});
};
+export const incrementMessageCount = (threadId: string) => {
+ return db
+ .table('threads')
+ .get(threadId)
+ .update({
+ messageCount: db
+ .row('messageCount')
+ .default(0)
+ .add(1),
+ })
+ .run();
+};
+
+export const decrementMessageCount = (threadId: string) => {
+ return db
+ .table('threads')
+ .get(threadId)
+ .update({
+ messageCount: db
+ .row('messageCount')
+ .default(1)
+ .sub(1),
+ })
+ .run();
+};
+
+export const incrementReactionCount = (threadId: string) => {
+ return db
+ .table('threads')
+ .get(threadId)
+ .update({
+ reactionCount: db
+ .row('reactionCount')
+ .default(0)
+ .add(1),
+ })
+ .run();
+};
+
+export const decrementReactionCount = (threadId: string) => {
+ return db
+ .table('threads')
+ .get(threadId)
+ .update({
+ reactionCount: db
+ .row('reactionCount')
+ .default(1)
+ .sub(1),
+ })
+ .run();
+};
+
const hasChanged = (field: string) =>
db
.row('old_val')(field)
diff --git a/api/models/threadReaction.js b/api/models/threadReaction.js
new file mode 100644
index 0000000000..782af0519a
--- /dev/null
+++ b/api/models/threadReaction.js
@@ -0,0 +1,162 @@
+// @flow
+import { db } from 'shared/db';
+import {
+ sendThreadReactionNotificationQueue,
+ processReputationEventQueue,
+} from 'shared/bull/queues';
+import type { DBThreadReaction } from 'shared/types';
+import { events } from 'shared/analytics';
+import { trackQueue } from 'shared/bull/queues';
+import { incrementReactionCount, decrementReactionCount } from './thread';
+import { getThreadById } from './thread';
+
+type ThreadReactionType = 'like';
+
+// prettier-ignore
+export const getThreadReactions = (threadIds: Array): Promise> => {
+ const distinctMessageIds = threadIds.filter((x, i, a) => a.indexOf(x) == i);
+ return db
+ .table('threadReactions')
+ .getAll(...distinctMessageIds, { index: 'threadId' })
+ .filter(row => row.hasFields('deletedAt').not())
+ .group('threadId')
+ .run();
+};
+
+export const hasReactedToThread = (
+ userId: string,
+ threadId: string
+): Promise => {
+ return db
+ .table('threadReactions')
+ .getAll([userId, threadId], { index: 'userIdAndThreadId' })
+ .filter(row => row.hasFields('deletedAt').not())
+ .count()
+ .eq(1)
+ .run();
+};
+
+type ThreadReactionInput = {
+ threadId: string,
+ type: ThreadReactionType,
+};
+
+// prettier-ignore
+export const addThreadReaction = (input: ThreadReactionInput, userId: string): Promise => {
+ return db
+ .table('threadReactions')
+ .getAll(input.threadId, { index: 'threadId' })
+ .filter({ userId })
+ .run()
+ .then(async results => {
+ const thread = await getThreadById(input.threadId)
+ // if the reaction already exists in the db, it was previously deleted
+ // just remove the deletedAt field
+ if (results && results.length > 0) {
+ const thisReaction = results[0];
+
+ const sendReactionNotification = thread && (thread.creatorId !== userId)
+ ? sendThreadReactionNotificationQueue.add({ threadReaction: thisReaction, userId })
+ : null
+
+ await Promise.all([
+ trackQueue.add({
+ userId,
+ event: events.THREAD_REACTION_CREATED,
+ context: {
+ threadReactionId: thisReaction.id,
+ },
+ }),
+ sendReactionNotification,
+ processReputationEventQueue.add({
+ userId,
+ type: 'thread reaction created',
+ entityId: thisReaction.threadId,
+ }),
+ incrementReactionCount(thisReaction.threadId)
+ ])
+
+ return db
+ .table('threadReactions')
+ .get(thisReaction.id)
+ .update({
+ deletedAt: db.literal(),
+ }, { returnChanges: 'always' })
+ .run()
+ .then(result => result.changes[0].new_val || result.changes[0].new_val)
+ }
+
+ return db
+ .table('threadReactions')
+ .insert(
+ {
+ ...input,
+ userId,
+ createdAt: Date.now(),
+ },
+ { returnChanges: 'always' }
+ )
+ .run()
+ .then(result => result.changes[0].new_val)
+ .then(async threadReaction => {
+ const sendReactionNotification = thread && (thread.creatorId !== userId)
+ ? sendThreadReactionNotificationQueue.add({ threadReaction, userId })
+ : null
+
+ await Promise.all([
+ trackQueue.add({
+ userId,
+ event: events.THREAD_REACTION_CREATED,
+ context: { threadReactionId: threadReaction.id },
+ }),
+ processReputationEventQueue.add({
+ userId,
+ type: 'thread reaction created',
+ entityId: threadReaction.threadId,
+ }),
+ sendReactionNotification,
+ incrementReactionCount(threadReaction.threadId)
+ ])
+
+ return threadReaction;
+ });
+ });
+};
+
+// prettier-ignore
+export const removeThreadReaction = (threadId: string, userId: string): Promise => {
+ return db
+ .table('threadReactions')
+ .getAll(threadId, { index: 'threadId' })
+ .filter({ userId })
+ .run()
+ .then(async results => {
+ // no reaction exists to be removed
+ if (!results || results.length === 0) return null;
+
+ const threadReaction = results[0];
+
+ await Promise.all([
+ trackQueue.add({
+ userId,
+ event: events.THREAD_REACTION_DELETED,
+ context: { threadReactionId: threadReaction.id },
+ }),
+ processReputationEventQueue.add({
+ userId,
+ type: 'thread reaction deleted',
+ entityId: threadReaction.threadId,
+ }),
+ decrementReactionCount(threadId)
+ ])
+
+ return db
+ .table('threadReactions')
+ .get(threadReaction.id)
+ .update({
+ deletedAt: new Date(),
+ }, { returnChanges: 'always' })
+ .run()
+ .then(result => result.changes[0].new_val || result.changes[0].new_val)
+ });
+};
diff --git a/api/models/user.js b/api/models/user.js
deleted file mode 100644
index af1254e273..0000000000
--- a/api/models/user.js
+++ /dev/null
@@ -1,469 +0,0 @@
-// @flow
-const { db } = require('./db');
-import { uploadImage } from '../utils/s3';
-import { createNewUsersSettings } from './usersSettings';
-import { sendNewUserWelcomeEmailQueue } from 'shared/bull/queues';
-import type { PaginationOptions } from '../utils/paginate-arrays';
-import type { DBUser, FileUpload } from 'shared/types';
-
-type GetUserInput = {
- id?: string,
- username?: string,
-};
-
-const getUser = async (input: GetUserInput): Promise => {
- if (input.id) return await getUserById(input.id);
- if (input.username) return await getUserByUsername(input.username);
- return null;
-};
-
-const getUserById = (userId: string): Promise => {
- return db
- .table('users')
- .get(userId)
- .run();
-};
-
-const getUserByEmail = (email: string): Promise => {
- return db
- .table('users')
- .getAll(email, { index: 'email' })
- .run()
- .then(results => (results.length > 0 ? results[0] : null));
-};
-
-const getUserByUsername = (username: string): Promise => {
- return db
- .table('users')
- .getAll(username, { index: 'username' })
- .run()
- .then(result => (result ? result[0] : null));
-};
-
-const getUsersByUsername = (
- usernames: Array
-): Promise