Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
4def415fbf
commit
2828f81d2a
|
@ -122,6 +122,8 @@ overrides:
|
|||
rules:
|
||||
'@gitlab/require-i18n-strings': off
|
||||
'@gitlab/no-runtime-template-compiler': off
|
||||
'import/no-dynamic-require': off
|
||||
'no-import-assign': off
|
||||
'no-restricted-syntax':
|
||||
- error
|
||||
- selector: CallExpression[callee.object.name=/(wrapper|vm)/][callee.property.name="setData"]
|
||||
|
|
|
@ -254,7 +254,7 @@ export default {
|
|||
<div
|
||||
class="gl-display-flex align-items-start flex-wrap-reverse board-card-number-container gl-overflow-hidden"
|
||||
>
|
||||
<gl-loading-icon v-if="item.isLoading" size="lg" class="mt-3" />
|
||||
<gl-loading-icon v-if="item.isLoading" size="lg" class="gl-mt-5" />
|
||||
<span
|
||||
v-if="item.referencePath"
|
||||
class="board-card-number gl-overflow-hidden gl-display-flex gl-mr-3 gl-mt-3"
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* eslint-disable no-restricted-properties, camelcase,
|
||||
/* eslint-disable camelcase,
|
||||
no-unused-expressions, default-case,
|
||||
consistent-return, no-param-reassign,
|
||||
no-shadow, no-useless-escape,
|
||||
|
@ -357,7 +357,7 @@ export default class Notes {
|
|||
if (shouldReset == null) {
|
||||
shouldReset = true;
|
||||
}
|
||||
const nthInterval = this.basePollingInterval * Math.pow(2, this.maxPollingSteps - 1);
|
||||
const nthInterval = this.basePollingInterval * 2 ** (this.maxPollingSteps - 1);
|
||||
if (shouldReset) {
|
||||
this.pollingInterval = this.basePollingInterval;
|
||||
} else if (this.pollingInterval < nthInterval) {
|
||||
|
|
|
@ -101,6 +101,7 @@ export default class Diff {
|
|||
const clickTarget = $('.js-file-title, .click-to-expand', diffFile);
|
||||
diffFile.data('singleFileDiff').toggleDiff(clickTarget, () => {
|
||||
this.highlightSelectedLine();
|
||||
this.prepareRenderedDiff();
|
||||
if (cb) cb();
|
||||
});
|
||||
} else if (cb) {
|
||||
|
@ -156,20 +157,22 @@ export default class Diff {
|
|||
}
|
||||
|
||||
prepareRenderedDiff() {
|
||||
const $elements = $('[data-diff-toggle-entity]');
|
||||
|
||||
if ($elements.length === 0) return;
|
||||
|
||||
const allElements = this.elementsForRenderedDiff();
|
||||
const diff = this;
|
||||
|
||||
const elements = $elements.toArray().map(this.formatElementToObject).reduce(merge);
|
||||
for (const [fileHash, fileElements] of Object.entries(allElements)) {
|
||||
// eslint-disable no-param-reassign
|
||||
fileElements.rawButton.onclick = () => {
|
||||
diff.showRawViewer(fileHash, diff.elementsForRenderedDiff()[fileHash]);
|
||||
};
|
||||
|
||||
Object.values(elements).forEach((e) => {
|
||||
e.toShowBtn.onclick = () => diff.showOneHideAnother('rendered', e); // eslint-disable-line no-param-reassign
|
||||
e.toHideBtn.onclick = () => diff.showOneHideAnother('raw', e); // eslint-disable-line no-param-reassign
|
||||
fileElements.renderedButton.onclick = () => {
|
||||
diff.showRenderedViewer(fileHash, diff.elementsForRenderedDiff()[fileHash]);
|
||||
};
|
||||
// eslint-enable no-param-reassign
|
||||
|
||||
diff.showOneHideAnother('rendered', e);
|
||||
});
|
||||
diff.showRenderedViewer(fileHash, fileElements);
|
||||
}
|
||||
}
|
||||
|
||||
formatElementToObject = (element) => {
|
||||
|
@ -179,18 +182,33 @@ export default class Diff {
|
|||
return { [key]: { [name]: element } };
|
||||
};
|
||||
|
||||
showOneHideAnother = (mode, elements) => {
|
||||
let { toShowBtn, toHideBtn, toShow, toHide } = elements;
|
||||
elementsForRenderedDiff = () => {
|
||||
const $elements = $('[data-diff-toggle-entity]');
|
||||
|
||||
if (mode === 'raw') {
|
||||
[toShowBtn, toHideBtn] = [toHideBtn, toShowBtn];
|
||||
[toShow, toHide] = [toHide, toShow];
|
||||
}
|
||||
if ($elements.length === 0) return {};
|
||||
|
||||
toShowBtn.classList.add('selected');
|
||||
toHideBtn.classList.remove('selected');
|
||||
const diff = this;
|
||||
|
||||
toHide.classList.add('hidden');
|
||||
toShow.classList.remove('hidden');
|
||||
return $elements.toArray().map(diff.formatElementToObject).reduce(merge);
|
||||
};
|
||||
|
||||
showRawViewer = (fileHash, elements) => {
|
||||
if (elements === undefined) return;
|
||||
|
||||
elements.rawButton.classList.add('selected');
|
||||
elements.renderedButton.classList.remove('selected');
|
||||
|
||||
elements.renderedViewer.classList.add('hidden');
|
||||
elements.rawViewer.classList.remove('hidden');
|
||||
};
|
||||
|
||||
showRenderedViewer = (fileHash, elements) => {
|
||||
if (elements === undefined) return;
|
||||
|
||||
elements.rawButton.classList.remove('selected');
|
||||
elements.rawViewer.classList.add('hidden');
|
||||
|
||||
elements.renderedButton.classList.add('selected');
|
||||
elements.renderedViewer.classList.remove('hidden');
|
||||
};
|
||||
}
|
||||
|
|
|
@ -90,6 +90,7 @@ export default class EditorInstance {
|
|||
|
||||
this.dispatchExtAction = EditorInstance.useUnuse.bind(instProxy, extensionsStore);
|
||||
|
||||
// eslint-disable-next-line no-constructor-return
|
||||
return instProxy;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,8 +15,6 @@ export default class EnvironmentsStore {
|
|||
this.state.availableCounter = 0;
|
||||
this.state.paginationInformation = {};
|
||||
this.state.reviewAppDetails = {};
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -54,24 +54,23 @@ export default class IssuableBulkUpdateSidebar {
|
|||
new MilestoneSelect();
|
||||
subscriptionSelect();
|
||||
|
||||
// Checking IS_EE and using ee_else_ce is odd, but we do it here to satisfy
|
||||
// the import/no-unresolved lint rule when FOSS_ONLY=1, even though at
|
||||
// runtime this block won't execute.
|
||||
if (IS_EE) {
|
||||
import('ee/vue_shared/components/sidebar/health_status_select/health_status_bundle')
|
||||
import('ee_else_ce/vue_shared/components/sidebar/health_status_select/health_status_bundle')
|
||||
.then(({ default: HealthStatusSelect }) => {
|
||||
HealthStatusSelect();
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
|
||||
if (IS_EE) {
|
||||
import('ee/vue_shared/components/sidebar/epics_select/epics_select_bundle')
|
||||
import('ee_else_ce/vue_shared/components/sidebar/epics_select/epics_select_bundle')
|
||||
.then(({ default: EpicSelect }) => {
|
||||
EpicSelect();
|
||||
})
|
||||
.catch(() => {});
|
||||
}
|
||||
|
||||
if (IS_EE) {
|
||||
import('ee/vue_shared/components/sidebar/iterations_dropdown_bundle')
|
||||
import('ee_else_ce/vue_shared/components/sidebar/iterations_dropdown_bundle')
|
||||
.then(({ default: iterationsDropdown }) => {
|
||||
iterationsDropdown();
|
||||
})
|
||||
|
|
|
@ -169,28 +169,27 @@ export default class CreateMergeRequestDropdown {
|
|||
}
|
||||
|
||||
createMergeRequest() {
|
||||
return new Promise(() => {
|
||||
this.isCreatingMergeRequest = true;
|
||||
return this.createBranch(false)
|
||||
.then(() => api.trackRedisHllUserEvent('i_code_review_user_create_mr_from_issue'))
|
||||
.then(() => {
|
||||
let path = canCreateConfidentialMergeRequest()
|
||||
? this.createMrPath.replace(
|
||||
this.projectPath,
|
||||
confidentialMergeRequestState.selectedProject.pathWithNamespace,
|
||||
)
|
||||
: this.createMrPath;
|
||||
path = mergeUrlParams(
|
||||
{
|
||||
'merge_request[target_branch]': this.refInput.value,
|
||||
'merge_request[source_branch]': this.branchInput.value,
|
||||
},
|
||||
path,
|
||||
);
|
||||
this.isCreatingMergeRequest = true;
|
||||
|
||||
window.location.href = path;
|
||||
});
|
||||
});
|
||||
return this.createBranch(false)
|
||||
.then(() => api.trackRedisHllUserEvent('i_code_review_user_create_mr_from_issue'))
|
||||
.then(() => {
|
||||
let path = canCreateConfidentialMergeRequest()
|
||||
? this.createMrPath.replace(
|
||||
this.projectPath,
|
||||
confidentialMergeRequestState.selectedProject.pathWithNamespace,
|
||||
)
|
||||
: this.createMrPath;
|
||||
path = mergeUrlParams(
|
||||
{
|
||||
'merge_request[target_branch]': this.refInput.value,
|
||||
'merge_request[source_branch]': this.branchInput.value,
|
||||
},
|
||||
path,
|
||||
);
|
||||
|
||||
window.location.href = path;
|
||||
});
|
||||
}
|
||||
|
||||
disable() {
|
||||
|
|
|
@ -42,14 +42,11 @@ export default {
|
|||
this.job.duration ||
|
||||
this.job.finished_at ||
|
||||
this.job.erased_at ||
|
||||
this.job.queued ||
|
||||
this.job.queued_duration ||
|
||||
this.job.runner ||
|
||||
this.job.coverage,
|
||||
);
|
||||
},
|
||||
queued() {
|
||||
return timeIntervalInWords(this.job.queued);
|
||||
},
|
||||
runnerHelpUrl() {
|
||||
return helpPagePath('ci/runners/configure_runners.html', {
|
||||
anchor: 'set-maximum-job-timeout-for-a-runner',
|
||||
|
@ -60,6 +57,9 @@ export default {
|
|||
|
||||
return `#${id} (${token}) ${description}`;
|
||||
},
|
||||
queuedDuration() {
|
||||
return timeIntervalInWords(this.job.queued_duration);
|
||||
},
|
||||
shouldRenderBlock() {
|
||||
return Boolean(this.hasAnyDetail || this.hasTimeout || this.hasTags);
|
||||
},
|
||||
|
@ -98,7 +98,7 @@ export default {
|
|||
:title="$options.i18n.FINISHED"
|
||||
/>
|
||||
<detail-row v-if="job.erased_at" :value="erasedAt" :title="$options.i18n.ERASED" />
|
||||
<detail-row v-if="job.queued" :value="queued" :title="$options.i18n.QUEUED" />
|
||||
<detail-row v-if="job.queued_duration" :value="queuedDuration" :title="$options.i18n.QUEUED" />
|
||||
<detail-row
|
||||
v-if="hasTimeout"
|
||||
:help-url="runnerHelpUrl"
|
||||
|
|
|
@ -591,8 +591,7 @@ export const addSelectOnFocusBehaviour = (selector = '.js-select-on-focus') => {
|
|||
* @param {Number} precision
|
||||
*/
|
||||
export const roundOffFloat = (number, precision = 0) => {
|
||||
// eslint-disable-next-line no-restricted-properties
|
||||
const multiplier = Math.pow(10, precision);
|
||||
const multiplier = 10 ** precision;
|
||||
return Math.round(number * multiplier) / multiplier;
|
||||
};
|
||||
|
||||
|
@ -622,8 +621,7 @@ export const roundToNearestHalf = (num) => Math.round(num * 2).toFixed() / 2;
|
|||
* @param {Number} precision
|
||||
*/
|
||||
export const roundDownFloat = (number, precision = 0) => {
|
||||
// eslint-disable-next-line no-restricted-properties
|
||||
const multiplier = Math.pow(10, precision);
|
||||
const multiplier = 10 ** precision;
|
||||
return Math.floor(number * multiplier) / multiplier;
|
||||
};
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ window.gl = window.gl || {};
|
|||
|
||||
// inject test utilities if necessary
|
||||
if (process.env.NODE_ENV !== 'production' && gon?.test_env) {
|
||||
import(/* webpackMode: "eager" */ './test_utils/');
|
||||
import(/* webpackMode: "eager" */ './test_utils');
|
||||
}
|
||||
|
||||
document.addEventListener('beforeunload', () => {
|
||||
|
|
|
@ -41,8 +41,6 @@ function updateUrlWithNoteId(noteId) {
|
|||
|
||||
// Unmask the note's ID
|
||||
note?.setAttribute('id', `note_${noteId}`);
|
||||
} else if (noteId) {
|
||||
updateHistory(newHistoryEntry);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ export default class SidebarService {
|
|||
SidebarService.singleton = this;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-constructor-return
|
||||
return SidebarService.singleton;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,8 @@ export default class SidebarMediator {
|
|||
if (!SidebarMediator.singleton) {
|
||||
this.initSingleton(options);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-constructor-return
|
||||
return SidebarMediator.singleton;
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@ export default class SidebarStore {
|
|||
this.initSingleton(options);
|
||||
}
|
||||
|
||||
// eslint-disable-next-line no-constructor-return
|
||||
return SidebarStore.singleton;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
// This empty file satisfies the import/no-unresolved rule for ee_else_ce imports.
|
|
@ -0,0 +1 @@
|
|||
// This empty file satisfies the import/no-unresolved rule for ee_else_ce imports.
|
|
@ -0,0 +1 @@
|
|||
// This empty file satisfies the import/no-unresolved rule for ee_else_ce imports.
|
|
@ -184,7 +184,7 @@ module CommitsHelper
|
|||
|
||||
def diff_mode_swap_button(mode, file_hash)
|
||||
icon = mode == 'raw' ? 'doc-code' : 'doc-text'
|
||||
entity = mode == 'raw' ? 'toHideBtn' : 'toShowBtn'
|
||||
entity = mode == 'raw' ? 'rawButton' : 'renderedButton'
|
||||
title = "Display #{mode} diff"
|
||||
|
||||
link_to("##{mode}-diff-#{file_hash}",
|
||||
|
|
|
@ -33,6 +33,7 @@ module DiffHelper
|
|||
if action_name == 'diff_for_path'
|
||||
options[:expanded] = true
|
||||
options[:paths] = params.values_at(:old_path, :new_path)
|
||||
options[:use_extra_viewer_as_main] = false
|
||||
end
|
||||
|
||||
options
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module SearchHelper
|
||||
# params which should persist when a new tab is selected
|
||||
SEARCH_GENERIC_PARAMS = [
|
||||
:search,
|
||||
:scope,
|
||||
|
@ -129,7 +130,7 @@ module SearchHelper
|
|||
end
|
||||
|
||||
def search_service
|
||||
@search_service ||= ::SearchService.new(current_user, params.merge(confidential: Gitlab::Utils.to_boolean(params[:confidential])))
|
||||
@search_service ||= ::SearchService.new(current_user, sanitized_search_params)
|
||||
end
|
||||
|
||||
def search_sort_options
|
||||
|
@ -481,6 +482,13 @@ module SearchHelper
|
|||
def feature_flag_tab_enabled?(flag)
|
||||
@group || Feature.enabled?(flag, current_user, type: :ops)
|
||||
end
|
||||
|
||||
def sanitized_search_params
|
||||
sanitized_params = params.dup
|
||||
sanitized_params[:confidential] = Gitlab::Utils.to_boolean(sanitized_params[:confidential]) if sanitized_params.key?(:confidential)
|
||||
|
||||
sanitized_params
|
||||
end
|
||||
end
|
||||
|
||||
SearchHelper.prepend_mod_with('SearchHelper')
|
||||
|
|
|
@ -16,11 +16,16 @@ module Emails
|
|||
mail to: email, subject: "Unsubscribed from GitLab administrator notifications"
|
||||
end
|
||||
|
||||
def user_auto_banned_email(admin_id, user_id, max_project_downloads:, within_seconds:)
|
||||
def user_auto_banned_email(admin_id, user_id, max_project_downloads:, within_seconds:, group: nil)
|
||||
admin = User.find(admin_id)
|
||||
@user = User.find(user_id)
|
||||
@max_project_downloads = max_project_downloads
|
||||
@within_minutes = within_seconds / 60
|
||||
@ban_scope = if group.present?
|
||||
_('your group (%{group_name})' % { group_name: group.name })
|
||||
else
|
||||
_('your GitLab instance')
|
||||
end
|
||||
|
||||
Gitlab::I18n.with_locale(admin.preferred_language) do
|
||||
email_with_layout(
|
||||
|
|
|
@ -205,10 +205,14 @@ class NotifyPreview < ActionMailer::Preview
|
|||
Notify.inactive_project_deletion_warning_email(project, user, '2022-04-22').message
|
||||
end
|
||||
|
||||
def user_auto_banned_email
|
||||
def user_auto_banned_instance_email
|
||||
::Notify.user_auto_banned_email(user.id, user.id, max_project_downloads: 5, within_seconds: 600).message
|
||||
end
|
||||
|
||||
def user_auto_banned_namespace_email
|
||||
::Notify.user_auto_banned_email(user.id, user.id, max_project_downloads: 5, within_seconds: 600, group: group).message
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def project
|
||||
|
@ -239,6 +243,10 @@ class NotifyPreview < ActionMailer::Preview
|
|||
@user ||= User.last
|
||||
end
|
||||
|
||||
def group
|
||||
@group ||= Group.last
|
||||
end
|
||||
|
||||
def member
|
||||
@member ||= Member.last
|
||||
end
|
||||
|
|
|
@ -8,9 +8,12 @@ class CommitStatus < Ci::ApplicationRecord
|
|||
include EnumWithNil
|
||||
include BulkInsertableAssociations
|
||||
include TaggableQueries
|
||||
include IgnorableColumns
|
||||
|
||||
self.table_name = 'ci_builds'
|
||||
|
||||
ignore_column :token, remove_with: '15.4', remove_after: '2022-08-22'
|
||||
|
||||
belongs_to :user
|
||||
belongs_to :project
|
||||
belongs_to :pipeline, class_name: 'Ci::Pipeline', foreign_key: :commit_id
|
||||
|
|
|
@ -4,6 +4,8 @@ class ProtectedBranch < ApplicationRecord
|
|||
include ProtectedRef
|
||||
include Gitlab::SQL::Pattern
|
||||
|
||||
CACHE_EXPIRE_IN = 1.hour
|
||||
|
||||
scope :requiring_code_owner_approval,
|
||||
-> { where(code_owner_approval_required: true) }
|
||||
|
||||
|
@ -29,7 +31,7 @@ class ProtectedBranch < ApplicationRecord
|
|||
return true if project.empty_repo? && project.default_branch_protected?
|
||||
return false if ref_name.blank?
|
||||
|
||||
Rails.cache.fetch(protected_ref_cache_key(project, ref_name)) do
|
||||
Rails.cache.fetch(protected_ref_cache_key(project, ref_name), expires_in: CACHE_EXPIRE_IN) do
|
||||
self.matching(ref_name, protected_refs: protected_refs(project)).present?
|
||||
end
|
||||
end
|
||||
|
|
|
@ -32,5 +32,20 @@ module Ci
|
|||
def latest?(base_pipeline, head_pipeline, data)
|
||||
data&.fetch(:key, nil) == key(base_pipeline, head_pipeline)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def key(base_pipeline, head_pipeline)
|
||||
return super unless Feature.enabled?(:ci_child_pipeline_coverage_reports, head_pipeline.project)
|
||||
|
||||
[
|
||||
base_pipeline&.id, last_update_timestamp(base_pipeline),
|
||||
head_pipeline&.id, last_update_timestamp(head_pipeline)
|
||||
]
|
||||
end
|
||||
|
||||
def last_update_timestamp(pipeline_hierarchy)
|
||||
pipeline_hierarchy&.self_and_descendants&.maximum(:updated_at)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -353,6 +353,20 @@ module ObjectStorage
|
|||
}
|
||||
end
|
||||
|
||||
def store_path(*args)
|
||||
if self.object_store == Store::REMOTE
|
||||
# We allow administrators to create "sub buckets" by setting a prefix.
|
||||
# This makes it possible to deploy GitLab with only one object storage
|
||||
# bucket. Because the prefix is configuration data we do not want to
|
||||
# store it in the uploads table via RecordsUploads. That means that the
|
||||
# prefix cannot be part of store_dir. This is why we chose to implement
|
||||
# the prefix support here in store_path.
|
||||
File.join([self.class.object_store_options.bucket_prefix, super].compact)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
# Returns all the possible paths for an upload.
|
||||
# the `upload.path` is a lookup parameter, and it may change
|
||||
# depending on the `store` param.
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
= _('Configure the %{link} integration.').html_safe % { link: link_to(_('Mailgun events'), 'https://documentation.mailgun.com/en/latest/user_manual.html#webhooks', target: '_blank', rel: 'noopener noreferrer') }
|
||||
.settings-content
|
||||
= gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-mailgun-settings'), html: { class: 'fieldset-form', id: 'mailgun-settings' } do |f|
|
||||
= form_errors(@application_setting) if expanded
|
||||
= form_errors(@application_setting, pajamas_alert: true) if expanded
|
||||
|
||||
%fieldset
|
||||
.form-group
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
= link_to _('Learn more.'), help_page_path('administration/integration/plantuml.md'), target: '_blank', rel: 'noopener noreferrer'
|
||||
.settings-content
|
||||
= gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-plantuml-settings'), html: { class: 'fieldset-form', id: 'plantuml-settings' } do |f|
|
||||
= form_errors(@application_setting) if expanded
|
||||
= form_errors(@application_setting, pajamas_alert: true) if expanded
|
||||
|
||||
%fieldset
|
||||
.form-group
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
= gitlab_ui_form_for @application_setting, url: ci_cd_admin_application_settings_path(anchor: 'js-registry-settings'), html: { class: 'fieldset-form' } do |f|
|
||||
= form_errors(@application_setting)
|
||||
= form_errors(@application_setting, pajamas_alert: true)
|
||||
|
||||
%fieldset
|
||||
.form-group
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
= form_for @application_setting, url: repository_admin_application_settings_path(anchor: 'js-repository-static-objects-settings'), html: { class: 'fieldset-form' } do |f|
|
||||
= form_errors(@application_setting)
|
||||
= form_errors(@application_setting, pajamas_alert: true)
|
||||
|
||||
%fieldset
|
||||
.form-group
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
= form_errors(@application_setting)
|
||||
= form_errors(@application_setting, pajamas_alert: true)
|
||||
|
||||
#js-signup-form{ data: signup_form_data }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
= form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-terminal-settings'), html: { class: 'fieldset-form', id: 'terminal-settings' } do |f|
|
||||
= form_errors(@application_setting)
|
||||
= form_errors(@application_setting, pajamas_alert: true)
|
||||
|
||||
%fieldset
|
||||
.form-group
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
= _('Control whether to display customer experience improvement content and third-party offers in GitLab.')
|
||||
.settings-content
|
||||
= gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: 'js-third-party-offers-settings'), html: { class: 'fieldset-form', id: 'third-party-offers-settings' } do |f|
|
||||
= form_errors(@application_setting) if expanded
|
||||
= form_errors(@application_setting, pajamas_alert: true) if expanded
|
||||
|
||||
%fieldset
|
||||
.form-group
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- parsed_with_gfm = (_("Content parsed with %{link}.") % { link: link_to('GitLab Flavored Markdown', help_page_path('user/markdown'), target: '_blank') }).html_safe
|
||||
|
||||
= gitlab_ui_form_for @appearance, url: admin_application_settings_appearances_path, html: { class: 'gl-mt-3' } do |f|
|
||||
= form_errors(@appearance)
|
||||
= form_errors(@appearance, pajamas_alert: true)
|
||||
|
||||
|
||||
.row
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
= _('Manage Web IDE features.')
|
||||
.settings-content
|
||||
= gitlab_ui_form_for @application_setting, url: general_admin_application_settings_path(anchor: "js-web-ide-settings"), html: { class: 'fieldset-form', id: 'web-ide-settings' } do |f|
|
||||
= form_errors(@application_setting)
|
||||
= form_errors(@application_setting, pajamas_alert: true)
|
||||
|
||||
%fieldset
|
||||
.form-group
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
%tr.table-warning
|
||||
%td{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; border: 1px solid #ededed; border-bottom: 0; border-radius: 4px 4px 0 0; overflow: hidden; background-color: #fdf4f6; color: #d22852; font-size: 14px; line-height: 1.4; text-align: center; padding: 8px 16px;" }
|
||||
_('Failed jobs')
|
||||
= n_('Failed job', 'Failed jobs', failed.size)
|
||||
%tr.section
|
||||
%td{ style: "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; padding: 0 16px; border: 1px solid #ededed; border-radius: 4px; overflow: hidden; border-top: 0; border-radius: 0 0 4px 4px;" }
|
||||
%table.builds{ border: "0", cellpadding: "0", cellspacing: "0", style: "width: 100%; border-collapse: collapse;" }
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
- link_end = '</a>'.html_safe
|
||||
= email_default_heading(_("We've detected some unusual activity"))
|
||||
%p
|
||||
= _('We want to let you know %{username} has been banned from your GitLab instance due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes.') % { username: sanitize_name(@user.name), max_project_downloads: @max_project_downloads, within_minutes: @within_minutes }
|
||||
= _('We want to let you know %{username} has been banned from %{scope} due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes.') % { username: sanitize_name(@user.name), max_project_downloads: @max_project_downloads, within_minutes: @within_minutes, scope: @ban_scope }
|
||||
%p
|
||||
= _('If this is a mistake, you can %{link_start}unban them%{link_end}.').html_safe % { link_start: link_start % { url: admin_users_url(filter: 'banned') }, link_end: link_end }
|
||||
%p
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<%= _("We've detected some unusual activity") %>
|
||||
|
||||
<%= _('We want to let you know %{username} has been banned from your GitLab instance due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes.') % { username: sanitize_name(@user.name), max_project_downloads: @max_project_downloads, within_minutes: @within_minutes } %>
|
||||
<%= _('We want to let you know %{username} has been banned from %{scope} due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes.') % { username: sanitize_name(@user.name), max_project_downloads: @max_project_downloads, within_minutes: @within_minutes, scope: @ban_scope } %>
|
||||
|
||||
<%= _('If this is a mistake, you can unban them: %{url}.') % { url: admin_users_url(filter: 'banned') } %>
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
%div
|
||||
= form_for [:profile, @gpg_key], html: { class: 'js-requires-input' } do |f|
|
||||
= form_errors(@gpg_key)
|
||||
= form_errors(@gpg_key, pajamas_alert: true)
|
||||
|
||||
.form-group
|
||||
= f.label :key, s_('Profiles|Key'), class: 'label-bold'
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
- project = @project.present(current_user: current_user)
|
||||
- ref = local_assigns[:ref] || @ref
|
||||
- expanded = params[:expanded].present?
|
||||
- if blob.rich_viewer
|
||||
- add_page_startup_api_call local_assigns.fetch(:viewer_url) { url_for(safe_params.merge(viewer: blob.rich_viewer.type, format: :json)) }
|
||||
|
||||
.info-well.d-none.d-sm-block
|
||||
.well-segment
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
.diff-content
|
||||
- if diff_file.has_renderable?
|
||||
%div{ id: "#raw-diff-#{file_hash}", data: { file_hash: file_hash, diff_toggle_entity: 'toHide' } }
|
||||
.hidden{ id: "#raw-diff-#{file_hash}", data: { file_hash: file_hash, diff_toggle_entity: 'rawViewer' } }
|
||||
= render 'projects/diffs/viewer', viewer: diff_file.viewer
|
||||
%div{ id: "#rendered-diff-#{file_hash}", data: { file_hash: file_hash, diff_toggle_entity: 'toShow' } }
|
||||
%div{ id: "#rendered-diff-#{file_hash}", data: { file_hash: file_hash, diff_toggle_entity: 'renderedViewer' } }
|
||||
= render 'projects/diffs/viewer', viewer: diff_file.rendered.viewer
|
||||
- else
|
||||
= render 'projects/diffs/viewer', viewer: diff_file.viewer
|
||||
|
|
|
@ -30,8 +30,6 @@ class GitlabServicePingWorker # rubocop:disable Scalability/IdempotentWorker
|
|||
end
|
||||
|
||||
def usage_data
|
||||
return unless Feature.enabled?(:prerecord_service_ping_data)
|
||||
|
||||
ServicePing::BuildPayload.new.execute.tap do |payload|
|
||||
record = {
|
||||
recorded_at: payload[:recorded_at],
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
---
|
||||
name: prerecord_service_ping_data
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/85503
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/360675
|
||||
milestone: '15.0'
|
||||
name: custom_headers_streaming_audit_events_ui
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/90135
|
||||
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/365259
|
||||
milestone: '15.2'
|
||||
type: development
|
||||
group: group::product intelligence
|
||||
default_enabled: true
|
||||
group: group::compliance
|
||||
default_enabled: false
|
|
@ -26,7 +26,9 @@ class ObjectStoreSettings
|
|||
def self.legacy_parse(object_store, object_store_type)
|
||||
object_store ||= Settingslogic.new({})
|
||||
object_store['enabled'] = false if object_store['enabled'].nil?
|
||||
object_store['remote_directory'] ||= nil
|
||||
object_store['remote_directory'], object_store['bucket_prefix'] = split_bucket_prefix(
|
||||
object_store['remote_directory']
|
||||
)
|
||||
|
||||
if support_legacy_background_upload?(object_store_type)
|
||||
object_store['direct_upload'] = false
|
||||
|
@ -48,6 +50,22 @@ class ObjectStoreSettings
|
|||
ENV[LEGACY_BACKGROUND_UPLOADS_ENV].to_s.split(',').map(&:strip).include?(object_store_type)
|
||||
end
|
||||
|
||||
def self.split_bucket_prefix(bucket)
|
||||
return [nil, nil] unless bucket.present?
|
||||
|
||||
# Strictly speaking, object storage keys are not Unix paths and
|
||||
# characters like '/' and '.' have no special meaning. But in practice,
|
||||
# we do treat them like paths, and somewhere along the line something or
|
||||
# somebody may turn '//' into '/' or try to resolve '/..'. To guard
|
||||
# against this we reject "bad" combinations of '/' and '.'.
|
||||
[%r{\A\.*/}, %r{/\.*/}, %r{/\.*\z}].each do |re|
|
||||
raise 'invalid bucket' if re.match(bucket)
|
||||
end
|
||||
|
||||
bucket, prefix = bucket.split('/', 2)
|
||||
[bucket, prefix]
|
||||
end
|
||||
|
||||
def initialize(settings)
|
||||
@settings = settings
|
||||
end
|
||||
|
@ -156,7 +174,9 @@ class ObjectStoreSettings
|
|||
next if allowed_storage_specific_settings?(store_type, section.to_h)
|
||||
|
||||
# Map bucket (external name) -> remote_directory (internal representation)
|
||||
target_config['remote_directory'] = target_config.delete('bucket')
|
||||
target_config['remote_directory'], target_config['bucket_prefix'] = self.class.split_bucket_prefix(
|
||||
target_config.delete('bucket')
|
||||
)
|
||||
target_config['consolidated_settings'] = true
|
||||
section['object_store'] = target_config
|
||||
# Settingslogic internally stores data as a Hash, but it also
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ScheduleIndexOnEventsForContributionAnalyticsOptimization < Gitlab::Database::Migration[2.0]
|
||||
INDEX_NAME = 'index_on_events_to_improve_contribution_analytics_performance'
|
||||
|
||||
def up
|
||||
prepare_async_index :events, [:project_id, :target_type, :action, :created_at, :author_id, :id], name: INDEX_NAME
|
||||
end
|
||||
|
||||
def down
|
||||
unprepare_async_index :events, INDEX_NAME
|
||||
end
|
||||
end
|
|
@ -0,0 +1 @@
|
|||
eb28e690d810a6b23454b0b5a2ebc1ff802cdf52f7c41faae7519ea8f018b96a
|
|
@ -31,9 +31,9 @@ Users with at least the Owner role for a group can add event streaming destinati
|
|||
1. On the top bar, select **Menu > Groups** and find your group.
|
||||
1. On the left sidebar, select **Security & Compliance > Audit events**
|
||||
1. On the main area, select **Streams** tab.
|
||||
- When the destination list is empty, select **Add stream** activate edit mode and add a new destination.
|
||||
- When the destination list is not empty, select **{plus}** under the **Streams** tab to activate edit mode.
|
||||
1. Enter the endpoint you wish to add and select **Add**.
|
||||
- When the destination list is empty, select **Add stream** to show the section for adding destinations.
|
||||
- When the destination list is not empty, select **{plus}** to show the section for adding destinations.
|
||||
1. Enter the destination URL to add and select **Add**.
|
||||
|
||||
Event streaming is enabled if:
|
||||
|
||||
|
@ -143,18 +143,23 @@ Destination is deleted if:
|
|||
- The returned `errors` object is empty.
|
||||
- The API responds with `200 OK`.
|
||||
|
||||
## Custom HTTP header values
|
||||
## Custom HTTP headers
|
||||
|
||||
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/361216) in GitLab 15.1 [with a flag](feature_flags.md) named `streaming_audit_event_headers`. Disabled by default.
|
||||
> - [Enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/362941) in GitLab 15.2.
|
||||
> - API [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/361216) in GitLab 15.1 [with a flag](feature_flags.md) named `streaming_audit_event_headers`. Disabled by default.
|
||||
> - API [enabled on GitLab.com and self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/362941) in GitLab 15.2.
|
||||
> - UI [introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/361630) in GitLab 15.2 [with a flag](feature_flags.md) named `custom_headers_streaming_audit_events_ui`. Disabled by default.
|
||||
|
||||
FLAG:
|
||||
On self-managed GitLab, by default this feature is available. To hide the feature, ask an administrator to [disable the feature flag](../administration/feature_flags.md) named `streaming_audit_event_headers`.
|
||||
On GitLab.com, this feature is available.
|
||||
On self-managed GitLab, by default the API for this feature is available. To hide the feature, ask an administrator to [disable the feature flag](../administration/feature_flags.md) named `streaming_audit_event_headers`.
|
||||
On GitLab.com, the API for this feature is available.
|
||||
|
||||
Each streaming destination can have up to 20 custom HTTP headers included with each streamed event.
|
||||
|
||||
### Add with the API
|
||||
### Adding custom HTTP headers
|
||||
|
||||
Add customer HTTP headers with the API or GitLab UI.
|
||||
|
||||
#### Use the API
|
||||
|
||||
Group owners can add a HTTP header using the GraphQL `auditEventsStreamingHeadersCreate` mutation. You can retrieve the destination ID
|
||||
by [listing the external audit destinations](#list-streaming-destinations) on the group.
|
||||
|
@ -169,7 +174,37 @@ mutation {
|
|||
|
||||
The header is created if the returned `errors` object is empty.
|
||||
|
||||
### Update with the API
|
||||
#### Use the GitLab UI
|
||||
|
||||
FLAG:
|
||||
On self-managed GitLab, by default the UI for this feature is not available. To make it available per group, ask an administrator to
|
||||
[enable the feature flag](../administration/feature_flags.md) named `custom_headers_streaming_audit_events_ui`. On GitLab.com, the UI for this feature is
|
||||
not available. The UI for this feature is not ready for production use. Custom header values are not saved by the GitLab UI. To track progress on saving
|
||||
custom header values in the GitLab UI, [see the relevant issue](https://gitlab.com/gitlab-org/gitlab/-/issues/361631).
|
||||
|
||||
Users with at least the Owner role for a group can add event streaming destinations and custom HTTP headers for it:
|
||||
|
||||
1. On the top bar, select **Menu > Groups** and find your group.
|
||||
1. On the left sidebar, select **Security & Compliance > Audit events**
|
||||
1. On the main area, select **Streams** tab.
|
||||
- When the destination list is empty, select **Add stream** to show the section for adding destinations.
|
||||
- When the destination list is not empty, select **{plus}** to show the section for adding destinations.
|
||||
1. Enter the destination URL to add.
|
||||
1. Locate the **Custom HTTP headers** table.
|
||||
1. In the **Header** column, add the header's name.
|
||||
1. In the **Value** column, add the header's value.
|
||||
1. Ignore the **Active** checkbox because it isn't functional. To track progress on adding functionality to the **Active** checkbox, see the
|
||||
[relevant issue](https://gitlab.com/gitlab-org/gitlab/-/issues/361925).
|
||||
1. Enter as many name and value pairs as required. When you enter a unique name and a value for a header, a new row in the table automatically appears. You can add up to
|
||||
20 headers per endpoint.
|
||||
1. After all headers have been filled out, select **Add** to add the new endpoint.
|
||||
|
||||
Event streaming is enabled if:
|
||||
|
||||
- No warning is shown.
|
||||
- The added endpoint is displayed in the UI.
|
||||
|
||||
### Updating custom HTTP headers
|
||||
|
||||
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/361964) in GitLab 15.2.
|
||||
|
||||
|
@ -183,7 +218,7 @@ mutation {
|
|||
}
|
||||
```
|
||||
|
||||
### Delete with the API
|
||||
### Deleting custom HTTP headers
|
||||
|
||||
Group owners can remove a HTTP header using the GraphQL `auditEventsStreamingHeadersDestroy` mutation. You can retrieve the header ID
|
||||
by [listing all the custom headers](#list-all-custom-headers-with-the-api) on the group.
|
||||
|
|
|
@ -573,6 +573,15 @@ This ensures there are no collisions across the various types of data GitLab sto
|
|||
There are plans to [enable the use of a single bucket](https://gitlab.com/gitlab-org/gitlab/-/issues/292958)
|
||||
in the future.
|
||||
|
||||
With Omnibus and source installations it is possible to split a single
|
||||
real bucket into multiple virtual buckets. If your object storage
|
||||
bucket is called `my-gitlab-objects` you can configure uploads to go
|
||||
into `my-gitlab-objects/uploads`, artifacts into
|
||||
`my-gitlab-objects/artifacts`, etc. The application will act as if
|
||||
these are separate buckets. Note that use of bucket prefixes [may not
|
||||
work correctly with Helm
|
||||
backups](https://gitlab.com/gitlab-org/charts/gitlab/-/issues/3376).
|
||||
|
||||
Helm-based installs require separate buckets to
|
||||
[handle backup restorations](https://docs.gitlab.com/charts/advanced/external-object-storage/#lfs-artifacts-uploads-packages-external-diffs-terraform-state-dependency-proxy).
|
||||
|
||||
|
|
|
@ -19,6 +19,10 @@ NOTE:
|
|||
These endpoints do not adhere to the standard API authentication methods.
|
||||
See each route for details on how credentials are expected to be passed.
|
||||
|
||||
NOTE:
|
||||
The Conan registry is not FIPS compliant and is disabled when [FIPS mode](../../development/fips_compliance.md) is enabled.
|
||||
These endpoints will all return 404 Not Found.
|
||||
|
||||
## Route prefix
|
||||
|
||||
There are two sets of identical routes that each make requests in different scopes:
|
||||
|
|
|
@ -355,7 +355,7 @@ You can view failures in two ways:
|
|||
|
||||
- Via GitLab logs:
|
||||
1. After running a batched background migration, if any jobs fail,
|
||||
view the logs in [Kibana](https://log.gprd.gitlab.net/goto/5f06a57f768c6025e1c65aefb4075694).
|
||||
view the logs in [Kibana](https://log.gprd.gitlab.net/goto/4cb43f40-f861-11ec-b86b-d963a1a6788e).
|
||||
View the production Sidekiq log and filter for:
|
||||
|
||||
- `json.new_state: failed`
|
||||
|
|
|
@ -65,7 +65,7 @@ the following sections and tables provide an alternative.
|
|||
|
||||
| Field | Type | Possible values | Description |
|
||||
|-------|------|-----------------|-------------|
|
||||
| `name` | `string` | | Name of the policy. |
|
||||
| `name` | `string` | | Name of the policy. Maximum of 255 characters.|
|
||||
| `description` (optional) | `string` | | Description of the policy. |
|
||||
| `enabled` | `boolean` | `true`, `false` | Flag to enable (`true`) or disable (`false`) the policy. |
|
||||
| `rules` | `array` of rules | | List of rules that the policy applies. |
|
||||
|
|
|
@ -56,7 +56,7 @@ the following sections and tables provide an alternative.
|
|||
|
||||
| Field | Type | Possible values | Description |
|
||||
|-------|------|-----------------|-------------|
|
||||
| `name` | `string` | | Name of the policy. |
|
||||
| `name` | `string` | | Name of the policy. Maximum of 255 characters.|
|
||||
| `description` (optional) | `string` | | Description of the policy. |
|
||||
| `enabled` | `boolean` | `true`, `false` | Flag to enable (`true`) or disable (`false`) the policy. |
|
||||
| `rules` | `array` of rules | | List of rules that the policy applies. |
|
||||
|
|
|
@ -14,6 +14,9 @@ The Conan package registry for GitLab is under development and isn't ready for p
|
|||
limited functionality. This [epic](https://gitlab.com/groups/gitlab-org/-/epics/6816) details the remaining
|
||||
work and timelines to make it production ready.
|
||||
|
||||
NOTE:
|
||||
The Conan registry is not FIPS compliant and is disabled when [FIPS mode](../../../development/fips_compliance.md) is enabled.
|
||||
|
||||
Publish Conan packages in your project's Package Registry. Then install the
|
||||
packages whenever you need to use them as a dependency.
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@ module API
|
|||
end
|
||||
|
||||
before do
|
||||
not_found! if Gitlab::FIPS.enabled?
|
||||
require_packages_enabled!
|
||||
|
||||
# Personal access token will be extracted from Bearer or Basic authorization
|
||||
|
|
|
@ -225,7 +225,11 @@ module API
|
|||
def find_project_issue(iid, project_id = nil)
|
||||
project = project_id ? find_project!(project_id) : user_project
|
||||
|
||||
::IssuesFinder.new(current_user, project_id: project.id).find_by!(iid: iid)
|
||||
::IssuesFinder.new(
|
||||
current_user,
|
||||
project_id: project.id,
|
||||
issue_types: WorkItems::Type.allowed_types_for_issues
|
||||
).find_by!(iid: iid)
|
||||
end
|
||||
# rubocop: enable CodeReuse/ActiveRecord
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ module API
|
|||
args[:not][:label_name] ||= args[:not].delete(:labels)
|
||||
args[:scope] = args[:scope].underscore if args[:scope]
|
||||
args[:sort] = "#{args[:order_by]}_#{args[:sort]}"
|
||||
args[:issue_types] ||= args.delete(:issue_type)
|
||||
args[:issue_types] ||= args.delete(:issue_type) || WorkItems::Type.allowed_types_for_issues
|
||||
|
||||
IssuesFinder.new(current_user, args)
|
||||
end
|
||||
|
|
|
@ -52,7 +52,7 @@ module Gitlab
|
|||
# https://gitlab.com/groups/gitlab-org/configure/-/epics/8
|
||||
# Until then, we need to make both the old and the new KUBECONFIG contexts available
|
||||
collection.concat(deployment_variables(environment: environment, job: job))
|
||||
template = ::Ci::GenerateKubeconfigService.new(pipeline, token: job.token).execute
|
||||
template = ::Ci::GenerateKubeconfigService.new(pipeline, token: job.try(:token)).execute
|
||||
kubeconfig_yaml = collection['KUBECONFIG']&.value
|
||||
template.merge_yaml(kubeconfig_yaml) if kubeconfig_yaml.present?
|
||||
|
||||
|
|
|
@ -5277,6 +5277,9 @@ msgstr ""
|
|||
msgid "AuditLogs|User Events"
|
||||
msgstr ""
|
||||
|
||||
msgid "AuditStreams|A header with this name already exists."
|
||||
msgstr ""
|
||||
|
||||
msgid "AuditStreams|Active"
|
||||
msgstr ""
|
||||
|
||||
|
@ -5301,6 +5304,9 @@ msgstr ""
|
|||
msgid "AuditStreams|Cancel editing"
|
||||
msgstr ""
|
||||
|
||||
msgid "AuditStreams|Custom HTTP headers"
|
||||
msgstr ""
|
||||
|
||||
msgid "AuditStreams|Delete %{link}"
|
||||
msgstr ""
|
||||
|
||||
|
@ -5310,6 +5316,12 @@ msgstr ""
|
|||
msgid "AuditStreams|Destinations receive all audit event data"
|
||||
msgstr ""
|
||||
|
||||
msgid "AuditStreams|Header"
|
||||
msgstr ""
|
||||
|
||||
msgid "AuditStreams|Maximum of %{number} HTTP headers has been reached."
|
||||
msgstr ""
|
||||
|
||||
msgid "AuditStreams|Setup streaming for audit events"
|
||||
msgstr ""
|
||||
|
||||
|
@ -5325,6 +5337,9 @@ msgstr ""
|
|||
msgid "AuditStreams|This is great for keeping everything one place."
|
||||
msgstr ""
|
||||
|
||||
msgid "AuditStreams|Value"
|
||||
msgstr ""
|
||||
|
||||
msgid "Aug"
|
||||
msgstr ""
|
||||
|
||||
|
@ -15660,6 +15675,11 @@ msgstr ""
|
|||
msgid "Failed Jobs"
|
||||
msgstr ""
|
||||
|
||||
msgid "Failed job"
|
||||
msgid_plural "Failed jobs"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
msgid "Failed on"
|
||||
msgstr ""
|
||||
|
||||
|
@ -42970,7 +42990,7 @@ msgstr ""
|
|||
msgid "We want to be sure it is you, please confirm you are not a robot."
|
||||
msgstr ""
|
||||
|
||||
msgid "We want to let you know %{username} has been banned from your GitLab instance due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes."
|
||||
msgid "We want to let you know %{username} has been banned from %{scope} due to them downloading more than %{max_project_downloads} project repositories within %{within_minutes} minutes."
|
||||
msgstr ""
|
||||
|
||||
msgid "We will notify %{inviter} that you declined their invitation to join GitLab. You will stop receiving reminders."
|
||||
|
@ -46716,6 +46736,12 @@ msgstr ""
|
|||
msgid "yaml invalid"
|
||||
msgstr ""
|
||||
|
||||
msgid "your GitLab instance"
|
||||
msgstr ""
|
||||
|
||||
msgid "your group (%{group_name})"
|
||||
msgstr ""
|
||||
|
||||
msgid "your settings"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
"@babel/preset-env": "^7.18.2",
|
||||
"@gitlab/at.js": "1.5.7",
|
||||
"@gitlab/favicon-overlay": "2.0.0",
|
||||
"@gitlab/svgs": "2.24.0",
|
||||
"@gitlab/svgs": "2.25.0",
|
||||
"@gitlab/ui": "42.12.0",
|
||||
"@gitlab/visual-review-tools": "1.7.3",
|
||||
"@rails/actioncable": "6.1.4-7",
|
||||
|
@ -200,7 +200,7 @@
|
|||
"yaml": "^2.0.0-10"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@gitlab/eslint-plugin": "12.1.0",
|
||||
"@gitlab/eslint-plugin": "12.3.0",
|
||||
"@gitlab/stylelint-config": "4.1.0",
|
||||
"@graphql-eslint/eslint-plugin": "3.10.4",
|
||||
"@testing-library/dom": "^7.16.2",
|
||||
|
|
|
@ -73,6 +73,7 @@ RSpec.describe ObjectStoreSettings do
|
|||
expect(settings.artifacts['object_store']['background_upload']).to be false
|
||||
expect(settings.artifacts['object_store']['proxy_download']).to be false
|
||||
expect(settings.artifacts['object_store']['remote_directory']).to eq('artifacts')
|
||||
expect(settings.artifacts['object_store']['bucket_prefix']).to eq(nil)
|
||||
expect(settings.artifacts['object_store']['consolidated_settings']).to be true
|
||||
expect(settings.artifacts).to eq(settings['artifacts'])
|
||||
|
||||
|
@ -83,6 +84,7 @@ RSpec.describe ObjectStoreSettings do
|
|||
expect(settings.lfs['object_store']['background_upload']).to be false
|
||||
expect(settings.lfs['object_store']['proxy_download']).to be true
|
||||
expect(settings.lfs['object_store']['remote_directory']).to eq('lfs-objects')
|
||||
expect(settings.lfs['object_store']['bucket_prefix']).to eq(nil)
|
||||
expect(settings.lfs['object_store']['consolidated_settings']).to be true
|
||||
expect(settings.lfs).to eq(settings['lfs'])
|
||||
|
||||
|
@ -90,6 +92,7 @@ RSpec.describe ObjectStoreSettings do
|
|||
expect(settings.pages['object_store']['enabled']).to be true
|
||||
expect(settings.pages['object_store']['connection']).to eq(connection)
|
||||
expect(settings.pages['object_store']['remote_directory']).to eq('pages')
|
||||
expect(settings.pages['object_store']['bucket_prefix']).to eq(nil)
|
||||
expect(settings.pages['object_store']['consolidated_settings']).to be true
|
||||
expect(settings.pages).to eq(settings['pages'])
|
||||
|
||||
|
@ -98,6 +101,18 @@ RSpec.describe ObjectStoreSettings do
|
|||
expect(settings.external_diffs).to eq(settings['external_diffs'])
|
||||
end
|
||||
|
||||
it 'supports bucket prefixes' do
|
||||
config['object_store']['objects']['artifacts']['bucket'] = 'gitlab/artifacts'
|
||||
config['object_store']['objects']['lfs']['bucket'] = 'gitlab/lfs'
|
||||
|
||||
subject
|
||||
|
||||
expect(settings.artifacts['object_store']['remote_directory']).to eq('gitlab')
|
||||
expect(settings.artifacts['object_store']['bucket_prefix']).to eq('artifacts')
|
||||
expect(settings.lfs['object_store']['remote_directory']).to eq('gitlab')
|
||||
expect(settings.lfs['object_store']['bucket_prefix']).to eq('lfs')
|
||||
end
|
||||
|
||||
it 'raises an error when a bucket is missing' do
|
||||
config['object_store']['objects']['lfs'].delete('bucket')
|
||||
|
||||
|
@ -152,6 +167,7 @@ RSpec.describe ObjectStoreSettings do
|
|||
|
||||
expect(settings.artifacts['enabled']).to be true
|
||||
expect(settings.artifacts['object_store']['remote_directory']).to be_nil
|
||||
expect(settings.artifacts['object_store']['bucket_prefix']).to be_nil
|
||||
expect(settings.artifacts['object_store']['enabled']).to be_falsey
|
||||
expect(settings.artifacts['object_store']['consolidated_settings']).to be_falsey
|
||||
end
|
||||
|
@ -177,6 +193,7 @@ RSpec.describe ObjectStoreSettings do
|
|||
|
||||
expect(settings.artifacts['object_store']).to be_nil
|
||||
expect(settings.lfs['object_store']['remote_directory']).to eq('some-bucket')
|
||||
expect(settings.lfs['object_store']['bucket_prefix']).to eq(nil)
|
||||
# Disable background_upload, regardless of the input config
|
||||
expect(settings.lfs['object_store']['direct_upload']).to eq(true)
|
||||
expect(settings.lfs['object_store']['background_upload']).to eq(false)
|
||||
|
@ -203,6 +220,7 @@ RSpec.describe ObjectStoreSettings do
|
|||
|
||||
expect(settings.artifacts['object_store']).to be_nil
|
||||
expect(settings.lfs['object_store']['remote_directory']).to eq('some-bucket')
|
||||
expect(settings.lfs['object_store']['bucket_prefix']).to eq(nil)
|
||||
# Enable background_upload if the environment variable is available
|
||||
expect(settings.lfs['object_store']['direct_upload']).to eq(false)
|
||||
expect(settings.lfs['object_store']['background_upload']).to eq(true)
|
||||
|
@ -220,6 +238,7 @@ RSpec.describe ObjectStoreSettings do
|
|||
expect(settings['direct_upload']).to be true
|
||||
expect(settings['background_upload']).to be false
|
||||
expect(settings['remote_directory']).to be nil
|
||||
expect(settings['bucket_prefix']).to be nil
|
||||
end
|
||||
|
||||
it 'respects original values' do
|
||||
|
@ -234,6 +253,18 @@ RSpec.describe ObjectStoreSettings do
|
|||
expect(settings['direct_upload']).to be true
|
||||
expect(settings['background_upload']).to be false
|
||||
expect(settings['remote_directory']).to eq 'artifacts'
|
||||
expect(settings['bucket_prefix']).to be nil
|
||||
end
|
||||
|
||||
it 'supports bucket prefixes' do
|
||||
original_settings = Settingslogic.new({
|
||||
'enabled' => true,
|
||||
'remote_directory' => 'gitlab/artifacts'
|
||||
})
|
||||
|
||||
settings = described_class.legacy_parse(original_settings, 'artifacts')
|
||||
expect(settings['remote_directory']).to eq 'gitlab'
|
||||
expect(settings['bucket_prefix']).to eq 'artifacts'
|
||||
end
|
||||
|
||||
context 'legacy background upload environment variable is enabled' do
|
||||
|
@ -253,6 +284,7 @@ RSpec.describe ObjectStoreSettings do
|
|||
expect(settings['direct_upload']).to be false
|
||||
expect(settings['background_upload']).to be true
|
||||
expect(settings['remote_directory']).to eq 'artifacts'
|
||||
expect(settings['bucket_prefix']).to eq nil
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -273,6 +305,50 @@ RSpec.describe ObjectStoreSettings do
|
|||
expect(settings['direct_upload']).to be true
|
||||
expect(settings['background_upload']).to be false
|
||||
expect(settings['remote_directory']).to eq 'artifacts'
|
||||
expect(settings['bucket_prefix']).to eq nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '.split_bucket_prefix' do
|
||||
using RSpec::Parameterized::TableSyntax
|
||||
|
||||
subject { described_class.split_bucket_prefix(input) }
|
||||
|
||||
context 'valid inputs' do
|
||||
where(:input, :bucket, :prefix) do
|
||||
nil | nil | nil
|
||||
'' | nil | nil
|
||||
'bucket' | 'bucket' | nil
|
||||
'bucket/prefix' | 'bucket' | 'prefix'
|
||||
'bucket/pre/fix' | 'bucket' | 'pre/fix'
|
||||
end
|
||||
|
||||
with_them do
|
||||
it { expect(subject).to eq([bucket, prefix]) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'invalid inputs' do
|
||||
where(:input) do
|
||||
[
|
||||
['bucket/'],
|
||||
['bucket/.'],
|
||||
['bucket/..'],
|
||||
['bucket/prefix/'],
|
||||
['bucket/prefix/.'],
|
||||
['bucket/prefix/..'],
|
||||
['/bucket/prefix'],
|
||||
['./bucket/prefix'],
|
||||
['../bucket/prefix'],
|
||||
['bucket//prefix'],
|
||||
['bucket/./prefix'],
|
||||
['bucket/../prefix']
|
||||
]
|
||||
end
|
||||
|
||||
with_them do
|
||||
it { expect { subject }.to raise_error(/invalid bucket/) }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -46,28 +46,28 @@ RSpec.describe 'Multiple view Diffs', :js do
|
|||
end
|
||||
|
||||
context 'opening a diff with ipynb' do
|
||||
it 'loads the rendered diff as hidden' do
|
||||
it 'loads the raw diff as hidden' do
|
||||
diff = page.find('.diff-file, .file-holder', match: :first)
|
||||
|
||||
expect(diff).not_to have_selector '[data-diff-toggle-entity="toHide"]'
|
||||
expect(diff).to have_selector '[data-diff-toggle-entity="toShow"]'
|
||||
expect(diff).not_to have_selector '[data-diff-toggle-entity="rawViewer"]'
|
||||
expect(diff).to have_selector '[data-diff-toggle-entity="renderedViewer"]'
|
||||
|
||||
expect(classes_for_element(diff, 'toHide', visible: false)).to include('hidden')
|
||||
expect(classes_for_element(diff, 'toShow')).not_to include('hidden')
|
||||
expect(classes_for_element(diff, 'rawViewer', visible: false)).to include('hidden')
|
||||
expect(classes_for_element(diff, 'renderedViewer')).not_to include('hidden')
|
||||
|
||||
expect(classes_for_element(diff, 'toShowBtn')).to include('selected')
|
||||
expect(classes_for_element(diff, 'toHideBtn')).not_to include('selected')
|
||||
expect(classes_for_element(diff, 'renderedButton')).to include('selected')
|
||||
expect(classes_for_element(diff, 'rawButton')).not_to include('selected')
|
||||
end
|
||||
|
||||
it 'displays the rendered diff and hides after selection changes' do
|
||||
it 'displays the raw diff and hides after selection changes' do
|
||||
diff = page.find('.diff-file, .file-holder', match: :first)
|
||||
diff.find('[data-diff-toggle-entity="toShowBtn"]').click
|
||||
diff.find('[data-diff-toggle-entity="rawButton"]').click
|
||||
|
||||
expect(diff).to have_selector '[data-diff-toggle-entity="toShow"]'
|
||||
expect(diff).not_to have_selector '[data-diff-toggle-entity="toHide"]'
|
||||
expect(diff).to have_selector '[data-diff-toggle-entity="rawViewer"]'
|
||||
expect(diff).not_to have_selector '[data-diff-toggle-entity="renderedViewer"]'
|
||||
|
||||
expect(classes_for_element(diff, 'toHideBtn')).not_to include('selected')
|
||||
expect(classes_for_element(diff, 'toShowBtn')).to include('selected')
|
||||
expect(classes_for_element(diff, 'renderedButton')).not_to include('selected')
|
||||
expect(classes_for_element(diff, 'rawButton')).to include('selected')
|
||||
end
|
||||
|
||||
it 'transforms the diff' do
|
||||
|
|
|
@ -61,15 +61,15 @@ RSpec.describe 'New project', :js do
|
|||
expect(page).to have_link('GitLab export')
|
||||
end
|
||||
|
||||
describe 'github import option' do
|
||||
shared_examples 'renders importer link' do |params|
|
||||
context 'with user namespace' do
|
||||
before do
|
||||
visit new_project_path
|
||||
click_link 'Import project'
|
||||
end
|
||||
|
||||
it 'renders link to github importer' do
|
||||
expect(page).to have_link(href: new_import_github_path)
|
||||
it "renders link to #{params[:name]} importer" do
|
||||
expect(page).to have_link(href: Rails.application.routes.url_helpers.send(params[:route]))
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -82,21 +82,56 @@ RSpec.describe 'New project', :js do
|
|||
click_link 'Import project'
|
||||
end
|
||||
|
||||
it 'renders link to github importer including namespace id' do
|
||||
expect(page).to have_link(href: new_import_github_path(namespace_id: group.id))
|
||||
it "renders link to #{params[:name]} importer including namespace id" do
|
||||
expect(page).to have_link(href: Rails.application.routes.url_helpers.send(params[:route], namespace_id: group.id))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'manifest import option' do
|
||||
before do
|
||||
visit new_project_path
|
||||
describe 'importer links' do
|
||||
shared_examples 'link to importers' do
|
||||
let(:importer_routes) do
|
||||
{
|
||||
'github': :new_import_github_path,
|
||||
'bitbucket': :status_import_bitbucket_path,
|
||||
'bitbucket server': :status_import_bitbucket_server_path,
|
||||
'gitlab.com': :status_import_gitlab_path,
|
||||
'fogbugz': :new_import_fogbugz_path,
|
||||
'gitea': :new_import_gitea_path,
|
||||
'manifest': :new_import_manifest_path,
|
||||
'phabricator': :new_import_phabricator_path
|
||||
}
|
||||
end
|
||||
|
||||
click_link 'Import project'
|
||||
it 'renders links to several importers', :aggregate_failures do
|
||||
importer_routes.each_value do |route|
|
||||
expect(page).to have_link(href: Rails.application.routes.url_helpers.send(route, link_params))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'has Manifest file' do
|
||||
expect(page).to have_link('Manifest file')
|
||||
context 'with user namespace' do
|
||||
let(:link_params) { {} }
|
||||
|
||||
before do
|
||||
visit new_project_path
|
||||
click_link 'Import project'
|
||||
end
|
||||
|
||||
include_examples 'link to importers'
|
||||
end
|
||||
|
||||
context 'with group namespace' do
|
||||
let(:group) { create(:group, :private) }
|
||||
let(:link_params) { { namespace_id: group.id } }
|
||||
|
||||
before do
|
||||
group.add_owner(user)
|
||||
visit new_project_path(namespace_id: group.id)
|
||||
click_link 'Import project'
|
||||
end
|
||||
|
||||
include_examples 'link to importers'
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -14,8 +14,7 @@ const createRelativeRequire = (filename) => {
|
|||
const rel = path.relative(__dirname, path.dirname(filename));
|
||||
const base = path.resolve(__dirname, rel);
|
||||
|
||||
// reason: Dynamic require should be fine here since the code is dynamically evaluated anyways.
|
||||
// eslint-disable-next-line import/no-dynamic-require, global-require
|
||||
// eslint-disable-next-line global-require
|
||||
return (pathArg) => require(transformRequirePath(base, pathArg));
|
||||
};
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ describe('Job Sidebar Details Container', () => {
|
|||
expect(wrapper.html()).toBe('');
|
||||
});
|
||||
|
||||
it.each(['duration', 'erased_at', 'finished_at', 'queued', 'runner', 'coverage'])(
|
||||
it.each(['duration', 'erased_at', 'finished_at', 'queued_at', 'runner', 'coverage'])(
|
||||
'should not render %s details when missing',
|
||||
async (detail) => {
|
||||
await store.dispatch('receiveJobSuccess', { [detail]: undefined });
|
||||
|
@ -59,7 +59,7 @@ describe('Job Sidebar Details Container', () => {
|
|||
['duration', 'Elapsed time: 6 seconds'],
|
||||
['erased_at', 'Erased: 3 weeks ago'],
|
||||
['finished_at', 'Finished: 3 weeks ago'],
|
||||
['queued', 'Queued: 9 seconds'],
|
||||
['queued_duration', 'Queued: 9 seconds'],
|
||||
['runner', 'Runner: #1 (ABCDEFGH) local ci runner'],
|
||||
['coverage', 'Coverage: 20%'],
|
||||
])('uses %s to render job-%s', async (detail, value) => {
|
||||
|
|
|
@ -930,7 +930,7 @@ export default {
|
|||
created_at: threeWeeksAgo.toISOString(),
|
||||
updated_at: threeWeeksAgo.toISOString(),
|
||||
finished_at: threeWeeksAgo.toISOString(),
|
||||
queued: 9.54,
|
||||
queued_duration: 9.54,
|
||||
status: {
|
||||
icon: 'status_success',
|
||||
text: 'passed',
|
||||
|
|
|
@ -8,7 +8,7 @@ beforeAll(async () => {
|
|||
// that jQuery isn't available *before* we import @rails/ujs.
|
||||
delete global.jQuery;
|
||||
|
||||
const { initRails } = await import('~/lib/utils/rails_ujs.js');
|
||||
const { initRails } = await import('~/lib/utils/rails_ujs');
|
||||
initRails();
|
||||
});
|
||||
|
||||
|
|
|
@ -94,7 +94,7 @@ RSpec.describe CommitsHelper do
|
|||
it 'renders the correct select-rendered button' do
|
||||
expect(node[:title]).to eq('Display rendered diff')
|
||||
expect(node['data-file-hash']).to eq('abc')
|
||||
expect(node['data-diff-toggle-entity']).to eq('toShowBtn')
|
||||
expect(node['data-diff-toggle-entity']).to eq('renderedButton')
|
||||
expect(node.xpath("//a/svg")[0]["data-testid"]).to eq('doc-text-icon')
|
||||
end
|
||||
end
|
||||
|
@ -105,7 +105,7 @@ RSpec.describe CommitsHelper do
|
|||
it 'renders the correct select-raw button' do
|
||||
expect(node[:title]).to eq('Display raw diff')
|
||||
expect(node['data-file-hash']).to eq('abc')
|
||||
expect(node['data-diff-toggle-entity']).to eq('toHideBtn')
|
||||
expect(node['data-diff-toggle-entity']).to eq('rawButton')
|
||||
expect(node.xpath("//a/svg")[0]["data-testid"]).to eq('doc-code-icon')
|
||||
end
|
||||
end
|
||||
|
|
|
@ -62,7 +62,7 @@ RSpec.describe Gitlab::Git::Commit, :seed_helper do
|
|||
|
||||
after do
|
||||
# Erase the new commit so other tests get the original repo
|
||||
rugged_repo.references.update("refs/heads/master", SeedRepo::LastCommit::ID)
|
||||
repository.write_ref("refs/heads/master", SeedRepo::LastCommit::ID)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -676,7 +676,7 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do
|
|||
|
||||
after do
|
||||
# Erase our commits so other tests get the original repo
|
||||
repository_rugged.references.update("refs/heads/master", SeedRepo::LastCommit::ID)
|
||||
repository.write_ref("refs/heads/master", SeedRepo::LastCommit::ID)
|
||||
end
|
||||
|
||||
context "where 'follow' == true" do
|
||||
|
@ -2294,7 +2294,7 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do
|
|||
|
||||
after do
|
||||
# Erase our commits so other tests get the original repo
|
||||
repository_rugged.references.update('refs/heads/master', SeedRepo::LastCommit::ID)
|
||||
repository.write_ref('refs/heads/master', SeedRepo::LastCommit::ID)
|
||||
end
|
||||
|
||||
it 'does not include the renamed file in the sparse checkout' do
|
||||
|
@ -2343,7 +2343,7 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do
|
|||
|
||||
def create_remote_branch(remote_name, branch_name, source_branch_name)
|
||||
source_branch = repository.branches.find { |branch| branch.name == source_branch_name }
|
||||
repository_rugged.references.create("refs/remotes/#{remote_name}/#{branch_name}", source_branch.dereferenced_target.sha)
|
||||
repository.write_ref("refs/remotes/#{remote_name}/#{branch_name}", source_branch.dereferenced_target.sha)
|
||||
end
|
||||
|
||||
def refs(dir)
|
||||
|
|
|
@ -441,7 +441,7 @@ RSpec.describe Gitlab::ImportExport::Project::TreeRestorer do
|
|||
end
|
||||
|
||||
it 'has a new CI build token' do
|
||||
expect(Ci::Build.where(token: 'abcd')).to be_empty
|
||||
expect(Ci::Build.find_by_token('abcd')).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -568,20 +568,10 @@ RSpec.describe Gitlab::ImportExport::Project::TreeRestorer do
|
|||
|
||||
context 'when there is an existing build with build token' do
|
||||
before do
|
||||
create(:ci_build, token: 'abcd')
|
||||
end
|
||||
|
||||
it_behaves_like 'restores project successfully',
|
||||
issues: 1,
|
||||
labels: 2,
|
||||
label_with_priorities: 'A project label',
|
||||
milestones: 1,
|
||||
first_issue_labels: 1
|
||||
end
|
||||
|
||||
context 'when there is an existing build with build token' do
|
||||
before do
|
||||
create(:ci_build, token: 'abcd')
|
||||
create(:ci_build).tap do |job|
|
||||
job.set_token('abcd')
|
||||
job.save!
|
||||
end
|
||||
end
|
||||
|
||||
it_behaves_like 'restores project successfully',
|
||||
|
|
|
@ -18,12 +18,14 @@ RSpec.describe Emails::AdminNotification do
|
|||
|
||||
let(:max_project_downloads) { 5 }
|
||||
let(:time_period) { 600 }
|
||||
let(:group) { nil }
|
||||
|
||||
subject do
|
||||
Notify.user_auto_banned_email(
|
||||
admin.id, user.id,
|
||||
max_project_downloads: max_project_downloads,
|
||||
within_seconds: time_period
|
||||
within_seconds: time_period,
|
||||
group: group
|
||||
)
|
||||
end
|
||||
|
||||
|
@ -45,6 +47,10 @@ RSpec.describe Emails::AdminNotification do
|
|||
is_expected.to have_body_text user.name
|
||||
end
|
||||
|
||||
it 'includes the scope of the ban' do
|
||||
is_expected.to have_body_text "banned from your GitLab instance"
|
||||
end
|
||||
|
||||
it 'includes the reason' do
|
||||
is_expected.to have_body_text "due to them downloading more than 5 project repositories within 10 minutes"
|
||||
end
|
||||
|
@ -60,5 +66,13 @@ RSpec.describe Emails::AdminNotification do
|
|||
it 'includes the email reason' do
|
||||
is_expected.to have_body_text "You're receiving this email because of your account on localhost"
|
||||
end
|
||||
|
||||
context 'when scoped to a group' do
|
||||
let(:group) { create(:group) }
|
||||
|
||||
it 'includes the scope of the ban' do
|
||||
is_expected.to have_body_text "banned from your group (#{group.name})"
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2598,7 +2598,7 @@ RSpec.describe Ci::Build do
|
|||
|
||||
context 'when token is empty' do
|
||||
before do
|
||||
build.update_columns(token: nil, token_encrypted: nil)
|
||||
build.update_columns(token_encrypted: nil)
|
||||
end
|
||||
|
||||
it { is_expected.to be_nil}
|
||||
|
|
|
@ -57,7 +57,7 @@ RSpec.describe Ci::Processable do
|
|||
let(:clone_accessors) { ::Ci::Build.clone_accessors.without(::Ci::Build.extra_accessors) }
|
||||
|
||||
let(:reject_accessors) do
|
||||
%i[id status user token token_encrypted coverage trace runner
|
||||
%i[id status user token_encrypted coverage trace runner
|
||||
artifacts_expire_at
|
||||
created_at updated_at started_at finished_at queued_at erased_by
|
||||
erased_at auto_canceled_by job_artifacts job_artifacts_archive
|
||||
|
|
|
@ -190,6 +190,14 @@ RSpec.describe ProtectedBranch do
|
|||
expect(described_class).not_to receive(:matching)
|
||||
expect(described_class.protected?(project, protected_branch.name)).to eq(true)
|
||||
end
|
||||
|
||||
it 'sets expires_in for a cache key' do
|
||||
cache_key = described_class.protected_ref_cache_key(project, protected_branch.name)
|
||||
|
||||
expect(Rails.cache).to receive(:fetch).with(cache_key, expires_in: 1.hour)
|
||||
|
||||
described_class.protected?(project, protected_branch.name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -2773,8 +2773,7 @@ RSpec.describe Repository do
|
|||
end
|
||||
|
||||
def create_remote_branch(remote_name, branch_name, target)
|
||||
rugged = rugged_repo(repository)
|
||||
rugged.references.create("refs/remotes/#{remote_name}/#{branch_name}", target.id)
|
||||
repository.write_ref("refs/remotes/#{remote_name}/#{branch_name}", target.id)
|
||||
end
|
||||
|
||||
shared_examples '#ancestor?' do
|
||||
|
|
|
@ -546,7 +546,7 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do
|
|||
let!(:job) { create(:ci_build, :pending, :queued, :tag, pipeline: pipeline, name: 'spinach', stage: 'test', stage_idx: 0) }
|
||||
let!(:job2) { create(:ci_build, :pending, :queued, :tag, pipeline: pipeline, name: 'rubocop', stage: 'test', stage_idx: 0) }
|
||||
let!(:test_job) do
|
||||
create(:ci_build, :pending, :queued, pipeline: pipeline, token: 'test-job-token', name: 'deploy',
|
||||
create(:ci_build, :pending, :queued, pipeline: pipeline, name: 'deploy',
|
||||
stage: 'deploy', stage_idx: 1,
|
||||
options: { script: ['bash'], dependencies: [job2.name] })
|
||||
end
|
||||
|
@ -570,7 +570,7 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do
|
|||
let!(:job) { create(:ci_build, :pending, :queued, :tag, pipeline: pipeline, name: 'spinach', stage: 'test', stage_idx: 0) }
|
||||
let!(:job2) { create(:ci_build, :pending, :queued, :tag, pipeline: pipeline, name: 'rubocop', stage: 'test', stage_idx: 0) }
|
||||
let!(:empty_dependencies_job) do
|
||||
create(:ci_build, :pending, :queued, pipeline: pipeline, token: 'test-job-token', name: 'empty_dependencies_job',
|
||||
create(:ci_build, :pending, :queued, pipeline: pipeline, name: 'empty_dependencies_job',
|
||||
stage: 'deploy', stage_idx: 1,
|
||||
options: { script: ['bash'], dependencies: [] })
|
||||
end
|
||||
|
@ -897,7 +897,7 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do
|
|||
describe 'a job with excluded artifacts' do
|
||||
context 'when excluded paths are defined' do
|
||||
let(:job) do
|
||||
create(:ci_build, :pending, :queued, pipeline: pipeline, token: 'test-job-token', name: 'test',
|
||||
create(:ci_build, :pending, :queued, pipeline: pipeline, name: 'test',
|
||||
stage: 'deploy', stage_idx: 1,
|
||||
options: { artifacts: { paths: ['abc'], exclude: ['cde'] } })
|
||||
end
|
||||
|
|
|
@ -17,6 +17,12 @@ RSpec.describe API::ConanInstancePackages do
|
|||
let_it_be(:url) { '/packages/conan/v1/conans/search' }
|
||||
|
||||
it_behaves_like 'conan search endpoint'
|
||||
|
||||
it_behaves_like 'conan FIPS mode' do
|
||||
let(:params) { { q: package.conan_recipe } }
|
||||
|
||||
subject { get api(url), params: params }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET /api/v4/packages/conan/v1/users/authenticate' do
|
||||
|
|
|
@ -17,6 +17,12 @@ RSpec.describe API::ConanProjectPackages do
|
|||
let(:url) { "/projects/#{project.id}/packages/conan/v1/conans/search" }
|
||||
|
||||
it_behaves_like 'conan search endpoint'
|
||||
|
||||
it_behaves_like 'conan FIPS mode' do
|
||||
let(:params) { { q: package.conan_recipe } }
|
||||
|
||||
subject { get api(url), params: params }
|
||||
end
|
||||
end
|
||||
|
||||
describe 'GET /api/v4/projects/:id/packages/conan/v1/users/authenticate' do
|
||||
|
|
|
@ -20,6 +20,7 @@ RSpec.describe API::Issues do
|
|||
|
||||
let_it_be(:milestone) { create(:milestone, title: '1.0.0', project: project) }
|
||||
let_it_be(:empty_milestone) { create(:milestone, title: '2.0.0', project: project) }
|
||||
let_it_be(:task) { create(:issue, :task, author: user, project: project) }
|
||||
|
||||
let_it_be(:closed_issue) do
|
||||
create :closed_issue,
|
||||
|
|
|
@ -3,8 +3,9 @@
|
|||
require 'spec_helper'
|
||||
|
||||
RSpec.describe Ci::GenerateCoverageReportsService do
|
||||
let_it_be(:project) { create(:project, :repository) }
|
||||
|
||||
let(:service) { described_class.new(project) }
|
||||
let(:project) { create(:project, :repository) }
|
||||
|
||||
describe '#execute' do
|
||||
subject { service.execute(base_pipeline, head_pipeline) }
|
||||
|
@ -52,4 +53,55 @@ RSpec.describe Ci::GenerateCoverageReportsService do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#latest?' do
|
||||
subject { service.latest?(base_pipeline, head_pipeline, data) }
|
||||
|
||||
let!(:base_pipeline) { nil }
|
||||
let!(:head_pipeline) { create(:ci_pipeline, :with_coverage_reports, project: project) }
|
||||
let!(:child_pipeline) { create(:ci_pipeline, child_of: head_pipeline) }
|
||||
let!(:key) { service.send(:key, base_pipeline, head_pipeline) }
|
||||
|
||||
let(:data) { { key: key } }
|
||||
|
||||
context 'when cache key is latest' do
|
||||
it { is_expected.to be_truthy }
|
||||
end
|
||||
|
||||
context 'when head pipeline has been updated' do
|
||||
before do
|
||||
head_pipeline.update_column(:updated_at, 1.minute.from_now)
|
||||
end
|
||||
|
||||
it { is_expected.to be_falsy }
|
||||
end
|
||||
|
||||
context 'when cache key is empty' do
|
||||
let(:data) { { key: nil } }
|
||||
|
||||
it { is_expected.to be_falsy }
|
||||
end
|
||||
|
||||
context 'when the pipeline has a child that is updated' do
|
||||
before do
|
||||
child_pipeline.update_column(:updated_at, 1.minute.from_now)
|
||||
end
|
||||
|
||||
it { is_expected.to be_falsy }
|
||||
|
||||
context 'when feature flag ci_child_pipeline_coverage_reports is disabled' do
|
||||
let!(:key) do
|
||||
# `let!` is executed before `before` block. If the feature flag
|
||||
# is stubbed in `before`, the first call to `#key` uses the
|
||||
# default feature flag value (enabled).
|
||||
# The feature flag needs to be stubbed before the first call to `#key`
|
||||
# so that the first and second key are calculated using the same method.
|
||||
stub_feature_flags(ci_child_pipeline_coverage_reports: false)
|
||||
service.send(:key, base_pipeline, head_pipeline)
|
||||
end
|
||||
|
||||
it { is_expected.to be_truthy }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -265,10 +265,9 @@ RSpec.shared_examples 'common trace features' do
|
|||
end
|
||||
|
||||
context 'build token' do
|
||||
let(:token) { 'my_secret_token' }
|
||||
let(:token) { build.token }
|
||||
|
||||
before do
|
||||
build.update!(token: token)
|
||||
trace.append(token, 0)
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
RSpec.shared_examples 'search results filtered by language' do
|
||||
let(:scope) { 'blobs' }
|
||||
let(:filters) { { language: %w[Ruby Markdown] } }
|
||||
let(:query) { 'def | popen | test' }
|
||||
|
||||
before do
|
||||
project.repository.index_commits_and_blobs
|
||||
|
||||
ensure_elasticsearch_index!
|
||||
end
|
||||
|
||||
subject(:blob_results) { results.objects('blobs') }
|
||||
|
||||
it 'filters by language', :sidekiq_inline, :aggregate_failures do
|
||||
expected_paths = %w[
|
||||
files/ruby/popen.rb
|
||||
files/markdown/ruby-style-guide.md
|
||||
files/ruby/regex.rb
|
||||
files/ruby/version_info.rb
|
||||
CONTRIBUTING.md
|
||||
]
|
||||
|
||||
paths = blob_results.map { |blob| blob.binary_path }
|
||||
expect(blob_results.size).to eq(5)
|
||||
expect(paths).to match_array(expected_paths)
|
||||
end
|
||||
|
||||
context 'when the search_blobs_language_aggregation feature flag is disabled' do
|
||||
before do
|
||||
stub_feature_flags(search_blobs_language_aggregation: false)
|
||||
end
|
||||
|
||||
it 'does not filter by language', :sidekiq_inline, :aggregate_failures do
|
||||
expected_paths = %w[
|
||||
CHANGELOG
|
||||
CONTRIBUTING.md
|
||||
bar/branch-test.txt
|
||||
custom-highlighting/test.gitlab-custom
|
||||
files/ruby/popen.rb
|
||||
files/ruby/regex.rb
|
||||
files/ruby/version_info.rb
|
||||
files/whitespace
|
||||
encoding/test.txt
|
||||
files/markdown/ruby-style-guide.md
|
||||
]
|
||||
|
||||
paths = blob_results.map { |blob| blob.binary_path }
|
||||
expect(blob_results.size).to eq(10)
|
||||
expect(paths).to match_array(expected_paths)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,6 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
RSpec.shared_examples 'conan ping endpoint' do
|
||||
it_behaves_like 'conan FIPS mode' do
|
||||
subject { get api(url) }
|
||||
end
|
||||
|
||||
it 'responds with 200 OK when no token provided' do
|
||||
get api(url)
|
||||
|
||||
|
@ -85,6 +89,8 @@ end
|
|||
RSpec.shared_examples 'conan authenticate endpoint' do
|
||||
subject { get api(url), headers: headers }
|
||||
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
|
||||
context 'when using invalid token' do
|
||||
let(:auth_token) { 'invalid_token' }
|
||||
|
||||
|
@ -159,6 +165,10 @@ RSpec.shared_examples 'conan authenticate endpoint' do
|
|||
end
|
||||
|
||||
RSpec.shared_examples 'conan check_credentials endpoint' do
|
||||
it_behaves_like 'conan FIPS mode' do
|
||||
subject { get api(url), headers: headers }
|
||||
end
|
||||
|
||||
it 'responds with a 200 OK with PAT' do
|
||||
get api(url), headers: headers
|
||||
|
||||
|
@ -390,6 +400,7 @@ end
|
|||
RSpec.shared_examples 'recipe snapshot endpoint' do
|
||||
subject { get api(url), headers: headers }
|
||||
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'rejects recipe for invalid project'
|
||||
it_behaves_like 'empty recipe for not found package'
|
||||
|
@ -415,6 +426,7 @@ end
|
|||
RSpec.shared_examples 'package snapshot endpoint' do
|
||||
subject { get api(url), headers: headers }
|
||||
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'rejects recipe for invalid project'
|
||||
it_behaves_like 'empty recipe for not found package'
|
||||
|
@ -436,6 +448,10 @@ RSpec.shared_examples 'package snapshot endpoint' do
|
|||
end
|
||||
|
||||
RSpec.shared_examples 'recipe download_urls endpoint' do
|
||||
it_behaves_like 'conan FIPS mode' do
|
||||
let(:recipe_path) { package.conan_recipe_path }
|
||||
end
|
||||
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'rejects recipe for invalid project'
|
||||
it_behaves_like 'recipe download_urls'
|
||||
|
@ -443,6 +459,10 @@ RSpec.shared_examples 'recipe download_urls endpoint' do
|
|||
end
|
||||
|
||||
RSpec.shared_examples 'package download_urls endpoint' do
|
||||
it_behaves_like 'conan FIPS mode' do
|
||||
let(:recipe_path) { package.conan_recipe_path }
|
||||
end
|
||||
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'rejects recipe for invalid project'
|
||||
it_behaves_like 'package download_urls'
|
||||
|
@ -457,6 +477,7 @@ RSpec.shared_examples 'recipe upload_urls endpoint' do
|
|||
'conanmanifest.txt': 123 }
|
||||
end
|
||||
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'rejects invalid upload_url params'
|
||||
it_behaves_like 'handling empty values for username and channel'
|
||||
|
@ -519,6 +540,7 @@ RSpec.shared_examples 'package upload_urls endpoint' do
|
|||
'conan_package.tgz': 523 }
|
||||
end
|
||||
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'rejects invalid upload_url params'
|
||||
it_behaves_like 'handling empty values for username and channel'
|
||||
|
@ -556,6 +578,7 @@ end
|
|||
RSpec.shared_examples 'delete package endpoint' do
|
||||
let(:recipe_path) { package.conan_recipe_path }
|
||||
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'handling empty values for username and channel'
|
||||
|
||||
|
@ -665,6 +688,7 @@ RSpec.shared_examples 'not found request' do
|
|||
end
|
||||
|
||||
RSpec.shared_examples 'recipe file download endpoint' do
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'a public project with packages'
|
||||
it_behaves_like 'an internal project with packages'
|
||||
it_behaves_like 'a private project with packages'
|
||||
|
@ -672,6 +696,7 @@ RSpec.shared_examples 'recipe file download endpoint' do
|
|||
end
|
||||
|
||||
RSpec.shared_examples 'package file download endpoint' do
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'a public project with packages'
|
||||
it_behaves_like 'an internal project with packages'
|
||||
it_behaves_like 'a private project with packages'
|
||||
|
@ -697,6 +722,7 @@ RSpec.shared_examples 'project not found by project id' do
|
|||
end
|
||||
|
||||
RSpec.shared_examples 'workhorse authorize endpoint' do
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'rejects invalid file_name', 'conanfile.py.git%2fgit-upload-pack'
|
||||
it_behaves_like 'workhorse authorization'
|
||||
|
@ -718,6 +744,7 @@ RSpec.shared_examples 'workhorse recipe file upload endpoint' do
|
|||
)
|
||||
end
|
||||
|
||||
it_behaves_like 'conan FIPS mode'
|
||||
it_behaves_like 'rejects invalid recipe'
|
||||
it_behaves_like 'rejects invalid file_name', 'conanfile.py.git%2fgit-upload-pack'
|
||||
it_behaves_like 'uploads a package file'
|
||||
|
@ -979,3 +1006,9 @@ RSpec.shared_examples 'workhorse authorization' do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
RSpec.shared_examples 'conan FIPS mode' do
|
||||
context 'when FIPS mode is enabled', :fips_mode do
|
||||
it_behaves_like 'returning response status', :not_found
|
||||
end
|
||||
end
|
||||
|
|
|
@ -259,7 +259,7 @@ RSpec.shared_examples 'can collect git garbage' do |update_statistics: true|
|
|||
tree: old_commit.tree,
|
||||
parents: [old_commit]
|
||||
)
|
||||
rugged.references.create("refs/heads/#{SecureRandom.hex(6)}", new_commit_sha)
|
||||
repository.write_ref("refs/heads/#{SecureRandom.hex(6)}", new_commit_sha)
|
||||
end
|
||||
|
||||
def packs(resource)
|
||||
|
|
|
@ -48,6 +48,28 @@ RSpec.describe ObjectStorage do
|
|||
expect(uploader.store_dir).to start_with("uploads/-/system/user/")
|
||||
end
|
||||
end
|
||||
|
||||
describe '#store_path' do
|
||||
subject { uploader.store_path('filename') }
|
||||
|
||||
it 'uses store_dir' do
|
||||
expect(subject).to eq("uploads/-/system/user/#{object.id}/filename")
|
||||
end
|
||||
|
||||
context 'when a bucket prefix is configured' do
|
||||
before do
|
||||
allow(uploader_class).to receive(:object_store_options) do
|
||||
double(
|
||||
bucket_prefix: 'my/prefix'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
it 'uses store_dir and ignores prefix' do
|
||||
expect(subject).to eq("uploads/-/system/user/#{object.id}/filename")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'object_store is Store::REMOTE' do
|
||||
|
@ -60,6 +82,28 @@ RSpec.describe ObjectStorage do
|
|||
expect(uploader.store_dir).to start_with("user/")
|
||||
end
|
||||
end
|
||||
|
||||
describe '#store_path' do
|
||||
subject { uploader.store_path('filename') }
|
||||
|
||||
it 'uses store_dir' do
|
||||
expect(subject).to eq("user/#{object.id}/filename")
|
||||
end
|
||||
|
||||
context 'when a bucket prefix is configured' do
|
||||
before do
|
||||
allow(uploader_class).to receive(:object_store_options) do
|
||||
double(
|
||||
bucket_prefix: 'my/prefix'
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
it 'uses the prefix and store_dir' do
|
||||
expect(subject).to eq("my/prefix/user/#{object.id}/filename")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -21,29 +21,12 @@ RSpec.describe GitlabServicePingWorker, :clean_gitlab_redis_shared_state do
|
|||
subject.perform
|
||||
end
|
||||
|
||||
context 'with prerecord_service_ping_data feature enabled' do
|
||||
it 'delegates to ServicePing::SubmitService' do
|
||||
stub_feature_flags(prerecord_service_ping_data: true)
|
||||
|
||||
expect_next_instance_of(ServicePing::SubmitService, payload: payload) do |service|
|
||||
expect(service).to receive(:execute)
|
||||
end
|
||||
|
||||
subject.perform
|
||||
it 'delegates to ServicePing::SubmitService' do
|
||||
expect_next_instance_of(ServicePing::SubmitService, payload: payload) do |service|
|
||||
expect(service).to receive(:execute)
|
||||
end
|
||||
end
|
||||
|
||||
context 'with prerecord_service_ping_data feature disabled' do
|
||||
it 'does not prerecord ServicePing, and calls SubmitService', :aggregate_failures do
|
||||
stub_feature_flags(prerecord_service_ping_data: false)
|
||||
|
||||
expect(ServicePing::BuildPayload).not_to receive(:new)
|
||||
expect(ServicePing::BuildPayload).not_to receive(:new)
|
||||
expect_next_instance_of(ServicePing::SubmitService, payload: nil) do |service|
|
||||
expect(service).to receive(:execute)
|
||||
end
|
||||
expect { subject.perform }.not_to change { RawUsageData.count }
|
||||
end
|
||||
subject.perform
|
||||
end
|
||||
|
||||
context 'payload computation' do
|
||||
|
|
526
yarn.lock
526
yarn.lock
|
@ -1016,18 +1016,18 @@
|
|||
resolved "https://registry.yarnpkg.com/@gitlab/at.js/-/at.js-1.5.7.tgz#1ee6f838cc4410a1d797770934df91d90df8179e"
|
||||
integrity sha512-c6ySRK/Ma7lxwpIVbSAF3P+xiTLrNTGTLRx4/pHK111AdFxwgUwrYF6aVZFXvmG65jHOJHoa0eQQ21RW6rm0Rg==
|
||||
|
||||
"@gitlab/eslint-plugin@12.1.0":
|
||||
version "12.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/eslint-plugin/-/eslint-plugin-12.1.0.tgz#e62f2591164895f8cfccb3dd9ac77f3586b6e3d8"
|
||||
integrity sha512-rq+aaF45s3FSzFFoK2BZ7X/uzOIhAWA0rfG4q5SnoecbMuEpPEX2OGZFRh8VOePZLmiylfwyxH0Cv12evzyUtg==
|
||||
"@gitlab/eslint-plugin@12.3.0":
|
||||
version "12.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/eslint-plugin/-/eslint-plugin-12.3.0.tgz#951453556fb3b4f43e3028fead65e083a8b90b0e"
|
||||
integrity sha512-DV84zLLv/wDUjzoVJfpvvAAiaemKUqT1IZf16fEtlw/A4/x48vWJTMHQF7ciQtjz+gVKAnlht67IstSY8W19ZQ==
|
||||
dependencies:
|
||||
"@babel/core" "^7.17.0"
|
||||
"@babel/eslint-parser" "^7.17.0"
|
||||
"@babel/eslint-plugin" "^7.17.7"
|
||||
eslint-config-airbnb-base "^14.2.1"
|
||||
eslint-config-airbnb-base "^15.0.0"
|
||||
eslint-config-prettier "^6.10.0"
|
||||
eslint-plugin-babel "^5.3.0"
|
||||
eslint-plugin-import "^2.22.1"
|
||||
eslint-plugin-import "^2.26.0"
|
||||
eslint-plugin-jest "^23.8.2"
|
||||
eslint-plugin-promise "^4.2.1"
|
||||
eslint-plugin-unicorn "^40.1.0"
|
||||
|
@ -1048,10 +1048,10 @@
|
|||
stylelint-declaration-strict-value "1.8.0"
|
||||
stylelint-scss "4.2.0"
|
||||
|
||||
"@gitlab/svgs@2.24.0":
|
||||
version "2.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-2.24.0.tgz#9d36c63cebe03012ddd5564d57765e53c954b8f0"
|
||||
integrity sha512-a1ACWu4cVSHyhLTAPZ34K+9m+4lRx72UpZaX9XGGuabUEWNA4NXFtJ/c7C+VFAZIaEL5xfglOB8ft6lCvniVyA==
|
||||
"@gitlab/svgs@2.25.0":
|
||||
version "2.25.0"
|
||||
resolved "https://registry.yarnpkg.com/@gitlab/svgs/-/svgs-2.25.0.tgz#0fb831959c9f312ebb665d23ba8944f26faea164"
|
||||
integrity sha512-R2oS/VghjP1T4WSTEkbadrzencmBesortvHT8VZUgUB1uQTLg52b843rTw/atVWpW2ecFRrEbjM8/lDwUwx0Aw==
|
||||
|
||||
"@gitlab/ui@42.12.0":
|
||||
version "42.12.0"
|
||||
|
@ -2771,16 +2771,16 @@ array-flatten@^2.1.2:
|
|||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
|
||||
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
|
||||
|
||||
array-includes@^3.1.1:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.2.tgz#a8db03e0b88c8c6aeddc49cb132f9bcab4ebf9c8"
|
||||
integrity sha512-w2GspexNQpx+PutG3QpT437/BenZBj0M/MZGn5mzv/MofYqo0xmRHzn4lFsoDlWJ+THYsGJmFlW68WlDFx7VRw==
|
||||
array-includes@^3.1.4:
|
||||
version "3.1.5"
|
||||
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.5.tgz#2c320010db8d31031fd2a5f6b3bbd4b1aad31bdb"
|
||||
integrity sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.18.0-next.1"
|
||||
get-intrinsic "^1.0.1"
|
||||
is-string "^1.0.5"
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.4"
|
||||
es-abstract "^1.19.5"
|
||||
get-intrinsic "^1.1.1"
|
||||
is-string "^1.0.7"
|
||||
|
||||
array-union@^2.1.0:
|
||||
version "2.1.0"
|
||||
|
@ -2792,14 +2792,15 @@ array-unique@^0.3.2:
|
|||
resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428"
|
||||
integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=
|
||||
|
||||
array.prototype.flat@^1.2.3:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123"
|
||||
integrity sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==
|
||||
array.prototype.flat@^1.2.5:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz#0b0c1567bf57b38b56b4c97b8aa72ab45e4adc7b"
|
||||
integrity sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.18.0-next.1"
|
||||
es-abstract "^1.19.2"
|
||||
es-shim-unscopables "^1.0.0"
|
||||
|
||||
arrify@^1.0.1:
|
||||
version "1.0.1"
|
||||
|
@ -3889,11 +3890,6 @@ constants-browserify@^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.4:
|
||||
version "0.5.4"
|
||||
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
|
||||
|
@ -4884,12 +4880,13 @@ define-lazy-prop@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
|
||||
integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
|
||||
|
||||
define-properties@^1.1.3:
|
||||
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==
|
||||
define-properties@^1.1.3, define-properties@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1"
|
||||
integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==
|
||||
dependencies:
|
||||
object-keys "^1.0.12"
|
||||
has-property-descriptors "^1.0.0"
|
||||
object-keys "^1.1.1"
|
||||
|
||||
define-property@^0.2.5:
|
||||
version "0.2.5"
|
||||
|
@ -5026,13 +5023,12 @@ docdash@^1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/docdash/-/docdash-1.0.2.tgz#0449a8f6bb247f563020b78a5485dea95ae2e094"
|
||||
integrity sha512-IEM57bWPLtVXpUeCKbiGvHsHtW9O9ZiiBPfeQDAZ7JdQiAF3aNWQoJ3e/+uJ63lHO009yn0tbJjtKpXJ2AURCQ==
|
||||
|
||||
doctrine@1.5.0:
|
||||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
|
||||
integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
|
||||
doctrine@^2.1.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"
|
||||
isarray "^1.0.0"
|
||||
|
||||
doctrine@^3.0.0:
|
||||
version "3.0.0"
|
||||
|
@ -5283,32 +5279,48 @@ errno@^0.1.3, errno@~0.1.7:
|
|||
dependencies:
|
||||
prr "~1.0.1"
|
||||
|
||||
error-ex@^1.2.0, error-ex@^1.3.1:
|
||||
error-ex@^1.3.1:
|
||||
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.18.0-next.1:
|
||||
version "1.18.0-next.2"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.2.tgz#088101a55f0541f595e7e057199e27ddc8f3a5c2"
|
||||
integrity sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==
|
||||
es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.2, es-abstract@^1.19.5:
|
||||
version "1.20.1"
|
||||
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.1.tgz#027292cd6ef44bd12b1913b828116f54787d1814"
|
||||
integrity sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
es-to-primitive "^1.2.1"
|
||||
function-bind "^1.1.1"
|
||||
get-intrinsic "^1.0.2"
|
||||
function.prototype.name "^1.1.5"
|
||||
get-intrinsic "^1.1.1"
|
||||
get-symbol-description "^1.0.0"
|
||||
has "^1.0.3"
|
||||
has-symbols "^1.0.1"
|
||||
is-callable "^1.2.2"
|
||||
is-negative-zero "^2.0.1"
|
||||
is-regex "^1.1.1"
|
||||
object-inspect "^1.9.0"
|
||||
has-property-descriptors "^1.0.0"
|
||||
has-symbols "^1.0.3"
|
||||
internal-slot "^1.0.3"
|
||||
is-callable "^1.2.4"
|
||||
is-negative-zero "^2.0.2"
|
||||
is-regex "^1.1.4"
|
||||
is-shared-array-buffer "^1.0.2"
|
||||
is-string "^1.0.7"
|
||||
is-weakref "^1.0.2"
|
||||
object-inspect "^1.12.0"
|
||||
object-keys "^1.1.1"
|
||||
object.assign "^4.1.2"
|
||||
string.prototype.trimend "^1.0.3"
|
||||
string.prototype.trimstart "^1.0.3"
|
||||
regexp.prototype.flags "^1.4.3"
|
||||
string.prototype.trimend "^1.0.5"
|
||||
string.prototype.trimstart "^1.0.5"
|
||||
unbox-primitive "^1.0.2"
|
||||
|
||||
es-shim-unscopables@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
|
||||
integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
es-to-primitive@^1.2.1:
|
||||
version "1.2.1"
|
||||
|
@ -5383,14 +5395,15 @@ escodegen@^1.14.1:
|
|||
optionalDependencies:
|
||||
source-map "~0.6.1"
|
||||
|
||||
eslint-config-airbnb-base@^14.2.1:
|
||||
version "14.2.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e"
|
||||
integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==
|
||||
eslint-config-airbnb-base@^15.0.0:
|
||||
version "15.0.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236"
|
||||
integrity sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==
|
||||
dependencies:
|
||||
confusing-browser-globals "^1.0.10"
|
||||
object.assign "^4.1.2"
|
||||
object.entries "^1.1.2"
|
||||
object.entries "^1.1.5"
|
||||
semver "^6.3.0"
|
||||
|
||||
eslint-config-prettier@^6.10.0:
|
||||
version "6.10.0"
|
||||
|
@ -5407,13 +5420,13 @@ eslint-import-resolver-jest@3.0.2:
|
|||
find-root "^1.1.0"
|
||||
resolve "^1.12.0"
|
||||
|
||||
eslint-import-resolver-node@^0.3.4:
|
||||
version "0.3.4"
|
||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.4.tgz#85ffa81942c25012d8231096ddf679c03042c717"
|
||||
integrity sha512-ogtf+5AB/O+nM6DIeBUNr2fuT7ot9Qg/1harBfBtaP13ekEWFQEEMP94BCB7zaNW3gyY+8SHYF00rnqYwXKWOA==
|
||||
eslint-import-resolver-node@^0.3.6:
|
||||
version "0.3.6"
|
||||
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
|
||||
integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
|
||||
dependencies:
|
||||
debug "^2.6.9"
|
||||
resolve "^1.13.1"
|
||||
debug "^3.2.7"
|
||||
resolve "^1.20.0"
|
||||
|
||||
eslint-import-resolver-webpack@0.13.2:
|
||||
version "0.13.2"
|
||||
|
@ -5432,13 +5445,13 @@ eslint-import-resolver-webpack@0.13.2:
|
|||
resolve "^1.20.0"
|
||||
semver "^5.7.1"
|
||||
|
||||
eslint-module-utils@^2.6.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6"
|
||||
integrity sha512-6j9xxegbqe8/kZY8cYpcp0xhbK0EgJlg3g9mib3/miLaExuuwc3n5UEfSnU6hWMbT0FAYVvDbL9RrRgpUeQIvA==
|
||||
eslint-module-utils@^2.7.3:
|
||||
version "2.7.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
|
||||
integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
|
||||
dependencies:
|
||||
debug "^2.6.9"
|
||||
pkg-dir "^2.0.0"
|
||||
debug "^3.2.7"
|
||||
find-up "^2.1.0"
|
||||
|
||||
eslint-plugin-babel@^5.3.0:
|
||||
version "5.3.0"
|
||||
|
@ -5447,24 +5460,24 @@ eslint-plugin-babel@^5.3.0:
|
|||
dependencies:
|
||||
eslint-rule-composer "^0.3.0"
|
||||
|
||||
eslint-plugin-import@^2.22.1:
|
||||
version "2.22.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.22.1.tgz#0896c7e6a0cf44109a2d97b95903c2bb689d7702"
|
||||
integrity sha512-8K7JjINHOpH64ozkAhpT3sd+FswIZTfMZTjdx052pnWrgRCVfp8op9tbjpAk3DdUeI/Ba4C8OjdC0r90erHEOw==
|
||||
eslint-plugin-import@^2.26.0:
|
||||
version "2.26.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz#f812dc47be4f2b72b478a021605a59fc6fe8b88b"
|
||||
integrity sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==
|
||||
dependencies:
|
||||
array-includes "^3.1.1"
|
||||
array.prototype.flat "^1.2.3"
|
||||
contains-path "^0.1.0"
|
||||
array-includes "^3.1.4"
|
||||
array.prototype.flat "^1.2.5"
|
||||
debug "^2.6.9"
|
||||
doctrine "1.5.0"
|
||||
eslint-import-resolver-node "^0.3.4"
|
||||
eslint-module-utils "^2.6.0"
|
||||
doctrine "^2.1.0"
|
||||
eslint-import-resolver-node "^0.3.6"
|
||||
eslint-module-utils "^2.7.3"
|
||||
has "^1.0.3"
|
||||
minimatch "^3.0.4"
|
||||
object.values "^1.1.1"
|
||||
read-pkg-up "^2.0.0"
|
||||
resolve "^1.17.0"
|
||||
tsconfig-paths "^3.9.0"
|
||||
is-core-module "^2.8.1"
|
||||
is-glob "^4.0.3"
|
||||
minimatch "^3.1.2"
|
||||
object.values "^1.1.5"
|
||||
resolve "^1.22.0"
|
||||
tsconfig-paths "^3.14.1"
|
||||
|
||||
eslint-plugin-jest@^23.8.2:
|
||||
version "23.8.2"
|
||||
|
@ -6040,7 +6053,7 @@ find-root@^1.1.0:
|
|||
resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
|
||||
integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
|
||||
|
||||
find-up@^2.0.0, find-up@^2.1.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=
|
||||
|
@ -6203,11 +6216,26 @@ function-bind@^1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
|
||||
|
||||
function.prototype.name@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
|
||||
integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.19.0"
|
||||
functions-have-names "^1.2.2"
|
||||
|
||||
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=
|
||||
|
||||
functions-have-names@^1.2.2:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
|
||||
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
|
||||
|
||||
fuzzaldrin-plus@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/fuzzaldrin-plus/-/fuzzaldrin-plus-0.6.0.tgz#832f6489fbe876769459599c914a670ec22947ee"
|
||||
|
@ -6223,14 +6251,14 @@ get-caller-file@^2.0.1:
|
|||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
|
||||
integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
|
||||
|
||||
get-intrinsic@^1.0.1, get-intrinsic@^1.0.2:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
|
||||
integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
|
||||
get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598"
|
||||
integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==
|
||||
dependencies:
|
||||
function-bind "^1.1.1"
|
||||
has "^1.0.3"
|
||||
has-symbols "^1.0.1"
|
||||
has-symbols "^1.0.3"
|
||||
|
||||
get-package-type@^0.1.0:
|
||||
version "0.1.0"
|
||||
|
@ -6271,6 +6299,14 @@ get-stream@^6.0.0:
|
|||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
|
||||
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
|
||||
|
||||
get-symbol-description@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
|
||||
integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
get-intrinsic "^1.1.1"
|
||||
|
||||
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"
|
||||
|
@ -6504,6 +6540,11 @@ hard-rejection@^2.1.0:
|
|||
resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
|
||||
integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
|
||||
|
||||
has-bigints@^1.0.1, has-bigints@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
|
||||
integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
|
||||
|
||||
has-flag@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||
|
@ -6514,10 +6555,17 @@ has-flag@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||
|
||||
has-symbols@^1.0.0, has-symbols@^1.0.1, has-symbols@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
|
||||
integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
|
||||
has-property-descriptors@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
|
||||
integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
|
||||
dependencies:
|
||||
get-intrinsic "^1.1.1"
|
||||
|
||||
has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
|
||||
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
|
||||
|
||||
has-tostringtag@^1.0.0:
|
||||
version "1.0.0"
|
||||
|
@ -7019,6 +7067,15 @@ inline-style-parser@0.1.1:
|
|||
resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1"
|
||||
integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==
|
||||
|
||||
internal-slot@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c"
|
||||
integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==
|
||||
dependencies:
|
||||
get-intrinsic "^1.1.0"
|
||||
has "^1.0.3"
|
||||
side-channel "^1.0.4"
|
||||
|
||||
"internmap@1 - 2":
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
|
||||
|
@ -7068,6 +7125,13 @@ is-arrayish@^0.2.1:
|
|||
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
|
||||
integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=
|
||||
|
||||
is-bigint@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
|
||||
integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
|
||||
dependencies:
|
||||
has-bigints "^1.0.1"
|
||||
|
||||
is-binary-path@~2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
|
||||
|
@ -7075,6 +7139,14 @@ is-binary-path@~2.1.0:
|
|||
dependencies:
|
||||
binary-extensions "^2.0.0"
|
||||
|
||||
is-boolean-object@^1.1.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
|
||||
integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-buffer@^1.1.5, is-buffer@~1.1.1:
|
||||
version "1.1.6"
|
||||
resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be"
|
||||
|
@ -7092,10 +7164,10 @@ is-builtin-module@^3.1.0:
|
|||
dependencies:
|
||||
builtin-modules "^3.0.0"
|
||||
|
||||
is-callable@^1.1.4, is-callable@^1.2.2:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e"
|
||||
integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==
|
||||
is-callable@^1.1.4, is-callable@^1.2.4:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945"
|
||||
integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==
|
||||
|
||||
is-ci@^2.0.0:
|
||||
version "2.0.0"
|
||||
|
@ -7104,10 +7176,10 @@ is-ci@^2.0.0:
|
|||
dependencies:
|
||||
ci-info "^2.0.0"
|
||||
|
||||
is-core-module@^2.5.0, is-core-module@^2.7.0, is-core-module@^2.8.1:
|
||||
version "2.8.1"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
|
||||
integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
|
||||
is-core-module@^2.5.0, is-core-module@^2.7.0, is-core-module@^2.8.1, is-core-module@^2.9.0:
|
||||
version "2.9.0"
|
||||
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69"
|
||||
integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==
|
||||
dependencies:
|
||||
has "^1.0.3"
|
||||
|
||||
|
@ -7185,7 +7257,7 @@ is-generator-fn@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
|
||||
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
|
||||
|
||||
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
|
||||
is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
|
||||
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
|
||||
|
@ -7200,16 +7272,23 @@ is-installed-globally@^0.3.1:
|
|||
global-dirs "^2.0.1"
|
||||
is-path-inside "^3.0.1"
|
||||
|
||||
is-negative-zero@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24"
|
||||
integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==
|
||||
is-negative-zero@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
|
||||
integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
|
||||
|
||||
is-npm@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d"
|
||||
integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==
|
||||
|
||||
is-number-object@^1.0.4:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
|
||||
integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
|
||||
dependencies:
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-number@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
|
||||
|
@ -7264,7 +7343,7 @@ is-potential-custom-element-name@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.0.tgz#0c52e54bcca391bb2c494b21e8626d7336c6e397"
|
||||
integrity sha1-DFLlS8yjkbssSUsh6GJtczbG45c=
|
||||
|
||||
is-regex@^1.1.1, is-regex@^1.1.4:
|
||||
is-regex@^1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
|
||||
integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
|
||||
|
@ -7277,6 +7356,13 @@ is-regexp@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d"
|
||||
integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA==
|
||||
|
||||
is-shared-array-buffer@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
|
||||
integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
|
||||
is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
|
@ -7287,23 +7373,32 @@ is-stream@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
|
||||
integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
|
||||
|
||||
is-string@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
|
||||
integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
|
||||
|
||||
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==
|
||||
is-string@^1.0.5, is-string@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
|
||||
integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
|
||||
dependencies:
|
||||
has-symbols "^1.0.0"
|
||||
has-tostringtag "^1.0.0"
|
||||
|
||||
is-symbol@^1.0.2, is-symbol@^1.0.3:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
|
||||
integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
|
||||
dependencies:
|
||||
has-symbols "^1.0.2"
|
||||
|
||||
is-typedarray@^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-weakref@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
|
||||
integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
|
||||
is-whitespace@^0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f"
|
||||
|
@ -8184,16 +8279,6 @@ linkifyjs@^3.0.5:
|
|||
resolved "https://registry.yarnpkg.com/linkifyjs/-/linkifyjs-3.0.5.tgz#99e51a3a0c0e232fcb63ebb89eea3ff923378f34"
|
||||
integrity sha512-1Y9XQH65eQKA9p2xtk+zxvnTeQBG7rdAXSkUG97DmuI/Xhji9uaUzaWxRj6rf9YC0v8KKHkxav7tnLX82Sz5Fg==
|
||||
|
||||
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"
|
||||
pify "^2.0.0"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
loader-runner@^2.4.0:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357"
|
||||
|
@ -9177,7 +9262,14 @@ minimatch@4.2.1:
|
|||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@^3.0.4, minimatch@~3.0.4:
|
||||
minimatch@^3.0.4, minimatch@^3.1.2:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
|
||||
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
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==
|
||||
|
@ -9193,10 +9285,10 @@ minimist-options@4.1.0:
|
|||
is-plain-obj "^1.1.0"
|
||||
kind-of "^6.0.3"
|
||||
|
||||
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||
|
||||
minipass-collect@^1.0.2:
|
||||
version "1.0.2"
|
||||
|
@ -9527,7 +9619,7 @@ nopt@~1.0.10:
|
|||
dependencies:
|
||||
abbrev "1"
|
||||
|
||||
normalize-package-data@^2.3.2, normalize-package-data@^2.5.0:
|
||||
normalize-package-data@^2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
|
||||
integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
|
||||
|
@ -9609,12 +9701,12 @@ object-copy@^0.1.0:
|
|||
define-property "^0.2.5"
|
||||
kind-of "^3.0.3"
|
||||
|
||||
object-inspect@^1.9.0:
|
||||
version "1.9.0"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a"
|
||||
integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==
|
||||
object-inspect@^1.12.0, object-inspect@^1.9.0:
|
||||
version "1.12.2"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea"
|
||||
integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==
|
||||
|
||||
object-keys@^1.0.12, object-keys@^1.1.1:
|
||||
object-keys@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
|
||||
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
|
||||
|
@ -9636,15 +9728,14 @@ object.assign@^4.1.0, object.assign@^4.1.2:
|
|||
has-symbols "^1.0.1"
|
||||
object-keys "^1.1.1"
|
||||
|
||||
object.entries@^1.1.2:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.3.tgz#c601c7f168b62374541a07ddbd3e2d5e4f7711a6"
|
||||
integrity sha512-ym7h7OZebNS96hn5IJeyUmaWhaSM4SVtAPPfNLQEI2MYWCO2egsITb9nab2+i/Pwibx+R0mtn+ltKJXRSeTMGg==
|
||||
object.entries@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
|
||||
integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.18.0-next.1"
|
||||
has "^1.0.3"
|
||||
es-abstract "^1.19.1"
|
||||
|
||||
object.pick@^1.3.0:
|
||||
version "1.3.0"
|
||||
|
@ -9653,15 +9744,14 @@ object.pick@^1.3.0:
|
|||
dependencies:
|
||||
isobject "^3.0.1"
|
||||
|
||||
object.values@^1.1.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.2.tgz#7a2015e06fcb0f546bd652486ce8583a4731c731"
|
||||
integrity sha512-MYC0jvJopr8EK6dPBiO8Nb9mvjdypOachO5REGk6MXzujbBrAisKo3HmdEI6kZDL6fC31Mwee/5YbtMebixeag==
|
||||
object.values@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
|
||||
integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
es-abstract "^1.18.0-next.1"
|
||||
has "^1.0.3"
|
||||
es-abstract "^1.19.1"
|
||||
|
||||
obuf@^1.0.0, obuf@^1.1.2:
|
||||
version "1.1.2"
|
||||
|
@ -9912,13 +10002,6 @@ parse-color@^1.0.0:
|
|||
dependencies:
|
||||
color-convert "~0.5.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-json@^5.0.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
|
||||
|
@ -10015,13 +10098,6 @@ path-to-regexp@0.1.7:
|
|||
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
|
||||
integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
|
||||
|
||||
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"
|
||||
|
||||
path-type@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
|
||||
|
@ -10066,11 +10142,6 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
|||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
pify@^2.0.0:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
|
||||
integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw=
|
||||
|
||||
pify@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
|
||||
|
@ -10088,13 +10159,6 @@ pirates@^4.0.1:
|
|||
dependencies:
|
||||
node-modules-regexp "^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"
|
||||
|
||||
pkg-dir@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3"
|
||||
|
@ -10659,14 +10723,6 @@ react-is@^17.0.1:
|
|||
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
|
||||
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
|
||||
|
||||
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"
|
||||
|
||||
read-pkg-up@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
|
||||
|
@ -10676,15 +10732,6 @@ read-pkg-up@^7.0.1:
|
|||
read-pkg "^5.2.0"
|
||||
type-fest "^0.8.1"
|
||||
|
||||
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"
|
||||
path-type "^2.0.0"
|
||||
|
||||
read-pkg@^5.2.0:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
|
||||
|
@ -10788,6 +10835,15 @@ regexp-tree@^0.1.24, regexp-tree@~0.1.1:
|
|||
resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.24.tgz#3d6fa238450a4d66e5bc9c4c14bb720e2196829d"
|
||||
integrity sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==
|
||||
|
||||
regexp.prototype.flags@^1.4.3:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac"
|
||||
integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.3"
|
||||
functions-have-names "^1.2.2"
|
||||
|
||||
regexpp@^3.1.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
|
||||
|
@ -10989,12 +11045,12 @@ resolve-url@^0.2.1:
|
|||
resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a"
|
||||
integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=
|
||||
|
||||
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.9.0:
|
||||
version "1.22.0"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198"
|
||||
integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==
|
||||
resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.17.0, resolve@^1.20.0, resolve@^1.22.0, resolve@^1.9.0:
|
||||
version "1.22.1"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
|
||||
integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
|
||||
dependencies:
|
||||
is-core-module "^2.8.1"
|
||||
is-core-module "^2.9.0"
|
||||
path-parse "^1.0.7"
|
||||
supports-preserve-symlinks-flag "^1.0.0"
|
||||
|
||||
|
@ -11406,6 +11462,15 @@ shortcss@^0.1.3:
|
|||
dependencies:
|
||||
css-shorthand-properties "^1.0.0"
|
||||
|
||||
side-channel@^1.0.4:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
|
||||
integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
get-intrinsic "^1.0.2"
|
||||
object-inspect "^1.9.0"
|
||||
|
||||
sigmund@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
|
||||
|
@ -11739,21 +11804,23 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2
|
|||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string.prototype.trimend@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz#a22bd53cca5c7cf44d7c9d5c732118873d6cd18b"
|
||||
integrity sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==
|
||||
string.prototype.trimend@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0"
|
||||
integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
define-properties "^1.1.3"
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.4"
|
||||
es-abstract "^1.19.5"
|
||||
|
||||
string.prototype.trimstart@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz#9b4cb590e123bb36564401d59824298de50fd5aa"
|
||||
integrity sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==
|
||||
string.prototype.trimstart@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef"
|
||||
integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==
|
||||
dependencies:
|
||||
call-bind "^1.0.0"
|
||||
define-properties "^1.1.3"
|
||||
call-bind "^1.0.2"
|
||||
define-properties "^1.1.4"
|
||||
es-abstract "^1.19.5"
|
||||
|
||||
string_decoder@^1.0.0, string_decoder@^1.1.1, string_decoder@~1.1.1:
|
||||
version "1.1.1"
|
||||
|
@ -12274,14 +12341,14 @@ ts-node@^9:
|
|||
source-map-support "^0.5.17"
|
||||
yn "3.1.1"
|
||||
|
||||
tsconfig-paths@^3.9.0:
|
||||
version "3.9.0"
|
||||
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b"
|
||||
integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==
|
||||
tsconfig-paths@^3.14.1:
|
||||
version "3.14.1"
|
||||
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
|
||||
integrity sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==
|
||||
dependencies:
|
||||
"@types/json5" "^0.0.29"
|
||||
json5 "^1.0.1"
|
||||
minimist "^1.2.0"
|
||||
minimist "^1.2.6"
|
||||
strip-bom "^3.0.0"
|
||||
|
||||
tslib@2.3.0, tslib@~2.3.0:
|
||||
|
@ -12397,6 +12464,16 @@ uc.micro@^1.0.1, uc.micro@^1.0.5:
|
|||
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
|
||||
integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
|
||||
|
||||
unbox-primitive@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
|
||||
integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
|
||||
dependencies:
|
||||
call-bind "^1.0.2"
|
||||
has-bigints "^1.0.2"
|
||||
has-symbols "^1.0.3"
|
||||
which-boxed-primitive "^1.0.2"
|
||||
|
||||
undefsafe@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76"
|
||||
|
@ -13231,6 +13308,17 @@ whatwg-url@^8.0.0:
|
|||
tr46 "^2.0.2"
|
||||
webidl-conversions "^5.0.0"
|
||||
|
||||
which-boxed-primitive@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
|
||||
integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
|
||||
dependencies:
|
||||
is-bigint "^1.0.1"
|
||||
is-boolean-object "^1.1.0"
|
||||
is-number-object "^1.0.4"
|
||||
is-string "^1.0.5"
|
||||
is-symbol "^1.0.3"
|
||||
|
||||
which-module@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||
|
|
Loading…
Reference in New Issue