Commit 128f9778 authored by Phil Hughes's avatar Phil Hughes

Merge branch 'ce-to-ee-2018-11-27' into 'master'

CE upstream - 2018-11-27 21:21 UTC

Closes gitlab-ce#54503

See merge request gitlab-org/gitlab-ee!8613
parents 53f8801d b9d67b1c
...@@ -217,6 +217,28 @@ export default class MergeRequestTabs { ...@@ -217,6 +217,28 @@ export default class MergeRequestTabs {
} }
this.eventHub.$emit('MergeRequestTabChange', this.getCurrentAction()); this.eventHub.$emit('MergeRequestTabChange', this.getCurrentAction());
} else if (action === this.currentAction) {
// ContentTop is used to handle anything at the top of the page before the main content
const mainContentContainer = document.querySelector('.content-wrapper');
const tabContentContainer = document.querySelector('.tab-content');
if (mainContentContainer && tabContentContainer) {
const mainContentTop = mainContentContainer.getBoundingClientRect().top;
const tabContentTop = tabContentContainer.getBoundingClientRect().top;
// 51px is the height of the navbar buttons, e.g. `Discussion | Commits | Changes`
const scrollDestination = tabContentTop - mainContentTop - 51;
// scrollBehavior is only available in browsers that support scrollToOptions
if ('scrollBehavior' in document.documentElement.style) {
window.scrollTo({
top: scrollDestination,
behavior: 'smooth',
});
} else {
window.scrollTo(0, scrollDestination);
}
}
} }
} }
......
...@@ -11,6 +11,8 @@ import initDiffNotes from '~/diff_notes/diff_notes_bundle'; ...@@ -11,6 +11,8 @@ import initDiffNotes from '~/diff_notes/diff_notes_bundle';
import { fetchCommitMergeRequests } from '~/commit_merge_requests'; import { fetchCommitMergeRequests } from '~/commit_merge_requests';
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
const hasPerfBar = document.querySelector('.with-performance-bar');
const performanceHeight = hasPerfBar ? 35 : 0;
new Diff(); new Diff();
new ZenMode(); new ZenMode();
new ShortcutsNavigation(); new ShortcutsNavigation();
...@@ -18,8 +20,7 @@ document.addEventListener('DOMContentLoaded', () => { ...@@ -18,8 +20,7 @@ document.addEventListener('DOMContentLoaded', () => {
container: '.js-commit-pipeline-graph', container: '.js-commit-pipeline-graph',
}).bindEvents(); }).bindEvents();
initNotes(); initNotes();
const stickyBarPaddingTop = 16; initChangesDropdown(document.querySelector('.navbar-gitlab').offsetHeight + performanceHeight);
initChangesDropdown(document.querySelector('.navbar-gitlab').offsetHeight - stickyBarPaddingTop);
$('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath); $('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath);
fetchCommitMergeRequests(); fetchCommitMergeRequests();
initDiffNotes(); initDiffNotes();
......
...@@ -802,11 +802,7 @@ ...@@ -802,11 +802,7 @@
@include media-breakpoint-down(xs) { @include media-breakpoint-down(xs) {
.navbar-gitlab { .navbar-gitlab {
li.header-projects, li.dropdown {
li.header-groups,
li.header-more,
li.header-new,
li.header-user {
position: static; position: static;
} }
} }
......
...@@ -110,6 +110,10 @@ ...@@ -110,6 +110,10 @@
} }
} }
.navbar-collapse > ul.nav > li:not(.d-none) {
margin: 0 2px;
}
&.menu-expanded { &.menu-expanded {
@include media-breakpoint-down(xs) { @include media-breakpoint-down(xs) {
.title-container { .title-container {
...@@ -117,7 +121,7 @@ ...@@ -117,7 +121,7 @@
} }
.navbar-collapse { .navbar-collapse {
display: block; display: flex;
} }
} }
} }
...@@ -209,7 +213,7 @@ ...@@ -209,7 +213,7 @@
> a { > a {
will-change: color; will-change: color;
margin: 4px 2px; margin: 4px 0;
padding: 6px 8px; padding: 6px 8px;
height: 32px; height: 32px;
...@@ -455,14 +459,11 @@ ...@@ -455,14 +459,11 @@
color: $indigo-900; color: $indigo-900;
font-weight: $gl-font-weight-bold; font-weight: $gl-font-weight-bold;
line-height: 18px; line-height: 18px;
margin: 4px 0 4px 2px;
&:hover { &:hover {
background-color: $white-light; background-color: $white-light;
} }
@include media-breakpoint-down(xs) {
margin-top: $gl-padding-4;
}
} }
.navbar-nav { .navbar-nav {
...@@ -509,12 +510,7 @@ ...@@ -509,12 +510,7 @@
margin-right: -10px; margin-right: -10px;
.nav > li:not(.d-none) { .nav > li:not(.d-none) {
display: table-cell !important; flex: 1;
width: 25%;
a {
margin-right: 8px;
}
} }
} }
} }
......
...@@ -10,23 +10,33 @@ ...@@ -10,23 +10,33 @@
position: -webkit-sticky; position: -webkit-sticky;
position: sticky; position: sticky;
top: 92px; top: 92px;
margin-left: -1px;
border-left: 1px solid $border-color;
z-index: 102; z-index: 102;
&.is-commit {
top: $header-height + 36px;
.with-performance-bar & {
top: $header-height + 36px + $performance-bar-height;
}
}
&::before { &::before {
content: ''; content: '';
position: absolute; position: absolute;
top: -1px; top: -1px;
left: -10px; left: -11px;
width: 10px; width: 10px;
height: calc(100% + 1px); height: calc(100% + 1px);
background: $white-light; background: $white-light;
border-right: 1px solid $border-color; pointer-events: none;
}
} }
.with-performance-bar & { .with-performance-bar & {
top: 127px; top: 127px;
} }
}
a:hover { a:hover {
text-decoration: none; text-decoration: none;
...@@ -701,15 +711,14 @@ ...@@ -701,15 +711,14 @@
} }
@include media-breakpoint-up(sm) { @include media-breakpoint-up(sm) {
top: 24px; position: -webkit-sticky;
background-color: $white-light;
&.diff-files-changed-merge-request {
position: sticky; position: sticky;
top: 90px; top: $header-height;
background-color: $white-light;
z-index: 200; z-index: 200;
margin: $gl-padding 0;
padding: 0; .with-performance-bar & {
top: $header-height + $performance-bar-height;
} }
&.is-stuck { &.is-stuck {
...@@ -734,14 +743,6 @@ ...@@ -734,14 +743,6 @@
} }
} }
@include media-breakpoint-up(sm) {
.with-performance-bar {
.diff-files-changed.diff-files-changed-merge-request {
top: 76px + $performance-bar-height;
}
}
}
.diff-file-changes { .diff-file-changes {
max-width: 560px; max-width: 560px;
width: 100%; width: 100%;
......
...@@ -393,6 +393,14 @@ $note-form-margin-left: 72px; ...@@ -393,6 +393,14 @@ $note-form-margin-left: 72px;
border-top: 1px solid $border-color; border-top: 1px solid $border-color;
border-radius: 0; border-radius: 0;
@media (min-width: map-get($grid-breakpoints, md)) {
top: 91px;
.with-performance-bar & {
top: 126px;
}
}
&:hover { &:hover {
background-color: $gray-light; background-color: $gray-light;
} }
......
...@@ -76,7 +76,7 @@ module Ci ...@@ -76,7 +76,7 @@ module Ci
raise ArgumentError, 'Offset is out of range' if offset > size || offset < 0 raise ArgumentError, 'Offset is out of range' if offset > size || offset < 0
raise ArgumentError, 'Chunk size overflow' if CHUNK_SIZE < (offset + new_data.bytesize) raise ArgumentError, 'Chunk size overflow' if CHUNK_SIZE < (offset + new_data.bytesize)
in_lock(*lock_params) do # Write opetation is atomic in_lock(*lock_params) do # Write operation is atomic
unsafe_set_data!(data.byteslice(0, offset) + new_data) unsafe_set_data!(data.byteslice(0, offset) + new_data)
end end
...@@ -100,7 +100,7 @@ module Ci ...@@ -100,7 +100,7 @@ module Ci
end end
def persist_data! def persist_data!
in_lock(*lock_params) do # Write opetation is atomic in_lock(*lock_params) do # Write operation is atomic
unsafe_persist_to!(self.class.persistable_store) unsafe_persist_to!(self.class.persistable_store)
end end
end end
......
...@@ -11,6 +11,25 @@ module Clusters ...@@ -11,6 +11,25 @@ module Clusters
protected protected
def log_error(error)
meta = {
exception: error.class.name,
error_code: error.respond_to?(:error_code) ? error.error_code : nil,
service: self.class.name,
app_id: app.id,
project_ids: app.cluster.project_ids,
group_ids: app.cluster.group_ids,
message: error.message
}
logger.error(meta)
Gitlab::Sentry.track_acceptable_exception(error, extra: meta)
end
def logger
@logger ||= Gitlab::Kubernetes::Logger.build
end
def cluster def cluster
app.cluster app.cluster
end end
......
...@@ -15,8 +15,7 @@ module Clusters ...@@ -15,8 +15,7 @@ module Clusters
check_timeout check_timeout
end end
rescue Kubeclient::HttpError => e rescue Kubeclient::HttpError => e
Rails.logger.error("Kubernetes error: #{e.error_code} #{e.message}") log_error(e)
Gitlab::Sentry.track_acceptable_exception(e, extra: { scope: 'kubernetes', app_id: app.id })
app.make_errored!("Kubernetes error: #{e.error_code}") unless app.errored? app.make_errored!("Kubernetes error: #{e.error_code}") unless app.errored?
end end
......
...@@ -13,12 +13,10 @@ module Clusters ...@@ -13,12 +13,10 @@ module Clusters
ClusterWaitForAppInstallationWorker.perform_in( ClusterWaitForAppInstallationWorker.perform_in(
ClusterWaitForAppInstallationWorker::INTERVAL, app.name, app.id) ClusterWaitForAppInstallationWorker::INTERVAL, app.name, app.id)
rescue Kubeclient::HttpError => e rescue Kubeclient::HttpError => e
Rails.logger.error("Kubernetes error: #{e.error_code} #{e.message}") log_error(e)
Gitlab::Sentry.track_acceptable_exception(e, extra: { scope: 'kubernetes', app_id: app.id })
app.make_errored!("Kubernetes error: #{e.error_code}") app.make_errored!("Kubernetes error: #{e.error_code}")
rescue StandardError => e rescue StandardError => e
Rails.logger.error "Can't start installation process: #{e.class.name} #{e.message}" log_error(e)
Gitlab::Sentry.track_acceptable_exception(e, extra: { scope: 'kubernetes', app_id: app.id })
app.make_errored!("Can't start installation process.") app.make_errored!("Can't start installation process.")
end end
end end
......
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
= link_to admin_impersonation_path, class: 'nav-link impersonation-btn', method: :delete, title: _('Stop impersonation'), aria: { label: _('Stop impersonation') }, data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } do = link_to admin_impersonation_path, class: 'nav-link impersonation-btn', method: :delete, title: _('Stop impersonation'), aria: { label: _('Stop impersonation') }, data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } do
= icon('user-secret') = icon('user-secret')
- if header_link?(:sign_in) - if header_link?(:sign_in)
%li.nav-item.m-auto %li.nav-item
%div %div
- sign_in_text = allow_signup? ? _('Sign in / Register') : _('Sign in') - sign_in_text = allow_signup? ? _('Sign in / Register') : _('Sign in')
= link_to sign_in_text, new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in' = link_to sign_in_text, new_session_path(:user, redirect_to_referer: 'yes'), class: 'btn btn-sign-in'
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
= render "ci_menu" = render "ci_menu"
- else - else
.block-connector .block-connector
= render "projects/diffs/diffs", diffs: @diffs, environment: @environment = render "projects/diffs/diffs", diffs: @diffs, environment: @environment, is_commit: true
.limited-width-notes .limited-width-notes
= render "shared/notes/notes_with_form", :autocomplete => true = render "shared/notes/notes_with_form", :autocomplete => true
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
- show_whitespace_toggle = local_assigns.fetch(:show_whitespace_toggle, true) - show_whitespace_toggle = local_assigns.fetch(:show_whitespace_toggle, true)
- can_create_note = !@diff_notes_disabled && can?(current_user, :create_note, diffs.project) - can_create_note = !@diff_notes_disabled && can?(current_user, :create_note, diffs.project)
- diff_files = diffs.diff_files - diff_files = diffs.diff_files
- merge_request = local_assigns.fetch(:merge_request, false) - is_commit = local_assigns.fetch(:is_commit, false)
.content-block.oneline-block.files-changed.diff-files-changed.js-diff-files-changed{ class: ("diff-files-changed-merge-request" if merge_request) } .content-block.oneline-block.files-changed.diff-files-changed.js-diff-files-changed
.files-changed-inner .files-changed-inner
.inline-parallel-buttons.d-none.d-sm-none.d-md-block .inline-parallel-buttons.d-none.d-sm-none.d-md-block
- if !diffs_expanded? && diff_files.any? { |diff_file| diff_file.collapsed? } - if !diffs_expanded? && diff_files.any? { |diff_file| diff_file.collapsed? }
...@@ -25,4 +25,4 @@ ...@@ -25,4 +25,4 @@
= render 'projects/diffs/warning', diff_files: diffs = render 'projects/diffs/warning', diff_files: diffs
.files{ data: { can_create_note: can_create_note } } .files{ data: { can_create_note: can_create_note } }
= render partial: 'projects/diffs/file', collection: diff_files, as: :diff_file, locals: { project: diffs.project, environment: environment } = render partial: 'projects/diffs/file', collection: diff_files, as: :diff_file, locals: { project: diffs.project, environment: environment, is_commit: is_commit }
- environment = local_assigns.fetch(:environment, nil) - environment = local_assigns.fetch(:environment, nil)
- is_commit = local_assigns.fetch(:is_commit, false)
- file_hash = hexdigest(diff_file.file_path) - file_hash = hexdigest(diff_file.file_path)
- image_diff = diff_file.rich_viewer && diff_file.rich_viewer.partial_name == 'image' - image_diff = diff_file.rich_viewer && diff_file.rich_viewer.partial_name == 'image'
- image_replaced = diff_file.old_content_sha && diff_file.old_content_sha != diff_file.content_sha - image_replaced = diff_file.old_content_sha && diff_file.old_content_sha != diff_file.content_sha
.diff-file.file-holder{ id: file_hash, data: diff_file_html_data(project, diff_file.file_path, diff_file.content_sha) } .diff-file.file-holder{ id: file_hash, data: diff_file_html_data(project, diff_file.file_path, diff_file.content_sha) }
.js-file-title.file-title-flex-parent .js-file-title.file-title-flex-parent{ class: is_commit ? "is-commit" : "" }
.file-header-content .file-header-content
= render "projects/diffs/file_header", diff_file: diff_file, url: "##{file_hash}" = render "projects/diffs/file_header", diff_file: diff_file, url: "##{file_hash}"
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
window.gl.mrWidgetData = #{serialize_issuable(@merge_request, serializer: 'widget')} window.gl.mrWidgetData = #{serialize_issuable(@merge_request, serializer: 'widget')}
window.gl.mrWidgetData.squash_before_merge_help_path = '#{help_page_path("user/project/merge_requests/squash_and_merge")}'; window.gl.mrWidgetData.squash_before_merge_help_path = '#{help_page_path("user/project/merge_requests/squash_and_merge")}';
window.gl.mrWidgetData.troubleshooting_docs_path = '#{help_page_path('user/project/merge_requests', anchor: 'troubleshooting')}'; window.gl.mrWidgetData.troubleshooting_docs_path = '#{help_page_path('user/project/merge_requests/index.md', anchor: 'troubleshooting')}';
#js-vue-mr-widget.mr-widget #js-vue-mr-widget.mr-widget
......
...@@ -4,10 +4,10 @@ ...@@ -4,10 +4,10 @@
- header_title "Projects", dashboard_projects_path - header_title "Projects", dashboard_projects_path
- active_tab = local_assigns.fetch(:active_tab, 'blank') - active_tab = local_assigns.fetch(:active_tab, 'blank')
.project-edit-container .project-edit-container.prepend-top-default
.project-edit-errors .project-edit-errors
= render 'projects/errors' = render 'projects/errors'
.row.prepend-top-default .row
.col-lg-3.profile-settings-sidebar .col-lg-3.profile-settings-sidebar
%h4.prepend-top-0 %h4.prepend-top-0
= _('New project') = _('New project')
......
---
title: Allow user to scroll to top of tab on MR page
merge_request:
author:
type: added
---
title: Correctly handle data-loss scenarios when encrypting columns
merge_request: 23306
author:
type: fixed
---
title: "Fix overlapping navbar separator and overflowing navbar dropdown on small displays"
merge_request: 23126
author: Thomas Pathier
type: fix
---
title: Lock writes to trace stream
merge_request:
author:
type: fixed
module AttrEncrypted module AttrEncrypted
module Adapters module Adapters
module ActiveRecord module ActiveRecord
module DBConnectionQuerier module GitlabMonkeyPatches
# Prevent attr_encrypted from defining virtual accessors for encryption
# data when the code and schema are out of sync. See this issue for more
# details: https://github.com/attr-encrypted/attr_encrypted/issues/332
def attribute_instance_methods_as_symbols_available?
false
end
# Prevent attr_encrypted from checking out a database connection
# indefinitely. The result of this method is only used when the former
# is true, but it is called unconditionally, so there is still value to
# ensuring the connection is released
def attribute_instance_methods_as_symbols def attribute_instance_methods_as_symbols
# Use with_connection so the connection doesn't stay pinned to the thread. # Use with_connection so the connection doesn't stay pinned to the thread.
connected = ::ActiveRecord::Base.connection_pool.with_connection(&:active?) rescue false connected = ::ActiveRecord::Base.connection_pool.with_connection(&:active?) rescue false
...@@ -15,7 +26,16 @@ module AttrEncrypted ...@@ -15,7 +26,16 @@ module AttrEncrypted
end end
end end
end end
prepend DBConnectionQuerier
end end
end end
end end
# As of v3.1.0, the attr_encrypted gem defines the AttrEncrypted and
# AttrEncrypted::Adapters::ActiveRecord modules, and uses "extend" to mix them
# into the ActiveRecord::Base class. This intervention overrides utility methods
# defined by attr_encrypted to fix two bugs, as detailed above.
#
# The methods are used here: https://github.com/attr-encrypted/attr_encrypted/blob/3.1.0/lib/attr_encrypted.rb#L145-158
ActiveSupport.on_load(:active_record) do
extend AttrEncrypted::Adapters::ActiveRecord::GitlabMonkeyPatches
end
...@@ -122,7 +122,7 @@ need some extra configuration. ...@@ -122,7 +122,7 @@ need some extra configuration.
gitlab_rails['db_key_base'] = 'bf2e47b68d6cafaef1d767e628b619365becf27571e10f196f98dc85e7771042b9203199d39aff91fcb6837c8ed83f2a912b278da50999bb11a2fbc0fba52964' gitlab_rails['db_key_base'] = 'bf2e47b68d6cafaef1d767e628b619365becf27571e10f196f98dc85e7771042b9203199d39aff91fcb6837c8ed83f2a912b278da50999bb11a2fbc0fba52964'
``` ```
1. Run `touch /etc/gitlab/skip-auto-migrations` to prevent database migrations 1. Run `touch /etc/gitlab/skip-auto-reconfigure` to prevent database migrations
from running on upgrade. Only the primary GitLab application server should from running on upgrade. Only the primary GitLab application server should
handle migrations. handle migrations.
......
...@@ -338,7 +338,7 @@ The prerequisites for a HA Redis setup are the following: ...@@ -338,7 +338,7 @@ The prerequisites for a HA Redis setup are the following:
1. To prevent reconfigure from running automatically on upgrade, run: 1. To prevent reconfigure from running automatically on upgrade, run:
``` ```
sudo touch /etc/gitlab/skip-auto-migrations sudo touch /etc/gitlab/skip-auto-reconfigure
``` ```
1. [Reconfigure Omnibus GitLab][reconfigure] for the changes to take effect. 1. [Reconfigure Omnibus GitLab][reconfigure] for the changes to take effect.
...@@ -462,7 +462,7 @@ multiple machines with the Sentinel daemon. ...@@ -462,7 +462,7 @@ multiple machines with the Sentinel daemon.
1. To prevent database migrations from running on upgrade, run: 1. To prevent database migrations from running on upgrade, run:
``` ```
sudo touch /etc/gitlab/skip-auto-migrations sudo touch /etc/gitlab/skip-auto-reconfigure
``` ```
Only the primary GitLab application server should handle migrations. Only the primary GitLab application server should handle migrations.
......
...@@ -126,6 +126,25 @@ It contains information about [integrations](../user/project/integrations/projec ...@@ -126,6 +126,25 @@ It contains information about [integrations](../user/project/integrations/projec
{"severity":"INFO","time":"2018-09-06T17:15:16.365Z","service_class":"JiraService","project_id":3,"project_path":"namespace2/project2","message":"Successfully posted","client_url":"http://jira.example.net"} {"severity":"INFO","time":"2018-09-06T17:15:16.365Z","service_class":"JiraService","project_id":3,"project_path":"namespace2/project2","message":"Successfully posted","client_url":"http://jira.example.net"}
``` ```
## `kubernetes.log`
Introduced in GitLab 11.6. This file lives in
`/var/log/gitlab/gitlab-rails/kubernetes.log` for Omnibus GitLab
packages or in `/home/git/gitlab/log/kubernetes.log` for
installations from source.
It logs information related to the Kubernetes Integration including errors
during installing cluster applications on your GitLab managed Kubernetes
clusters.
Each line contains a JSON line that can be ingested by Elasticsearch, Splunk,
etc. For example:
```json
{"severity":"ERROR","time":"2018-11-23T15:14:54.652Z","exception":"Kubeclient::HttpError","error_code":401,"service":"Clusters::Applications::CheckInstallationProgressService","app_id":14,"project_ids":[1],"group_ids":[],"message":"Unauthorized"}
{"severity":"ERROR","time":"2018-11-23T15:42:11.647Z","exception":"Kubeclient::HttpError","error_code":null,"service":"Clusters::Applications::InstallService","app_id":2,"project_ids":[19],"group_ids":[],"message":"SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate)"}
```
## `githost.log` ## `githost.log`
This file lives in `/var/log/gitlab/gitlab-rails/githost.log` for This file lives in `/var/log/gitlab/gitlab-rails/githost.log` for
......
...@@ -13,7 +13,7 @@ large database imports. ...@@ -13,7 +13,7 @@ large database imports.
``` ```
# On STAGING # On STAGING
echo "postgresql['checkpoint_segments'] = 64" | sudo tee -a /etc/gitlab/gitlab.rb echo "postgresql['checkpoint_segments'] = 64" | sudo tee -a /etc/gitlab/gitlab.rb
sudo touch /etc/gitlab/skip-auto-migrations sudo touch /etc/gitlab/skip-auto-reconfigure
sudo gitlab-ctl reconfigure sudo gitlab-ctl reconfigure
sudo gitlab-ctl stop unicorn sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq sudo gitlab-ctl stop sidekiq
......
...@@ -75,7 +75,7 @@ To create a new file: ...@@ -75,7 +75,7 @@ To create a new file:
module Import module Import
class Logger < ::Gitlab::JsonLogger class Logger < ::Gitlab::JsonLogger
def self.file_name_noext def self.file_name_noext
'importer_json' 'importer'
end end
end end
end end
...@@ -105,7 +105,7 @@ To create a new file: ...@@ -105,7 +105,7 @@ To create a new file:
```ruby ```ruby
# GOOD # GOOD
logger.info("Unable to create project", project_id: project.id) logger.info(message: "Unable to create project", project_id: project.id)
``` ```
1. Be sure to create a common base structure of your log messages. For example, 1. Be sure to create a common base structure of your log messages. For example,
...@@ -118,13 +118,13 @@ To create a new file: ...@@ -118,13 +118,13 @@ To create a new file:
```ruby ```ruby
# BAD # BAD
logger.info("Import error", error: 1) logger.info(message: "Import error", error: 1)
logger.info("Import error", error: "I/O failure") logger.info(message: "Import error", error: "I/O failure")
``` ```
```ruby ```ruby
# GOOD # GOOD
logger.info("Import error", error_code: 1, error: "I/O failure") logger.info(message: "Import error", error_code: 1, error: "I/O failure")
``` ```
## Additional steps with new log files ## Additional steps with new log files
......
# Integrate your server with GitHub # Integrate your GitLab instance with GitHub
Import projects from GitHub and login to your GitLab instance with your GitHub account. You can integrate your GitLab instance with GitHub.com as well as GitHub Enterprise to enable users to import projects from GitHub and/or to login to your GitLab instance with your GitHub account.
To enable the GitHub OmniAuth provider you must register your application with GitHub. ## Enabling GitHub OAuth
GitHub will generate an application ID and secret key for you to use.
1. Sign in to GitHub. To enable GitHub OmniAuth provider, you must use GitHub's credentials for your GitLab instance.
To get the credentials (a pair of Client ID and Client Secret), you must register an application as an OAuth App on GitHub.
1. Navigate to your individual user settings or an organization's settings, depending on how you want the application registered. It does not matter if the application is registered as an individual or an organization - that is entirely up to you. 1. Sign in to GitHub.
1. Select "OAuth applications" in the left menu. 1. Navigate to your individual user or organization settings, depending on how you want the application registered. It does not matter if the application is registered as an individual or an organization - that is entirely up to you.
1. If you already have applications listed, switch to the "Developer applications" tab. - For individual accounts, select **Developer settings** from the left menu, then select **OAuth Apps**.
- For organization accounts, directly select **OAuth Apps** from the left menu.
1. Select "Register new application". 1. Select **Register an application** (if you don't have any OAuth App) or **New OAuth App** (if you already have OAuth Apps).
![Register OAuth App](img/github_app_entry.png)
1. Provide the required details. 1. Provide the required details.
- Application name: This can be anything. Consider something like `<Organization>'s GitLab` or `<Your Name>'s GitLab` or something else descriptive. - Application name: This can be anything. Consider something like `<Organization>'s GitLab` or `<Your Name>'s GitLab` or something else descriptive.
- Homepage URL: The URL to your GitLab installation. 'https://gitlab.company.com' - Homepage URL: the URL to your GitLab installation. e.g., `https://gitlab.company.com`
- Application description: Fill this in if you wish. - Application description: Fill this in if you wish.
- Authorization callback URL is 'http(s)://${YOUR_DOMAIN}'. Please make sure the port is included if your GitLab instance is not configured on default port. - Authorization callback URL: `http(s)://${YOUR_DOMAIN}`. Please make sure the port is included if your GitLab instance is not configured on default port.
1. Select "Register application". ![Register OAuth App](img/github_register_app.png)
1. Select **Register application**.
1. You should now see a Client ID and Client Secret near the top right of the page (see screenshot). 1. You should now see a pair of **Client ID** and **Client Secret** near the top right of the page (see screenshot).
Keep this page open as you continue configuration. Keep this page open as you continue configuration.
![GitHub app](img/github_app.png) ![GitHub app](img/github_app.png)
...@@ -97,9 +101,9 @@ GitHub will generate an application ID and secret key for you to use. ...@@ -97,9 +101,9 @@ GitHub will generate an application ID and secret key for you to use.
__Replace `https://github.example.com/` with your GitHub URL.__ __Replace `https://github.example.com/` with your GitHub URL.__
1. Change 'YOUR_APP_ID' to the client ID from the GitHub application page from step 7. 1. Change `YOUR_APP_ID` to the Client ID from the GitHub application page from step 6.
1. Change 'YOUR_APP_SECRET' to the client secret from the GitHub application page from step 7. 1. Change `YOUR_APP_SECRET` to the Client Secret from the GitHub application page from step 6.
1. Save the configuration file. 1. Save the configuration file.
......
doc/integration/img/github_app.png

28.6 KB | W: | H:

doc/integration/img/github_app.png

125 KB | W: | H:

doc/integration/img/github_app.png
doc/integration/img/github_app.png
doc/integration/img/github_app.png
doc/integration/img/github_app.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -446,7 +446,9 @@ See also: [GitLab Pages from A to Z: Part 1 - Static sites and GitLab Pages doma ...@@ -446,7 +446,9 @@ See also: [GitLab Pages from A to Z: Part 1 - Static sites and GitLab Pages doma
> [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/33422) in GitLab 11.5. > [Introduced](https://gitlab.com/gitlab-org/gitlab-ce/issues/33422) in GitLab 11.5.
NOTE: **Note:** NOTE: **Note:**
GitLab Pages access control is not activated on GitLab.com. GitLab Pages access control is not activated on GitLab.com. You can check its
progress on the
[infrastructure issue tracker](https://gitlab.com/gitlab-com/gl-infra/infrastructure/issues/5576).
You can enable Pages access control on your project, so that only You can enable Pages access control on your project, so that only
[members of your project](../../permissions.md#project-members-permissions) [members of your project](../../permissions.md#project-members-permissions)
......
...@@ -57,6 +57,10 @@ module API ...@@ -57,6 +57,10 @@ module API
rack_response({ 'message' => '404 Not found' }.to_json, 404) rack_response({ 'message' => '404 Not found' }.to_json, 404)
end end
rescue_from ::Gitlab::ExclusiveLeaseHelpers::FailedToObtainLockError do
rack_response({ 'message' => '409 Conflict: Resource lock' }.to_json, 409)
end
rescue_from UploadedFile::InvalidPathError do |e| rescue_from UploadedFile::InvalidPathError do |e|
rack_response({ 'message' => e.message }.to_json, 400) rack_response({ 'message' => e.message }.to_json, 400)
end end
......
...@@ -17,6 +17,12 @@ module Gitlab ...@@ -17,6 +17,12 @@ module Gitlab
class EncryptColumns class EncryptColumns
def perform(model, attributes, from, to) def perform(model, attributes, from, to)
model = model.constantize if model.is_a?(String) model = model.constantize if model.is_a?(String)
# If sidekiq hasn't undergone a restart, its idea of what columns are
# present may be inaccurate, so ensure this is as fresh as possible
model.reset_column_information
model.define_attribute_methods
attributes = expand_attributes(model, Array(attributes).map(&:to_sym)) attributes = expand_attributes(model, Array(attributes).map(&:to_sym))
model.transaction do model.transaction do
...@@ -41,6 +47,14 @@ module Gitlab ...@@ -41,6 +47,14 @@ module Gitlab
raise "Couldn't determine encrypted column for #{klass}##{attribute}" if raise "Couldn't determine encrypted column for #{klass}##{attribute}" if
crypt_column_name.nil? crypt_column_name.nil?
raise "#{klass} source column: #{attribute} is missing" unless
klass.column_names.include?(attribute.to_s)
# Running the migration without the destination column being present
# leads to data loss
raise "#{klass} destination column: #{crypt_column_name} is missing" unless
klass.column_names.include?(crypt_column_name.to_s)
[attribute, crypt_column_name] [attribute, crypt_column_name]
end end
......
...@@ -3,9 +3,11 @@ ...@@ -3,9 +3,11 @@
module Gitlab module Gitlab
module Ci module Ci
class Trace class Trace
include ExclusiveLeaseGuard include ::Gitlab::ExclusiveLeaseHelpers
LEASE_TIMEOUT = 1.hour LOCK_TTL = 1.minute
LOCK_RETRIES = 2
LOCK_SLEEP = 0.001.seconds
ArchiveError = Class.new(StandardError) ArchiveError = Class.new(StandardError)
AlreadyArchivedError = Class.new(StandardError) AlreadyArchivedError = Class.new(StandardError)
...@@ -82,26 +84,12 @@ module Gitlab ...@@ -82,26 +84,12 @@ module Gitlab
stream&.close stream&.close
end end
def write(mode) def write(mode, &blk)
stream = Gitlab::Ci::Trace::Stream.new do in_write_lock do
if trace_artifact unsafe_write!(mode, &blk)
raise AlreadyArchivedError, 'Could not write to the archived trace'
elsif current_path
File.open(current_path, mode)
elsif Feature.enabled?('ci_enable_live_trace')
Gitlab::Ci::Trace::ChunkedIO.new(job)
else
File.open(ensure_path, mode)
end end
end end
yield(stream).tap do
job.touch if job.needs_touch?
end
ensure
stream&.close
end
def erase! def erase!
## ##
# Erase the archived trace # Erase the archived trace
...@@ -117,13 +105,33 @@ module Gitlab ...@@ -117,13 +105,33 @@ module Gitlab
end end
def archive! def archive!
try_obtain_lease do in_write_lock do
unsafe_archive! unsafe_archive!
end end
end end
private private
def unsafe_write!(mode, &blk)
stream = Gitlab::Ci::Trace::Stream.new do
if trace_artifact
raise AlreadyArchivedError, 'Could not write to the archived trace'
elsif current_path
File.open(current_path, mode)
elsif Feature.enabled?('ci_enable_live_trace')
Gitlab::Ci::Trace::ChunkedIO.new(job)
else
File.open(ensure_path, mode)
end
end
yield(stream).tap do
job.touch if job.needs_touch?
end
ensure
stream&.close
end
def unsafe_archive! def unsafe_archive!
raise AlreadyArchivedError, 'Could not archive again' if trace_artifact raise AlreadyArchivedError, 'Could not archive again' if trace_artifact
raise ArchiveError, 'Job is not finished yet' unless job.complete? raise ArchiveError, 'Job is not finished yet' unless job.complete?
...@@ -146,6 +154,11 @@ module Gitlab ...@@ -146,6 +154,11 @@ module Gitlab
end end
end end
def in_write_lock(&blk)
lock_key = "trace:write:lock:#{job.id}"
in_lock(lock_key, ttl: LOCK_TTL, retries: LOCK_RETRIES, sleep_sec: LOCK_SLEEP, &blk)
end
def archive_stream!(stream) def archive_stream!(stream)
clone_file!(stream, JobArtifactUploader.workhorse_upload_path) do |clone_path| clone_file!(stream, JobArtifactUploader.workhorse_upload_path) do |clone_path|
create_build_trace!(job, clone_path) create_build_trace!(job, clone_path)
...@@ -226,16 +239,6 @@ module Gitlab ...@@ -226,16 +239,6 @@ module Gitlab
def trace_artifact def trace_artifact
job.job_artifacts_trace job.job_artifacts_trace
end end
# For ExclusiveLeaseGuard concern
def lease_key
@lease_key ||= "trace:archive:#{job.id}"
end
# For ExclusiveLeaseGuard concern
def lease_timeout
LEASE_TIMEOUT
end
end end
end end
end end
...@@ -43,19 +43,14 @@ module Gitlab ...@@ -43,19 +43,14 @@ module Gitlab
def append(data, offset) def append(data, offset)
data = data.force_encoding(Encoding::BINARY) data = data.force_encoding(Encoding::BINARY)
stream.truncate(offset) stream.seek(offset, IO::SEEK_SET)
stream.seek(0, IO::SEEK_END)
stream.write(data) stream.write(data)
stream.truncate(offset + data.bytesize)
stream.flush() stream.flush()
end end
def set(data) def set(data)
data = data.force_encoding(Encoding::BINARY) append(data, 0)
stream.seek(0, IO::SEEK_SET)
stream.write(data)
stream.truncate(data.bytesize)
stream.flush()
end end
def raw(last_lines: nil) def raw(last_lines: nil)
......
...@@ -12,6 +12,8 @@ module Gitlab ...@@ -12,6 +12,8 @@ module Gitlab
# because it holds the connection until all `retries` is consumed. # because it holds the connection until all `retries` is consumed.
# This could potentially eat up all connection pools. # This could potentially eat up all connection pools.
def in_lock(key, ttl: 1.minute, retries: 10, sleep_sec: 0.01.seconds) def in_lock(key, ttl: 1.minute, retries: 10, sleep_sec: 0.01.seconds)
raise ArgumentError, 'Key needs to be specified' unless key
lease = Gitlab::ExclusiveLease.new(key, timeout: ttl) lease = Gitlab::ExclusiveLease.new(key, timeout: ttl)
until uuid = lease.try_obtain until uuid = lease.try_obtain
......
# frozen_string_literal: true
module Gitlab
module Kubernetes
class Logger < ::Gitlab::JsonLogger
def self.file_name_noext
'kubernetes'
end
end
end
end
require 'spec_helper'
describe 'GitLab monkey-patches to AttrEncrypted' do
describe '#attribute_instance_methods_as_symbols_available?' do
it 'returns false' do
expect(ActiveRecord::Base.__send__(:attribute_instance_methods_as_symbols_available?)).to be_falsy
end
it 'does not define virtual attributes' do
klass = Class.new(ActiveRecord::Base) do
# We need some sort of table to work on
self.table_name = 'projects'
attr_encrypted :foo
end
instance = klass.new
aggregate_failures do
%w[
encrypted_foo encrypted_foo=
encrypted_foo_iv encrypted_foo_iv=
encrypted_foo_salt encrypted_foo_salt=
].each do |method_name|
expect(instance).not_to respond_to(method_name)
end
end
end
end
end
...@@ -239,4 +239,38 @@ describe('MergeRequestTabs', function() { ...@@ -239,4 +239,38 @@ describe('MergeRequestTabs', function() {
expect($('.content-wrapper')).toContainElement('.container-limited'); expect($('.content-wrapper')).toContainElement('.container-limited');
}); });
}); });
describe('tabShown', function() {
const mainContent = document.createElement('div');
const tabContent = document.createElement('div');
beforeEach(function() {
spyOn(mainContent, 'getBoundingClientRect').and.returnValue({ top: 10 });
spyOn(tabContent, 'getBoundingClientRect').and.returnValue({ top: 100 });
spyOn(document, 'querySelector').and.callFake(function(selector) {
return selector === '.content-wrapper' ? mainContent : tabContent;
});
this.class.currentAction = 'commits';
});
it('calls window scrollTo with options if document has scrollBehavior', function() {
document.documentElement.style.scrollBehavior = '';
spyOn(window, 'scrollTo');
this.class.tabShown('commits', 'foobar');
expect(window.scrollTo.calls.first().args[0]).toEqual({ top: 39, behavior: 'smooth' });
});
it('calls window scrollTo with two args if document does not have scrollBehavior', function() {
spyOnProperty(document.documentElement, 'style', 'get').and.returnValue({});
spyOn(window, 'scrollTo');
this.class.tabShown('commits', 'foobar');
expect(window.scrollTo.calls.first().args).toEqual([0, 39]);
});
});
}); });
...@@ -65,5 +65,30 @@ describe Gitlab::BackgroundMigration::EncryptColumns, :migration, schema: 201809 ...@@ -65,5 +65,30 @@ describe Gitlab::BackgroundMigration::EncryptColumns, :migration, schema: 201809
expect(hook).to have_attributes(values) expect(hook).to have_attributes(values)
end end
it 'reloads the model column information' do
expect(model).to receive(:reset_column_information).and_call_original
expect(model).to receive(:define_attribute_methods).and_call_original
subject.perform(model, [:token, :url], 1, 1)
end
it 'fails if a source column is not present' do
columns = model.columns.reject { |c| c.name == 'url' }
allow(model).to receive(:columns) { columns }
expect do
subject.perform(model, [:token, :url], 1, 1)
end.to raise_error(/source column: url is missing/)
end
it 'fails if a destination column is not present' do
columns = model.columns.reject { |c| c.name == 'encrypted_url' }
allow(model).to receive(:columns) { columns }
expect do
subject.perform(model, [:token, :url], 1, 1)
end.to raise_error(/destination column: encrypted_url is missing/)
end
end end
end end
...@@ -257,7 +257,8 @@ describe Gitlab::Ci::Trace::Stream, :clean_gitlab_redis_cache do ...@@ -257,7 +257,8 @@ describe Gitlab::Ci::Trace::Stream, :clean_gitlab_redis_cache do
let!(:last_result) { stream.html_with_state } let!(:last_result) { stream.html_with_state }
before do before do
stream.append("5678", 4) data_stream.seek(4, IO::SEEK_SET)
data_stream.write("5678")
stream.seek(0) stream.seek(0)
end end
...@@ -271,23 +272,27 @@ describe Gitlab::Ci::Trace::Stream, :clean_gitlab_redis_cache do ...@@ -271,23 +272,27 @@ describe Gitlab::Ci::Trace::Stream, :clean_gitlab_redis_cache do
end end
context 'when stream is StringIO' do context 'when stream is StringIO' do
let(:stream) do let(:data_stream) do
described_class.new do
StringIO.new("1234") StringIO.new("1234")
end end
let(:stream) do
described_class.new { data_stream }
end end
it_behaves_like 'html_with_states' it_behaves_like 'html_with_states'
end end
context 'when stream is ChunkedIO' do context 'when stream is ChunkedIO' do
let(:stream) do let(:data_stream) do
described_class.new do
Gitlab::Ci::Trace::ChunkedIO.new(build).tap do |chunked_io| Gitlab::Ci::Trace::ChunkedIO.new(build).tap do |chunked_io|
chunked_io.write("1234") chunked_io.write("1234")
chunked_io.seek(0, IO::SEEK_SET) chunked_io.seek(0, IO::SEEK_SET)
end end
end end
let(:stream) do
described_class.new { data_stream }
end end
it_behaves_like 'html_with_states' it_behaves_like 'html_with_states'
......
...@@ -11,6 +11,14 @@ describe Gitlab::ExclusiveLeaseHelpers, :clean_gitlab_redis_shared_state do ...@@ -11,6 +11,14 @@ describe Gitlab::ExclusiveLeaseHelpers, :clean_gitlab_redis_shared_state do
let(:options) { {} } let(:options) { {} }
context 'when unique key is not set' do
let(:unique_key) { }
it 'raises an error' do
expect { subject }.to raise_error ArgumentError
end
end
context 'when the lease is not obtained yet' do context 'when the lease is not obtained yet' do
before do before do
stub_exclusive_lease(unique_key, 'uuid') stub_exclusive_lease(unique_key, 'uuid')
......
...@@ -835,6 +835,18 @@ describe API::Runner, :clean_gitlab_redis_shared_state do ...@@ -835,6 +835,18 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
expect(job.trace.raw).to eq 'BUILD TRACE UPDATED' expect(job.trace.raw).to eq 'BUILD TRACE UPDATED'
expect(job.job_artifacts_trace.open.read).to eq 'BUILD TRACE UPDATED' expect(job.job_artifacts_trace.open.read).to eq 'BUILD TRACE UPDATED'
end end
context 'when concurrent update of trace is happening' do
before do
job.trace.write('wb') do
update_job(state: 'success', trace: 'BUILD TRACE UPDATED')
end
end
it 'returns that operation conflicts' do
expect(response.status).to eq(409)
end
end
end end
context 'when no trace is given' do context 'when no trace is given' do
...@@ -1027,6 +1039,18 @@ describe API::Runner, :clean_gitlab_redis_shared_state do ...@@ -1027,6 +1039,18 @@ describe API::Runner, :clean_gitlab_redis_shared_state do
end end
end end
context 'when concurrent update of trace is happening' do
before do
job.trace.write('wb') do
patch_the_trace
end
end
it 'returns that operation conflicts' do
expect(response.status).to eq(409)
end
end
context 'when the job is canceled' do context 'when the job is canceled' do
before do before do
job.cancel job.cancel
......
...@@ -105,6 +105,12 @@ describe Clusters::Applications::CheckInstallationProgressService do ...@@ -105,6 +105,12 @@ describe Clusters::Applications::CheckInstallationProgressService do
expect(application).to be_errored expect(application).to be_errored
expect(application.status_reason).to eq('Kubernetes error: 401') expect(application.status_reason).to eq('Kubernetes error: 401')
end end
it 'should log error' do
expect(service.send(:logger)).to receive(:error)
service.execute
end
end end
end end
end end
...@@ -33,8 +33,9 @@ describe Clusters::Applications::InstallService do ...@@ -33,8 +33,9 @@ describe Clusters::Applications::InstallService do
end end
context 'when k8s cluster communication fails' do context 'when k8s cluster communication fails' do
let(:error) { Kubeclient::HttpError.new(500, 'system failure', nil) }
before do before do
error = Kubeclient::HttpError.new(500, 'system failure', nil)
expect(helm_client).to receive(:install).with(install_command).and_raise(error) expect(helm_client).to receive(:install).with(install_command).and_raise(error)
end end
...@@ -44,18 +45,81 @@ describe Clusters::Applications::InstallService do ...@@ -44,18 +45,81 @@ describe Clusters::Applications::InstallService do
expect(application).to be_errored expect(application).to be_errored
expect(application.status_reason).to match('Kubernetes error: 500') expect(application.status_reason).to match('Kubernetes error: 500')
end end
it 'logs errors' do
expect(service.send(:logger)).to receive(:error).with(
{
exception: 'Kubeclient::HttpError',
message: 'system failure',
service: 'Clusters::Applications::InstallService',
app_id: application.id,
project_ids: application.cluster.project_ids,
group_ids: [],
error_code: 500
}
)
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
error,
extra: {
exception: 'Kubeclient::HttpError',
message: 'system failure',
service: 'Clusters::Applications::InstallService',
app_id: application.id,
project_ids: application.cluster.project_ids,
group_ids: [],
error_code: 500
}
)
service.execute
end
end end
context 'when application cannot be persisted' do context 'a non kubernetes error happens' do
let(:application) { create(:clusters_applications_helm, :scheduled) } let(:application) { create(:clusters_applications_helm, :scheduled) }
let(:error) { StandardError.new("something bad happened") }
before do
expect(application).to receive(:make_installing!).once.and_raise(error)
end
it 'make the application errored' do it 'make the application errored' do
expect(application).to receive(:make_installing!).once.and_raise(ActiveRecord::RecordInvalid)
expect(helm_client).not_to receive(:install) expect(helm_client).not_to receive(:install)
service.execute service.execute
expect(application).to be_errored expect(application).to be_errored
expect(application.status_reason).to eq("Can't start installation process.")
end
it 'logs errors' do
expect(service.send(:logger)).to receive(:error).with(
{
exception: 'StandardError',
error_code: nil,
message: 'something bad happened',
service: 'Clusters::Applications::InstallService',
app_id: application.id,
project_ids: application.cluster.projects.pluck(:id),
group_ids: []
}
)
expect(Gitlab::Sentry).to receive(:track_acceptable_exception).with(
error,
extra: {
exception: 'StandardError',
error_code: nil,
message: 'something bad happened',
service: 'Clusters::Applications::InstallService',
app_id: application.id,
project_ids: application.cluster.projects.pluck(:id),
group_ids: []
}
)
service.execute
end end
end end
end end
......
...@@ -272,16 +272,11 @@ shared_examples_for 'common trace features' do ...@@ -272,16 +272,11 @@ shared_examples_for 'common trace features' do
include ExclusiveLeaseHelpers include ExclusiveLeaseHelpers
before do before do
stub_exclusive_lease_taken("trace:archive:#{trace.job.id}", timeout: 1.hour) stub_exclusive_lease_taken("trace:write:lock:#{trace.job.id}", timeout: 1.minute)
end end
it 'blocks concurrent archiving' do it 'blocks concurrent archiving' do
expect(Rails.logger).to receive(:error).with('Cannot obtain an exclusive lease. There must be another instance already in execution.') expect { subject }.to raise_error(::Gitlab::ExclusiveLeaseHelpers::FailedToObtainLockError)
subject
build.reload
expect(build.job_artifacts_trace).to be_nil
end end
end end
end end
......
...@@ -5,7 +5,7 @@ describe StuckCiJobsWorker do ...@@ -5,7 +5,7 @@ describe StuckCiJobsWorker do
let!(:runner) { create :ci_runner } let!(:runner) { create :ci_runner }
let!(:job) { create :ci_build, runner: runner } let!(:job) { create :ci_build, runner: runner }
let(:trace_lease_key) { "trace:archive:#{job.id}" } let(:trace_lease_key) { "trace:write:lock:#{job.id}" }
let(:trace_lease_uuid) { SecureRandom.uuid } let(:trace_lease_uuid) { SecureRandom.uuid }
let(:worker_lease_key) { StuckCiJobsWorker::EXCLUSIVE_LEASE_KEY } let(:worker_lease_key) { StuckCiJobsWorker::EXCLUSIVE_LEASE_KEY }
let(:worker_lease_uuid) { SecureRandom.uuid } let(:worker_lease_uuid) { SecureRandom.uuid }
......
...@@ -683,12 +683,7 @@ ...@@ -683,12 +683,7 @@
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==
"@types/node@*": "@types/node@*", "@types/node@^10.11.7":
version "10.5.2"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.5.2.tgz#f19f05314d5421fe37e74153254201a7bf00a707"
integrity sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q==
"@types/node@^10.11.7":
version "10.12.9" version "10.12.9"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.9.tgz#a07bfa74331471e1dc22a47eb72026843f7b95c8" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.9.tgz#a07bfa74331471e1dc22a47eb72026843f7b95c8"
integrity sha512-eajkMXG812/w3w4a1OcBlaTwsFPO5F7fJ/amy+tieQxEMWBlbV1JGSjkFM+zkHNf81Cad+dfIRA+IBkvmvdAeA== integrity sha512-eajkMXG812/w3w4a1OcBlaTwsFPO5F7fJ/amy+tieQxEMWBlbV1JGSjkFM+zkHNf81Cad+dfIRA+IBkvmvdAeA==
...@@ -892,7 +887,7 @@ abbrev@1, abbrev@1.0.x: ...@@ -892,7 +887,7 @@ abbrev@1, abbrev@1.0.x:
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU= integrity sha1-kbR5JYinc4wl813W9jdSovh3YTU=
accepts@~1.3.3, accepts@~1.3.4, accepts@~1.3.5: accepts@~1.3.4, accepts@~1.3.5:
version "1.3.5" version "1.3.5"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2"
integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I= integrity sha1-63d99gEXI6OxTopywIBcjoZ0a9I=
...@@ -1145,11 +1140,6 @@ arr-union@^3.1.0: ...@@ -1145,11 +1140,6 @@ arr-union@^3.1.0:
resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4"
integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=
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-find@^1.0.0: array-find@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8" resolved "https://registry.yarnpkg.com/array-find/-/array-find-1.0.0.tgz#6c8e286d11ed768327f8e62ecee87353ca3e78b8"
...@@ -1246,9 +1236,9 @@ async@^2.0.0, async@^2.5.0, async@^2.6.1: ...@@ -1246,9 +1236,9 @@ async@^2.0.0, async@^2.5.0, async@^2.6.1:
lodash "^4.17.10" lodash "^4.17.10"
atob@^2.0.0: atob@^2.0.0:
version "2.0.3" version "2.1.2"
resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9"
integrity sha1-GcenYEc3dEaPILLS0DNyrX1Mv10= integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
autosize@^4.0.0: autosize@^4.0.0:
version "4.0.0" version "4.0.0"
...@@ -1672,11 +1662,6 @@ builtin-status-codes@^3.0.0: ...@@ -1672,11 +1662,6 @@ builtin-status-codes@^3.0.0:
resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=
bytes@2.5.0:
version "2.5.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.5.0.tgz#4c9423ea2d252c270c41b2bdefeff9bb6b62c06a"
integrity sha1-TJQj6i0lLCcMQbK97+/5u2tiwGo=
bytes@3.0.0: bytes@3.0.0:
version "3.0.0" version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
...@@ -1999,12 +1984,7 @@ combine-lists@^1.0.0: ...@@ -1999,12 +1984,7 @@ combine-lists@^1.0.0:
dependencies: dependencies:
lodash "^4.5.0" lodash "^4.5.0"
commander@2, commander@^2.18.0: commander@2, commander@^2.18.0, commander@^2.19.0:
version "2.18.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970"
integrity sha512-6CYPa+JP2ftfRU2qkDK+UTVeQYosOg/2GbcjIcKPHfinyOLPVGXu/ovN86RP49Re5ndJK1N0kuiidFFuepc4ZQ==
commander@^2.19.0:
version "2.19.0" version "2.19.0"
resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==
...@@ -2044,12 +2024,12 @@ component-inherit@0.0.3: ...@@ -2044,12 +2024,12 @@ component-inherit@0.0.3:
resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143"
integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM=
compressible@~2.0.10: compressible@~2.0.14:
version "2.0.11" version "2.0.15"
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.11.tgz#16718a75de283ed8e604041625a2064586797d8a" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.15.tgz#857a9ab0a7e5a07d8d837ed43fe2defff64fe212"
integrity sha1-FnGKdd4oPtjmBAQWJaIGRYZ5fYo= integrity sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==
dependencies: dependencies:
mime-db ">= 1.29.0 < 2" mime-db ">= 1.36.0 < 2"
compression-webpack-plugin@^2.0.0: compression-webpack-plugin@^2.0.0:
version "2.0.0" version "2.0.0"
...@@ -2064,17 +2044,17 @@ compression-webpack-plugin@^2.0.0: ...@@ -2064,17 +2044,17 @@ compression-webpack-plugin@^2.0.0:
webpack-sources "^1.0.1" webpack-sources "^1.0.1"
compression@^1.5.2: compression@^1.5.2:
version "1.7.0" version "1.7.3"
resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.0.tgz#030c9f198f1643a057d776a738e922da4373012d" resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db"
integrity sha1-AwyfGY8WQ6BX13anOOki2kNzAS0= integrity sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==
dependencies: dependencies:
accepts "~1.3.3" accepts "~1.3.5"
bytes "2.5.0" bytes "3.0.0"
compressible "~2.0.10" compressible "~2.0.14"
debug "2.6.8" debug "2.6.9"
on-headers "~1.0.1" on-headers "~1.0.1"
safe-buffer "5.1.1" safe-buffer "5.1.2"
vary "~1.1.1" vary "~1.1.2"
concat-map@0.0.1: concat-map@0.0.1:
version "0.0.1" version "0.0.1"
...@@ -2349,13 +2329,6 @@ cssesc@^0.1.0: ...@@ -2349,13 +2329,6 @@ cssesc@^0.1.0:
resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q= integrity sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=
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"
custom-event@~1.0.0: custom-event@~1.0.0:
version "1.0.1" version "1.0.1"
resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425"
...@@ -2689,24 +2662,17 @@ de-indent@^1.0.2: ...@@ -2689,24 +2662,17 @@ de-indent@^1.0.2:
resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
debug@2.6.8: debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.8"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
integrity sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=
dependencies:
ms "2.0.0"
debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
version "2.6.9" version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
dependencies: dependencies:
ms "2.0.0" ms "2.0.0"
debug@^3.1.0: debug@^3.1.0, debug@^3.2.5:
version "3.2.5" version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.5.tgz#c2418fbfd7a29f4d4f70ff4cea604d4b64c46407" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
integrity sha512-D61LaDQPQkxJ5AUM2mbSJRbPkNs/TmdmOeLAi1hgDkpDfIfetSrjmWhccwtuResSwMbACjx/xXQofvM9CE/aeg== integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
dependencies: dependencies:
ms "^2.1.1" ms "^2.1.1"
...@@ -2746,10 +2712,10 @@ deep-equal@^1.0.1: ...@@ -2746,10 +2712,10 @@ deep-equal@^1.0.1:
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=
deep-extend@~0.4.0: deep-extend@^0.6.0:
version "0.4.2" version "0.6.0"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
integrity sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8= integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
deep-is@~0.1.3: deep-is@~0.1.3:
version "0.1.3" version "0.1.3"
...@@ -3468,12 +3434,12 @@ events@^1.0.0: ...@@ -3468,12 +3434,12 @@ events@^1.0.0:
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=
eventsource@0.1.6: eventsource@^1.0.7:
version "0.1.6" version "1.0.7"
resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-1.0.7.tgz#8fbc72c93fcd34088090bc0a4e64f4b5cee6d8d0"
integrity sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI= integrity sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==
dependencies: dependencies:
original ">=0.0.5" original "^1.0.0"
evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3:
version "1.0.3" version "1.0.3"
...@@ -3599,9 +3565,9 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: ...@@ -3599,9 +3565,9 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2:
is-extendable "^1.0.1" is-extendable "^1.0.1"
extend@^3.0.0: extend@^3.0.0:
version "3.0.1" version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
external-editor@^2.0.1: external-editor@^2.0.1:
version "2.2.0" version "2.2.0"
...@@ -3662,7 +3628,7 @@ faye-websocket@^0.10.0: ...@@ -3662,7 +3628,7 @@ faye-websocket@^0.10.0:
dependencies: dependencies:
websocket-driver ">=0.5.1" websocket-driver ">=0.5.1"
faye-websocket@~0.11.0: faye-websocket@~0.11.1:
version "0.11.1" version "0.11.1"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38"
integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=
...@@ -4325,7 +4291,7 @@ http-deceiver@^1.2.7: ...@@ -4325,7 +4291,7 @@ http-deceiver@^1.2.7:
resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87"
integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc= integrity sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=
http-errors@1.6.2, http-errors@~1.6.1, http-errors@~1.6.2: http-errors@1.6.2, http-errors@~1.6.2:
version "1.6.2" version "1.6.2"
resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736"
integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY= integrity sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=
...@@ -5412,14 +5378,6 @@ loose-envify@^1.0.0: ...@@ -5412,14 +5378,6 @@ loose-envify@^1.0.0:
dependencies: dependencies:
js-tokens "^3.0.0 || ^4.0.0" js-tokens "^3.0.0 || ^4.0.0"
loud-rejection@^1.6.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"
lowercase-keys@1.0.0, lowercase-keys@^1.0.0: lowercase-keys@1.0.0, lowercase-keys@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306"
...@@ -5582,17 +5540,17 @@ miller-rabin@^4.0.0: ...@@ -5582,17 +5540,17 @@ miller-rabin@^4.0.0:
bn.js "^4.0.0" bn.js "^4.0.0"
brorand "^1.0.1" brorand "^1.0.1"
"mime-db@>= 1.29.0 < 2", mime-db@~1.33.0: "mime-db@>= 1.36.0 < 2", mime-db@~1.37.0:
version "1.33.0" version "1.37.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8"
integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==
mime-types@~2.1.15, mime-types@~2.1.18: mime-types@~2.1.17, mime-types@~2.1.18:
version "2.1.18" version "2.1.21"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96"
integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==
dependencies: dependencies:
mime-db "~1.33.0" mime-db "~1.37.0"
mime@1.4.1: mime@1.4.1:
version "1.4.1" version "1.4.1"
...@@ -5796,10 +5754,10 @@ natural-compare@^1.4.0: ...@@ -5796,10 +5754,10 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
needle@^2.2.0: needle@^2.2.1:
version "2.2.1" version "2.2.4"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
integrity sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q== integrity sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==
dependencies: dependencies:
debug "^2.1.2" debug "^2.1.2"
iconv-lite "^0.4.4" iconv-lite "^0.4.4"
...@@ -5863,17 +5821,17 @@ node-forge@0.6.33: ...@@ -5863,17 +5821,17 @@ node-forge@0.6.33:
vm-browserify "0.0.4" vm-browserify "0.0.4"
node-pre-gyp@^0.10.0: node-pre-gyp@^0.10.0:
version "0.10.0" version "0.10.3"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.0.tgz#6e4ef5bb5c5203c6552448828c852c40111aac46" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc"
integrity sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ== integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==
dependencies: dependencies:
detect-libc "^1.0.2" detect-libc "^1.0.2"
mkdirp "^0.5.1" mkdirp "^0.5.1"
needle "^2.2.0" needle "^2.2.1"
nopt "^4.0.1" nopt "^4.0.1"
npm-packlist "^1.1.6" npm-packlist "^1.1.6"
npmlog "^4.0.2" npmlog "^4.0.2"
rc "^1.1.7" rc "^1.2.7"
rimraf "^2.6.1" rimraf "^2.6.1"
semver "^5.3.0" semver "^5.3.0"
tar "^4" tar "^4"
...@@ -6145,12 +6103,12 @@ optionator@^0.8.1, optionator@^0.8.2: ...@@ -6145,12 +6103,12 @@ optionator@^0.8.1, optionator@^0.8.2:
type-check "~0.3.2" type-check "~0.3.2"
wordwrap "~1.0.0" wordwrap "~1.0.0"
original@>=0.0.5: original@^1.0.0:
version "1.0.0" version "1.0.2"
resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f"
integrity sha1-kUf5P6FpbQS+YeAb1QuurKZWvTs= integrity sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==
dependencies: dependencies:
url-parse "1.0.x" url-parse "^1.4.3"
os-browserify@^0.3.0: os-browserify@^0.3.0:
version "0.3.0" version "0.3.0"
...@@ -6323,7 +6281,7 @@ parseuri@0.0.5: ...@@ -6323,7 +6281,7 @@ parseuri@0.0.5:
dependencies: dependencies:
better-assert "~1.0.0" better-assert "~1.0.0"
parseurl@~1.3.1, parseurl@~1.3.2: parseurl@~1.3.2:
version "1.3.2" version "1.3.2"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3"
integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=
...@@ -6719,15 +6677,10 @@ querystring@0.2.0: ...@@ -6719,15 +6677,10 @@ querystring@0.2.0:
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
querystringify@0.0.x: querystringify@^2.0.0:
version "0.0.4" version "2.1.0"
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.0.tgz#7ded8dfbf7879dcc60d0a644ac6754b283ad17ef"
integrity sha1-DPf4T5Rj/wrlHExLFC2VvjdyTZw= integrity sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==
querystringify@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb"
integrity sha1-YoYkIRLFtxL6ZU5SZlK/ahP/Bcs=
randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5:
version "2.0.6" version "2.0.6"
...@@ -6776,12 +6729,12 @@ raw-loader@^0.5.1: ...@@ -6776,12 +6729,12 @@ raw-loader@^0.5.1:
resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= integrity sha1-DD0L6u2KAclm2Xh793goElKpeao=
rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: rc@^1.0.1, rc@^1.1.6, rc@^1.2.7:
version "1.2.5" version "1.2.8"
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
integrity sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0= integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
dependencies: dependencies:
deep-extend "~0.4.0" deep-extend "^0.6.0"
ini "~1.3.0" ini "~1.3.0"
minimist "^1.2.0" minimist "^1.2.0"
strip-json-comments "~2.0.1" strip-json-comments "~2.0.1"
...@@ -6995,7 +6948,7 @@ require-uncached@^1.0.3: ...@@ -6995,7 +6948,7 @@ require-uncached@^1.0.3:
caller-path "^0.1.0" caller-path "^0.1.0"
resolve-from "^1.0.0" resolve-from "^1.0.0"
requires-port@1.0.x, requires-port@1.x.x: requires-port@1.x.x, requires-port@^1.0.0:
version "1.0.0" version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=
...@@ -7110,7 +7063,7 @@ safe-buffer@5.1.1: ...@@ -7110,7 +7063,7 @@ safe-buffer@5.1.1:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==
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: 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" version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
...@@ -7200,12 +7153,7 @@ semver-diff@^2.0.0: ...@@ -7200,12 +7153,7 @@ semver-diff@^2.0.0:
dependencies: dependencies:
semver "^5.0.3" 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, semver@^5.5.0, semver@^5.5.1: "semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0:
version "5.5.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477"
integrity sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==
semver@^5.6.0:
version "5.6.0" version "5.6.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
...@@ -7235,17 +7183,17 @@ serialize-javascript@^1.4.0: ...@@ -7235,17 +7183,17 @@ serialize-javascript@^1.4.0:
integrity sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU= integrity sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=
serve-index@^1.7.2: serve-index@^1.7.2:
version "1.9.0" version "1.9.1"
resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.0.tgz#d2b280fc560d616ee81b48bf0fa82abed2485ce7" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239"
integrity sha1-0rKA/FYNYW7oG0i/D6gqvtJIXOc= integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=
dependencies: dependencies:
accepts "~1.3.3" accepts "~1.3.4"
batch "0.6.1" batch "0.6.1"
debug "2.6.8" debug "2.6.9"
escape-html "~1.0.3" escape-html "~1.0.3"
http-errors "~1.6.1" http-errors "~1.6.2"
mime-types "~2.1.15" mime-types "~2.1.17"
parseurl "~1.3.1" parseurl "~1.3.2"
serve-static@1.13.2: serve-static@1.13.2:
version "1.13.2" version "1.13.2"
...@@ -7444,17 +7392,17 @@ socket.io@2.1.1: ...@@ -7444,17 +7392,17 @@ socket.io@2.1.1:
socket.io-client "2.1.1" socket.io-client "2.1.1"
socket.io-parser "~3.2.0" socket.io-parser "~3.2.0"
sockjs-client@1.1.5: sockjs-client@1.3.0:
version "1.1.5" version "1.3.0"
resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.3.0.tgz#12fc9d6cb663da5739d3dc5fb6e8687da95cb177"
integrity sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM= integrity sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==
dependencies: dependencies:
debug "^2.6.6" debug "^3.2.5"
eventsource "0.1.6" eventsource "^1.0.7"
faye-websocket "~0.11.0" faye-websocket "~0.11.1"
inherits "^2.0.1" inherits "^2.0.3"
json3 "^3.3.2" json3 "^3.3.2"
url-parse "^1.1.8" url-parse "^1.4.3"
sockjs@0.3.19: sockjs@0.3.19:
version "0.3.19" version "0.3.19"
...@@ -8175,11 +8123,6 @@ urix@^0.1.0: ...@@ -8175,11 +8123,6 @@ urix@^0.1.0:
resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72"
integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=
url-join@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a"
integrity sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=
url-loader@^1.1.1: url-loader@^1.1.1:
version "1.1.1" version "1.1.1"
resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1"
...@@ -8203,21 +8146,13 @@ url-parse-lax@^3.0.0: ...@@ -8203,21 +8146,13 @@ url-parse-lax@^3.0.0:
dependencies: dependencies:
prepend-http "^2.0.0" prepend-http "^2.0.0"
url-parse@1.0.x: url-parse@^1.4.3:
version "1.0.5" version "1.4.4"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.4.tgz#cac1556e95faa0303691fec5cf9d5a1bc34648f8"
integrity sha1-CFSGBCKv3P7+tsllxmLUgAFpkns= integrity sha512-/92DTTorg4JjktLNLe6GPS2/RvAd/RGr6LuktmWSMLEOa6rjnlrFXNgSbSmkNvCoL2T028A0a1JaJLzRMlFoHg==
dependencies:
querystringify "0.0.x"
requires-port "1.0.x"
url-parse@^1.1.8:
version "1.1.9"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.1.9.tgz#c67f1d775d51f0a18911dd7b3ffad27bb9e5bd19"
integrity sha1-xn8dd11R8KGJEd17P/rSe7nlvRk=
dependencies: dependencies:
querystringify "~1.0.0" querystringify "^2.0.0"
requires-port "1.0.x" requires-port "^1.0.0"
url-search-params-polyfill@^5.0.0: url-search-params-polyfill@^5.0.0:
version "5.0.0" version "5.0.0"
...@@ -8297,7 +8232,7 @@ validate-npm-package-license@^3.0.1: ...@@ -8297,7 +8232,7 @@ validate-npm-package-license@^3.0.1:
spdx-correct "~1.0.0" spdx-correct "~1.0.0"
spdx-expression-parse "~1.0.0" spdx-expression-parse "~1.0.0"
vary@~1.1.1, vary@~1.1.2: vary@~1.1.2:
version "1.1.2" version "1.1.2"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
...@@ -8459,23 +8394,20 @@ webpack-cli@^3.1.0: ...@@ -8459,23 +8394,20 @@ webpack-cli@^3.1.0:
v8-compile-cache "^2.0.0" v8-compile-cache "^2.0.0"
yargs "^12.0.1" yargs "^12.0.1"
webpack-dev-middleware@3.2.0, webpack-dev-middleware@^3.2.0: webpack-dev-middleware@3.4.0, webpack-dev-middleware@^3.2.0:
version "3.2.0" version "3.4.0"
resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.2.0.tgz#a20ceef194873710052da678f3c6ee0aeed92552" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.4.0.tgz#1132fecc9026fd90f0ecedac5cbff75d1fb45890"
integrity sha512-YJLMF/96TpKXaEQwaLEo+Z4NDK8aV133ROF6xp9pe3gQoS7sxfpXh4Rv9eC+8vCvWfmDjRQaMSlRPbO+9G6jgA== integrity sha512-Q9Iyc0X9dP9bAsYskAVJ/hmIZZQwf/3Sy4xCAZgL5cUkjZmUZLt4l5HpbST/Pdgjn3u6pE7u5OdGd1apgzRujA==
dependencies: dependencies:
loud-rejection "^1.6.0"
memory-fs "~0.4.1" memory-fs "~0.4.1"
mime "^2.3.1" mime "^2.3.1"
path-is-absolute "^1.0.0"
range-parser "^1.0.3" range-parser "^1.0.3"
url-join "^4.0.0"
webpack-log "^2.0.0" webpack-log "^2.0.0"
webpack-dev-server@^3.1.8: webpack-dev-server@^3.1.10:
version "3.1.8" version "3.1.10"
resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.8.tgz#eb7a95945d1108170f902604fb3b939533d9daeb" resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.10.tgz#507411bee727ee8d2fdffdc621b66a64ab3dea2b"
integrity sha512-c+tcJtDqnPdxCAzEEZKdIPmg3i5i7cAHe+B+0xFNK0BlCc2HF/unYccbU7xTgfGc5xxhCztCQzFmsqim+KhI+A== integrity sha512-RqOAVjfqZJtQcB0LmrzJ5y4Jp78lv9CK0MZ1YJDTaTmedMZ9PU9FLMQNrMCfVu8hHzaVLVOJKBlGEHMN10z+ww==
dependencies: dependencies:
ansi-html "0.0.7" ansi-html "0.0.7"
bonjour "^3.5.0" bonjour "^3.5.0"
...@@ -8498,11 +8430,11 @@ webpack-dev-server@^3.1.8: ...@@ -8498,11 +8430,11 @@ webpack-dev-server@^3.1.8:
selfsigned "^1.9.1" selfsigned "^1.9.1"
serve-index "^1.7.2" serve-index "^1.7.2"
sockjs "0.3.19" sockjs "0.3.19"
sockjs-client "1.1.5" sockjs-client "1.3.0"
spdy "^3.4.1" spdy "^3.4.1"
strip-ansi "^3.0.0" strip-ansi "^3.0.0"
supports-color "^5.1.0" supports-color "^5.1.0"
webpack-dev-middleware "3.2.0" webpack-dev-middleware "3.4.0"
webpack-log "^2.0.0" webpack-log "^2.0.0"
yargs "12.0.2" yargs "12.0.2"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment