Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
066e210e07
commit
fbb9dae03c
|
@ -1 +1 @@
|
|||
1.57.0
|
||||
1.56.1
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
mutation createHttpIntegration($projectPath: ID!, $name: String!, $active: Boolean!) {
|
||||
httpIntegrationCreate(input: { projectPath: $projectPath, name: $name, active: $active }) {
|
||||
errors
|
||||
# We have ID in a deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
integration {
|
||||
...HttpIntegrationItem
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
mutation destroyHttpIntegration($id: ID!) {
|
||||
httpIntegrationDestroy(input: { id: $id }) {
|
||||
errors
|
||||
# We have ID in a deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
integration {
|
||||
...HttpIntegrationItem
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
mutation resetHttpIntegrationToken($id: ID!) {
|
||||
httpIntegrationResetToken(input: { id: $id }) {
|
||||
errors
|
||||
# We have ID in a deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
integration {
|
||||
...HttpIntegrationItem
|
||||
}
|
||||
|
|
|
@ -3,6 +3,8 @@
|
|||
mutation updateHttpIntegration($id: ID!, $name: String!, $active: Boolean!) {
|
||||
httpIntegrationUpdate(input: { id: $id, name: $name, active: $active }) {
|
||||
errors
|
||||
# We have ID in a deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
integration {
|
||||
...HttpIntegrationItem
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
mutation createBoardList($boardId: BoardID!, $backlog: Boolean, $labelId: LabelID) {
|
||||
boardListCreate(input: { boardId: $boardId, backlog: $backlog, labelId: $labelId }) {
|
||||
# We have ID in a deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
list {
|
||||
...BoardListFragment
|
||||
}
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
|
||||
mutation UpdateBoardList($listId: ID!, $position: Int, $collapsed: Boolean) {
|
||||
updateBoardList(input: { listId: $listId, position: $position, collapsed: $collapsed }) {
|
||||
# We have ID in a deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
list {
|
||||
...BoardListFragment
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ query BoardLists(
|
|||
id
|
||||
hideBacklogList
|
||||
lists(issueFilters: $filters) {
|
||||
# We have ID in a deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
nodes {
|
||||
...BoardListFragment
|
||||
}
|
||||
|
@ -25,6 +27,8 @@ query BoardLists(
|
|||
id
|
||||
hideBacklogList
|
||||
lists(issueFilters: $filters) {
|
||||
# We have ID in a deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
nodes {
|
||||
...BoardListFragment
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
mutation uploadDesign($files: [Upload!]!, $projectPath: ID!, $iid: ID!) {
|
||||
designManagementUpload(input: { projectPath: $projectPath, iid: $iid, files: $files }) {
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
designs {
|
||||
...DesignItem
|
||||
versions {
|
||||
|
|
|
@ -13,6 +13,7 @@ query getDesign(
|
|||
id
|
||||
designCollection {
|
||||
designs(atVersion: $atVersion, filenames: $filenames) {
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
nodes {
|
||||
...DesignItem
|
||||
issue {
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
fragment UserAvailability on User {
|
||||
status {
|
||||
availability
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
fragment IncidentFields on Issue {
|
||||
severity
|
||||
escalationStatus
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#import "ee_else_ce/runner/graphql/details/runner_details.fragment.graphql"
|
||||
|
||||
query getRunner($id: CiRunnerID!) {
|
||||
# We have an id in deeply nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
runner(id: $id) {
|
||||
...RunnerDetails
|
||||
}
|
||||
|
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
mutation runnerUpdate($input: RunnerUpdateInput!) {
|
||||
runnerUpdate(input: $input) {
|
||||
# We have an id in deep nested fragment
|
||||
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
||||
runner {
|
||||
...RunnerDetails
|
||||
}
|
||||
|
|
|
@ -126,7 +126,7 @@ class SessionsController < Devise::SessionsController
|
|||
flash[:alert] = _('There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.')
|
||||
flash.delete :recaptcha_error
|
||||
|
||||
respond_with_navigational(resource) { render :new }
|
||||
redirect_to new_user_session_path
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Provides a way to execute nullify behaviour in batches
|
||||
# to avoid query timeouts for really big tables
|
||||
# Assumes that associations have `dependent: :nullify` statement
|
||||
module BatchNullifyDependentAssociations
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
class_methods do
|
||||
def dependent_associations_to_nullify
|
||||
reflect_on_all_associations(:has_many).select { |assoc| assoc.options[:dependent] == :nullify }
|
||||
end
|
||||
end
|
||||
|
||||
def nullify_dependent_associations_in_batches(exclude: [], batch_size: 100)
|
||||
self.class.dependent_associations_to_nullify.each do |association|
|
||||
next if association.name.in?(exclude)
|
||||
|
||||
loop do
|
||||
# rubocop:disable GitlabSecurity/PublicSend
|
||||
update_count = public_send(association.name).limit(batch_size).update_all(association.foreign_key => nil)
|
||||
# rubocop:enable GitlabSecurity/PublicSend
|
||||
break if update_count < batch_size
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -21,6 +21,7 @@ class User < ApplicationRecord
|
|||
include OptionallySearch
|
||||
include FromUnion
|
||||
include BatchDestroyDependentAssociations
|
||||
include BatchNullifyDependentAssociations
|
||||
include HasUniqueInternalUsers
|
||||
include IgnorableColumns
|
||||
include UpdateHighestRole
|
||||
|
@ -189,6 +190,8 @@ class User < ApplicationRecord
|
|||
has_many :snippets, dependent: :destroy, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent
|
||||
has_many :notes, dependent: :destroy, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent
|
||||
has_many :issues, dependent: :destroy, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent
|
||||
has_many :updated_issues, class_name: 'Issue', dependent: :nullify, foreign_key: :updated_by_id # rubocop:disable Cop/ActiveRecordDependent
|
||||
has_many :closed_issues, class_name: 'Issue', dependent: :nullify, foreign_key: :closed_by_id # rubocop:disable Cop/ActiveRecordDependent
|
||||
has_many :merge_requests, dependent: :destroy, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent
|
||||
has_many :events, dependent: :delete_all, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent
|
||||
has_many :releases, dependent: :nullify, foreign_key: :author_id # rubocop:disable Cop/ActiveRecordDependent
|
||||
|
@ -668,9 +671,9 @@ class User < ApplicationRecord
|
|||
|
||||
order = <<~SQL
|
||||
CASE
|
||||
WHEN users.name = :query THEN 0
|
||||
WHEN users.username = :query THEN 1
|
||||
WHEN users.public_email = :query THEN 2
|
||||
WHEN LOWER(users.name) = :query THEN 0
|
||||
WHEN LOWER(users.username) = :query THEN 1
|
||||
WHEN LOWER(users.public_email) = :query THEN 2
|
||||
ELSE 3
|
||||
END
|
||||
SQL
|
||||
|
|
|
@ -64,6 +64,10 @@ module Users
|
|||
# This ensures we delete records in batches.
|
||||
user.destroy_dependent_associations_in_batches(exclude: [:snippets])
|
||||
|
||||
if Feature.enabled?(:nullify_in_batches_on_user_deletion, default_enabled: :yaml)
|
||||
user.nullify_dependent_associations_in_batches
|
||||
end
|
||||
|
||||
# Destroy the namespace after destroying the user since certain methods may depend on the namespace existing
|
||||
user_data = user.destroy
|
||||
namespace.destroy
|
||||
|
|
|
@ -100,9 +100,9 @@ module Users
|
|||
end
|
||||
|
||||
# rubocop:disable CodeReuse/ActiveRecord
|
||||
def batched_migrate(base_scope, column)
|
||||
def batched_migrate(base_scope, column, batch_size: 50)
|
||||
loop do
|
||||
update_count = base_scope.where(column => user.id).limit(100).update_all(column => ghost_user.id)
|
||||
update_count = base_scope.where(column => user.id).limit(batch_size).update_all(column => ghost_user.id)
|
||||
break if update_count == 0
|
||||
end
|
||||
end
|
||||
|
|
|
@ -98,7 +98,7 @@
|
|||
.input-group-text
|
||||
#{Gitlab::Utils.append_path(root_url, @project.namespace.full_path)}/
|
||||
= f.text_field :path, class: 'form-control h-auto', data: { qa_selector: 'project_path_field' }
|
||||
= f.submit _('Change path'), class: "gl-button btn btn-warning", data: { qa_selector: 'change_path_button' }
|
||||
= f.submit _('Change path'), class: "gl-button btn btn-danger", data: { qa_selector: 'change_path_button' }
|
||||
|
||||
= render 'transfer', project: @project
|
||||
|
||||
|
|
|
@ -18,5 +18,5 @@
|
|||
%p= _("Archiving the project will make it entirely read-only. It is hidden from the dashboard and doesn't show up in searches. %{strong_start}The repository cannot be committed to, and no issues, comments, or other entities can be created.%{strong_end} %{link_start}Learn more.%{link_end}").html_safe % { strong_start: '<strong>'.html_safe, strong_end: '</strong>'.html_safe, link_start: link_start, link_end: '</a>'.html_safe }
|
||||
= link_to _('Archive project'), archive_project_path(@project),
|
||||
aria: { label: _('Archive project') },
|
||||
data: { confirm: _("Are you sure that you want to archive this project?"), qa_selector: 'archive_project_link', 'confirm-btn-variant': 'warning' },
|
||||
method: :post, class: "gl-button btn btn-warning"
|
||||
data: { confirm: _("Are you sure that you want to archive this project?"), qa_selector: 'archive_project_link', 'confirm-btn-variant': 'confirm' },
|
||||
method: :post, class: "gl-button btn btn-confirm"
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: 'nullify_in_batches_on_user_deletion'
|
||||
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/84709
|
||||
rollout_issue_url:
|
||||
milestone: '14.10'
|
||||
type: development
|
||||
group: group::optimize
|
||||
default_enabled: true
|
|
@ -1,21 +0,0 @@
|
|||
---
|
||||
key_path: usage_activity_by_stage_monthly.release.users_creating_deployment_approvals
|
||||
description: Users who have used the deployment approvals feature by month
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_category: continuous_delivery
|
||||
value_type: number
|
||||
status: active
|
||||
milestone: "14.10"
|
||||
introduced_by_url:
|
||||
time_frame: 28d
|
||||
data_source: database
|
||||
data_category: optional
|
||||
instrumentation_class: CountUsersDeploymentApprovals
|
||||
performance_indicator_type: []
|
||||
distribution:
|
||||
- ee
|
||||
tier:
|
||||
- premium
|
||||
- ultimate
|
|
@ -1,21 +0,0 @@
|
|||
---
|
||||
key_path: usage_activity_by_stage.release.users_creating_deployment_approvals
|
||||
description: Users who have used the deployment approvals feature by all time
|
||||
product_section: ops
|
||||
product_stage: release
|
||||
product_group: group::release
|
||||
product_category: continuous_delivery
|
||||
value_type: number
|
||||
status: active
|
||||
milestone: "14.10"
|
||||
introduced_by_url:
|
||||
time_frame: all
|
||||
data_source: database
|
||||
data_category: optional
|
||||
instrumentation_class: CountUsersDeploymentApprovals
|
||||
performance_indicator_type: []
|
||||
distribution:
|
||||
- ee
|
||||
tier:
|
||||
- premium
|
||||
- ultimate
|
|
@ -90,6 +90,7 @@ Caddy
|
|||
callstack
|
||||
callstacks
|
||||
Camo
|
||||
canonicalization
|
||||
canonicalized
|
||||
captcha
|
||||
CentOS
|
||||
|
@ -517,6 +518,7 @@ reinitialize
|
|||
reinitializing
|
||||
relicensing
|
||||
remediations
|
||||
renderers
|
||||
replicables
|
||||
repmgr
|
||||
repmgrd
|
||||
|
@ -646,6 +648,8 @@ subtrees
|
|||
sudo
|
||||
supercookie
|
||||
supercookies
|
||||
superset
|
||||
supersets
|
||||
supertype
|
||||
supertypes
|
||||
swappiness
|
||||
|
|
|
@ -12,7 +12,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/348909)
|
||||
for use in GitLab 14.9, and is planned for removal in GitLab 15.0.
|
||||
in GitLab 14.9, and is planned for removal in GitLab 15.0.
|
||||
|
||||
GitLab provides administrators insights into the health of their GitLab instance.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/352488)
|
||||
for use in GitLab 14.8, and is planned for removal in GitLab 15.0.
|
||||
in GitLab 14.8, and is planned for removal in GitLab 15.0.
|
||||
|
||||
To profile a request:
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ Example response:
|
|||
|
||||
WARNING:
|
||||
The `web_geo_projects_url` attribute is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80106)
|
||||
for use in GitLab 14.9.
|
||||
in GitLab 14.9.
|
||||
|
||||
## Retrieve configuration about all Geo nodes
|
||||
|
||||
|
@ -147,7 +147,7 @@ Example response:
|
|||
|
||||
WARNING:
|
||||
The `web_geo_projects_url` attribute is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80106)
|
||||
for use in GitLab 14.9.
|
||||
in GitLab 14.9.
|
||||
|
||||
## Retrieve configuration about a specific Geo node
|
||||
|
||||
|
@ -249,7 +249,7 @@ Example response:
|
|||
|
||||
WARNING:
|
||||
The `web_geo_projects_url` attribute is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80106)
|
||||
for use in GitLab 14.9.
|
||||
in GitLab 14.9.
|
||||
|
||||
## Delete a Geo node
|
||||
|
||||
|
|
|
@ -281,7 +281,7 @@ GET /projects/:id/approval_rules/:approval_rule_id
|
|||
WARNING:
|
||||
The Vulnerability-Check feature, including the Vulnerability-Check attributes listed here, is in its
|
||||
end-of-life process. It is [deprecated](../update/deprecations.md#vulnerability-check)
|
||||
for use in GitLab 14.8, and is planned for removal in GitLab 15.0. Users should migrate to the new
|
||||
in GitLab 14.8, and is planned for removal in GitLab 15.0. Users should migrate to the new
|
||||
[Security Approval Policies](../user/application_security/policies/#scan-result-policy-editor).
|
||||
|
||||
You can create project approval rules using the following endpoint:
|
||||
|
@ -413,7 +413,7 @@ curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" \
|
|||
WARNING:
|
||||
The Vulnerability-Check feature, including the Vulnerability-Check attributes listed here, is in its
|
||||
end-of-life process. It is [deprecated](../update/deprecations.md#vulnerability-check)
|
||||
for use in GitLab 14.8, and is planned for removal in GitLab 15.0. Users should migrate to the new
|
||||
in GitLab 14.8, and is planned for removal in GitLab 15.0. Users should migrate to the new
|
||||
[Security Approval Policies](../user/application_security/policies/#scan-result-policy-editor).
|
||||
|
||||
You can update project approval rules using the following endpoint:
|
||||
|
|
|
@ -323,7 +323,7 @@ puts access_token.token
|
|||
|
||||
WARNING:
|
||||
Implicit grant flow is inherently insecure and the IETF has removed it in [OAuth 2.1](https://oauth.net/2.1/).
|
||||
It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/288516) for use in GitLab 14.0, and is planned for
|
||||
It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/288516) in GitLab 14.0, and is planned for
|
||||
[removal](https://gitlab.com/gitlab-org/gitlab/-/issues/344609) in GitLab 15.0.
|
||||
|
||||
We recommend that you use [Authorization code with PKCE](#authorization-code-with-proof-key-for-code-exchange-pkce)
|
||||
|
|
|
@ -230,7 +230,7 @@ Setting the regular expression this way takes precedence over project settings.
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/17633)
|
||||
for use in GitLab 14.9, and is planned for [removal](https://gitlab.com/gitlab-org/gitlab/-/issues/17633) in GitLab 15.0.
|
||||
in GitLab 14.9, and is planned for [removal](https://gitlab.com/gitlab-org/gitlab/-/issues/17633) in GitLab 15.0.
|
||||
|
||||
You can add test coverage results to merge requests using the Project's CI/CD settings:
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ GitLab can display the results of one or more reports in:
|
|||
> - [Deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78132) in GitLab 14.9.
|
||||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78132) for use in GitLab
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/78132) in GitLab
|
||||
14.9 and replaced with `artifacts:reports:coverage_report` in 14.10.
|
||||
|
||||
The `cobertura` report collects [Cobertura coverage XML files](../../user/project/merge_requests/test_coverage_visualization.md).
|
||||
|
|
|
@ -1570,7 +1570,7 @@ For example:
|
|||
```markdown
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](link-to-issue)
|
||||
for use in GitLab X.X, and is planned for [removal](link-to-issue) in GitLab X.X.
|
||||
in GitLab X.X, and is planned for [removal](link-to-issue) in GitLab X.X.
|
||||
```
|
||||
|
||||
After the feature or product is officially deprecated and removed, remove
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Editor
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# Markdown developer documentation **(FREE)**
|
||||
|
||||
This page contains the MVC for the developer documentation for GitLab Flavored Markdown.
|
||||
For the user documentation about Markdown in GitLab, refer to
|
||||
[GitLab Flavored Markdown](../../user/markdown.md).
|
||||
|
||||
## GitLab Flavored Markdown specification guide
|
||||
|
||||
The [specification guide](specification_guide/index.md) includes:
|
||||
|
||||
- [Terms and definitions](specification_guide/index.md#terms-and-definitions).
|
||||
- [Parsing and rendering](specification_guide/index.md#parsing-and-rendering).
|
||||
- [Goals](specification_guide/index.md#goals).
|
||||
- [Implementation](specification_guide/index.md#implementation) of the spec.
|
|
@ -0,0 +1,717 @@
|
|||
---
|
||||
stage: Create
|
||||
group: Editor
|
||||
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
|
||||
---
|
||||
|
||||
# GitLab Flavored Markdown (GLFM) Specification Guide **(FREE)**
|
||||
|
||||
GitLab supports Markdown in various places. The Markdown dialect we use is called
|
||||
GitLab Flavored Markdown, or GLFM.
|
||||
|
||||
The specification for the GLFM dialect is based on the
|
||||
[GitHub Flavored Markdown (GFM) specification](https://github.github.com/gfm/),
|
||||
which is in turn based on the [CommonMark specification](https://spec.commonmark.org/current/).
|
||||
The GLFM specification includes
|
||||
[several extensions](../../../user/markdown.md#differences-between-gitlab-flavored-markdown-and-standard-markdown)
|
||||
to the GFM specification.
|
||||
|
||||
See the [section on acronyms](#acronyms-glfm-ghfm-gfm-commonmark) for a
|
||||
detailed explanation of the various acronyms used in this document.
|
||||
This guide is a developer-facing document that describes the various terms and
|
||||
definitions, goals, tools, and implementations related to the GLFM specification.
|
||||
It is intended to support and augment the [user-facing documentation](../../../user/markdown.md)
|
||||
for GitLab Flavored Markdown.
|
||||
|
||||
NOTE:
|
||||
In this document, _GFM_ refers to _GitHub_ Flavored Markdown, not _GitLab_ Flavored Markdown.
|
||||
Refer to the [section on acronyms](#acronyms-glfm-ghfm-gfm-commonmark)
|
||||
for a detailed explanation of the various acronyms used in this document.
|
||||
|
||||
NOTE:
|
||||
This guide and the implementation and files described in it are still a work in
|
||||
progress. As the work progresses, rewrites and consolidation
|
||||
between this guide and the [user-facing documentation](../../../user/markdown.md)
|
||||
for GitLab Flavored Markdown are likely.
|
||||
|
||||
## Terms and definitions
|
||||
|
||||
### Acronyms: GLFM, GHFM, GFM, CommonMark
|
||||
|
||||
[_GitHub_ Flavored Markdown](https://github.github.com/gfm/) is widely referred
|
||||
to by the acronym GFM, and this document follows that convention as well.
|
||||
_GitLab_ Flavored Markdown is referred to as GLFM in this document,
|
||||
to distinguish it from GitHub Flavored Markdown.
|
||||
|
||||
Unfortunately, this convention is not followed consistently in the rest
|
||||
of the documentation or GitLab codebase. In many places, the GFM
|
||||
acronym is used to refer to _GitLab_ Flavored Markdown. An
|
||||
[open issue](https://gitlab.com/gitlab-org/gitlab/-/issues/24592) exists to resolve
|
||||
this inconsistency.
|
||||
|
||||
Some places in the code refer to both the GitLab and GitHub specifications
|
||||
simultaneous in the same areas of logic. In these situations,
|
||||
_GitHub_ Flavored Markdown may be referred to with variable or constant names like
|
||||
`ghfm_` to avoid confusion.
|
||||
|
||||
The original CommonMark specification is referred to as _CommonMark_ (no acronym).
|
||||
|
||||
### Various Markdown specifications
|
||||
|
||||
The specification format we use is based on the approach used in CommonMark, where
|
||||
a `spec.txt` file serves as documentation, as well as being in a format that can
|
||||
serve as input to automated conformance tests. It is
|
||||
[explained in the CommonMark specification](https://spec.commonmark.org/0.30/#about-this-document):
|
||||
|
||||
> This document attempts to specify Markdown syntax unambiguously. It contains many
|
||||
> examples with side-by-side Markdown and HTML. These are intended to double as conformance tests.
|
||||
|
||||
The HTML-rendered versions of the specifications:
|
||||
|
||||
- [GitLab Flavored Markdown (GLFM) specification](https://gitlab.com/gitlab-org/gitlab/-/blob/master/glfm_specification/output/spec.html), which extends the:
|
||||
- [GitHub Flavored Markdown (GFM) specification](https://github.github.com/gfm/), which extends the:
|
||||
- [CommonMark specification](https://spec.commonmark.org/0.30/)
|
||||
|
||||
NOTE:
|
||||
The creation of the
|
||||
[GitLab Flavored Markdown (GLFM) specification](https://gitlab.com/gitlab-org/gitlab/-/blob/master/glfm_specification/output/spec.html)
|
||||
file is still pending.
|
||||
|
||||
However, GLFM has more complex parsing, rendering, and testing requirements than
|
||||
GFM or CommonMark. Therefore,
|
||||
it does not have a static, hardcoded, manually updated `spec.txt`. Instead, the
|
||||
GLFM `spec.txt` is automatically generated based on other input files. This process
|
||||
is explained in detail in the [Implementation](#implementation) sections below.
|
||||
|
||||
### Markdown examples
|
||||
|
||||
Everywhere in the context of the specification and this guide, the term
|
||||
_examples_ is specifically used to refer to the Markdown + HTML pairs used
|
||||
to illustrate the canonical parsing (or rendering) behavior of various Markdown source
|
||||
strings in the standard
|
||||
[CommonMark specification format](https://spec.commonmark.org/0.30/#example-1).
|
||||
|
||||
In this context, it should not be confused with other similar or related meanings of
|
||||
_example_, such as
|
||||
[RSpec examples](https://relishapp.com/rspec/rspec-core/docs/example-groups/basic-structure-describe-it).
|
||||
|
||||
### Parsers and renderers
|
||||
|
||||
To understand the various ways in which a specification is used, and how it related
|
||||
to a given Markdown dialect, it's important to understand the distinction between
|
||||
a _parser_ and a _renderer_:
|
||||
|
||||
- A Markdown _parser_ accepts Markdown as input and produces a Markdown
|
||||
Abstract Syntax Tree (AST) as output.
|
||||
- A Markdown _renderer_ accepts the AST produced by a parser, and produces HTML
|
||||
(or a PDF, or any other relevant rendering format) as output.
|
||||
|
||||
### Types of Markdown tests driven by the GLFM specification
|
||||
|
||||
The two main types of automated testing are driven by the Markdown
|
||||
examples and data contained in the GLFM specification. We refer to them as:
|
||||
|
||||
- Markdown conformance testing.
|
||||
- Markdown snapshot testing.
|
||||
|
||||
Many other types of tests also occur in the GitLab
|
||||
codebase, and some of these tests are also related to the GLFM Markdown dialect.
|
||||
Therefore, to avoid confusion, we use these standard terms for the two types
|
||||
of specification-driven testing referred to in this documentation and elsewhere.
|
||||
|
||||
#### Markdown conformance testing
|
||||
|
||||
_Markdown conformance testing_ refers to the standard testing method used by
|
||||
all CommonMark Markdown dialects to verify that a specific implementation conforms
|
||||
to the CommonMark Markdown specification. It is enforced by running the standard
|
||||
CommonMark tool [`spec_tests.py`](https://github.com/github/cmark-gfm/blob/master/test/spec_tests.py)
|
||||
against a given `spec.txt` specification and the implementation.
|
||||
|
||||
NOTE:
|
||||
`spec_tests.py` may eventually be re-implemented in Ruby, to not have a dependency on Python.
|
||||
|
||||
#### Markdown snapshot testing
|
||||
|
||||
_Markdown snapshot testing_ refers to the automated testing performed in
|
||||
the GitLab codebase, which is driven by snapshot fixture data derived from the
|
||||
GLFM specification. It consists of both backend RSpec tests and frontend Jest tests
|
||||
which use the fixture data. This fixture data is contained in YAML files. These files
|
||||
can be generated and updated based on the Markdown examples in the specification,
|
||||
and the existing GLFM parser and render implementations. They may also be
|
||||
manually updated as necessary to test-drive incomplete implementations.
|
||||
Regarding the terminology used here:
|
||||
|
||||
1. The Markdown snapshot tests can be considered a form of the
|
||||
[Golden Master Testing approach](https://www.google.com/search?q=golden+master+testing),
|
||||
which is also referred to as Approval Testing or Characterization Testing.
|
||||
1. The term Golden Master originally comes from the recording industry, and
|
||||
refers to the process of mastering, or making a final mix from which all
|
||||
other copies are produced.
|
||||
1. For more information and background, you can read about
|
||||
[Characterization Tests](https://en.wikipedia.org/wiki/Characterization_test) and
|
||||
[Golden Masters](https://en.wikipedia.org/wiki/Gold_master_(disambiguation)).
|
||||
1. The usage of the term _snapshot_ does not refer to the approach of
|
||||
[Jest snapshot testing](https://jestjs.io/docs/snapshot-testing), as used elsewhere
|
||||
in the GitLab frontend testing suite. However, the Markdown snapshot testing does
|
||||
follow the same philosophy and patterns as Jest snapshot testing:
|
||||
1. Snapshot fixture data is represented as files which are checked into source control.
|
||||
1. The files can be automatically generated and updated based on the implementation
|
||||
of the code under tests.
|
||||
1. The files can also be manually updated when necessary, for example, to test-drive
|
||||
changes to an incomplete or buggy implementation.
|
||||
1. The usage of the term _fixture_ does not refer to standard
|
||||
[Rails database fixture files](https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html).
|
||||
It instead refers to _test fixtures_ in the
|
||||
[more generic definition](https://en.wikipedia.org/wiki/Test_fixture#Software),
|
||||
as input data to support automated testing. However, fixture files still exist, so
|
||||
they are colocated under the `spec/fixtures` directory with the rest of
|
||||
the fixture data for the GitLab Rails application.
|
||||
|
||||
## Parsing and Rendering
|
||||
|
||||
The Markdown dialect used in the GitLab application has a dual requirement for rendering:
|
||||
|
||||
1. Rendering to static read-only HTML format, to be displayed in various
|
||||
places throughout the application.
|
||||
1. Rendering editable content in the
|
||||
[Content Editor](https://about.gitlab.com/direction/create/editor/content_editor/),
|
||||
a ["What You See Is What You Get" (WYSIWYG)](https://en.wikipedia.org/wiki/WYSIWYG)
|
||||
editor. The Content Editor supports real-time instant switching between an editable
|
||||
Markdown source and an editable WYSIWYG document.
|
||||
|
||||
These requirements means that GitLab has two independent parser and renderer
|
||||
implementations:
|
||||
|
||||
1. The backend parser / renderer supports parsing and rendering to _static_
|
||||
read-only HTML. It is [implemented in Ruby](https://gitlab.com/gitlab-org/gitlab/-/tree/master/lib/banzai).
|
||||
It leverages the [`commonmarker`](https://github.com/gjtorikian/commonmarker) gem,
|
||||
which is a Ruby wrapper for [`libcmark-gfm`](https://github.com/github/cmark),
|
||||
GitHub's fork of the reference parser for CommonMark. `libcmark-gfm` is an extended
|
||||
version of the C reference implementation of [CommonMark](http://commonmark.org/)
|
||||
1. The frontend parser / renderer supports parsing and _WYSIWYG_ rendering for
|
||||
the Content Editor. It is implemented in JavaScript. Parsing is based on the
|
||||
[Remark](https://github.com/remarkjs/remark) Markdown parser, which produces a
|
||||
MDAST Abstract Syntax Tree (MDAST). Rendering is the process of turning
|
||||
an MDAST into a [ProseMirror document](../../fe_guide/content_editor.md). Then,
|
||||
ProseMirror is used to render a ProseMirror document to WYSIWYG HTML. In this
|
||||
document, we refer to the process of turning Markdown into an MDAST as the
|
||||
_frontend / JavaScript parser_, and the entire process of rendering Markdown
|
||||
to WYSIWYG HTML in ProseMirror as the _Content Editor_. Several
|
||||
requirements drive the need for an independent frontend parser / renderer
|
||||
implementation, including:
|
||||
1. Lack of necessary support for accurate source mapping in the HTML renderer
|
||||
implementation used on the backend.
|
||||
1. Latency and bandwidth concerns: eliminating the need for a round-trip to the backend
|
||||
every time the user switches between the Markdown source and the WYSIWYG document.
|
||||
1. Different HTML and browser rendering requirements for WYSIWYG documents. For example,
|
||||
displaying read-only elements such as diagrams and references in an editable form.
|
||||
|
||||
### Multiple versions of rendered HTML
|
||||
|
||||
Both of these GLFM renderer implementations (static and WYSIWYG) produce
|
||||
HTML which differs from the canonical HTML examples from the specification.
|
||||
For every Markdown example in the GLFM specification, three
|
||||
versions of HTML can potentially be rendered from the example:
|
||||
|
||||
1. **Static HTML**: HTML produced by the backend (Ruby) renderer, which
|
||||
contains extra styling and behavioral HTML. For example, **Create task** buttons
|
||||
added for dynamically creating an issue from a task list item.
|
||||
The GitLab [Markdown API](../../../api/markdown.md) generates HTML
|
||||
for a given Markdown string using this method.
|
||||
1. **WYSIWYG HTML**: HTML produced by the frontend (JavaScript) Content Editor,
|
||||
which includes parsing and rendering logic. Used to present an editable document
|
||||
in the ProseMirror WYSIWYG editor.
|
||||
1. **Canonical HTML**: The clean, basic version of HTML rendered from Markdown.
|
||||
1. For the examples which come from the CommonMark specification and
|
||||
GFM extensions specification,
|
||||
the canonical HTML is the exact identical HTML found in the
|
||||
GFM
|
||||
`spec.txt` example blocks.
|
||||
1. For GLFM extensions to the <abbr title="GitHub Flavored Markdown">GFM</abbr> / CommonMark
|
||||
specification, a `glfm_canonical_examples.txt`
|
||||
[input specification file](#input-specification-files) contains the
|
||||
Markdown examples and corresponding canonical HTML examples.
|
||||
|
||||
As the rendered static and WYSIWYG HTML from the backend (Ruby) and frontend (JavaScript)
|
||||
renderers contain extra HTML, their rendered HTML can be converted to canonical HTML
|
||||
by a [canonicalization](#canonicalization-of-html) process.
|
||||
|
||||
#### Canonicalization of HTML
|
||||
|
||||
Neither the backed (Ruby) nor the frontend (JavaScript) rendered can directly render canonical HTML.
|
||||
Nor should they be able to, because:
|
||||
|
||||
- It's not a direct requirement to support any GitLab application feature.
|
||||
- Adding this feature adds unnecessary requirements and complexity to the implementations.
|
||||
|
||||
Instead, the rendered static or WYSIWYG HTML is converted to canonical HTML by a
|
||||
_canonicalization_ process. This process can strip all the extra styling and behavioral
|
||||
HTML from the static or WYSIWYG HTML, resulting in canonical HTML which exactly
|
||||
matches the Markdown + HTML examples in a standard `spec.txt` specification.
|
||||
|
||||
Use the [`canonicalize-html.rb` script](#canonicalize-htmlrb-script) for this process.
|
||||
More explanation about this canonicalization process in the sections below.
|
||||
|
||||
NOTE:
|
||||
Some of the static or WYSIWYG HTML examples may not be representable as canonical
|
||||
HTML. (For example, when they are represented as an image.) In these cases, the Markdown
|
||||
conformance test for the example can be skipped by setting `skip_update_example_snapshots: true`
|
||||
for the example in `glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml`.
|
||||
|
||||
## Goals
|
||||
|
||||
Given the constraints above, we have a few goals related to the GLFM
|
||||
specification and testing infrastructure:
|
||||
|
||||
1. A canonical `spec.txt` exists, and represents the official specification for
|
||||
GLFM, which meets these requirements:
|
||||
1. The spec is a strict superset of the GitHub Flavored Markdown
|
||||
(GFM) specification, just as
|
||||
<abbr title="GitHub Flavored Markdown">GFM</abbr> is a strict superset
|
||||
[of the CommonMark specification](https://github.github.com/gfm/#what-is-github-flavored-markdown-).
|
||||
Therefore, it contains the superset of all canonical Markdown + HTML examples
|
||||
for CommonMark, GFM, and GLFM.
|
||||
1. It contains a prose introduction section which is specific to GitLab and GLFM.
|
||||
1. It contains all other non-introduction sections verbatim from the
|
||||
GFM
|
||||
`spec.txt`.
|
||||
1. It contains a new extra section for the GLFM GitLab-specific extensions,
|
||||
with both prose and examples describing the extensions.
|
||||
1. It should be in the standard format which can processed by the standard
|
||||
CommonMark tools [`spec_tests.py`](https://github.com/github/cmark-gfm/blob/master/test/spec_tests.py),
|
||||
which is a [script used to run the Markdown conformance tests](https://github.github.com/gfm/#about-this-document)
|
||||
against all examples contained in a `spec.txt`.
|
||||
1. The GLFM parsers and HTML renderers for
|
||||
both the static backed (Ruby) and WYSIWYG frontend (JavaScript) implementations
|
||||
support _consistent_ rendering of all canonical Markdown + HTML examples in the
|
||||
GLFM `spec.txt` specification, as verified by `spec_tests.py`.
|
||||
|
||||
NOTE:
|
||||
Consistent does not mean that both of these implementations render
|
||||
to the identical HTML. They each have different implementation-specific additions
|
||||
to the HTML they render, so therefore their rendered HTML is
|
||||
["canonicalized"](#canonicalization-of-html) to canonical HTML prior running
|
||||
the Markdown conformance tests.
|
||||
1. For _both_ the static backed (Ruby) and WYSIWYG frontend (JavaScript) implementations,
|
||||
a set of example snapshots exists in the form of YAML files, which
|
||||
correspond to every Markdown example in the GLFM `spec.txt`. These example snapshots
|
||||
support the following usages for every GLFM Markdown example:
|
||||
1. The backend (Ruby) parser and renderer can convert Markdown to the
|
||||
expected custom static HTML.
|
||||
1. The frontend (JavaScript) parser and renderer (which includes GitLab custom
|
||||
code and Remark) can convert Markdown to the expected ProseMirror JSON
|
||||
representing a ProseMirror document.
|
||||
1. The **Content Editor** (which includes the frontend (JavaScript) parser and renderer,
|
||||
and ProseMirror) can convert Markdown to the expected custom WYSIWYG HTML as rendered by ProseMirror.
|
||||
1. The **Content Editor** can complete a round-trip test, which involves converting
|
||||
from Markdown, to MDAST, to ProseMirror Document, then back to Markdown. It ensures
|
||||
the resulting Markdown is exactly identical, with no differences.
|
||||
|
||||
## Implementation
|
||||
|
||||
The following set of scripts and files is complex. However, it allows us to meet
|
||||
all of the goals listed above, and is carefully designed to meet the following
|
||||
implementation goals:
|
||||
|
||||
1. Minimize the amount of manual editing, curation, and maintenance of the GLFM specification
|
||||
and related files.
|
||||
1. Automate and simplify the process of updating the GLFM specification and related
|
||||
files when there are changes to the upstream CommonMark spec,
|
||||
GFM extensions, or the GLFM extensions.
|
||||
1. Support partial or incomplete implementations of the GLFM specification, whether
|
||||
due to in-progress work, bugs, or new future Markdown support, while still
|
||||
performing all functionality for the existing implementations.
|
||||
1. Automate, simplify, and support running various tests, including the standard
|
||||
CommonMark conformance tests and GLFM-implementation-specific unit/acceptance
|
||||
Markdown snapshot tests.
|
||||
1. Provide a rich set of extensible metadata around all GLFM specification examples
|
||||
to support current and future requirements, such as automated acceptance
|
||||
testing and automated documentation updates.
|
||||
|
||||
The documentation on the implementation is split into three sections:
|
||||
|
||||
1. [Scripts](#scripts).
|
||||
1. [Specification files](#specification-files).
|
||||
1. Example snapshot files: These YAML files are used as input data
|
||||
or fixtures to drive the various tests, and are located under
|
||||
`spec/fixtures/glfm/example_snapshots`. All example snapshot files are automatically
|
||||
generated based on the specification files and the implementation of the parsers and renderers.
|
||||
However, they can also be directly edited if necessary, such as to
|
||||
test-drive an incomplete implementation.
|
||||
|
||||
### Scripts
|
||||
|
||||
These executable scripts perform various tasks related to maintaining
|
||||
the specification and running tests. Each script has a shell-executable entry point
|
||||
file located under `scripts/glfm`, but the actual implementation is in unit-tested
|
||||
classes under `scripts/lib/glfm`.
|
||||
|
||||
NOTE:
|
||||
Some of these scripts are implemented in Ruby, and others are shell scripts.
|
||||
Ruby scripts are used for more complex custom scripts, to enable easier unit testing
|
||||
and debugging. Shell scripts are used for simpler scripts which primarily invoke
|
||||
other shell commands, to avoid the challenges related to
|
||||
[running other shell sub-processes](https://github.com/thewoolleyman/process_helper#why-yet-another-ruby-process-wrapper-library)
|
||||
from Ruby scripts.
|
||||
|
||||
NOTE:
|
||||
The Ruby executable scripts under `scripts/glfm` have dashes instead of underscores
|
||||
in the filenames. This naming is non-standard for a Ruby file, but is used to distinguish
|
||||
them from the corresponding implementation class entry point files under
|
||||
`scripts/lib/glfm` when searching by filename.
|
||||
|
||||
#### `update-specification.rb` script
|
||||
|
||||
The `scripts/glfm/update-specification.rb` script uses specification input files to
|
||||
generate and update `spec.txt` (Markdown) and `spec.html` (HTML). The `spec.html` is
|
||||
generated by passing the generated (or updated) `spec.txt` Markdown to the backend API
|
||||
for rendering to static HTML:
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph script:
|
||||
A{update-specification.rb}
|
||||
A --> B{Backend Markdown API}
|
||||
end
|
||||
subgraph input:<br/>input specification files
|
||||
C[gfm_spec_v_0.29.txt] --> A
|
||||
D[glfm_intro.txt] --> A
|
||||
E[glfm_canonical_examples.txt] --> A
|
||||
end
|
||||
subgraph output:<br/>GLFM specification files
|
||||
A --> F[spec.txt]
|
||||
F --> B
|
||||
B --> G[spec.html]
|
||||
end
|
||||
```
|
||||
|
||||
#### `update-example-snapshots.rb` script
|
||||
|
||||
The `scripts/glfm/update-example-snapshots.rb` script uses input specification
|
||||
files to update example snapshots:
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph script:
|
||||
A{update-example-snapshots.rb}
|
||||
end
|
||||
subgraph input:<br/>input specification files
|
||||
B[downloaded gfm_spec_v_0.29.txt] --> A
|
||||
C[glfm_canonical_examples.txt] --> A
|
||||
D[glfm_example_status.yml] --> A
|
||||
end
|
||||
subgraph output:<br/>example snapshot files
|
||||
A --> E[examples_index.yml]
|
||||
A --> F[markdown.yml]
|
||||
A --> G[html.yml]
|
||||
A --> H[prosemirror_json.yml]
|
||||
end
|
||||
```
|
||||
|
||||
#### `run-snapshot-tests.sh` script
|
||||
|
||||
The `scripts/glfm/run-snapshot-tests.sh` convenience shell script runs all relevant
|
||||
Markdown snapshot testing RSpec and Jest `*_spec` files (from main app `spec` folder)
|
||||
which are driven by `example_snapshot` YAML files.
|
||||
|
||||
The actual RSpec and Jest test `*_spec` files (frontend and backend) live
|
||||
under the normal relevant locations under `spec`, matching the location of their
|
||||
corresponding implementations. They can be run either:
|
||||
|
||||
- As part of the normal pipelines.
|
||||
- From the command line or an IDE, just like any other file under `spec`.
|
||||
|
||||
However, they are spread across four different locations:
|
||||
|
||||
- Backend tests under `spec/requests`.
|
||||
- Backend EE tests under `ee/spec/requests`.
|
||||
- Frontend tests under `spec/frontend`.
|
||||
- Frontend EE tests under `ee/spec/frontend`.
|
||||
|
||||
Therefore, this convenience script is intended to only be used in local
|
||||
development. It simplifies running all tests at once and returning a single return
|
||||
code. It contains only shell scripting commands for the relevant
|
||||
`bundle exec rspec ...` and `yarn jest ...` commands.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph script:
|
||||
A{run-snapshopt-tests.sh} --> B
|
||||
B[relevant rspec/jest test files]
|
||||
end
|
||||
subgraph input:<br/>YAML
|
||||
C[examples_index.yml] --> B
|
||||
D[markdown.yml] --> B
|
||||
E[html.yml] --> B
|
||||
F[prosemirror_json.yml] --> B
|
||||
end
|
||||
subgraph output:<br/>test results/output
|
||||
B --> G[rspec/jest output]
|
||||
end
|
||||
```
|
||||
|
||||
#### `canonicalize-html.rb` script
|
||||
|
||||
The `scripts/glfm/canonicalize-html.rb` handles the
|
||||
["canonicalization" of HTML](#canonicalization-of-html). It is a pipe-through
|
||||
helper script which takes as input a static or WYSIWYG HTML string containing
|
||||
extra HTML, and outputs a canonical HTML string.
|
||||
|
||||
It is implemented as a standalone, modular, single-purpose script, based on the
|
||||
[Unix philosophy](https://en.wikipedia.org/wiki/Unix_philosophy#:~:text=The%20Unix%20philosophy%20emphasizes%20building,developers%20other%20than%20its%20creators.).
|
||||
It's easy to use when running the standard CommonMark `spec_tests.py`
|
||||
script, which expects canonical HTML, against the GitLab renderer implementations.
|
||||
|
||||
#### `run-spec-tests.sh` script
|
||||
|
||||
`scripts/glfm/run-spec-tests.sh` is a convenience shell script which runs
|
||||
conformance specs via the CommonMark standard `spec_tests.py` script,
|
||||
which uses the `glfm_specification/output/spec.txt` file and `scripts/glfm/canonicalize-html.rb`
|
||||
helper script to test the GLFM renderer implementations' support for rendering Markdown
|
||||
specification examples to canonical HTML.
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph scripts:
|
||||
A{run-spec-tests.sh} --> C
|
||||
subgraph specification testing process
|
||||
B[canonicalize-html.sh] --> C
|
||||
C[spec_tests.py]
|
||||
end
|
||||
end
|
||||
subgraph input
|
||||
D[spec.txt GLFM specification] --> C
|
||||
E((GLFM static<br/>renderer implementation)) --> B
|
||||
F((GLFM WYSIWYG<br/>renderer implementation)) --> B
|
||||
end
|
||||
subgraph output:<br/>test results/output
|
||||
C --> G[spec_tests.py output]
|
||||
end
|
||||
```
|
||||
|
||||
### Specification files
|
||||
|
||||
These files represent the GLFM specification itself. They are all
|
||||
located under the root `glfm_specification`, and are further divided into two
|
||||
subfolders:
|
||||
|
||||
- `input`: Contains files which are imported or manually edited.
|
||||
- `output`: Contains files which are automatically generated.
|
||||
|
||||
#### Input specification files
|
||||
|
||||
The `glfm_specification/input` directory contains files which are the original
|
||||
input to drive all other automated GLFM specification scripts/processes/tests.
|
||||
They are either downloaded, as in the case of the
|
||||
GFM `spec.txt` file, or manually
|
||||
updated, as in the case of all GFM files.
|
||||
|
||||
- `glfm_specification/input/github_flavored_markdown/gfm_spec_v_0.29.txt` -
|
||||
official latest [GFM spec.txt](https://github.com/github/cmark-gfm/blob/master/test/spec.txt),
|
||||
automatically downloaded and updated by `update-specification.rb` script.
|
||||
- `glfm_specification/input/gitlab_flavored_markdown/glfm_intro.txt` -
|
||||
Manually updated text of intro section for generated GLFM `spec.txt`.
|
||||
- Replaces GFM version of introductory
|
||||
section in `spec.txt`.
|
||||
- `glfm_specification/input/gitlab_flavored_markdown/glfm_canonical_examples.txt` -
|
||||
Manually updated canonical Markdown+HTML examples for GLFM extensions.
|
||||
- Standard backtick-delimited `spec.txt` examples format with Markdown + canonical HTML.
|
||||
- Inserted as a new section before the appendix of generated `spec.txt`.
|
||||
- `glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml` -
|
||||
Manually updated status of automatic generation of files based on Markdown
|
||||
examples.
|
||||
- Allows example snapshot generation, Markdown conformance tests, or
|
||||
Markdown snapshot tests to be skipped for individual examples. For example, if
|
||||
they are unimplemented, broken, or cannot be tested for some reason.
|
||||
|
||||
`glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml` sample entry:
|
||||
|
||||
```yaml
|
||||
07_99_an_example_with_incomplete_wysiwyg_implementation_1:
|
||||
skip_update_example_snapshots: true
|
||||
skip_running_snapshot_static_html_tests: false
|
||||
skip_running_snapshot_wysiwyg_html_tests: true
|
||||
skip_running_snapshot_prosemirror_json_tests: true
|
||||
skip_running_conformance_static_tests: false
|
||||
skip_running_conformance_wysiwyg_tests: true
|
||||
```
|
||||
|
||||
#### Output specification files
|
||||
|
||||
The `glfm_specification/output` directory contains the CommonMark standard format
|
||||
`spec.txt` file which represents the canonical GLFM specification which is generated
|
||||
by the `update-specification.rb` script. It also contains the rendered `spec.html`
|
||||
and `spec.pdf` which are generated from with the `spec.txt` as input.
|
||||
|
||||
- `glfm_specification/output/spec.txt` - A Markdown file, in the standard format
|
||||
with prose and Markdown + canonical HTML examples, generated (or updated) by the
|
||||
`update-specification.rb` script.
|
||||
- `glfm_specification/output/spec.html` - An HTML file, rendered based on `spec.txt`,
|
||||
also generated (or updated) by the `update-specification.rb` script at the same time as
|
||||
`spec.txt`. It corresponds to the HTML-rendered versions of the
|
||||
"GitHub Flavored Markdown" (<abbr title="GitHub Flavored Markdown">GFM</abbr>)
|
||||
[specification](https://github.github.com/gfm/)
|
||||
and the [CommonMark specification](https://spec.commonmark.org/0.30/).
|
||||
|
||||
These output `spec.**` files, which represent the official, canonical GLFM specification
|
||||
are colocated under the same parent folder `glfm_specification` with the other
|
||||
`input` specification files. They're located here both for convenience, and because they are all
|
||||
a mix of manually edited and generated files. In GFM,
|
||||
`spec.txt` is [located in the test dir](https://github.com/github/cmark-gfm/blob/master/test/spec.txt),
|
||||
and in CommonMark it's located
|
||||
[in the project root](https://github.com/github/cmark-gfm/blob/master/test/spec.txt).
|
||||
No precedent exists for a standard location. In the future, we may decide to
|
||||
move or copy a hosted version of the rendered HTML `spec.html` version to another location or site.
|
||||
|
||||
### Example snapshot files
|
||||
|
||||
The `example_snapshots` directory contains files which are generated by the
|
||||
`update-example-snapshots.rb` script based off of the files in the
|
||||
`glfm_specification/input` directory. They are used as fixtures to drive the
|
||||
various Markdown snapshot tests.
|
||||
|
||||
After the entire GLFM implementation is complete for both backed (Ruby) and
|
||||
frontend (JavaScript), all of these YAML files can be automatically generated.
|
||||
However, while the implementations are still in progress, the `skip_update_example_snapshots`
|
||||
key in `glfm_specification/input/gitlab_flavored_markdown/glfm_example_status.yml`
|
||||
can be used to disable automatic generation of some examples, and they can instead
|
||||
be manually edited as necessary to help drive the implementations.
|
||||
|
||||
#### `spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
||||
|
||||
`spec/fixtures/glfm/example_snapshots/examples_index.yml` is the main list of all
|
||||
CommonMark, GFM, and GLFM example names, each with a unique canonical name.
|
||||
|
||||
- It is generated from the hierarchical sections and examples in the
|
||||
GFM `spec.txt` specification.
|
||||
- For CommonMark and GFM examples,
|
||||
these sections originally came from the GFM `spec.txt`.
|
||||
- For GLFM examples, it is generated from `glfm_canonical_examples.txt`, which is
|
||||
the additional Section 7 in the GLFM `spec.txt`.
|
||||
- It also contains extra metadata about each example, such as:
|
||||
1. `spec_txt_example_position` - The position of the example in the generated GLFM `spec.txt` file.
|
||||
1. `source_specification` - Which specification the example originally came from:
|
||||
`commonmark`, `github`, or `gitlab`.
|
||||
- The naming convention for example entry names is based on nested header section
|
||||
names and example index within the header.
|
||||
- This naming convention should result in fairly stable names and example positions.
|
||||
The CommonMark / GLFM specification rarely changes, and most GLFM
|
||||
examples where multiple examples exist for the same Section 7 subsection are
|
||||
added to the end of the sub-section.
|
||||
|
||||
`spec/fixtures/glfm/example_snapshots/examples_index.yml` sample entries:
|
||||
|
||||
```yaml
|
||||
02_01_preliminaries_characters_and_lines_1:
|
||||
spec_txt_example_position: 1
|
||||
source_specification: commonmark
|
||||
03_01_blocks_and_inlines_precedence_1:
|
||||
spec_txt_example_position: 12
|
||||
source_specification: commonmark
|
||||
05_03_container_blocks_task_list_items_1:
|
||||
spec_txt_example_position: 279
|
||||
source_specification: github
|
||||
06_04_inlines_emphasis_and_strong_emphasis_1:
|
||||
spec_txt_example_position: 360
|
||||
source_specification: github
|
||||
07_01_audio_link_1:
|
||||
spec_txt_example_position: 301
|
||||
source_specification: gitlab
|
||||
```
|
||||
|
||||
#### `spec/fixtures/glfm/example_snapshots/markdown.yml`
|
||||
|
||||
`spec/fixtures/glfm/example_snapshots/markdown.yml` contains the original Markdown
|
||||
for each entry in `spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
||||
|
||||
- For CommonMark and GFM Markdown,
|
||||
it is generated (or updated) from the standard GFM
|
||||
`spec.txt` using the `update-example-snapshots.rb` script.
|
||||
- For GLFM, it is generated (or updated) from the
|
||||
`glfm_specification/input/gitlab_flavored_markdown/glfm_canonical_examples.txt`
|
||||
input specification file.
|
||||
|
||||
`spec/fixtures/glfm/example_snapshots/markdown.yml` sample entry:
|
||||
|
||||
```yaml
|
||||
06_04_inlines_emphasis_and_strong_emphasis_1: |-
|
||||
*foo bar*
|
||||
```
|
||||
|
||||
#### `spec/fixtures/glfm/example_snapshots/html.yml`
|
||||
|
||||
`spec/fixtures/glfm/example_snapshots/html.yml` contains the HTML for each entry in
|
||||
`spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
||||
|
||||
Three types of entries exist, with different HTML for each:
|
||||
|
||||
- **Canonical**
|
||||
- The ["Canonical"](#canonicalization-of-html) HTML.
|
||||
- For CommonMark and GFM examples, the HTML comes from the examples in `spec.txt`.
|
||||
- For GLFM examples, it is generated/updated from
|
||||
`glfm_specification/input/gitlab_flavored_markdown/glfm_canonical_examples.txt`.
|
||||
- **Static**
|
||||
- This is the static (backed (Ruby)-generated) HTML for each entry in
|
||||
`spec/fixtures/glfm/example_snapshots/examples_index.yml`.
|
||||
- It is generated/updated from backend [Markdown API](../../../api/markdown.md)
|
||||
(or the underlying internal classes) via the `update-example-snapshots.rb` script,
|
||||
but can be manually updated for static examples with incomplete implementations.
|
||||
- **WYSIWYG**
|
||||
- The WYSIWYG (frontend, JavaScript-generated) HTML for each entry in
|
||||
`spec/fixtures/glfm/example_snapshots/examples_index.yml`.
|
||||
- It is generated (or updated) from the frontend Content Editor implementation via the
|
||||
`update-example-snapshots.rb` script. It can be manually updated for WYSIWYG
|
||||
examples with incomplete implementations.
|
||||
|
||||
Any exceptions or failures which occur when generating HTML are replaced with an
|
||||
`Error - check implementation` value.
|
||||
|
||||
`spec/fixtures/glfm/example_snapshots/html.yml` sample entry:
|
||||
|
||||
```yaml
|
||||
06_04_inlines_emphasis_and_strong_emphasis_1:
|
||||
canonical: |-
|
||||
<p><em>foo bar</em></p>
|
||||
static: |-
|
||||
<p data-sourcepos="1:1-1:9" dir="auto"><strong>foo bar</strong></p>
|
||||
wysiwyg: |-
|
||||
<p><strong>foo bar</strong></p>
|
||||
```
|
||||
|
||||
NOTE:
|
||||
The actual `static` or `WYSIWYG` entries may differ from the example `html.yml`,
|
||||
depending on how the implementations evolve.
|
||||
|
||||
#### `spec/fixtures/glfm/example_snapshots/prosemirror_json.yml`
|
||||
|
||||
`spec/fixtures/glfm/example_snapshots/prosemirror_json.yml` contains the ProseMirror
|
||||
JSON for each entry in `spec/fixtures/glfm/example_snapshots/examples_index.yml`
|
||||
|
||||
- It is generated (or updated) from the frontend code via the `update-example-snapshots.rb`
|
||||
script, but can be manually updated for examples with incomplete implementations.
|
||||
- Any exceptions or failures when generating are replaced with a `Error - check implementation` value.
|
||||
|
||||
`spec/fixtures/glfm/example_snapshots/prosemirror_json.yml` sample entry:
|
||||
|
||||
```yaml
|
||||
06_04_inlines_emphasis_and_strong_emphasis_1: |-
|
||||
{
|
||||
"type": "doc",
|
||||
"content": [
|
||||
{
|
||||
"type": "paragraph",
|
||||
"content": [
|
||||
{
|
||||
"type": "text",
|
||||
"marks": [
|
||||
{
|
||||
"type": "bold"
|
||||
}
|
||||
],
|
||||
"text": "foo bar"
|
||||
},
|
||||
]
|
||||
},
|
||||
]
|
||||
}
|
||||
```
|
|
@ -15,7 +15,7 @@ your applications.
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346485)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 15.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 15.0.
|
||||
|
||||
Metrics help you understand the health and performance of your infrastructure,
|
||||
applications, and systems by providing insights into your application's reliability,
|
||||
|
@ -63,7 +63,7 @@ and the work required to fix them - all without leaving GitLab.
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346485)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 15.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 15.0.
|
||||
|
||||
Application tracing in GitLab is a way to measure an application's performance and
|
||||
health while it's running. After configuring your application to enable tracing, you
|
||||
|
@ -83,7 +83,7 @@ microservices-based distributed systems - and displays results within GitLab.
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346485)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 15.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 15.0.
|
||||
|
||||
Developers need to troubleshoot application changes in development, and incident
|
||||
responders need aggregated, real-time logs when troubleshooting problems with
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
GitLab provides some dashboards out-of-the-box for any project with
|
||||
[Prometheus available](../../../user/project/integrations/prometheus.md). You can
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
GitLab provides a template to make it easier for you to create templates for
|
||||
[custom dashboards](index.md). Templates provide helpful guidance and
|
||||
|
|
|
@ -11,7 +11,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
By default, all projects include a [GitLab-defined Prometheus dashboard](default.md), which
|
||||
includes a few key metrics, but you can also define your own custom dashboards.
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
The below panel types are supported in monitoring dashboards.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
You can configure your [Monitoring dashboard](../index.md) to
|
||||
display the time zone of your choice, and the links of your choice.
|
||||
|
|
|
@ -11,7 +11,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
Templating variables can be used to make your metrics dashboard more versatile.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
## Query variables
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
Dashboards have several components:
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346540)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 15.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 15.0.
|
||||
|
||||
Tracing provides insight into the performance and health of a deployed application, tracking each
|
||||
function or microservice that handles a given request. Tracing makes it easy to understand the
|
||||
|
|
|
@ -228,7 +228,7 @@ To enable or disable the banner:
|
|||
|
||||
WARNING:
|
||||
Required pipeline configurations is in its end-of-life process for Premium users. It's
|
||||
[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/352316) for use in GitLab 14.8,
|
||||
[deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/352316) in GitLab 14.8,
|
||||
and planned to be unavailable for Premium users in GitLab 15.0. This feature is planned to continue
|
||||
to be available for Ultimate users. Ultimate users are not impacted by this deprecation and removal.
|
||||
|
||||
|
|
|
@ -218,7 +218,7 @@ security issues:
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](../../update/deprecations.md#vulnerability-check)
|
||||
for use in GitLab 14.8, and is planned for removal in GitLab 15.0. Users should migrate to the new
|
||||
in GitLab 14.8, and is planned for removal in GitLab 15.0. Users should migrate to the new
|
||||
[Security Approval Policies](policies/scan-result-policies.md).
|
||||
|
||||
To prevent a merge request introducing a security vulnerability in a project, enable the
|
||||
|
|
|
@ -151,7 +151,7 @@ See [Scan result policies](scan-result-policies.md).
|
|||
|
||||
WARNING:
|
||||
Container Network Policy is in its end-of-life process. It's [deprecated](https://gitlab.com/groups/gitlab-org/-/epics/7476)
|
||||
for use in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 15.0.
|
||||
|
||||
The **Container Network Policy** section provides packet flow metrics for
|
||||
|
|
|
@ -12,7 +12,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
Threat Monitoring is in its end-of-life process. It's [deprecated](https://gitlab.com/groups/gitlab-org/-/epics/7476)
|
||||
for use in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 15.0.
|
||||
|
||||
The **Threat Monitoring** page provides alerts and metrics
|
||||
|
|
|
@ -167,7 +167,7 @@ To remove an agent from the UI:
|
|||
|
||||
WARNING:
|
||||
Cilium integration is in its end-of-life process. It's [deprecated](https://gitlab.com/groups/gitlab-org/-/epics/7476)
|
||||
for use in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 15.0.
|
||||
|
||||
The agent for Kubernetes also provides an integration with Cilium. This integration provides a simple way to
|
||||
|
|
|
@ -45,7 +45,7 @@ From there you can create a new iteration or select an iteration to get a more d
|
|||
|
||||
WARNING:
|
||||
Manual iteration management is in its end-of-life process. Creating an iteration is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/356069)
|
||||
for use in GitLab 14.10, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.10, and is planned for removal in GitLab 16.0.
|
||||
|
||||
Prerequisites:
|
||||
|
||||
|
@ -66,7 +66,7 @@ To create an iteration:
|
|||
|
||||
WARNING:
|
||||
Editing all attributes, with the exception of `description` is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/356069)
|
||||
for use in GitLab 14.10, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.10, and is planned for removal in GitLab 16.0.
|
||||
In the future only editing an iteration's `description` will be allowed.
|
||||
|
||||
Prerequisites:
|
||||
|
@ -82,7 +82,7 @@ To edit an iteration, select the three-dot menu (**{ellipsis_v}**) > **Edit**.
|
|||
|
||||
WARNING:
|
||||
Manual iteration management is in its end-of-life process. Deleting an iteration is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/356069)
|
||||
for use in GitLab 14.10, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.10, and is planned for removal in GitLab 16.0.
|
||||
|
||||
Prerequisites:
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
Container Host Security is in its end-of-life process. It's [deprecated](https://gitlab.com/groups/gitlab-org/-/epics/7476)
|
||||
for use in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 15.0.
|
||||
|
||||
Container Host Security in GitLab provides Intrusion Detection and Prevention capabilities that can
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
Container Host Security is in its end-of-life process. It's [deprecated](https://gitlab.com/groups/gitlab-org/-/epics/7476)
|
||||
for use in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 15.0.
|
||||
|
||||
The following steps are recommended for installing Container Host Security.
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
Container Network Security is in its end-of-life process. It's [deprecated](https://gitlab.com/groups/gitlab-org/-/epics/7476)
|
||||
for use in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 15.0.
|
||||
|
||||
Container Network Security in GitLab provides basic firewall functionality by leveraging Cilium
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
Container Network Security is in its end-of-life process. It's [deprecated](https://gitlab.com/groups/gitlab-org/-/epics/7476)
|
||||
for use in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 15.0.
|
||||
|
||||
The following steps are recommended for installing Container Network Security.
|
||||
|
|
|
@ -12,7 +12,7 @@ WARNING:
|
|||
The Container Network Security and Container Host Security features are in their end-of-life
|
||||
processes. They're
|
||||
[deprecated](https://gitlab.com/groups/gitlab-org/-/epics/7476)
|
||||
for use in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 14.8, and planned for [removal](https://gitlab.com/groups/gitlab-org/-/epics/7477)
|
||||
in GitLab 15.0.
|
||||
|
||||
GitLab makes it straightforward to protect applications deployed in [connected Kubernetes clusters](index.md).
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
GitLab supports automatically detecting and monitoring AWS resources, starting
|
||||
with the [Elastic Load Balancer](https://aws.amazon.com/elasticloadbalancing/) (ELB).
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
GitLab has support for automatically detecting and monitoring HAProxy. This is provided by leveraging the [HAProxy Exporter](https://github.com/prometheus/haproxy_exporter), which translates HAProxy statistics into a Prometheus readable form.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
GitLab offers automatic detection of select [Prometheus exporters](https://prometheus.io/docs/instrumenting/exporters/).
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
GitLab has support for automatically detecting and monitoring Kubernetes metrics.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
GitLab has support for automatically detecting and monitoring NGINX. This is provided by leveraging the [NGINX VTS exporter](https://github.com/hnlq715/nginx-vts-exporter), which translates [VTS statistics](https://github.com/vozlt/nginx-module-vts) into a Prometheus readable form.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
GitLab has support for automatically detecting and monitoring the Kubernetes NGINX Ingress controller. This is provided by leveraging the built-in Prometheus metrics included with Kubernetes NGINX Ingress controller [version 0.16.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0160) onward.
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ info: To determine the technical writer assigned to the Stage/Group associated w
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/346541)
|
||||
for use in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
in GitLab 14.7, and is planned for removal in GitLab 16.0.
|
||||
|
||||
NOTE:
|
||||
[NGINX Ingress version 0.16](nginx_ingress.md) and above have built-in Prometheus metrics, which are different than the VTS based metrics.
|
||||
|
|
|
@ -117,7 +117,7 @@ This example shows reviewers and approval rules in a merge request sidebar:
|
|||
|
||||
WARNING:
|
||||
This feature is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/issues/357271)
|
||||
for use in GitLab 14.10, and is planned for [removal](https://gitlab.com/gitlab-org/gitlab/-/issues/357271) in GitLab 15.0.
|
||||
in GitLab 14.10, and is planned for [removal](https://gitlab.com/gitlab-org/gitlab/-/issues/357271) in GitLab 15.0.
|
||||
Use [attention requests](../index.md#request-attention-to-a-merge-request) instead.
|
||||
|
||||
After a reviewer completes their [merge request reviews](../../../discussions/index.md),
|
||||
|
|
|
@ -17,7 +17,7 @@ description: "The static site editor enables users to edit content on static web
|
|||
WARNING:
|
||||
This feature is in its end-of-life process. It is
|
||||
[deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/77246)
|
||||
for use in GitLab 14.7, and is planned for
|
||||
in GitLab 14.7, and is planned for
|
||||
[removal](https://gitlab.com/groups/gitlab-org/-/epics/7351) in GitLab 14.10.
|
||||
Users should instead use the [Web Editor](../repository/web_editor.md) or [Web IDE](../web_ide/index.md). [Removal instructions](#remove-the-static-site-editor) for existing projects are included on this page.
|
||||
|
||||
|
|
|
@ -4,11 +4,6 @@ module Sidebars
|
|||
module Projects
|
||||
module Menus
|
||||
class ZentaoMenu < ::Sidebars::Menu
|
||||
override :configure_menu_items
|
||||
def configure_menu_items
|
||||
render?.tap { |render| add_items if render }
|
||||
end
|
||||
|
||||
override :link
|
||||
def link
|
||||
zentao_integration.url
|
||||
|
@ -16,7 +11,7 @@ module Sidebars
|
|||
|
||||
override :title
|
||||
def title
|
||||
s_('ZentaoIntegration|ZenTao issues')
|
||||
s_('ZentaoIntegration|ZenTao')
|
||||
end
|
||||
|
||||
override :title_html_options
|
||||
|
@ -26,9 +21,9 @@ module Sidebars
|
|||
}
|
||||
end
|
||||
|
||||
override :image_path
|
||||
def image_path
|
||||
'logos/zentao.svg'
|
||||
override :sprite_icon
|
||||
def sprite_icon
|
||||
'external-link'
|
||||
end
|
||||
|
||||
# Hardcode sizes so image doesn't flash before CSS loads https://gitlab.com/gitlab-org/gitlab/-/issues/321022
|
||||
|
@ -46,29 +41,11 @@ module Sidebars
|
|||
zentao_integration.active?
|
||||
end
|
||||
|
||||
def add_items
|
||||
add_item(open_zentao_menu_item)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def zentao_integration
|
||||
@zentao_integration ||= context.project.zentao_integration
|
||||
end
|
||||
|
||||
def open_zentao_menu_item
|
||||
::Sidebars::MenuItem.new(
|
||||
title: s_('ZentaoIntegration|Open ZenTao'),
|
||||
link: zentao_integration.url,
|
||||
active_routes: {},
|
||||
item_id: :open_zentao,
|
||||
sprite_icon: 'external-link',
|
||||
container_html_options: {
|
||||
target: '_blank',
|
||||
rel: 'noopener noreferrer'
|
||||
}
|
||||
)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -43842,15 +43842,15 @@ msgstr ""
|
|||
msgid "ZentaoIntegration|If different from Web URL."
|
||||
msgstr ""
|
||||
|
||||
msgid "ZentaoIntegration|Issue list"
|
||||
msgstr ""
|
||||
|
||||
msgid "ZentaoIntegration|Open ZenTao"
|
||||
msgstr ""
|
||||
|
||||
msgid "ZentaoIntegration|Use ZenTao as this project's issue tracker."
|
||||
msgstr ""
|
||||
|
||||
msgid "ZentaoIntegration|ZenTao"
|
||||
msgstr ""
|
||||
|
||||
msgid "ZentaoIntegration|ZenTao API URL (optional)"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
@ -205,7 +205,7 @@
|
|||
"@babel/plugin-transform-modules-commonjs": "^7.10.1",
|
||||
"@gitlab/eslint-plugin": "12.0.1",
|
||||
"@gitlab/stylelint-config": "4.0.0",
|
||||
"@graphql-eslint/eslint-plugin": "3.10.2",
|
||||
"@graphql-eslint/eslint-plugin": "3.0.0",
|
||||
"@testing-library/dom": "^7.16.2",
|
||||
"@types/jest": "^26.0.24",
|
||||
"@vue/test-utils": "1.3.0",
|
||||
|
|
|
@ -238,7 +238,7 @@ RSpec.describe SessionsController do
|
|||
|
||||
unsuccesful_login(user_params)
|
||||
|
||||
expect(response).to render_template(:new)
|
||||
expect(response).to redirect_to new_user_session_path
|
||||
expect(flash[:alert]).to include _('There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.')
|
||||
expect(subject.current_user).to be_nil
|
||||
end
|
||||
|
@ -262,7 +262,7 @@ RSpec.describe SessionsController do
|
|||
it 'displays an error when the reCAPTCHA is not solved' do
|
||||
unsuccesful_login(user_params, sesion_params: { failed_login_attempts: 6 })
|
||||
|
||||
expect(response).to render_template(:new)
|
||||
expect(response).to redirect_to new_user_session_path
|
||||
expect(flash[:alert]).to include _('There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.')
|
||||
expect(subject.current_user).to be_nil
|
||||
end
|
||||
|
@ -282,7 +282,7 @@ RSpec.describe SessionsController do
|
|||
it 'displays an error when the reCAPTCHA is not solved' do
|
||||
unsuccesful_login(user_params)
|
||||
|
||||
expect(response).to render_template(:new)
|
||||
expect(response).to redirect_to new_user_session_path
|
||||
expect(flash[:alert]).to include _('There was an error with the reCAPTCHA. Please solve the reCAPTCHA again.')
|
||||
expect(subject.current_user).to be_nil
|
||||
end
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
RSpec.describe BatchNullifyDependentAssociations do
|
||||
before do
|
||||
test_user = Class.new(ActiveRecord::Base) do
|
||||
self.table_name = 'users'
|
||||
|
||||
has_many :closed_issues, foreign_key: :closed_by_id, class_name: 'Issue', dependent: :nullify
|
||||
has_many :issues, foreign_key: :author_id, class_name: 'Issue', dependent: :nullify
|
||||
has_many :updated_issues, foreign_key: :updated_by_id, class_name: 'Issue'
|
||||
|
||||
include BatchNullifyDependentAssociations
|
||||
end
|
||||
|
||||
stub_const('TestUser', test_user)
|
||||
end
|
||||
|
||||
describe '.dependent_associations_to_nullify' do
|
||||
it 'returns only associations with `dependent: :nullify` associations' do
|
||||
expect(TestUser.dependent_associations_to_nullify.map(&:name)).to match_array([:closed_issues, :issues])
|
||||
end
|
||||
end
|
||||
|
||||
describe '#nullify_dependent_associations_in_batches' do
|
||||
let_it_be(:user) { create(:user) }
|
||||
let_it_be(:updated_by_issue) { create(:issue, updated_by: user) }
|
||||
|
||||
before do
|
||||
create(:issue, closed_by: user)
|
||||
create(:issue, closed_by: user)
|
||||
end
|
||||
|
||||
it 'nullifies multiple settings' do
|
||||
expect do
|
||||
test_user = TestUser.find(user.id)
|
||||
test_user.nullify_dependent_associations_in_batches
|
||||
end.to change { Issue.where(closed_by_id: user.id).count }.by(-2)
|
||||
end
|
||||
|
||||
it 'excludes associations' do
|
||||
expect do
|
||||
test_user = TestUser.find(user.id)
|
||||
test_user.nullify_dependent_associations_in_batches(exclude: [:closed_issues])
|
||||
end.not_to change { Issue.where(closed_by_id: user.id).count }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -2741,6 +2741,19 @@ RSpec.describe User do
|
|||
let_it_be(:user3) { create(:user, name: 'us', username: 'se', email: 'foo@example.com') }
|
||||
let_it_be(:email) { create(:email, user: user, email: 'alias@example.com') }
|
||||
|
||||
describe 'name user and email relative ordering' do
|
||||
let_it_be(:named_alexander) { create(:user, name: 'Alexander Person', username: 'abcd', email: 'abcd@example.com') }
|
||||
let_it_be(:username_alexand) { create(:user, name: 'Joao Alexander', username: 'Alexand', email: 'joao@example.com') }
|
||||
|
||||
it 'prioritizes exact matches' do
|
||||
expect(described_class.search('Alexand')).to eq([username_alexand, named_alexander])
|
||||
end
|
||||
|
||||
it 'falls back to ordering by name' do
|
||||
expect(described_class.search('Alexander')).to eq([named_alexander, username_alexand])
|
||||
end
|
||||
end
|
||||
|
||||
describe 'name matching' do
|
||||
it 'returns users with a matching name with exact match first' do
|
||||
expect(described_class.search(user.name)).to eq([user, user2])
|
||||
|
|
|
@ -332,4 +332,39 @@ RSpec.describe Users::DestroyService do
|
|||
expect(User.exists?(other_user.id)).to be(false)
|
||||
end
|
||||
end
|
||||
|
||||
context 'batched nullify' do
|
||||
let(:other_user) { create(:user) }
|
||||
|
||||
context 'when :nullify_in_batches_on_user_deletion feature flag is enabled' do
|
||||
it 'nullifies related associations in batches' do
|
||||
expect(other_user).to receive(:nullify_dependent_associations_in_batches).and_call_original
|
||||
|
||||
described_class.new(user).execute(other_user, skip_authorization: true)
|
||||
end
|
||||
|
||||
it 'nullifies last_updated_issues and closed_issues' do
|
||||
issue = create(:issue, closed_by: other_user, updated_by: other_user)
|
||||
|
||||
described_class.new(user).execute(other_user, skip_authorization: true)
|
||||
|
||||
issue.reload
|
||||
|
||||
expect(issue.closed_by).to be_nil
|
||||
expect(issue.updated_by).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'when :nullify_in_batches_on_user_deletion feature flag is disabled' do
|
||||
before do
|
||||
stub_feature_flags(nullify_in_batches_on_user_deletion: false)
|
||||
end
|
||||
|
||||
it 'does not use batching' do
|
||||
expect(other_user).not_to receive(:nullify_dependent_associations_in_batches)
|
||||
|
||||
described_class.new(user).execute(other_user, skip_authorization: true)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -5,7 +5,7 @@ RSpec.shared_examples 'a daily tracked issuable event' do
|
|||
stub_application_setting(usage_ping_enabled: true)
|
||||
end
|
||||
|
||||
def count_unique(date_from:, date_to:)
|
||||
def count_unique(date_from: 1.minute.ago, date_to: 1.minute.from_now)
|
||||
Gitlab::UsageDataCounters::HLLRedisCounter.unique_events(event_names: action, start_date: date_from, end_date: date_to)
|
||||
end
|
||||
|
||||
|
@ -14,6 +14,7 @@ RSpec.shared_examples 'a daily tracked issuable event' do
|
|||
expect(track_action(author: user1)).to be_truthy
|
||||
expect(track_action(author: user1)).to be_truthy
|
||||
expect(track_action(author: user2)).to be_truthy
|
||||
expect(count_unique).to eq(2)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -34,8 +34,16 @@ RSpec.shared_examples 'ZenTao menu with CE version' do
|
|||
expect(subject.link).to eq zentao_integration.url
|
||||
end
|
||||
|
||||
it 'contains only open ZenTao item' do
|
||||
expect(subject.renderable_items.map(&:item_id)).to match_array [:open_zentao]
|
||||
it 'renders external-link icon' do
|
||||
expect(subject.sprite_icon).to eq 'external-link'
|
||||
end
|
||||
|
||||
it 'renders ZenTao menu' do
|
||||
expect(subject.title).to eq s_('ZentaoIntegration|ZenTao')
|
||||
end
|
||||
|
||||
it 'does not contain items' do
|
||||
expect(subject.renderable_items.count).to eq 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
501
yarn.lock
501
yarn.lock
|
@ -34,7 +34,14 @@
|
|||
dependencies:
|
||||
"@babel/highlight" "^7.10.4"
|
||||
|
||||
"@babel/code-frame@7.16.7", "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.7":
|
||||
"@babel/code-frame@7.16.0":
|
||||
version "7.16.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431"
|
||||
integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA==
|
||||
dependencies:
|
||||
"@babel/highlight" "^7.16.0"
|
||||
|
||||
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789"
|
||||
integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==
|
||||
|
@ -83,10 +90,10 @@
|
|||
dependencies:
|
||||
eslint-rule-composer "^0.3.0"
|
||||
|
||||
"@babel/generator@^7.17.7", "@babel/generator@^7.17.9":
|
||||
version "7.17.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.9.tgz#f4af9fd38fa8de143c29fce3f71852406fc1e2fc"
|
||||
integrity sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==
|
||||
"@babel/generator@^7.15.4", "@babel/generator@^7.17.3", "@babel/generator@^7.17.7":
|
||||
version "7.17.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.17.7.tgz#8da2599beb4a86194a3b24df6c085931d9ee45ad"
|
||||
integrity sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==
|
||||
dependencies:
|
||||
"@babel/types" "^7.17.0"
|
||||
jsesc "^2.5.1"
|
||||
|
@ -162,22 +169,23 @@
|
|||
"@babel/traverse" "^7.10.1"
|
||||
"@babel/types" "^7.10.1"
|
||||
|
||||
"@babel/helper-function-name@^7.10.1", "@babel/helper-function-name@^7.15.4", "@babel/helper-function-name@^7.17.9":
|
||||
version "7.17.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12"
|
||||
integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==
|
||||
"@babel/helper-function-name@^7.10.1", "@babel/helper-function-name@^7.15.4", "@babel/helper-function-name@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f"
|
||||
integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==
|
||||
dependencies:
|
||||
"@babel/helper-get-function-arity" "^7.16.7"
|
||||
"@babel/template" "^7.16.7"
|
||||
"@babel/types" "^7.17.0"
|
||||
"@babel/types" "^7.16.7"
|
||||
|
||||
"@babel/helper-get-function-arity@^7.10.1":
|
||||
"@babel/helper-get-function-arity@^7.10.1", "@babel/helper-get-function-arity@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419"
|
||||
integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==
|
||||
dependencies:
|
||||
"@babel/types" "^7.16.7"
|
||||
|
||||
"@babel/helper-hoist-variables@^7.10.1", "@babel/helper-hoist-variables@^7.16.7":
|
||||
"@babel/helper-hoist-variables@^7.10.1", "@babel/helper-hoist-variables@^7.15.4", "@babel/helper-hoist-variables@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246"
|
||||
integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==
|
||||
|
@ -273,7 +281,7 @@
|
|||
dependencies:
|
||||
"@babel/types" "^7.16.7"
|
||||
|
||||
"@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.16.7":
|
||||
"@babel/helper-validator-identifier@^7.14.9", "@babel/helper-validator-identifier@^7.15.7", "@babel/helper-validator-identifier@^7.16.7":
|
||||
version "7.16.7"
|
||||
resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad"
|
||||
integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==
|
||||
|
@ -302,7 +310,7 @@
|
|||
"@babel/traverse" "^7.17.3"
|
||||
"@babel/types" "^7.17.0"
|
||||
|
||||
"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.7":
|
||||
"@babel/highlight@^7.10.4", "@babel/highlight@^7.16.0", "@babel/highlight@^7.16.7":
|
||||
version "7.16.10"
|
||||
resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.10.tgz#744f2eb81579d6eea753c227b0f570ad785aba88"
|
||||
integrity sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==
|
||||
|
@ -311,10 +319,15 @@
|
|||
chalk "^2.0.0"
|
||||
js-tokens "^4.0.0"
|
||||
|
||||
"@babel/parser@^7.1.0", "@babel/parser@^7.16.7", "@babel/parser@^7.16.8", "@babel/parser@^7.17.8", "@babel/parser@^7.17.9":
|
||||
version "7.17.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.9.tgz#9c94189a6062f0291418ca021077983058e171ef"
|
||||
integrity sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==
|
||||
"@babel/parser@7.15.8":
|
||||
version "7.15.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.8.tgz#7bacdcbe71bdc3ff936d510c15dcea7cf0b99016"
|
||||
integrity sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA==
|
||||
|
||||
"@babel/parser@^7.1.0", "@babel/parser@^7.15.4", "@babel/parser@^7.16.7", "@babel/parser@^7.17.3", "@babel/parser@^7.17.8":
|
||||
version "7.17.8"
|
||||
resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.17.8.tgz#2817fb9d885dd8132ea0f8eb615a6388cca1c240"
|
||||
integrity sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==
|
||||
|
||||
"@babel/plugin-proposal-async-generator-functions@^7.10.1":
|
||||
version "7.10.1"
|
||||
|
@ -859,23 +872,46 @@
|
|||
"@babel/parser" "^7.16.7"
|
||||
"@babel/types" "^7.16.7"
|
||||
|
||||
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.15.4", "@babel/traverse@^7.16.8", "@babel/traverse@^7.17.3":
|
||||
version "7.17.9"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.9.tgz#1f9b207435d9ae4a8ed6998b2b82300d83c37a0d"
|
||||
integrity sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==
|
||||
"@babel/traverse@7.15.4":
|
||||
version "7.15.4"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d"
|
||||
integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.14.5"
|
||||
"@babel/generator" "^7.15.4"
|
||||
"@babel/helper-function-name" "^7.15.4"
|
||||
"@babel/helper-hoist-variables" "^7.15.4"
|
||||
"@babel/helper-split-export-declaration" "^7.15.4"
|
||||
"@babel/parser" "^7.15.4"
|
||||
"@babel/types" "^7.15.4"
|
||||
debug "^4.1.0"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.1", "@babel/traverse@^7.15.4", "@babel/traverse@^7.17.3":
|
||||
version "7.17.3"
|
||||
resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.17.3.tgz#0ae0f15b27d9a92ba1f2263358ea7c4e7db47b57"
|
||||
integrity sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.16.7"
|
||||
"@babel/generator" "^7.17.9"
|
||||
"@babel/generator" "^7.17.3"
|
||||
"@babel/helper-environment-visitor" "^7.16.7"
|
||||
"@babel/helper-function-name" "^7.17.9"
|
||||
"@babel/helper-function-name" "^7.16.7"
|
||||
"@babel/helper-hoist-variables" "^7.16.7"
|
||||
"@babel/helper-split-export-declaration" "^7.16.7"
|
||||
"@babel/parser" "^7.17.9"
|
||||
"@babel/parser" "^7.17.3"
|
||||
"@babel/types" "^7.17.0"
|
||||
debug "^4.1.0"
|
||||
globals "^11.1.0"
|
||||
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.15.4", "@babel/types@^7.16.7", "@babel/types@^7.16.8", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
|
||||
"@babel/types@7.15.6":
|
||||
version "7.15.6"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.6.tgz#99abdc48218b2881c058dd0a7ab05b99c9be758f"
|
||||
integrity sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==
|
||||
dependencies:
|
||||
"@babel/helper-validator-identifier" "^7.14.9"
|
||||
to-fast-properties "^2.0.0"
|
||||
|
||||
"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.10.1", "@babel/types@^7.10.2", "@babel/types@^7.15.4", "@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
|
||||
version "7.17.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.17.0.tgz#a826e368bccb6b3d84acd76acad5c0d87342390b"
|
||||
integrity sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==
|
||||
|
@ -997,164 +1033,162 @@
|
|||
resolved "https://registry.yarnpkg.com/@gitlab/visual-review-tools/-/visual-review-tools-1.6.1.tgz#0d8f3ff9f51b05f7c80b9a107727703d48997e4e"
|
||||
integrity sha512-vY8K1igwZFoEOmU0h4E7XTLlilsQ4ylPr27O01UsSe6ZTKi6oEMREsRAEpNIUgRlxUARCsf+Opp4pgSFzFkFcw==
|
||||
|
||||
"@graphql-eslint/eslint-plugin@3.10.2":
|
||||
version "3.10.2"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.10.2.tgz#b8b271aef219623e6a0517cfababe6063072077f"
|
||||
integrity sha512-UJwpeMC4q3/Ofeh3aOp9aJOtomJjQEz7zk8lqXeexqkDBXI0d9dedYlWWL5MqcFhKxtBxsU5xq0w4th0c+0aAQ==
|
||||
"@graphql-eslint/eslint-plugin@3.0.0":
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-eslint/eslint-plugin/-/eslint-plugin-3.0.0.tgz#d0f7d6e4f6f772312500abbf6c94c59d5cb52c12"
|
||||
integrity sha512-EfkMABrCbWhhArEGg4w2r/z8sEPp1fL0Ar3xFWBX9c11t5+T5XqGAGVxUi5vuEx9PrSqhYisPrxTibqNoxuEzQ==
|
||||
dependencies:
|
||||
"@babel/code-frame" "7.16.7"
|
||||
"@graphql-tools/code-file-loader" "^7.2.8"
|
||||
"@graphql-tools/graphql-tag-pluck" "^7.2.0"
|
||||
"@graphql-tools/utils" "^8.6.5"
|
||||
chalk "4.1.2"
|
||||
debug "4.3.4"
|
||||
fast-glob "3.2.11"
|
||||
graphql-config "^4.3.0"
|
||||
"@babel/code-frame" "7.16.0"
|
||||
"@graphql-tools/code-file-loader" "7.2.2"
|
||||
"@graphql-tools/graphql-tag-pluck" "7.1.3"
|
||||
"@graphql-tools/import" "6.6.1"
|
||||
"@graphql-tools/utils" "8.5.3"
|
||||
graphql-config "4.1.0"
|
||||
graphql-depth-limit "1.1.0"
|
||||
lodash.lowercase "4.3.0"
|
||||
|
||||
"@graphql-tools/batch-execute@8.4.1":
|
||||
version "8.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.4.1.tgz#bc5e96ad22c545676da523bae3c3dc94e57bdf3e"
|
||||
integrity sha512-63+lNWrwXmofjZVa7ML+n9CBviClF3K+RP3Xx3hxGQ8BrhvB1pWS1yzaUZqrkiiKdTu1v3mJGVfmooHwzlyPwQ==
|
||||
"@graphql-tools/batch-execute@^8.3.1":
|
||||
version "8.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.3.1.tgz#0b74c54db5ac1c5b9a273baefc034c2343ebbb74"
|
||||
integrity sha512-63kHY8ZdoO5FoeDXYHnAak1R3ysMViMPwWC2XUblFckuVLMUPmB2ONje8rjr2CvzWBHAW8c1Zsex+U3xhKtGIA==
|
||||
dependencies:
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
dataloader "2.0.0"
|
||||
tslib "~2.3.0"
|
||||
value-or-promise "1.0.11"
|
||||
|
||||
"@graphql-tools/code-file-loader@^7.2.8":
|
||||
version "7.2.10"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.2.10.tgz#cdae206399061b198652964213b32309e5980af1"
|
||||
integrity sha512-41QkLztHhoDXBp2EtbKwQNQHv4HEDzpEmbOD0y3OVOXf8TBVUnFUMlnGn77a6f4zVi3rHWxHgJJ79iyJ0MYQ5w==
|
||||
dependencies:
|
||||
"@graphql-tools/graphql-tag-pluck" "7.2.2"
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
globby "^11.0.3"
|
||||
tslib "~2.3.0"
|
||||
unixify "^1.0.0"
|
||||
|
||||
"@graphql-tools/delegate@8.7.1":
|
||||
version "8.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.7.1.tgz#f30b9d035a76dc7a8e9292f31bb073fb4d6d9d83"
|
||||
integrity sha512-e98/NRaOH5wQy624bRd5i5qUKz5tCs8u4xBmxW89d7t6V6CveXj7pvAgmnR9DbwOkO6IA3P799p/aa/YG/pWTA==
|
||||
dependencies:
|
||||
"@graphql-tools/batch-execute" "8.4.1"
|
||||
"@graphql-tools/schema" "8.3.6"
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
dataloader "2.0.0"
|
||||
graphql-executor "0.0.22"
|
||||
tslib "~2.3.0"
|
||||
value-or-promise "1.0.11"
|
||||
|
||||
"@graphql-tools/graphql-file-loader@^7.3.7":
|
||||
version "7.3.7"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.3.7.tgz#f5cb05b0e3cd462d74eae47c5b9c08ed6b989837"
|
||||
integrity sha512-fwXLycYvabPhusGtYuFrOPbjeIvLWr6viGkQc9KmiBm2Z2kZrlNRNUlYkXXRzMoiqRkzqFJYhOgWDE7LsOnbjw==
|
||||
dependencies:
|
||||
"@graphql-tools/import" "6.6.9"
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
globby "^11.0.3"
|
||||
tslib "~2.3.0"
|
||||
unixify "^1.0.0"
|
||||
|
||||
"@graphql-tools/graphql-tag-pluck@7.2.2", "@graphql-tools/graphql-tag-pluck@^7.2.0":
|
||||
"@graphql-tools/code-file-loader@7.2.2":
|
||||
version "7.2.2"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.2.2.tgz#449bb0516a2aceb9c0251c321c8cde46c7b42b7d"
|
||||
integrity sha512-5gYk6Cj35eU6N9+2WtV4tsCcJACVPK2F3+xci2WgoPrDZXYQshx6tyuIQIFszyhxWNa1KViwCZyxVy6U1UnqzA==
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/code-file-loader/-/code-file-loader-7.2.2.tgz#79f8ce5723ee87ecb4d490d1497ac7e616340358"
|
||||
integrity sha512-AADyxqipGWLBl4N59CGPgv3i35UF1fQpJvbC5a6TXmcppnghD2olDLewOh1pIQrwxGAAh1S75XVIi28PTKYZhg==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.16.8"
|
||||
"@babel/traverse" "^7.16.8"
|
||||
"@babel/types" "^7.16.8"
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/graphql-tag-pluck" "^7.1.3"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
globby "^11.0.3"
|
||||
tslib "~2.3.0"
|
||||
unixify "^1.0.0"
|
||||
|
||||
"@graphql-tools/delegate@^8.4.1", "@graphql-tools/delegate@^8.4.2":
|
||||
version "8.4.2"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.4.2.tgz#a61d45719855720304e3656800342cfa17d82558"
|
||||
integrity sha512-CjggOhiL4WtyG2I3kux+1/p8lQxSFHBj0gwa0NxnQ6Vsnpw7Ig5VP1ovPnitFuBv2k4QdC37Nj2xv2n7DRn8fw==
|
||||
dependencies:
|
||||
"@graphql-tools/batch-execute" "^8.3.1"
|
||||
"@graphql-tools/schema" "^8.3.1"
|
||||
"@graphql-tools/utils" "^8.5.3"
|
||||
dataloader "2.0.0"
|
||||
tslib "~2.3.0"
|
||||
value-or-promise "1.0.11"
|
||||
|
||||
"@graphql-tools/graphql-file-loader@^7.3.2":
|
||||
version "7.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-file-loader/-/graphql-file-loader-7.3.3.tgz#7cee2f84f08dc13fa756820b510248b857583d36"
|
||||
integrity sha512-6kUJZiNpYKVhum9E5wfl5PyLLupEDYdH7c8l6oMrk6c7EPEVs6iSUyB7yQoWrtJccJLULBW2CRQ5IHp5JYK0mA==
|
||||
dependencies:
|
||||
"@graphql-tools/import" "^6.5.7"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
globby "^11.0.3"
|
||||
tslib "~2.3.0"
|
||||
unixify "^1.0.0"
|
||||
|
||||
"@graphql-tools/graphql-tag-pluck@7.1.3", "@graphql-tools/graphql-tag-pluck@^7.1.3":
|
||||
version "7.1.3"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/graphql-tag-pluck/-/graphql-tag-pluck-7.1.3.tgz#2c638aac84f279f95bf3da50b71f2b4b82641539"
|
||||
integrity sha512-zxVYLiAnNxFg6bnDZdNpLJNfjf6GHYLQsVHDcbYyQcWJzIaeWPylX/Q1gyvw8MFO4ICYExNPqgBA/is2kZBlHw==
|
||||
dependencies:
|
||||
"@babel/parser" "7.15.8"
|
||||
"@babel/traverse" "7.15.4"
|
||||
"@babel/types" "7.15.6"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-tools/import@6.6.9":
|
||||
version "6.6.9"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.6.9.tgz#53e1517074c756b5191d23d4f1528246913d44ba"
|
||||
integrity sha512-sKaLqvPmNLQlY4te+nnBhRrf5WBISoiyVkbriCLz0kHw805iHdJaU2KxUoHsRTR7WlYq0g9gzB0oVaRh99Q5aA==
|
||||
"@graphql-tools/import@6.6.1", "@graphql-tools/import@^6.5.7":
|
||||
version "6.6.1"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/import/-/import-6.6.1.tgz#2a7e1ceda10103ffeb8652a48ddc47150b035485"
|
||||
integrity sha512-i9WA6k+erJMci822o9w9DoX+uncVBK60LGGYW8mdbhX0l7wEubUpA000thJ1aarCusYh0u+ZT9qX0HyVPXu25Q==
|
||||
dependencies:
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/utils" "8.5.3"
|
||||
resolve-from "5.0.0"
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-tools/json-file-loader@^7.3.7":
|
||||
version "7.3.7"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-7.3.7.tgz#3ddae0b15d3c57d1980fa5203541c2e6cd6a5ff4"
|
||||
integrity sha512-dm0LcfiWYin7cUR4RWC33C9bNppujvSU7hwTH+sHmSguNnat9Kn8dBntVSgrY3qCbKuGfz/PshQHIODXrRwAKg==
|
||||
"@graphql-tools/json-file-loader@^7.3.2":
|
||||
version "7.3.3"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/json-file-loader/-/json-file-loader-7.3.3.tgz#45cfde77b9dc4ab6c21575305ae537d2814d237f"
|
||||
integrity sha512-CN2Qk9rt+Gepa3rb3X/mpxYA5MIYLwZBPj2Njw6lbZ6AaxG+O1ArDCL5ACoiWiBimn1FCOM778uhRM9znd0b3Q==
|
||||
dependencies:
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
globby "^11.0.3"
|
||||
tslib "~2.3.0"
|
||||
unixify "^1.0.0"
|
||||
|
||||
"@graphql-tools/load@^7.5.5":
|
||||
version "7.5.6"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.5.6.tgz#d0ee8149ba4cbc799dbeae30e4843144773f8296"
|
||||
integrity sha512-IocEP4METGdbDzV44VaeiXO387NOYSW4cTuBP8qybHZX0XlIp8bEv7c8GKS3m8DeRop/9SnOL7HyiAfNMA4Chg==
|
||||
"@graphql-tools/load@^7.4.1":
|
||||
version "7.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/load/-/load-7.4.1.tgz#aa572fcef11d6028097b6ef39c13fa9d62e5a441"
|
||||
integrity sha512-UvBodW5hRHpgBUBVz5K5VIhJDOTFIbRRAGD6sQ2l9J5FDKBEs3u/6JjZDzbdL96br94D5cEd2Tk6auaHpTn7mQ==
|
||||
dependencies:
|
||||
"@graphql-tools/schema" "8.3.6"
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/schema" "8.3.1"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
p-limit "3.1.0"
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-tools/merge@8.2.6", "@graphql-tools/merge@^8.2.6":
|
||||
version "8.2.6"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.2.6.tgz#7fb615fa9c143c3151ff025e501d52bd48186d19"
|
||||
integrity sha512-dkwTm4czMISi/Io47IVvq2Fl9q4TIGKpJ0VZjuXYdEFkECyH6A5uwxZfPVandZG+gQs8ocFFoa6RisiUJLZrJw==
|
||||
"@graphql-tools/merge@^8.2.1":
|
||||
version "8.2.1"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.2.1.tgz#bf83aa06a0cfc6a839e52a58057a84498d0d51ff"
|
||||
integrity sha512-Q240kcUszhXiAYudjuJgNuLgy9CryDP3wp83NOZQezfA6h3ByYKU7xI6DiKrdjyVaGpYN3ppUmdj0uf5GaXzMA==
|
||||
dependencies:
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-tools/schema@8.3.6":
|
||||
version "8.3.6"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.3.6.tgz#80cfe3eba53eb6390a60a30078d7efbdaa5cc0b7"
|
||||
integrity sha512-7tWYRQ8hB/rv2zAtv2LtnQl4UybyJPtRz/VLKRmgi7+F5t8iYBahmmsxMDAYMWMmWMqEDiKk54TvAes+J069rQ==
|
||||
"@graphql-tools/schema@8.3.1", "@graphql-tools/schema@^8.3.1":
|
||||
version "8.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.3.1.tgz#1ee9da494d2da457643b3c93502b94c3c4b68c74"
|
||||
integrity sha512-3R0AJFe715p4GwF067G5i0KCr/XIdvSfDLvTLEiTDQ8V/hwbOHEKHKWlEBHGRQwkG5lwFQlW1aOn7VnlPERnWQ==
|
||||
dependencies:
|
||||
"@graphql-tools/merge" "8.2.6"
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/merge" "^8.2.1"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
tslib "~2.3.0"
|
||||
value-or-promise "1.0.11"
|
||||
|
||||
"@graphql-tools/url-loader@^7.9.7":
|
||||
version "7.9.8"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.9.8.tgz#8e50ca05fb670bf91b98abdcb5d8d9cb116003f3"
|
||||
integrity sha512-nRMXwwoIDLt7ohBWvKKjEEH61YS1nnWs6BVgGStePfmRGrhxECpLWmfAmKLNXPqDJN7Nu6ykFJYjt65j5l6qsw==
|
||||
"@graphql-tools/url-loader@^7.4.2":
|
||||
version "7.5.2"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/url-loader/-/url-loader-7.5.2.tgz#fb3737fd1269ab61b195b63052179b6049d90ce1"
|
||||
integrity sha512-EilHqbhUY/qg55SSEdklDhPXgSz9+9a63SX3mcD8J2qwZHJD/wOLcyKs8m6BXfuGwUiuB0j3fmDSEVmva2onBg==
|
||||
dependencies:
|
||||
"@graphql-tools/delegate" "8.7.1"
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/wrap" "8.4.10"
|
||||
"@n1ru4l/graphql-live-query" "^0.9.0"
|
||||
"@types/websocket" "^1.0.4"
|
||||
"@graphql-tools/delegate" "^8.4.1"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
"@graphql-tools/wrap" "^8.3.1"
|
||||
"@n1ru4l/graphql-live-query" "0.9.0"
|
||||
"@types/websocket" "1.0.4"
|
||||
"@types/ws" "^8.0.0"
|
||||
cross-undici-fetch "^0.1.19"
|
||||
cross-undici-fetch "^0.0.20"
|
||||
dset "^3.1.0"
|
||||
extract-files "^11.0.0"
|
||||
extract-files "11.0.0"
|
||||
graphql-sse "^1.0.1"
|
||||
graphql-ws "^5.4.1"
|
||||
isomorphic-ws "^4.0.1"
|
||||
meros "^1.1.4"
|
||||
isomorphic-ws "4.0.1"
|
||||
meros "1.1.4"
|
||||
subscriptions-transport-ws "^0.11.0"
|
||||
sync-fetch "^0.3.1"
|
||||
tslib "^2.3.0"
|
||||
value-or-promise "^1.0.11"
|
||||
ws "^8.3.0"
|
||||
sync-fetch "0.3.1"
|
||||
tslib "~2.3.0"
|
||||
valid-url "1.0.9"
|
||||
value-or-promise "1.0.11"
|
||||
ws "8.2.3"
|
||||
|
||||
"@graphql-tools/utils@8.6.5", "@graphql-tools/utils@^8.6.5":
|
||||
version "8.6.5"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.6.5.tgz#ac04571b03f854c7a938b2ab700516a6c6d32335"
|
||||
integrity sha512-mjOtaWiS2WIqRz/cq5gaeM3sVrllcu2xbtHROw1su1v3xWa3D3dKgn8Lrl7+tvWs5WUVySsBss/VZ3WdoPkCrA==
|
||||
"@graphql-tools/utils@8.5.3", "@graphql-tools/utils@^8.5.1", "@graphql-tools/utils@^8.5.3":
|
||||
version "8.5.3"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.5.3.tgz#404062e62cae9453501197039687749c4885356e"
|
||||
integrity sha512-HDNGWFVa8QQkoQB0H1lftvaO1X5xUaUDk1zr1qDe0xN1NL0E/CrQdJ5UKLqOvH4hkqVUPxQsyOoAZFkaH6rLHg==
|
||||
dependencies:
|
||||
tslib "~2.3.0"
|
||||
|
||||
"@graphql-tools/wrap@8.4.10":
|
||||
version "8.4.10"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-8.4.10.tgz#010be7d4bafa5d79cd1917c65d09f2682bcb9d54"
|
||||
integrity sha512-1/pcKRDTGIUspUl6uhlfQ0u1l4j15TVGkOkijI+gX25Q9sfAJclT0bovKBksP39G6v4hZnolpOU2txJ47MxxEg==
|
||||
"@graphql-tools/wrap@^8.3.1":
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@graphql-tools/wrap/-/wrap-8.3.2.tgz#d3bcecb7529d071e4ecc4dfc75b9566e3da79d4f"
|
||||
integrity sha512-7DcOBFB+Dd84x9dxSm7qS4iJONMyfLnCJb8A19vGPffpu4SMJ3sFcgwibKFu5l6mMUiigKgXna2RRgWI+02bKQ==
|
||||
dependencies:
|
||||
"@graphql-tools/delegate" "8.7.1"
|
||||
"@graphql-tools/schema" "8.3.6"
|
||||
"@graphql-tools/utils" "8.6.5"
|
||||
"@graphql-tools/delegate" "^8.4.2"
|
||||
"@graphql-tools/schema" "^8.3.1"
|
||||
"@graphql-tools/utils" "^8.5.3"
|
||||
tslib "~2.3.0"
|
||||
value-or-promise "1.0.11"
|
||||
|
||||
|
@ -1397,7 +1431,7 @@
|
|||
resolved "https://registry.yarnpkg.com/@miragejs/pretender-node-polyfill/-/pretender-node-polyfill-0.1.2.tgz#d26b6b7483fb70cd62189d05c95d2f67153e43f2"
|
||||
integrity sha512-M/BexG/p05C5lFfMunxo/QcgIJnMT2vDVCd00wNqK2ImZONIlEETZwWJu1QtLxtmYlSHlCFl3JNzp0tLe7OJ5g==
|
||||
|
||||
"@n1ru4l/graphql-live-query@^0.9.0":
|
||||
"@n1ru4l/graphql-live-query@0.9.0":
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/@n1ru4l/graphql-live-query/-/graphql-live-query-0.9.0.tgz#defaebdd31f625bee49e6745934f36312532b2bc"
|
||||
integrity sha512-BTpWy1e+FxN82RnLz4x1+JcEewVdfmUhV1C6/XYD5AjS7PQp9QFF7K8bCD6gzPTr2l+prvqOyVueQhFJxB1vfg==
|
||||
|
@ -2176,10 +2210,10 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d"
|
||||
integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==
|
||||
|
||||
"@types/websocket@^1.0.4":
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.5.tgz#3fb80ed8e07f88e51961211cd3682a3a4a81569c"
|
||||
integrity sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==
|
||||
"@types/websocket@1.0.4":
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.4.tgz#1dc497280d8049a5450854dd698ee7e6ea9e60b8"
|
||||
integrity sha512-qn1LkcFEKK8RPp459jkjzsfpbsx36BBt3oC3pITYtkoBw/aVX+EZFa5j3ThCRTNpLFvIMr5dSTD4RaMdilIOpA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
|
@ -3382,14 +3416,6 @@ catharsis@~0.8.9:
|
|||
dependencies:
|
||||
underscore-contrib "~0.3.0"
|
||||
|
||||
chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
||||
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
|
||||
dependencies:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^2.0.0, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
|
@ -3407,6 +3433,14 @@ chalk@^3.0.0:
|
|||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^4.0.0, chalk@^4.1.0:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
||||
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
|
||||
dependencies:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
char-regex@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
|
||||
|
@ -3645,7 +3679,7 @@ colorette@^2.0.10, colorette@^2.0.14:
|
|||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
|
||||
integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
|
||||
|
||||
combined-stream@^1.0.6, combined-stream@~1.0.6:
|
||||
combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||
|
@ -3989,17 +4023,15 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3:
|
|||
shebang-command "^2.0.0"
|
||||
which "^2.0.1"
|
||||
|
||||
cross-undici-fetch@^0.1.19:
|
||||
version "0.1.28"
|
||||
resolved "https://registry.yarnpkg.com/cross-undici-fetch/-/cross-undici-fetch-0.1.28.tgz#40b7071b9ab2d1d6aff889836205e1972092e8d1"
|
||||
integrity sha512-/nLMyVE5IC9PQdBtmgjpGZfK0wo8UupomAPx+7HlbEgVDkZOa9xCiZP9goo5aLYofP0gHXgovjXdXrE2obANag==
|
||||
cross-undici-fetch@^0.0.20:
|
||||
version "0.0.20"
|
||||
resolved "https://registry.yarnpkg.com/cross-undici-fetch/-/cross-undici-fetch-0.0.20.tgz#6b7c5ac82a3601edd439f37275ac0319d77a120a"
|
||||
integrity sha512-5d3WBC4VRHpFndECK9bx4TngXrw0OUXdhX561Ty1ZoqMASz9uf55BblhTC1CO6GhMWnvk9SOqYEXQliq6D2P4A==
|
||||
dependencies:
|
||||
abort-controller "^3.0.0"
|
||||
form-data-encoder "^1.7.1"
|
||||
formdata-node "^4.3.1"
|
||||
node-fetch "^2.6.7"
|
||||
undici "^5.0.0"
|
||||
web-streams-polyfill "^3.2.0"
|
||||
form-data "^4.0.0"
|
||||
node-fetch "^2.6.5"
|
||||
undici "^4.9.3"
|
||||
|
||||
crypt@~0.0.1:
|
||||
version "0.0.2"
|
||||
|
@ -4700,13 +4732,6 @@ debug@3.1.0:
|
|||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@4.3.4, debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7:
|
||||
version "3.2.7"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
|
||||
|
@ -4714,6 +4739,13 @@ debug@^3.1.0, debug@^3.1.1, debug@^3.2.6, debug@^3.2.7:
|
|||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.3:
|
||||
version "4.3.4"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
|
||||
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
|
||||
dependencies:
|
||||
ms "2.1.2"
|
||||
|
||||
decamelize-keys@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9"
|
||||
|
@ -5758,16 +5790,16 @@ extglob@^2.0.4:
|
|||
snapdragon "^0.8.1"
|
||||
to-regex "^3.0.1"
|
||||
|
||||
extract-files@11.0.0:
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a"
|
||||
integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==
|
||||
|
||||
extract-files@^10.0.0:
|
||||
version "10.0.0"
|
||||
resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-10.0.0.tgz#228b1da1d910971cf8d7f1ed259653c6001ba5ad"
|
||||
integrity sha512-4KXYOSf8SlMlQCj94Ygy89xIZU2GTs0HU2Nz9mG2/F5TKsHyq/3sDWGjHgHmfw9RhXF3hO+pBKyC6JfIHD52bw==
|
||||
|
||||
extract-files@^11.0.0:
|
||||
version "11.0.0"
|
||||
resolved "https://registry.yarnpkg.com/extract-files/-/extract-files-11.0.0.tgz#b72d428712f787eef1f5193aff8ab5351ca8469a"
|
||||
integrity sha512-FuoE1qtbJ4bBVvv94CC7s0oTnKUGvQs+Rjf1L2SJFfS+HTVVjhPFtehPdQ0JiGPqVNfSSZvL5yzHHQq2Z4WNhQ==
|
||||
|
||||
extract-from-css@^0.4.4:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/extract-from-css/-/extract-from-css-0.4.4.tgz#1ea7df2e7c7c6eb9922fa08e8adaea486f6f8f92"
|
||||
|
@ -5790,7 +5822,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
|
|||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
|
||||
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
|
||||
|
||||
fast-glob@3.2.11, fast-glob@^3.2.11, fast-glob@^3.2.4, fast-glob@^3.2.9:
|
||||
fast-glob@^3.2.11, fast-glob@^3.2.4, fast-glob@^3.2.9:
|
||||
version "3.2.11"
|
||||
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
|
||||
integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
|
||||
|
@ -5987,10 +6019,14 @@ forever-agent@~0.6.1:
|
|||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||
|
||||
form-data-encoder@^1.7.1:
|
||||
version "1.7.2"
|
||||
resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz#1f1ae3dccf58ed4690b86d87e4f57c654fbab040"
|
||||
integrity sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==
|
||||
form-data@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||
integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.8"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
form-data@~2.3.2:
|
||||
version "2.3.3"
|
||||
|
@ -6006,14 +6042,6 @@ format@^0.2.0:
|
|||
resolved "https://registry.yarnpkg.com/format/-/format-0.2.2.tgz#d6170107e9efdc4ed30c9dc39016df942b5cb58b"
|
||||
integrity sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=
|
||||
|
||||
formdata-node@^4.3.1:
|
||||
version "4.3.2"
|
||||
resolved "https://registry.yarnpkg.com/formdata-node/-/formdata-node-4.3.2.tgz#0262e94931e36db7239c2b08bdb6aaf18ec47d21"
|
||||
integrity sha512-k7lYJyzDOSL6h917favP8j1L0/wNyylzU+x+1w4p5haGVHNlP58dbpdJhiCUsDbWsa9HwEtLp89obQgXl2e0qg==
|
||||
dependencies:
|
||||
node-domexception "1.0.0"
|
||||
web-streams-polyfill "4.0.0-beta.1"
|
||||
|
||||
forwarded@0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
||||
|
@ -6291,21 +6319,21 @@ graphlib@^2.1.8:
|
|||
dependencies:
|
||||
lodash "^4.17.15"
|
||||
|
||||
graphql-config@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-4.3.0.tgz#b9bb7bf9c892a90e66ea937e8d7ed170eb1fd5e2"
|
||||
integrity sha512-Uiu3X7+s5c056WyrvdZVz2vG1fhAipMlYmtiCU/4Z2mX79OXDr1SqIon2MprC/pExIWJfAQZCcjYDY76fPBUQg==
|
||||
graphql-config@4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/graphql-config/-/graphql-config-4.1.0.tgz#a3b28d3fb537952ebeb69c75e4430605a10695e3"
|
||||
integrity sha512-Myqay6pmdcmX3KqoH+bMbeKZ1cTODpHS2CxF1ZzNnfTE+YUpGTcp01bOw6LpzamRb0T/WTYtGFbZeXGo9Hab2Q==
|
||||
dependencies:
|
||||
"@endemolshinegroup/cosmiconfig-typescript-loader" "3.0.2"
|
||||
"@graphql-tools/graphql-file-loader" "^7.3.7"
|
||||
"@graphql-tools/json-file-loader" "^7.3.7"
|
||||
"@graphql-tools/load" "^7.5.5"
|
||||
"@graphql-tools/merge" "^8.2.6"
|
||||
"@graphql-tools/url-loader" "^7.9.7"
|
||||
"@graphql-tools/utils" "^8.6.5"
|
||||
"@graphql-tools/graphql-file-loader" "^7.3.2"
|
||||
"@graphql-tools/json-file-loader" "^7.3.2"
|
||||
"@graphql-tools/load" "^7.4.1"
|
||||
"@graphql-tools/merge" "^8.2.1"
|
||||
"@graphql-tools/url-loader" "^7.4.2"
|
||||
"@graphql-tools/utils" "^8.5.1"
|
||||
cosmiconfig "7.0.1"
|
||||
cosmiconfig-toml-loader "1.0.0"
|
||||
minimatch "4.2.1"
|
||||
minimatch "3.0.4"
|
||||
string-env-interpolation "1.0.1"
|
||||
|
||||
graphql-depth-limit@1.1.0:
|
||||
|
@ -6315,11 +6343,6 @@ graphql-depth-limit@1.1.0:
|
|||
dependencies:
|
||||
arrify "^1.0.1"
|
||||
|
||||
graphql-executor@0.0.22:
|
||||
version "0.0.22"
|
||||
resolved "https://registry.yarnpkg.com/graphql-executor/-/graphql-executor-0.0.22.tgz#14bc466bb27ab38346998e0b375cba55685eed94"
|
||||
integrity sha512-WbKSnSHFn6REKKH4T6UAwDM3mLUnYMQlQLNG0Fw+Lkb3ilCnL3m5lkJ7411LAI9sF7BvPbthovVZhsEUh9Xfag==
|
||||
|
||||
graphql-sse@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/graphql-sse/-/graphql-sse-1.0.4.tgz#051598b0e06c225327aac659f19fcc18bcaa0191"
|
||||
|
@ -7221,7 +7244,7 @@ isobject@^3.0.0, isobject@^3.0.1:
|
|||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
||||
|
||||
isomorphic-ws@^4.0.1:
|
||||
isomorphic-ws@4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc"
|
||||
integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==
|
||||
|
@ -8565,10 +8588,10 @@ mermaid@^8.13.10:
|
|||
moment-mini "^2.24.0"
|
||||
stylis "^4.0.10"
|
||||
|
||||
meros@^1.1.4:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/meros/-/meros-1.2.0.tgz#096cdede2eb0b1610b219b1031b935260de1ad08"
|
||||
integrity sha512-3QRZIS707pZQnijHdhbttXRWwrHhZJ/gzolneoxKVz9N/xmsvY/7Ls8lpnI9gxbgxjcHsAVEW3mgwiZCo6kkJQ==
|
||||
meros@1.1.4:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/meros/-/meros-1.1.4.tgz#c17994d3133db8b23807f62bec7f0cb276cfd948"
|
||||
integrity sha512-E9ZXfK9iQfG9s73ars9qvvvbSIkJZF5yOo9j4tcwM5tN8mUKfj/EKN5PzOr3ZH0y5wL7dLAHw3RVEfpQV9Q7VQ==
|
||||
|
||||
methods@~1.1.2:
|
||||
version "1.1.2"
|
||||
|
@ -8859,14 +8882,7 @@ minimalistic-crypto-utils@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||
integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
|
||||
|
||||
minimatch@4.2.1:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-4.2.1.tgz#40d9d511a46bdc4e563c22c3080cde9c0d8299b4"
|
||||
integrity sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==
|
||||
dependencies:
|
||||
brace-expansion "^1.1.7"
|
||||
|
||||
minimatch@^3.0.4, minimatch@~3.0.4:
|
||||
minimatch@3.0.4, minimatch@^3.0.4, 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==
|
||||
|
@ -9107,20 +9123,15 @@ nice-try@^1.0.4:
|
|||
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
|
||||
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
|
||||
|
||||
node-domexception@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5"
|
||||
integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==
|
||||
|
||||
node-ensure@^0.0.0:
|
||||
version "0.0.0"
|
||||
resolved "https://registry.yarnpkg.com/node-ensure/-/node-ensure-0.0.0.tgz#ecae764150de99861ec5c810fd5d096b183932a7"
|
||||
integrity sha1-7K52QVDemYYexcgQ/V0Jaxg5Mqc=
|
||||
|
||||
node-fetch@^2.6.1, node-fetch@^2.6.7:
|
||||
version "2.6.7"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
|
||||
integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
|
||||
node-fetch@^2.6.1, node-fetch@^2.6.5:
|
||||
version "2.6.6"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89"
|
||||
integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA==
|
||||
dependencies:
|
||||
whatwg-url "^5.0.0"
|
||||
|
||||
|
@ -10770,12 +10781,12 @@ sade@^1.7.3:
|
|||
dependencies:
|
||||
mri "^1.1.0"
|
||||
|
||||
safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
safe-buffer@5.1.2, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2:
|
||||
safe-buffer@5.2.1:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||
|
@ -11641,7 +11652,7 @@ symbol-tree@^3.2.4:
|
|||
resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2"
|
||||
integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==
|
||||
|
||||
sync-fetch@^0.3.1:
|
||||
sync-fetch@0.3.1:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/sync-fetch/-/sync-fetch-0.3.1.tgz#62aa82c4b4d43afd6906bfd7b5f92056458509f0"
|
||||
integrity sha512-xj5qiCDap/03kpci5a+qc5wSJjc8ZSixgG2EUmH1B8Ea2sfWclQA7eH40hiHPCtkCn6MCk4Wb+dqcXdCy2PP3g==
|
||||
|
@ -12089,10 +12100,10 @@ underscore@~1.8.3:
|
|||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022"
|
||||
integrity sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=
|
||||
|
||||
undici@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/undici/-/undici-5.0.0.tgz#3c1e08c7f0df90c485d5d8dbb0517e11e34f2090"
|
||||
integrity sha512-VhUpiZ3No1DOPPQVQnsDZyfcbTTcHdcgWej1PdFnSvOeJmOVDgiOHkunJmBLfmjt4CqgPQddPVjSWW0dsTs5Yg==
|
||||
undici@^4.9.3:
|
||||
version "4.10.2"
|
||||
resolved "https://registry.yarnpkg.com/undici/-/undici-4.10.2.tgz#27e360f2d4202ef98dfc1c8e13dcd329660a6d7c"
|
||||
integrity sha512-QoQH4PpV3dqJwr4h1HazggbB4f5CBknvYANjI9hxXCml+AAzLoh4HBkce0Jc0wW/pmVbrus8Gfeo8QounE+/9g==
|
||||
|
||||
unicode-canonical-property-names-ecmascript@^1.0.4:
|
||||
version "1.0.4"
|
||||
|
@ -12387,6 +12398,11 @@ v8-to-istanbul@^5.0.1:
|
|||
convert-source-map "^1.6.0"
|
||||
source-map "^0.7.3"
|
||||
|
||||
valid-url@1.0.9:
|
||||
version "1.0.9"
|
||||
resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200"
|
||||
integrity sha1-HBRHm0DxOXp1eC8RXkCGRHQzogA=
|
||||
|
||||
validate-npm-package-license@^3.0.1:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
|
||||
|
@ -12395,7 +12411,7 @@ validate-npm-package-license@^3.0.1:
|
|||
spdx-correct "^3.0.0"
|
||||
spdx-expression-parse "^3.0.0"
|
||||
|
||||
value-or-promise@1.0.11, value-or-promise@^1.0.11:
|
||||
value-or-promise@1.0.11:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140"
|
||||
integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==
|
||||
|
@ -12696,16 +12712,6 @@ web-namespaces@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-2.0.1.tgz#1010ff7c650eccb2592cebeeaf9a1b253fd40692"
|
||||
integrity sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==
|
||||
|
||||
web-streams-polyfill@4.0.0-beta.1:
|
||||
version "4.0.0-beta.1"
|
||||
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.1.tgz#3b19b9817374b7cee06d374ba7eeb3aeb80e8c95"
|
||||
integrity sha512-3ux37gEX670UUphBF9AMCq8XM6iQ8Ac6A+DSRRjDoRBm1ufCkaCDdNVbaqq60PsEkdNlLKrGtv/YBP4EJXqNtQ==
|
||||
|
||||
web-streams-polyfill@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.0.tgz#a6b74026b38e4885869fb5c589e90b95ccfc7965"
|
||||
integrity sha512-EqPmREeOzttaLRm5HS7io98goBgZ7IVz79aDvqjD0kYXLtFZTc0T/U6wHTPKyIjb+MdN7DFIIX6hgdBEpWmfPA==
|
||||
|
||||
web-vitals@^0.2.4:
|
||||
version "0.2.4"
|
||||
resolved "https://registry.yarnpkg.com/web-vitals/-/web-vitals-0.2.4.tgz#ec3df43c834a207fd7cdefd732b2987896e08511"
|
||||
|
@ -12983,12 +12989,17 @@ write-file-atomic@^4.0.0:
|
|||
signal-exit "^3.0.2"
|
||||
typedarray-to-buffer "^4.0.0"
|
||||
|
||||
ws@8.2.3:
|
||||
version "8.2.3"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba"
|
||||
integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==
|
||||
|
||||
"ws@^5.2.0 || ^6.0.0 || ^7.0.0", ws@^7.2.3, ws@^7.3.1:
|
||||
version "7.5.5"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881"
|
||||
integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==
|
||||
|
||||
ws@^8.3.0, ws@^8.4.2:
|
||||
ws@^8.4.2:
|
||||
version "8.5.0"
|
||||
resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f"
|
||||
integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==
|
||||
|
|
Loading…
Reference in New Issue