Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
6935893d92
commit
7bb8cd1ac8
|
|
@ -1 +1 @@
|
|||
d934f66ca22f94465fac2fb2daa0ba7e57a78910
|
||||
838089751c1ffa6700b328f3060ce869217393fe
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
d4d02fb2e324aebcfc9246f5ed095306c85679cc
|
||||
a829db9df33a435196420f7619820c7711a679c2
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
<script>
|
||||
// eslint-disable-next-line no-restricted-imports
|
||||
import { mapGetters, mapActions } from 'vuex';
|
||||
import { mapState, mapActions } from 'pinia';
|
||||
import { v4 as uuidv4 } from 'uuid';
|
||||
import DuoCodeReviewSystemNote from 'ee_component/vue_shared/components/notes/duo_code_review_system_note.vue';
|
||||
import { InternalEvents } from '~/tracking';
|
||||
|
|
@ -20,6 +19,7 @@ import SystemNote from '~/vue_shared/components/notes/system_note.vue';
|
|||
import { Mousetrap } from '~/lib/mousetrap';
|
||||
import { ISSUABLE_COMMENT_OR_REPLY, keysFor } from '~/behaviors/shortcuts/keybindings';
|
||||
import { CopyAsGFM } from '~/behaviors/markdown/copy_as_gfm';
|
||||
import { useNotes } from '~/notes/store/legacy_notes';
|
||||
import * as constants from '../constants';
|
||||
import eventHub from '../event_hub';
|
||||
import noteQuery from '../graphql/note.query.graphql';
|
||||
|
|
@ -145,9 +145,8 @@ export default {
|
|||
},
|
||||
},
|
||||
computed: {
|
||||
...mapGetters([
|
||||
...mapState(useNotes, [
|
||||
'isNotesFetched',
|
||||
'discussions',
|
||||
'convertedDisscussionIds',
|
||||
'getNotesDataByProp',
|
||||
'isLoading',
|
||||
|
|
@ -159,6 +158,7 @@ export default {
|
|||
'timelineEnabled',
|
||||
'targetNoteHash',
|
||||
]),
|
||||
...mapState(useNotes, { discussions: 'filteredDiscussions' }),
|
||||
sortDirDesc() {
|
||||
return this.sortDirection === constants.DESC;
|
||||
},
|
||||
|
|
@ -239,10 +239,7 @@ export default {
|
|||
mounted() {
|
||||
const { parentElement } = this.$el;
|
||||
if (parentElement && parentElement.classList.contains('js-vue-notes-event')) {
|
||||
parentElement.addEventListener('toggleAward', (event) => {
|
||||
const { awardName, noteId } = event.detail;
|
||||
this.toggleAward({ awardName, noteId });
|
||||
});
|
||||
parentElement.addEventListener('toggleAward', this.handleAward);
|
||||
}
|
||||
|
||||
eventHub.$on('noteFormAddToReview', this.handleReviewTracking);
|
||||
|
|
@ -268,9 +265,13 @@ export default {
|
|||
eventHub.$off('noteFormStartReview', this.handleReviewTracking);
|
||||
eventHub.$off('noteFormAddToReview', this.handleReviewTracking);
|
||||
Mousetrap.unbind(keysFor(ISSUABLE_COMMENT_OR_REPLY), this.quoteReply);
|
||||
const { parentElement } = this.$el;
|
||||
if (parentElement && parentElement.classList.contains('js-vue-notes-event')) {
|
||||
parentElement.removeEventListener('toggleAward', this.handleAward);
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapActions([
|
||||
...mapActions(useNotes, [
|
||||
'toggleAward',
|
||||
'setLastFetchedAt',
|
||||
'setTargetNoteHash',
|
||||
|
|
@ -281,6 +282,10 @@ export default {
|
|||
'setConfidentiality',
|
||||
'fetchNotes',
|
||||
]),
|
||||
handleAward(event) {
|
||||
const { awardName, noteId } = event.detail;
|
||||
this.toggleAward({ awardName, noteId });
|
||||
},
|
||||
getDiscussionInSelection() {
|
||||
const selection = window.getSelection();
|
||||
if (selection.rangeCount <= 0) return null;
|
||||
|
|
@ -339,10 +344,10 @@ export default {
|
|||
|
||||
return noteId;
|
||||
},
|
||||
startReplying(discussionId) {
|
||||
return this.convertToDiscussion(discussionId)
|
||||
.then(this.$nextTick)
|
||||
.then(() => eventHub.$emit('startReplying', discussionId));
|
||||
async startReplying(discussionId) {
|
||||
this.convertToDiscussion(discussionId);
|
||||
await this.$nextTick();
|
||||
eventHub.$emit('startReplying', discussionId);
|
||||
},
|
||||
setAiLoading(loading) {
|
||||
this.aiLoading = loading;
|
||||
|
|
|
|||
|
|
@ -52,7 +52,13 @@ class GraphqlChannel < ApplicationCable::Channel # rubocop:disable Gitlab/Namesp
|
|||
def context
|
||||
request_authenticator = Gitlab::Auth::RequestAuthenticator.new(request)
|
||||
scope_validator = ::Gitlab::Auth::ScopeValidator.new(current_user, request_authenticator)
|
||||
{ channel: self, current_user: current_user, is_sessionless_user: false, scope_validator: scope_validator }
|
||||
{
|
||||
channel: self,
|
||||
current_user: current_user,
|
||||
current_organization: connection.current_organization,
|
||||
is_sessionless_user: false,
|
||||
scope_validator: scope_validator
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -7,13 +7,22 @@ module Resolvers
|
|||
|
||||
MAX_TYPES = 100
|
||||
|
||||
argument :ids, [::Types::GlobalIDType[::WorkItems::Type]],
|
||||
argument :ids,
|
||||
[::Types::GlobalIDType[::WorkItems::Type]],
|
||||
required: true,
|
||||
description: <<~DESC.squish
|
||||
Global ID array of work items types to fetch available widgets for.
|
||||
A max of #{MAX_TYPES} IDs can be provided at a time.
|
||||
DESC
|
||||
|
||||
argument :union,
|
||||
::GraphQL::Types::Boolean,
|
||||
default_value: false,
|
||||
description: <<~DESC.squish
|
||||
When true, returns the union of widgets across all work item types.
|
||||
When false, returns only widgets common to all work item types.
|
||||
DESC
|
||||
|
||||
def ready?(**args)
|
||||
if args[:ids].size > MAX_TYPES
|
||||
raise Gitlab::Graphql::Errors::ArgumentError,
|
||||
|
|
@ -26,14 +35,19 @@ module Resolvers
|
|||
super
|
||||
end
|
||||
|
||||
def resolve(ids:)
|
||||
::WorkItems::Type
|
||||
def resolve(ids:, union: false)
|
||||
all_widgets = ::WorkItems::Type
|
||||
.id_in(ids.map(&:model_id))
|
||||
.with_widget_definition_preload
|
||||
.reduce(Set.new) do |result, type|
|
||||
types = type.widgets(resource_parent).map { |widget| widget.widget_type.upcase }
|
||||
result.union(types)
|
||||
end
|
||||
.map { |type| type.widgets(resource_parent).map { |widget| widget.widget_type.upcase } }
|
||||
|
||||
return [] if all_widgets.blank?
|
||||
|
||||
if union
|
||||
all_widgets.reduce(:|)
|
||||
else
|
||||
all_widgets.reduce(:&)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
|||
|
|
@ -52,7 +52,9 @@ class NamespaceSetting < ApplicationRecord
|
|||
validates :enabled_git_access_protocol, inclusion: { in: enabled_git_access_protocols.keys }
|
||||
validates :default_branch_protection_defaults, json_schema: { filename: 'default_branch_protection_defaults' }
|
||||
validates :default_branch_protection_defaults, bytesize: { maximum: -> { DEFAULT_BRANCH_PROTECTIONS_DEFAULT_MAX_SIZE } }
|
||||
|
||||
validate :validate_enterprise_bypass_expires_at, if: ->(record) {
|
||||
record.allow_enterprise_bypass_placeholder_confirmation? && (record.new_record? || record.will_save_change_to_enterprise_bypass_expires_at?)
|
||||
}
|
||||
sanitizes! :default_branch_name
|
||||
|
||||
before_validation :set_pipeline_variables_default_role, on: :create
|
||||
|
|
@ -150,8 +152,28 @@ class NamespaceSetting < ApplicationRecord
|
|||
super
|
||||
end
|
||||
|
||||
def enterprise_placeholder_bypass_enabled?
|
||||
allow_enterprise_bypass_placeholder_confirmation? && enterprise_bypass_expires_at.present? && enterprise_bypass_expires_at.future?
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def validate_enterprise_bypass_expires_at
|
||||
if enterprise_bypass_expires_at.blank?
|
||||
errors.add(:enterprise_bypass_expires_at, 'An expiry date is required when bypass is enabled.')
|
||||
return
|
||||
end
|
||||
|
||||
min_date = Date.current.tomorrow.beginning_of_day
|
||||
max_date = Date.current.advance(years: 1, days: -1).end_of_day
|
||||
|
||||
if enterprise_bypass_expires_at < min_date
|
||||
errors.add(:enterprise_bypass_expires_at, 'The expiry date must be a future date.')
|
||||
elsif enterprise_bypass_expires_at > max_date
|
||||
errors.add(:enterprise_bypass_expires_at, 'The expiry date must be within one year from today.')
|
||||
end
|
||||
end
|
||||
|
||||
def set_pipeline_variables_default_role
|
||||
return if Gitlab::CurrentSettings.pipeline_variables_default_allowed
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AddBypassExpiryToNamespaceSettings < Gitlab::Database::Migration[2.3]
|
||||
milestone '18.2'
|
||||
|
||||
def change
|
||||
add_column :namespace_settings, :enterprise_bypass_expires_at, :datetime_with_timezone, null: true
|
||||
end
|
||||
end
|
||||
|
|
@ -0,0 +1 @@
|
|||
a321d22a9dda8d51d12b42feb076ff91d564af7070318c3805ff33d9a5d64824
|
||||
|
|
@ -18497,6 +18497,7 @@ CREATE TABLE namespace_settings (
|
|||
web_based_commit_signing_enabled boolean,
|
||||
lock_web_based_commit_signing_enabled boolean DEFAULT false NOT NULL,
|
||||
allow_enterprise_bypass_placeholder_confirmation boolean DEFAULT false NOT NULL,
|
||||
enterprise_bypass_expires_at timestamp with time zone,
|
||||
CONSTRAINT check_0ba93c78c7 CHECK ((char_length(default_branch_name) <= 255)),
|
||||
CONSTRAINT check_namespace_settings_security_policies_is_hash CHECK ((jsonb_typeof(security_policies) = 'object'::text)),
|
||||
CONSTRAINT namespace_settings_unique_project_download_limit_alertlist_size CHECK ((cardinality(unique_project_download_limit_alertlist) <= 100)),
|
||||
|
|
|
|||
|
|
@ -30846,6 +30846,7 @@ Returns [`[String!]`](#string).
|
|||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="groupworkitemswidgetsids"></a>`ids` | [`[WorkItemsTypeID!]!`](#workitemstypeid) | Global ID array of work items types to fetch available widgets for. A max of 100 IDs can be provided at a time. |
|
||||
| <a id="groupworkitemswidgetsunion"></a>`union` | [`Boolean!`](#boolean) | When true, returns the union of widgets across all work item types. When false, returns only widgets common to all work item types. |
|
||||
|
||||
##### `Group.workspacesClusterAgents`
|
||||
|
||||
|
|
@ -35163,6 +35164,7 @@ Returns [`[String!]`](#string).
|
|||
| Name | Type | Description |
|
||||
| ---- | ---- | ----------- |
|
||||
| <a id="namespaceworkitemswidgetsids"></a>`ids` | [`[WorkItemsTypeID!]!`](#workitemstypeid) | Global ID array of work items types to fetch available widgets for. A max of 100 IDs can be provided at a time. |
|
||||
| <a id="namespaceworkitemswidgetsunion"></a>`union` | [`Boolean!`](#boolean) | When true, returns the union of widgets across all work item types. When false, returns only widgets common to all work item types. |
|
||||
|
||||
##### `Namespace.workspacesClusterAgents`
|
||||
|
||||
|
|
@ -36537,6 +36539,7 @@ Represents vulnerability finding of a security report on the pipeline.
|
|||
| <a id="pipelinesecurityreportfindingdismissedby"></a>`dismissedBy` | [`UserCore`](#usercore) | User who dismissed the security report finding. |
|
||||
| <a id="pipelinesecurityreportfindingevidence"></a>`evidence` | [`VulnerabilityEvidence`](#vulnerabilityevidence) | Evidence for the vulnerability. |
|
||||
| <a id="pipelinesecurityreportfindingfalsepositive"></a>`falsePositive` | [`Boolean`](#boolean) | Indicates whether the vulnerability is a false positive. |
|
||||
| <a id="pipelinesecurityreportfindingfindingtokenstatus"></a>`findingTokenStatus` | [`VulnerabilityFindingTokenStatus`](#vulnerabilityfindingtokenstatus) | Status of the secret token associated with this vulnerability. |
|
||||
| <a id="pipelinesecurityreportfindingidentifiers"></a>`identifiers` | [`[VulnerabilityIdentifier!]!`](#vulnerabilityidentifier) | Identifiers of the vulnerability finding. |
|
||||
| <a id="pipelinesecurityreportfindingissuelinks"></a>`issueLinks` | [`VulnerabilityIssueLinkConnection`](#vulnerabilityissuelinkconnection) | List of issue links related to the vulnerability. (see [Connections](#connections)) |
|
||||
| <a id="pipelinesecurityreportfindinglinks"></a>`links` | [`[VulnerabilityLink!]`](#vulnerabilitylink) | List of links associated with the vulnerability. |
|
||||
|
|
|
|||
|
|
@ -261,7 +261,7 @@ To view more than the first 20 runners, use [pagination](rest/_index.md#paginati
|
|||
|
||||
Get details of a runner.
|
||||
|
||||
Instance runner details through this endpoint are available to all authenticated users.
|
||||
Instance runner details are available to all authenticated users through this endpoint.
|
||||
|
||||
Prerequisites:
|
||||
|
||||
|
|
@ -641,7 +641,7 @@ List all runners available in the project, including from ancestor groups and [a
|
|||
|
||||
Prerequisites:
|
||||
|
||||
- You must be an administrator of the GitLab instance or have at least the Maintainer role for the target project.
|
||||
- You must be an administrator of the GitLab instance or have at least the Maintainer or Auditor role for the target project.
|
||||
|
||||
```plaintext
|
||||
GET /projects/:id/runners
|
||||
|
|
@ -733,7 +733,7 @@ Prerequisites:
|
|||
|
||||
- User access: You must have one of the following:
|
||||
|
||||
- At least the Maintainer role in a project assigned to the runner.
|
||||
- At least the Maintainer role for the project that owns the runner and the target project.
|
||||
- A custom role with the `admin_runners` permission in the relevant group or project.
|
||||
|
||||
```plaintext
|
||||
|
|
@ -785,9 +785,10 @@ Use the call to [delete a runner](#delete-a-runner) instead.
|
|||
|
||||
Prerequisites:
|
||||
|
||||
- You must not lock the runner, unless you are an administrator.
|
||||
- User access: You must have one of the following:
|
||||
|
||||
- At least the Maintainer role in a project assigned to the runner.
|
||||
- At least the Maintainer role in the project you want to unassign.
|
||||
- A custom role with the `admin_runners` permission in the relevant group or project.
|
||||
|
||||
- An access token with the `manage_runner` scope and the appropriate role.
|
||||
|
|
@ -814,7 +815,7 @@ Prerequisites:
|
|||
- User access: You must have one of the following:
|
||||
|
||||
- Administrator access to the GitLab instance.
|
||||
- Owner role in the group.
|
||||
- Owner or Auditor role in the group.
|
||||
- A custom role with the `admin_runners` permission in the group.
|
||||
|
||||
- An access token with the `manage_runner` scope and the appropriate role.
|
||||
|
|
|
|||
|
|
@ -230,12 +230,6 @@ Audit event types belong to the following product categories.
|
|||
| [`container_repository_tags_deleted`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/156066) | A project's container repository tag is deleted | {{< icon name="check-circle" >}} Yes | GitLab [17.2](https://gitlab.com/gitlab-org/gitlab/-/issues/362290) | Project |
|
||||
| [`project_feature_container_registry_access_level_updated`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/106919) | A project's container registry access level setting is updated | {{< icon name="check-circle" >}} Yes | GitLab [15.7](https://gitlab.com/gitlab-org/gitlab/-/issues/369303) | Project |
|
||||
|
||||
### Continuous-integration
|
||||
|
||||
| Type name | Event triggered when | Saved to database | Introduced in | Scope |
|
||||
|:----------|:---------------------|:------------------|:--------------|:------|
|
||||
| [`multi_project_downstream_pipeline_created`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/168626) | Multi project downstream pipeline is created | {{< icon name="dotted-circle" >}} No | GitLab [17.6](https://gitlab.com/gitlab-org/gitlab/-/issues/481325) | Project |
|
||||
|
||||
### Continuous delivery
|
||||
|
||||
| Type name | Event triggered when | Saved to database | Introduced in | Scope |
|
||||
|
|
@ -269,6 +263,7 @@ Audit event types belong to the following product categories.
|
|||
| [`ci_variable_deleted`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/91983) | A CI/CD variable is deleted for a project | {{< icon name="check-circle" >}} Yes | GitLab [15.2](https://gitlab.com/gitlab-org/gitlab/-/issues/363090) | Project |
|
||||
| [`ci_variable_updated`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/91983) | A CI/CD variable is updated for a project | {{< icon name="check-circle" >}} Yes | GitLab [15.2](https://gitlab.com/gitlab-org/gitlab/-/issues/363090) | Project |
|
||||
| [`destroy_pipeline`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/135255) | A pipeline is deleted | {{< icon name="check-circle" >}} Yes | GitLab [16.6](https://gitlab.com/gitlab-org/gitlab/-/issues/339041) | Project |
|
||||
| [`multi_project_downstream_pipeline_created`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/168626) | Multi project downstream pipeline is created | {{< icon name="dotted-circle" >}} No | GitLab [17.6](https://gitlab.com/gitlab-org/gitlab/-/issues/481325) | Project |
|
||||
| [`project_cicd_merge_pipelines_enabled_updated`](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/107428) | The CI/CD merge pipelines setting for a project is updated | {{< icon name="check-circle" >}} Yes | GitLab [15.8](https://gitlab.com/gitlab-org/gitlab/-/issues/369317) | Project |
|
||||
|
||||
### Delivery
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ module Gitlab
|
|||
include Gitlab::Utils::StrongMemoize
|
||||
|
||||
Technology = Struct.new(:name, :key_class, :supported_sizes, :supported_algorithms)
|
||||
WeakKeyWarning = Struct.new(:code, :message)
|
||||
|
||||
# See https://man.openbsd.org/sshd#AUTHORIZED_KEYS_FILE_FORMAT for the list of
|
||||
# supported algorithms.
|
||||
|
|
@ -123,6 +124,16 @@ module Gitlab
|
|||
banned_ssh_keys.fetch(type.to_s, []).include?(fingerprint_sha256)
|
||||
end
|
||||
|
||||
def weak_key_warning
|
||||
return unless valid?
|
||||
|
||||
if type == :dsa
|
||||
WeakKeyWarning.new(:dsa_deprecated, _('DSA keys are considered deprecated.'))
|
||||
elsif type == :rsa && bits < 2048
|
||||
WeakKeyWarning.new(:small_key, _('Key length should be at least 2048 bits.'))
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def banned_ssh_keys
|
||||
|
|
|
|||
|
|
@ -20241,6 +20241,9 @@ msgstr ""
|
|||
msgid "DPoP preference updated."
|
||||
msgstr ""
|
||||
|
||||
msgid "DSA keys are considered deprecated."
|
||||
msgstr ""
|
||||
|
||||
msgid "DSN"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -36022,6 +36025,9 @@ msgstr ""
|
|||
msgid "Key features"
|
||||
msgstr ""
|
||||
|
||||
msgid "Key length should be at least 2048 bits."
|
||||
msgstr ""
|
||||
|
||||
msgid "Key:"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -56202,6 +56208,9 @@ msgstr ""
|
|||
msgid "SecurityLabels|Name is required"
|
||||
msgstr ""
|
||||
|
||||
msgid "SecurityLabels|Save changes"
|
||||
msgstr ""
|
||||
|
||||
msgid "SecurityLabels|Security labels"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -67382,6 +67391,9 @@ msgstr ""
|
|||
msgid "Used"
|
||||
msgstr ""
|
||||
|
||||
msgid "Used by"
|
||||
msgstr ""
|
||||
|
||||
msgid "Used by %d package"
|
||||
msgid_plural "Used by %d packages"
|
||||
msgstr[0] ""
|
||||
|
|
@ -69195,6 +69207,9 @@ msgstr ""
|
|||
msgid "VulnerabilityExport|Vulnerability"
|
||||
msgstr ""
|
||||
|
||||
msgid "VulnerabilityExport|Vulnerability ID"
|
||||
msgstr ""
|
||||
|
||||
msgid "VulnerabilityManagement|%{statusStart}Confirmed%{statusEnd} · %{timeago} by %{user}"
|
||||
msgstr ""
|
||||
|
||||
|
|
|
|||
72
package.json
72
package.json
|
|
@ -74,7 +74,7 @@
|
|||
"@rails/actioncable": "7.1.501",
|
||||
"@rails/ujs": "7.1.501",
|
||||
"@rollup/plugin-graphql": "^2.0.5",
|
||||
"@sentry/browser": "9.33.0",
|
||||
"@sentry/browser": "9.38.0",
|
||||
"@snowplow/browser-plugin-client-hints": "^3.24.2",
|
||||
"@snowplow/browser-plugin-form-tracking": "^3.24.2",
|
||||
"@snowplow/browser-plugin-ga-cookies": "^3.24.2",
|
||||
|
|
@ -83,41 +83,41 @@
|
|||
"@snowplow/browser-plugin-timezone": "^3.24.2",
|
||||
"@snowplow/browser-tracker": "^3.24.2",
|
||||
"@sourcegraph/code-host-integration": "0.0.95",
|
||||
"@tiptap/core": "^2.23.0",
|
||||
"@tiptap/extension-blockquote": "^2.23.0",
|
||||
"@tiptap/extension-bold": "^2.23.0",
|
||||
"@tiptap/extension-bubble-menu": "^2.23.0",
|
||||
"@tiptap/extension-bullet-list": "^2.23.0",
|
||||
"@tiptap/extension-code": "^2.23.0",
|
||||
"@tiptap/extension-code-block": "^2.23.0",
|
||||
"@tiptap/extension-code-block-lowlight": "^2.23.0",
|
||||
"@tiptap/extension-document": "^2.23.0",
|
||||
"@tiptap/extension-dropcursor": "^2.23.0",
|
||||
"@tiptap/extension-gapcursor": "^2.23.0",
|
||||
"@tiptap/extension-hard-break": "^2.23.0",
|
||||
"@tiptap/extension-heading": "^2.23.0",
|
||||
"@tiptap/extension-highlight": "^2.23.0",
|
||||
"@tiptap/extension-history": "^2.23.0",
|
||||
"@tiptap/extension-horizontal-rule": "^2.23.0",
|
||||
"@tiptap/extension-image": "^2.23.0",
|
||||
"@tiptap/extension-italic": "^2.23.0",
|
||||
"@tiptap/extension-link": "^2.23.0",
|
||||
"@tiptap/extension-list-item": "^2.23.0",
|
||||
"@tiptap/extension-ordered-list": "^2.23.0",
|
||||
"@tiptap/extension-paragraph": "^2.23.0",
|
||||
"@tiptap/extension-strike": "^2.23.0",
|
||||
"@tiptap/extension-subscript": "^2.23.0",
|
||||
"@tiptap/extension-superscript": "^2.23.0",
|
||||
"@tiptap/extension-table": "^2.23.0",
|
||||
"@tiptap/extension-table-cell": "^2.23.0",
|
||||
"@tiptap/extension-table-header": "^2.23.0",
|
||||
"@tiptap/extension-table-row": "^2.23.0",
|
||||
"@tiptap/extension-task-item": "^2.23.0",
|
||||
"@tiptap/extension-task-list": "^2.23.0",
|
||||
"@tiptap/extension-text": "^2.23.0",
|
||||
"@tiptap/pm": "^2.23.0",
|
||||
"@tiptap/suggestion": "^2.23.0",
|
||||
"@tiptap/vue-2": "^2.23.0",
|
||||
"@tiptap/core": "^2.24.2",
|
||||
"@tiptap/extension-blockquote": "^2.24.2",
|
||||
"@tiptap/extension-bold": "^2.24.2",
|
||||
"@tiptap/extension-bubble-menu": "^2.24.2",
|
||||
"@tiptap/extension-bullet-list": "^2.24.2",
|
||||
"@tiptap/extension-code": "^2.24.2",
|
||||
"@tiptap/extension-code-block": "^2.24.2",
|
||||
"@tiptap/extension-code-block-lowlight": "^2.24.2",
|
||||
"@tiptap/extension-document": "^2.24.2",
|
||||
"@tiptap/extension-dropcursor": "^2.24.2",
|
||||
"@tiptap/extension-gapcursor": "^2.24.2",
|
||||
"@tiptap/extension-hard-break": "^2.24.2",
|
||||
"@tiptap/extension-heading": "^2.24.2",
|
||||
"@tiptap/extension-highlight": "^2.24.2",
|
||||
"@tiptap/extension-history": "^2.24.2",
|
||||
"@tiptap/extension-horizontal-rule": "^2.24.2",
|
||||
"@tiptap/extension-image": "^2.24.2",
|
||||
"@tiptap/extension-italic": "^2.24.2",
|
||||
"@tiptap/extension-link": "^2.24.2",
|
||||
"@tiptap/extension-list-item": "^2.24.2",
|
||||
"@tiptap/extension-ordered-list": "^2.24.2",
|
||||
"@tiptap/extension-paragraph": "^2.24.2",
|
||||
"@tiptap/extension-strike": "^2.24.2",
|
||||
"@tiptap/extension-subscript": "^2.24.2",
|
||||
"@tiptap/extension-superscript": "^2.24.2",
|
||||
"@tiptap/extension-table": "^2.24.2",
|
||||
"@tiptap/extension-table-cell": "^2.24.2",
|
||||
"@tiptap/extension-table-header": "^2.24.2",
|
||||
"@tiptap/extension-table-row": "^2.24.2",
|
||||
"@tiptap/extension-task-item": "^2.24.2",
|
||||
"@tiptap/extension-task-list": "^2.24.2",
|
||||
"@tiptap/extension-text": "^2.24.2",
|
||||
"@tiptap/pm": "^2.24.2",
|
||||
"@tiptap/suggestion": "^2.24.2",
|
||||
"@tiptap/vue-2": "^2.24.2",
|
||||
"@vitejs/plugin-vue2": "^2.3.3",
|
||||
"@vue/apollo-components": "^4.0.0-beta.4",
|
||||
"@vue/apollo-option": "^4.0.0-beta.4",
|
||||
|
|
|
|||
|
|
@ -135,5 +135,27 @@ RSpec.describe GraphqlChannel, feature_category: :api do
|
|||
))
|
||||
end
|
||||
end
|
||||
|
||||
describe 'context' do
|
||||
let_it_be(:organization) { create(:organization) }
|
||||
let(:graphql_result) do
|
||||
instance_double(GraphQL::Query::Result, to_h: {}, subscription?: false, context: {})
|
||||
end
|
||||
|
||||
before do
|
||||
stub_action_cable_connection current_organization: organization
|
||||
end
|
||||
|
||||
it 'includes current_organization context' do
|
||||
expect(GitlabSchema).to receive(:execute).with(
|
||||
anything,
|
||||
hash_including(
|
||||
context: hash_including(current_organization: organization)
|
||||
)
|
||||
).and_return(graphql_result)
|
||||
|
||||
subscribe(subscribe_params)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -84,6 +84,17 @@ FactoryBot.define do
|
|||
factory :another_deploy_key, class: 'DeployKey'
|
||||
end
|
||||
|
||||
factory :rsa_key_1024 do
|
||||
key do
|
||||
<<~KEY.delete("\n")
|
||||
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDAPd3PCZexjKqeQVjhwPsnZ1tD23BP1
|
||||
53gg0VE9iM/V3KsuRze3HZkMGZLiKPVRJis9W31TPXor+aZfHn+OrbfW3h/W0XSopPxPs
|
||||
guAcnHMA8LSMFxkXSJk9Is9NBPN4etV6oSMEUcHc2P3UKWXs575OJ/MToF/N9nICT35y0
|
||||
NXw== dummy@gitlab.com
|
||||
KEY
|
||||
end
|
||||
end
|
||||
|
||||
factory :rsa_key_2048 do
|
||||
key do
|
||||
<<~KEY.delete("\n")
|
||||
|
|
@ -173,6 +184,22 @@ FactoryBot.define do
|
|||
end
|
||||
end
|
||||
|
||||
factory :dsa_key_1024 do
|
||||
key do
|
||||
<<~KEY.delete("\n")
|
||||
ssh-dss AAAAB3NzaC1kc3MAAACBAJX6HURfY3e8+ogBskskvAVHohfMG+vjNX1W+Zr2W
|
||||
g0gPXmJv6tLy5J81AvTbjypxtPyuLSqdTOgIqFDVgU9+EE9OMTsx2leggPMjfbTSEIK5s
|
||||
BjpqiQWLWWL7m73wo5He8uviMGJB7CHyhqHaVwutmU255rh8mC+W9Aa7ZQqgQDAAAAFQD
|
||||
IFohzNQANsmFSx7sP/UeVfPihDwAAAIEAkuqRvlCLLHAJbb3logBdRS9xF7vkG7yRnIEw
|
||||
lchwDqvUVJ411cJlFVz+9QBdZA4pcKS0L/2nCdZb/Ob0feNkG3cFBH6qqXy5GWZeWnEHL
|
||||
GwLvZF5CjqOmwQhp8RUyKNt3yccPyZIcIzvRGxPrP5utGr+hKZ47NGp78yQ4jxvkuUAAA
|
||||
CATX5Fl5UsVf8ii74qBjuik18YZFoxlBeIDowU++ArvoGkNKCnRYAGs50aDYQlB+fFpEz
|
||||
UBELm0xpIHOwOyhzZ37fVLfLvKijOm6u5mfFZX1URUBmZeELBAFgNp2YiBvWbQwR/jtIp
|
||||
zhZs5/p4o1mdfgGxBoM0KU5DHDnI5KrKJqo= dummy@gitlab.com
|
||||
KEY
|
||||
end
|
||||
end
|
||||
|
||||
factory :dsa_key_2048 do
|
||||
key do
|
||||
<<~KEY.delete("\n")
|
||||
|
|
|
|||
|
|
@ -3,9 +3,7 @@ import { createTestingPinia } from '@pinia/testing';
|
|||
import AxiosMockAdapter from 'axios-mock-adapter';
|
||||
import $ from 'jquery';
|
||||
import Vue, { nextTick } from 'vue';
|
||||
// eslint-disable-next-line no-restricted-imports
|
||||
import Vuex from 'vuex';
|
||||
import { PiniaVuePlugin } from 'pinia';
|
||||
import { getActivePinia, PiniaVuePlugin, setActivePinia } from 'pinia';
|
||||
import VueApollo from 'vue-apollo';
|
||||
import setWindowLocation from 'helpers/set_window_location_helper';
|
||||
import { mockTracking } from 'helpers/tracking_helper';
|
||||
|
|
@ -21,7 +19,6 @@ import NotesApp from '~/notes/components/notes_app.vue';
|
|||
import NotesActivityHeader from '~/notes/components/notes_activity_header.vue';
|
||||
import NoteableDiscussion from '~/notes/components/noteable_discussion.vue';
|
||||
import * as constants from '~/notes/constants';
|
||||
import store from '~/mr_notes/stores';
|
||||
import OrderedLayout from '~/notes/components/ordered_layout.vue';
|
||||
// TODO: use generated fixture (https://gitlab.com/gitlab-org/gitlab-foss/issues/62491)
|
||||
import { CopyAsGFM } from '~/behaviors/markdown/copy_as_gfm';
|
||||
|
|
@ -30,13 +27,14 @@ import { ISSUABLE_COMMENT_OR_REPLY, keysFor } from '~/behaviors/shortcuts/keybin
|
|||
import { useFakeRequestAnimationFrame } from 'helpers/fake_request_animation_frame';
|
||||
import { useNotes } from '~/notes/store/legacy_notes';
|
||||
import { useLegacyDiffs } from '~/diffs/stores/legacy_diffs';
|
||||
import { globalAccessorPlugin, syncWithVuex } from '~/pinia/plugins';
|
||||
import { globalAccessorPlugin } from '~/pinia/plugins';
|
||||
import createMockApollo from 'helpers/mock_apollo_helper';
|
||||
import noteQuery from '~/notes/graphql/note.query.graphql';
|
||||
import { useBatchComments } from '~/batch_comments/store';
|
||||
import * as types from '~/notes/stores/mutation_types';
|
||||
import { SET_BATCH_COMMENTS_DRAFTS } from '~/batch_comments/stores/modules/batch_comments/mutation_types';
|
||||
import * as mockData from '../mock_data';
|
||||
import { createDiscussionMock } from '../mock_data';
|
||||
|
||||
jest.mock('~/behaviors/markdown/render_gfm');
|
||||
jest.mock('~/lib/utils/resize_observer', () => ({
|
||||
|
|
@ -54,7 +52,6 @@ const propsData = {
|
|||
notesFilterValue: TEST_NOTES_FILTER_VALUE,
|
||||
};
|
||||
|
||||
Vue.use(Vuex);
|
||||
Vue.use(VueApollo);
|
||||
Vue.use(PiniaVuePlugin);
|
||||
|
||||
|
|
@ -64,14 +61,14 @@ describe('note_app', () => {
|
|||
let pinia;
|
||||
|
||||
const initStore = (notesData = propsData.notesData) => {
|
||||
store.dispatch('setNotesData', notesData);
|
||||
store.dispatch('setNoteableData', propsData.noteableData);
|
||||
store.dispatch('setUserData', mockData.userDataMock);
|
||||
store.dispatch('setTargetNoteHash', getLocationHash());
|
||||
useNotes().setNotesData(notesData);
|
||||
useNotes().setNoteableData(propsData.noteableData);
|
||||
useNotes().setUserData(mockData.userDataMock);
|
||||
useNotes().setTargetNoteHash(getLocationHash());
|
||||
// call after mounted hook
|
||||
queueMicrotask(() => {
|
||||
queueMicrotask(() => {
|
||||
store.dispatch('fetchNotes');
|
||||
useNotes().fetchNotes();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
|
@ -93,7 +90,6 @@ describe('note_app', () => {
|
|||
...propsData,
|
||||
...props,
|
||||
},
|
||||
store,
|
||||
pinia,
|
||||
},
|
||||
);
|
||||
|
|
@ -111,13 +107,12 @@ describe('note_app', () => {
|
|||
};
|
||||
|
||||
beforeEach(() => {
|
||||
store.commit('reset');
|
||||
$('body').attr('data-page', 'projects:merge_requests:show');
|
||||
|
||||
axiosMock = new AxiosMockAdapter(axios);
|
||||
|
||||
pinia = createTestingPinia({
|
||||
plugins: [globalAccessorPlugin, syncWithVuex],
|
||||
plugins: [globalAccessorPlugin],
|
||||
stubActions: false,
|
||||
});
|
||||
useLegacyDiffs();
|
||||
|
|
@ -199,7 +194,7 @@ describe('note_app', () => {
|
|||
describe('timeline view', () => {
|
||||
beforeEach(() => {
|
||||
axiosMock.onAny().reply(mockData.getIndividualNoteResponse);
|
||||
store.commit(types.SET_TIMELINE_VIEW, true);
|
||||
useNotes()[types.SET_TIMELINE_VIEW](true);
|
||||
|
||||
mountComponent();
|
||||
return waitForPromises();
|
||||
|
|
@ -313,23 +308,32 @@ describe('note_app', () => {
|
|||
});
|
||||
|
||||
it('dispatches toggleAward after toggleAward event', () => {
|
||||
const spy = jest.spyOn(store, 'dispatch').mockImplementation(jest.fn());
|
||||
const fakeDiscussion = createDiscussionMock();
|
||||
const [firstNote] = fakeDiscussion.notes;
|
||||
firstNote.award_emoji = [{ name: 'test', awardName: 'test', user: { id: 1 } }];
|
||||
useNotes()[types.ADD_NEW_NOTE]({
|
||||
discussion: fakeDiscussion,
|
||||
});
|
||||
const toggleAwardEvent = new CustomEvent('toggleAward', {
|
||||
detail: {
|
||||
awardName: 'test',
|
||||
noteId: 1,
|
||||
noteId: firstNote.id,
|
||||
},
|
||||
});
|
||||
|
||||
const activePinia = getActivePinia();
|
||||
|
||||
wrapper.element.dispatchEvent(toggleAwardEvent);
|
||||
|
||||
jest.advanceTimersByTime(2);
|
||||
jest.runOnlyPendingTimers();
|
||||
|
||||
expect(spy).toHaveBeenCalledWith('toggleAward', {
|
||||
// timers change the active pinia instance
|
||||
setActivePinia(activePinia);
|
||||
|
||||
expect(useNotes().toggleAward).toHaveBeenCalledWith({
|
||||
awardName: 'test',
|
||||
noteId: 1,
|
||||
noteId: firstNote.id,
|
||||
});
|
||||
spy.mockRestore();
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -343,22 +347,20 @@ describe('note_app', () => {
|
|||
it('should listen hashchange event for notes', () => {
|
||||
const hash = 'note_1234';
|
||||
jest.spyOn(urlUtility, 'getLocationHash').mockReturnValue(hash);
|
||||
const dispatchMock = jest.spyOn(store, 'dispatch');
|
||||
window.dispatchEvent(new Event('hashchange'), hash);
|
||||
|
||||
expect(dispatchMock).toHaveBeenCalledWith('setTargetNoteHash', 'note_1234');
|
||||
expect(useNotes().setTargetNoteHash).toHaveBeenCalledWith('note_1234');
|
||||
});
|
||||
});
|
||||
|
||||
describe('when sort direction is desc', () => {
|
||||
beforeEach(() => {
|
||||
store.commit(types.SET_DISCUSSIONS_SORT, { direction: constants.DESC });
|
||||
store.commit(types.SET_NOTES_LOADING_STATE, true);
|
||||
store.commit(types.ADD_NEW_NOTE, { discussion: mockData.discussionMock });
|
||||
useNotes()[types.SET_DISCUSSIONS_SORT]({ direction: constants.DESC });
|
||||
useNotes()[types.SET_NOTES_LOADING_STATE](true);
|
||||
useNotes()[types.ADD_NEW_NOTE]({ discussion: mockData.discussionMock });
|
||||
|
||||
wrapper = shallowMount(NotesApp, {
|
||||
propsData,
|
||||
store,
|
||||
pinia,
|
||||
stubs: {
|
||||
'ordered-layout': OrderedLayout,
|
||||
|
|
@ -377,12 +379,11 @@ describe('note_app', () => {
|
|||
|
||||
describe('when sort direction is asc', () => {
|
||||
beforeEach(() => {
|
||||
store.commit(types.SET_NOTES_LOADING_STATE, true);
|
||||
store.commit(types.ADD_NEW_NOTE, { discussion: mockData.discussionMock });
|
||||
useNotes()[types.SET_NOTES_LOADING_STATE](true);
|
||||
useNotes()[types.ADD_NEW_NOTE]({ discussion: mockData.discussionMock });
|
||||
|
||||
wrapper = shallowMount(NotesApp, {
|
||||
propsData,
|
||||
store,
|
||||
pinia,
|
||||
stubs: {
|
||||
'ordered-layout': OrderedLayout,
|
||||
|
|
@ -409,12 +410,11 @@ describe('note_app', () => {
|
|||
.fn()
|
||||
.mockResolvedValue(mockData.singleNoteResponseFactory({ urlHash, authorId }));
|
||||
|
||||
store.commit(types.SET_NOTES_LOADING_STATE, true);
|
||||
store.commit(types.SET_TARGET_NOTE_HASH, urlHash);
|
||||
useNotes()[types.SET_NOTES_LOADING_STATE](true);
|
||||
useNotes()[types.SET_TARGET_NOTE_HASH](urlHash);
|
||||
|
||||
wrapper = shallowMount(NotesApp, {
|
||||
propsData,
|
||||
store,
|
||||
pinia,
|
||||
apolloProvider: createMockApollo([[noteQuery, noteQueryHandler]]),
|
||||
stubs: {
|
||||
|
|
@ -458,15 +458,14 @@ describe('note_app', () => {
|
|||
|
||||
describe('when multiple draft types are present', () => {
|
||||
beforeEach(() => {
|
||||
store.commit(types.SET_NOTES_LOADING_STATE, true);
|
||||
store.commit(`batchComments/${SET_BATCH_COMMENTS_DRAFTS}`, [
|
||||
useNotes()[types.SET_NOTES_LOADING_STATE](true);
|
||||
useBatchComments()[SET_BATCH_COMMENTS_DRAFTS]([
|
||||
mockData.draftDiffDiscussion,
|
||||
mockData.draftReply,
|
||||
...mockData.draftComments,
|
||||
]);
|
||||
wrapper = shallowMount(NotesApp, {
|
||||
propsData,
|
||||
store,
|
||||
pinia,
|
||||
stubs: {
|
||||
OrderedLayout,
|
||||
|
|
@ -474,10 +473,6 @@ describe('note_app', () => {
|
|||
});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
store.commit('batchComments/reset');
|
||||
});
|
||||
|
||||
it('correctly finds only draft comments', () => {
|
||||
const drafts = wrapper.findAllComponents(DraftNote).wrappers;
|
||||
|
||||
|
|
@ -491,7 +486,7 @@ describe('note_app', () => {
|
|||
describe('when note anchor is not present', () => {
|
||||
it('does not include extra query params', async () => {
|
||||
initStore();
|
||||
wrapper = shallowMount(NotesApp, { propsData, store, pinia });
|
||||
wrapper = shallowMount(NotesApp, { propsData, pinia });
|
||||
await waitForPromises();
|
||||
|
||||
expect(axiosMock.history.get[0].params).toEqual({ per_page: 20 });
|
||||
|
|
@ -506,7 +501,6 @@ describe('note_app', () => {
|
|||
});
|
||||
return shallowMount(NotesApp, {
|
||||
propsData,
|
||||
store,
|
||||
pinia,
|
||||
});
|
||||
};
|
||||
|
|
@ -623,7 +617,6 @@ describe('note_app', () => {
|
|||
type,
|
||||
},
|
||||
},
|
||||
store,
|
||||
pinia,
|
||||
});
|
||||
};
|
||||
|
|
|
|||
|
|
@ -30,9 +30,10 @@ RSpec.describe Resolvers::WorkItems::WidgetsResolver, feature_category: :team_pl
|
|||
.to be_empty
|
||||
end
|
||||
|
||||
where(:work_item_types, :widgets) do
|
||||
where(:union, :work_item_types, :widgets) do
|
||||
[
|
||||
[
|
||||
false,
|
||||
lazy { [epic_type] },
|
||||
%w[
|
||||
ASSIGNEES
|
||||
|
|
@ -51,6 +52,7 @@ RSpec.describe Resolvers::WorkItems::WidgetsResolver, feature_category: :team_pl
|
|||
]
|
||||
],
|
||||
[
|
||||
false,
|
||||
lazy { [issue_type] },
|
||||
%w[
|
||||
ASSIGNEES
|
||||
|
|
@ -75,6 +77,7 @@ RSpec.describe Resolvers::WorkItems::WidgetsResolver, feature_category: :team_pl
|
|||
]
|
||||
],
|
||||
[
|
||||
false,
|
||||
lazy { [task_type] },
|
||||
%w[
|
||||
ASSIGNEES
|
||||
|
|
@ -96,6 +99,64 @@ RSpec.describe Resolvers::WorkItems::WidgetsResolver, feature_category: :team_pl
|
|||
]
|
||||
],
|
||||
[
|
||||
false,
|
||||
lazy { [epic_type, issue_type] },
|
||||
%w[
|
||||
ASSIGNEES
|
||||
AWARD_EMOJI
|
||||
CURRENT_USER_TODOS
|
||||
DESCRIPTION
|
||||
HIERARCHY
|
||||
LABELS
|
||||
LINKED_ITEMS
|
||||
MILESTONE
|
||||
NOTES
|
||||
NOTIFICATIONS
|
||||
PARTICIPANTS
|
||||
START_AND_DUE_DATE
|
||||
TIME_TRACKING
|
||||
]
|
||||
],
|
||||
[
|
||||
false,
|
||||
lazy { [epic_type, issue_type, task_type] },
|
||||
%w[
|
||||
ASSIGNEES
|
||||
AWARD_EMOJI
|
||||
CURRENT_USER_TODOS
|
||||
DESCRIPTION
|
||||
HIERARCHY
|
||||
LABELS
|
||||
LINKED_ITEMS
|
||||
MILESTONE
|
||||
NOTES
|
||||
NOTIFICATIONS
|
||||
PARTICIPANTS
|
||||
START_AND_DUE_DATE
|
||||
TIME_TRACKING
|
||||
]
|
||||
],
|
||||
[
|
||||
true,
|
||||
lazy { [epic_type] },
|
||||
%w[
|
||||
ASSIGNEES
|
||||
AWARD_EMOJI
|
||||
CURRENT_USER_TODOS
|
||||
DESCRIPTION
|
||||
HIERARCHY
|
||||
LABELS
|
||||
LINKED_ITEMS
|
||||
MILESTONE
|
||||
NOTES
|
||||
NOTIFICATIONS
|
||||
PARTICIPANTS
|
||||
START_AND_DUE_DATE
|
||||
TIME_TRACKING
|
||||
]
|
||||
],
|
||||
[
|
||||
true,
|
||||
lazy { [epic_type, issue_type] },
|
||||
%w[
|
||||
ASSIGNEES
|
||||
|
|
@ -120,6 +181,7 @@ RSpec.describe Resolvers::WorkItems::WidgetsResolver, feature_category: :team_pl
|
|||
]
|
||||
],
|
||||
[
|
||||
true,
|
||||
lazy { [epic_type, issue_type, task_type] },
|
||||
%w[
|
||||
ASSIGNEES
|
||||
|
|
@ -148,7 +210,9 @@ RSpec.describe Resolvers::WorkItems::WidgetsResolver, feature_category: :team_pl
|
|||
|
||||
with_them do
|
||||
it "list unique widgets for the given work items" do
|
||||
expect(resolve_items(ids: work_item_types.map(&:to_gid))).to match_array(widgets)
|
||||
expect(
|
||||
resolve_items(ids: work_item_types.map(&:to_gid), union: union)
|
||||
).to match_array(widgets)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -434,6 +434,81 @@ RSpec.describe Gitlab::SSHPublicKey, :lib, feature_category: :system_access, fip
|
|||
end
|
||||
end
|
||||
|
||||
describe '#weak_key_warning' do
|
||||
subject(:warning) { public_key.weak_key_warning }
|
||||
|
||||
context 'when key is invalid' do
|
||||
let(:key) { 'this is not a valid key' }
|
||||
|
||||
it 'has no weak key warnings' do
|
||||
expect(public_key.valid?).to be_falsey
|
||||
expect(warning).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'with DSA keys regardless of size' do
|
||||
where :factory do
|
||||
[:dsa_key_1024, :dsa_key_2048]
|
||||
end
|
||||
|
||||
with_them do
|
||||
let(:key) { build(factory).key }
|
||||
|
||||
it 'includes a warning about DSA being deprecated' do
|
||||
expect(warning.code).to eq(:dsa_deprecated)
|
||||
expect(warning.message).to eq(_('DSA keys are considered deprecated.'))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with RSA keys' do
|
||||
context 'with a small key length of less than 2048 bits' do
|
||||
let(:key) { build(:rsa_key_1024).key }
|
||||
|
||||
it 'returns a small key warning' do
|
||||
expect(warning.code).to eq(:small_key)
|
||||
expect(warning.message).to eq(_('Key length should be at least 2048 bits.'))
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a key length of exactly 2048 bits' do
|
||||
let(:key) { build(:rsa_key_2048).key }
|
||||
|
||||
it 'does not return a warning' do
|
||||
expect(warning).to be_nil
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a key length greater than 2048 bits' do
|
||||
where :factory do
|
||||
[:rsa_key_4096, :rsa_key_5120]
|
||||
end
|
||||
|
||||
with_them do
|
||||
let(:key) { build(factory).public_key }
|
||||
|
||||
it 'does not return a warning' do
|
||||
expect(warning).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'for other key algorithm types' do
|
||||
where(:factory) do
|
||||
[:ecdsa_key_256, :ed25519_key_256, :ecdsa_sk_key_256, :ed25519_sk_key_256]
|
||||
end
|
||||
|
||||
with_them do
|
||||
let(:key) { build(factory) }
|
||||
|
||||
it 'does not return a warning' do
|
||||
expect(warning).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#fingerprint' do
|
||||
subject { public_key.fingerprint }
|
||||
|
||||
|
|
|
|||
|
|
@ -204,6 +204,77 @@ RSpec.describe NamespaceSetting, feature_category: :groups_and_projects, type: :
|
|||
it { is_expected.to allow_value({ name: value }).for(:default_branch_protection_defaults) }
|
||||
end
|
||||
end
|
||||
|
||||
context 'when enterprise bypass confirmation is allowed' do
|
||||
subject do
|
||||
build(:namespace_settings, allow_enterprise_bypass_placeholder_confirmation: true)
|
||||
end
|
||||
|
||||
let(:valid_times) { [1.day.from_now + 1.second, 30.days.from_now, 1.year.from_now - 1.day] }
|
||||
let(:invalid_times) { [nil, 1.minute.ago, Time.current, 1.hour.from_now, 1.year.from_now] }
|
||||
|
||||
it 'does not allow invalid expiration times' do
|
||||
invalid_times.each do |time|
|
||||
expect(subject).not_to allow_value(time).for(:enterprise_bypass_expires_at)
|
||||
end
|
||||
end
|
||||
|
||||
it 'allows valid expiration times' do
|
||||
valid_times.each do |time|
|
||||
expect(subject).to allow_value(time).for(:enterprise_bypass_expires_at)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'when allow_enterprise_bypass_placeholder_confirmation is false' do
|
||||
subject do
|
||||
build(:namespace_settings, allow_enterprise_bypass_placeholder_confirmation: false)
|
||||
end
|
||||
|
||||
it { expect(subject).to allow_value(nil).for(:enterprise_bypass_expires_at) }
|
||||
it { expect(subject).to allow_value('').for(:enterprise_bypass_expires_at) }
|
||||
it { expect(subject).to allow_value(1.day.ago).for(:enterprise_bypass_expires_at) }
|
||||
it { expect(subject).to allow_value(Time.current).for(:enterprise_bypass_expires_at) }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#enterprise_placeholder_bypass_enabled?' do
|
||||
subject { namespace_settings.enterprise_placeholder_bypass_enabled? }
|
||||
|
||||
before do
|
||||
namespace_settings.assign_attributes(
|
||||
allow_enterprise_bypass_placeholder_confirmation: enterprise_bypass_placeholder_confirmation,
|
||||
enterprise_bypass_expires_at: expire_at_value
|
||||
)
|
||||
end
|
||||
|
||||
let(:enterprise_bypass_placeholder_confirmation) { true }
|
||||
let(:expire_at_value) { nil }
|
||||
|
||||
context 'when bypass is enabled with future expiry' do
|
||||
let(:expire_at_value) { 30.days.from_now }
|
||||
|
||||
it { is_expected.to be true }
|
||||
end
|
||||
|
||||
context 'when bypass is enabled but expired' do
|
||||
let(:expire_at_value) { 1.day.ago }
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
|
||||
context 'when bypass is disabled' do
|
||||
let(:enterprise_bypass_placeholder_confirmation) { false }
|
||||
let(:expire_at_value) { 30.days.from_now }
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
|
||||
context 'when bypass is enabled without expiry date' do
|
||||
let(:expire_at_value) { nil }
|
||||
|
||||
it { is_expected.to be false }
|
||||
end
|
||||
end
|
||||
|
||||
describe '#prevent_sharing_groups_outside_hierarchy' do
|
||||
|
|
|
|||
|
|
@ -1,8 +1,13 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module StubActionCableConnection
|
||||
def stub_action_cable_connection(current_user: nil, access_token: nil, request: ActionDispatch::TestRequest.create)
|
||||
def stub_action_cable_connection(
|
||||
current_user: nil,
|
||||
access_token: nil,
|
||||
request: ActionDispatch::TestRequest.create,
|
||||
current_organization: nil
|
||||
)
|
||||
request.headers['Authorization'] = "Bearer #{access_token.token}" if access_token
|
||||
stub_connection(current_user: current_user, request: request)
|
||||
stub_connection(current_user: current_user, request: request, current_organization: current_organization)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
362
yarn.lock
362
yarn.lock
|
|
@ -2586,51 +2586,51 @@
|
|||
resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8"
|
||||
integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==
|
||||
|
||||
"@sentry-internal/browser-utils@9.33.0":
|
||||
version "9.33.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry-internal/browser-utils/-/browser-utils-9.33.0.tgz#f4a012218119ef120af5e255c8107221ed1b54fc"
|
||||
integrity sha512-DT9J0jIamavygIvW6rapgFb4L+7VoATPfEaV0UnXfGNXpSq18x7+vj1CyGMc//GBqqgb9SCHxJHOSkfuDYX7ZA==
|
||||
"@sentry-internal/browser-utils@9.38.0":
|
||||
version "9.38.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry-internal/browser-utils/-/browser-utils-9.38.0.tgz#e5faa6325a3db4ff4872594360ab771ea979d634"
|
||||
integrity sha512-BkTaMPm4pjgoT1qNsLX5e3HjTCwBmsR/OGyKHFpMUnN+HINi9L1nGGbRroOEtfU49vMKi8MlM7HpuzzYV/3D1A==
|
||||
dependencies:
|
||||
"@sentry/core" "9.33.0"
|
||||
"@sentry/core" "9.38.0"
|
||||
|
||||
"@sentry-internal/feedback@9.33.0":
|
||||
version "9.33.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-9.33.0.tgz#40f846af6b5d930f70798bc726756ff974e51df2"
|
||||
integrity sha512-NQ3Q3d1xvtagI2cYZnI6C1i6hmMkUxIXUMjfO5JFTYpWGNIkzhIaoaY0HFqbiZ94FWwWdfodlQlj6r8Y+M0bnw==
|
||||
"@sentry-internal/feedback@9.38.0":
|
||||
version "9.38.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry-internal/feedback/-/feedback-9.38.0.tgz#dc816c819dbacb0ff3dcfe863e9f3bc06a687b93"
|
||||
integrity sha512-vDVufE9WLqHCmUL2sa3nIKz5ARaBdaqCG+b9/hwkmkLnqaQUBiHE+ArxoYuc2toWqaELxSHcMDp2ajkeDBQeLA==
|
||||
dependencies:
|
||||
"@sentry/core" "9.33.0"
|
||||
"@sentry/core" "9.38.0"
|
||||
|
||||
"@sentry-internal/replay-canvas@9.33.0":
|
||||
version "9.33.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-9.33.0.tgz#39e671210982a11739170151a997f9e4074efd90"
|
||||
integrity sha512-lFO5DYJ32K/mui5Ck7PbqcD7wzRxTyRKiy49gCGAp7x/mhLg5utf5vWPtegiUoCiiMB22rj+n2z0geZwiGKH4A==
|
||||
"@sentry-internal/replay-canvas@9.38.0":
|
||||
version "9.38.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry-internal/replay-canvas/-/replay-canvas-9.38.0.tgz#1ae9ad3547c0d696d1714878d5bb98c7f832bac9"
|
||||
integrity sha512-87BZDTjszdaSB5p0CTiVav2QgxLMAab/6q1jcIUBzNsrXHZbqcoMaJmd446mCsQkR6wAccM/uAxJlgh9FIqA8w==
|
||||
dependencies:
|
||||
"@sentry-internal/replay" "9.33.0"
|
||||
"@sentry/core" "9.33.0"
|
||||
"@sentry-internal/replay" "9.38.0"
|
||||
"@sentry/core" "9.38.0"
|
||||
|
||||
"@sentry-internal/replay@9.33.0":
|
||||
version "9.33.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry-internal/replay/-/replay-9.33.0.tgz#cf42d8d82a55df15210e77106795486b04dbc547"
|
||||
integrity sha512-xDFrN19hDkP6+yS4ARYBruI0RinGYD8FPm7JC0BaIMP5yNWAJ80LTT0Jq9Dh1hQfDwUX34dpHy/9Aa7qv+2bRQ==
|
||||
"@sentry-internal/replay@9.38.0":
|
||||
version "9.38.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry-internal/replay/-/replay-9.38.0.tgz#a14470dafc79ead02f75da0b019961e1d3ca2b91"
|
||||
integrity sha512-LLZuQk5Khvco+EYKg2+woiSNMLyR4XZeoAdgvAa+HZriFoAQR6GFNAuu+TlynCDDt2H+w90HcIAV66NWFy8QoQ==
|
||||
dependencies:
|
||||
"@sentry-internal/browser-utils" "9.33.0"
|
||||
"@sentry/core" "9.33.0"
|
||||
"@sentry-internal/browser-utils" "9.38.0"
|
||||
"@sentry/core" "9.38.0"
|
||||
|
||||
"@sentry/browser@9.33.0":
|
||||
version "9.33.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-9.33.0.tgz#ea37a6a61a90e4eb88823e85cdcd750d4a64bd86"
|
||||
integrity sha512-emlZlpE62lcpxMEzvrQzecnh0WeS36XLQlFLEUhGaYVOw7TBl5JPIoSB4mxPrzIn4GpW++3JrtKRpDAHQn/c4Q==
|
||||
"@sentry/browser@9.38.0":
|
||||
version "9.38.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-9.38.0.tgz#b3a5c317afa1d66dcb4cf0ca618ba9835b5469a6"
|
||||
integrity sha512-ZUIeU+3VUD3BntYgB2DkhBD6N9oybsuk1+U7yK1ezHIw/nvkPILcH6MZgPs0Km0RcWWozMUDSbdZNud9/isYmw==
|
||||
dependencies:
|
||||
"@sentry-internal/browser-utils" "9.33.0"
|
||||
"@sentry-internal/feedback" "9.33.0"
|
||||
"@sentry-internal/replay" "9.33.0"
|
||||
"@sentry-internal/replay-canvas" "9.33.0"
|
||||
"@sentry/core" "9.33.0"
|
||||
"@sentry-internal/browser-utils" "9.38.0"
|
||||
"@sentry-internal/feedback" "9.38.0"
|
||||
"@sentry-internal/replay" "9.38.0"
|
||||
"@sentry-internal/replay-canvas" "9.38.0"
|
||||
"@sentry/core" "9.38.0"
|
||||
|
||||
"@sentry/core@9.33.0":
|
||||
version "9.33.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-9.33.0.tgz#34870c1c5248639e2b1453be57ad7cdb039e9d3a"
|
||||
integrity sha512-0mtJAU+x10+q5aV/txyeuPjJ0TmObcD701R0tY0s71yJJOltqqMrmgNpqyuMI/VOASuzTZesiMYdbG6xb3zeSw==
|
||||
"@sentry/core@9.38.0":
|
||||
version "9.38.0"
|
||||
resolved "https://registry.yarnpkg.com/@sentry/core/-/core-9.38.0.tgz#8055bb856b1f0fc799040cbd34d1f6c6b3883ad3"
|
||||
integrity sha512-dUwSv1VXDfsrcY69a/cgZNDsFal6iYOf0C4T+/ylpmgYp5SVe3vQK+2FLXUMuvgnOf+kHO6IeW0RhnhSyUflmA==
|
||||
|
||||
"@sinclair/typebox@^0.27.8":
|
||||
version "0.27.8"
|
||||
|
|
@ -3218,181 +3218,181 @@
|
|||
dom-accessibility-api "^0.5.1"
|
||||
pretty-format "^26.4.2"
|
||||
|
||||
"@tiptap/core@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.23.0.tgz#fa49cb6eee0c48895c08e56979aaadeb8a7575df"
|
||||
integrity sha512-Cdfhd0Po1cKMYqHtyv/3XATXpf2Kjo8fuau/QJwrml0NpM18/XX9mAgp2NJ/QaiQ3vi8vDandg7RmZ5OrApglQ==
|
||||
"@tiptap/core@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/core/-/core-2.24.2.tgz#0968d623a376210eab6ff9566e1a0265b04f1e69"
|
||||
integrity sha512-RZ0+RdU9i88WqJF3ca1MWWDC08Ad2y9F2pytCfgohKHswNzhz0qeacoWZU/44yI15D+r320Peu6ucsy0uV+u4w==
|
||||
|
||||
"@tiptap/extension-blockquote@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.23.0.tgz#308f15c953b71f39f7b6a6cd06f43f6f5dbf3d18"
|
||||
integrity sha512-EBWzvqM39K07oAtxD/bZr/TKqTvMZ9pQtBkimyFgHBhkd/PsQvu0r0k1wmheSsizlwDVkO4O8St0zkUimqyevQ==
|
||||
"@tiptap/extension-blockquote@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.24.2.tgz#4e439f40bc878888f5ef49d30eb4b22e5a8f9b6d"
|
||||
integrity sha512-q8FZL34eLYXBGt2tDggEHMqNghvYmc5miTDNQUB7peb1DN5mPqY9HJT6qB+bxucZIJpqD83REX/a632x1bbk/w==
|
||||
|
||||
"@tiptap/extension-bold@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.23.0.tgz#2435f817602a50dd7ce8f8360a489116b461e49b"
|
||||
integrity sha512-OY1xlt1yXpj9+Mzdv+YC6a3okr39xDkeCJyvmLG5OShYUx6fxTT19uXbKF7Y3aAS0BHet5rcrTXEMRlp7N3Qaw==
|
||||
"@tiptap/extension-bold@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.24.2.tgz#684c59af2b1097b0f7bcf0de58dd1b2e39d2ff7d"
|
||||
integrity sha512-gg9bQCvN/DC/cfDMwjJVrVzaO9LI7h3Y+2FgGGiCweHptJVCGcmOCPwhN+rC01FlDGJSXUm6XDY28xBaM3z/Jw==
|
||||
|
||||
"@tiptap/extension-bubble-menu@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.23.0.tgz#8d13d372eb5c5ff1ac83e8f02f1d0b445c15cb98"
|
||||
integrity sha512-4CZxcVj/0ZetEiWgiP31xTHgaQ7Hr3Ad36cAEza/nGYifaztuPjLO2Y9qdnC1iJHIxttnX6GVRnCMRmZMfhgHg==
|
||||
"@tiptap/extension-bubble-menu@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.24.2.tgz#9117bae7c154b4239eaa56fbd108b42703a39e31"
|
||||
integrity sha512-iU/FvuPjhB06UMzziYVhU+dasCOuCY3P5uVMPuE9i4PxHACx9z20IPISeGCNoeo9LxoIfMS/9sUVLArB5WzGMA==
|
||||
dependencies:
|
||||
tippy.js "^6.3.7"
|
||||
|
||||
"@tiptap/extension-bullet-list@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.23.0.tgz#b412159ab400115b4de6dce87fe33584764bc6d9"
|
||||
integrity sha512-YrmH5AVSkpCQ7k1Orm8hlzDeUO7rxpQkS51sr2w+ruruKIun/X6V0phuLee+f7DBrzHenBcuU6gBtU6vgGPYFw==
|
||||
"@tiptap/extension-bullet-list@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.24.2.tgz#e8b83373c6f56874a4d9e5bfcc332dd060d8b5c6"
|
||||
integrity sha512-cIIKJauziWlhMemftWlzfWaFzgdPaRat1iSdklVfRJD+Fu710oLdL0FEIGf9MzkW8LGx5H4pASyI1fgt9NBsog==
|
||||
|
||||
"@tiptap/extension-code-block-lowlight@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.23.0.tgz#02ddbbb9fd57e486c0f203e7c87ad9d5ef012e82"
|
||||
integrity sha512-HdV5xdOJEpujJu/yF/cXX8YZoWDY3Ye7JAGHRnNLLbuy7tIh8OZ0niiqCkF265E+TWAUBHQWsIGHo5dROMKBIA==
|
||||
"@tiptap/extension-code-block-lowlight@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block-lowlight/-/extension-code-block-lowlight-2.24.2.tgz#0fae2fbc8b2d08eb7cd5768be49562609bd9545d"
|
||||
integrity sha512-jO2WIyVI1RD129KLHwQQvvzk+wbtgRPlsUX/pwTzU5vhOpfR4XC2pzXabJj91A3SFd+OuD9LxlXgD1rFXNb/yA==
|
||||
|
||||
"@tiptap/extension-code-block@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.23.0.tgz#7ab406cc5ec72347db6b370c5f761ced81aacbb8"
|
||||
integrity sha512-p8iizp5nQBBhYPrIgBVwEqcDnc2fFRAZCXy/xjmAk2kKOhB7NYe3+1yrbFcQKVAdaUFxG+BRj2WxNDeeRt5tJA==
|
||||
"@tiptap/extension-code-block@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.24.2.tgz#ceab0c78161677cf1fd51a0e3e09a20244927948"
|
||||
integrity sha512-zM3skKOZyS9bhnABaSD4dgACNpXm6IjfWdhyIsIE9EcO2p6sMdyFefz0AmMDdoyJq0oSmm+JD6sblEisJOQZ9w==
|
||||
|
||||
"@tiptap/extension-code@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.23.0.tgz#646403bbf407057d217d58283cfddbdd13395309"
|
||||
integrity sha512-Ip/5+kNoqrxYPHLnZMf7i6wfjjRuR5QgfC3IR3Mk1WQM1JGXCLL+uUjTUxKXFUj28hjSJfsmVbTUhoVvgZEWfw==
|
||||
"@tiptap/extension-code@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.24.2.tgz#76204060fb6a18d8feee0ec18f632faf7a0fd16d"
|
||||
integrity sha512-dK1jOm0Xe0h8SUXVUJPj3AxWb1N4zeBkdPZFoz+iUHacpymMinH1CuukN9UpwmSi0YPfrIMKkCaw5WOEzjV8RA==
|
||||
|
||||
"@tiptap/extension-document@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.23.0.tgz#3a36448d55070245fbcc7af1e729bcf752dc7432"
|
||||
integrity sha512-kuRPqH0UdjZ4RcnpPELsu1N8LqeixEin+mv5eaQJI/aZ6rFq+kcY4UZF3C7q56Rat5r9CgHBiZbD0t5l6E3gdA==
|
||||
"@tiptap/extension-document@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.24.2.tgz#b9fe55b4f7e73141c45c2268d84b5cdc095f60b5"
|
||||
integrity sha512-w3q1JaWZlwK8aHmF4lrFqalLssNkZoS3rjL/iS0v69q/fTI9t0WmCx5Jx427eUlNITZ5XoCL8zguKmnSPbFovg==
|
||||
|
||||
"@tiptap/extension-dropcursor@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.23.0.tgz#7d1abf15c050904afb53f38c057dfb0ad391d28a"
|
||||
integrity sha512-m2LzkJpipHLPEllD3MXZQMssu7Xng7YJOJ8ZNDkF0uUkXljwh7G0ROjGNKUlV8/dqoCVmJIZIyF6t9saQwTTbA==
|
||||
"@tiptap/extension-dropcursor@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.24.2.tgz#fa85fd53426cc6d1beb2cfba24a07b3eb950784d"
|
||||
integrity sha512-yJyQeM05LBVG54ShyzJ0M9I2zALcjMrg9Kc/b6O73EWSIGLlYPhGBY/VujZFZ4OIC5i+yrKRr3nzoj68iIzwcw==
|
||||
|
||||
"@tiptap/extension-floating-menu@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.23.0.tgz#4acc751cfb98f55f8d2ea350c1a825e7ea66e884"
|
||||
integrity sha512-MvwDMhO5o5NciE+wc6B9dQgTFzmPjtB1o3S+HTdlGzGFGgx9PsNikK5BkqMit9j2NnrqyHnOf88QK/wZR5fqGA==
|
||||
"@tiptap/extension-floating-menu@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-floating-menu/-/extension-floating-menu-2.24.2.tgz#e68035a0e2b667c05dc116611cb21c4506559a55"
|
||||
integrity sha512-BSYGFW/wr5PvOu20nd7mPY8bdjlDwXmUU2xsA6NkDAVBPqVvAprr9ZDnz5Hnc74qjsIa6gWZb85ZwRxZ1MxRjw==
|
||||
dependencies:
|
||||
tippy.js "^6.3.7"
|
||||
|
||||
"@tiptap/extension-gapcursor@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.23.0.tgz#e3654c152fad724eb38df0e7c507495ca1b81302"
|
||||
integrity sha512-SpYsDtMiVwqcSB84g714PrnHo985R5UiIaGngef6iMNy/0xjKcO0tj/feu0WwJDuSj22Opzlnb/Ld/D4Va27Ng==
|
||||
"@tiptap/extension-gapcursor@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.24.2.tgz#f4e52eb5de8b3443c75c38666a6b8d9c0d95eba0"
|
||||
integrity sha512-bp0BBw4pzjHnbjWSFaeYcffXL6Bvs8bSLRDz56qP9j/6WH6ngLBQQMmRKsJeYnzb895MZj767tB4EtgC6kzwMg==
|
||||
|
||||
"@tiptap/extension-hard-break@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.23.0.tgz#7b7500542253a63ced94ee4cf332e854d479d176"
|
||||
integrity sha512-OpNBEYv9HDUPo8SgvmI5oPd0b+xmdadtFyL7t4lxhYar8n5NDYubaXYgbKcdJfXvUxEeGwdc3ePnTFpsF0mrYw==
|
||||
"@tiptap/extension-hard-break@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.24.2.tgz#7fb87db9eeb13b8665f75d4ee10469db5bb3083e"
|
||||
integrity sha512-6TB9GBUTp3DIOptQubEVvL6BVKhxfLzAJwWYXjw0EkZHrK8TQPB3QIjLV/uZy29Ruji2k97ytxuxfrGoQXoXtA==
|
||||
|
||||
"@tiptap/extension-heading@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.23.0.tgz#e76fc3c20213fe8b6efd781e3bff342fac9a0849"
|
||||
integrity sha512-ZbombU/zc42QiqIBVq5bn/I0Y+eiie/0Nax/bdFCDPIKLp8GCp2BDRg46e3kcCanTyZMXw2HmkWrkG3sQNHLWw==
|
||||
"@tiptap/extension-heading@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.24.2.tgz#37601582fdd0191ae186cb49033b6d4a26213947"
|
||||
integrity sha512-riUjAhiiSmdJupgRJFuHrDoXZrDpqjZYklsAcO/VyGRmp9z2Oz0LLlPTMotndCujYzGkH3jw2cz6bNo94jVoRQ==
|
||||
|
||||
"@tiptap/extension-highlight@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.23.0.tgz#74d651d46cbda03fdac0b7658e0c2c4804e3db52"
|
||||
integrity sha512-Jzy8Qmh9/YApo1MONTBJx4r0id24AX527oskQ0iE0eYWbfuu2G0SRSxtP/x+vgvGbmcw0mgm6PZbHVcJTyf+KA==
|
||||
"@tiptap/extension-highlight@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-highlight/-/extension-highlight-2.24.2.tgz#e00d833ac4b02eb07d27479bc2e357d7b186e5bb"
|
||||
integrity sha512-5/KDuThVIeJcjADg/yDaLXFoLLpL6U89QlLy4yZBJeXY3EaimzGxKg7oweceFhS3u36WmUoSpkKP9IFAgIAOvA==
|
||||
|
||||
"@tiptap/extension-history@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.23.0.tgz#5f2ed8d3aab60e227740d5507d9f1d0612933736"
|
||||
integrity sha512-W+2bZ/02nm56g/wmEaSx9QcdZ8mHjoFyc8MKf54Mrzi+nIdNjsNreKrn1yCp683CGEPd8DLadDFkz0o13N+rxA==
|
||||
"@tiptap/extension-history@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.24.2.tgz#9ef838464f9cb2eef6889cc0066f8983acee57bb"
|
||||
integrity sha512-D2nom9y/X62wdP0XQluo58QIPzGjEag8mI/KXiJumLOiXCBXGsubBsZWdOMi5K+4YHfsLrZnCfEDE773Y5Pgng==
|
||||
|
||||
"@tiptap/extension-horizontal-rule@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.23.0.tgz#3ce9548f11949f0df4f05942e76e1ac165f76242"
|
||||
integrity sha512-i/gml9PMQ6uNeq2CCNIWkkYDbafx6XMH4xPSHW4SAG02Exa64iIZLWy57Vb4MR5INSZ6lM/OzU7sdfzHSOb44g==
|
||||
"@tiptap/extension-horizontal-rule@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.24.2.tgz#f4f9dc2574edbf5286ed161c036ed720a3451cf7"
|
||||
integrity sha512-gE0CsdOxy0zpfFtD4kTeqTEONB7EscE5zwGecuBZyrLEqk2R2b3cTM/IMDC95aknQ5YcqphlUGfVGhWiw3/USg==
|
||||
|
||||
"@tiptap/extension-image@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.23.0.tgz#4cc47e8a760ca3f2d05fd492038ec266701eb066"
|
||||
integrity sha512-/rW2+a21VBGBv5c/78CVW8XA7bThSqE3FqcBtWyq8IxZoe8Hj9+Jac7FcB2YR3aY0BeHwso474e1RuVr1iYBKQ==
|
||||
"@tiptap/extension-image@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.24.2.tgz#8d33271517ae088a5ade937fc6f7f0a34bd2cc64"
|
||||
integrity sha512-fiv6TSH8tkjT8C18jR3wU9Bq1Z50hXxtymDHeqnpIDtpxjIgktc8ngkuys11gUTK28UBGUbdBmJcd3oPXFKhZg==
|
||||
|
||||
"@tiptap/extension-italic@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.23.0.tgz#d02d1983c11ea6771a9b66a5e24b043ed8704145"
|
||||
integrity sha512-hX3oacTUloWM8Xu8IapcU2onMWmSkJi8mNAJiIFMiAYcERfTfxPsT3u2yO2gvpoh1iqtZWFM2gc+3x6BnXek8g==
|
||||
"@tiptap/extension-italic@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.24.2.tgz#7e21b40667a55883e50849a7d1cd2a6c903df31a"
|
||||
integrity sha512-gW9c0zJh4f9D2uZl13rhV8FFt7UgISLiRp4e+DynpKUkhjftDHmruii5Qw6fz9W5cf/vQcyMwCN3lO7Efqnyng==
|
||||
|
||||
"@tiptap/extension-link@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.23.0.tgz#5e665fcecda56133abf5a7e40d12a6691a8ff760"
|
||||
integrity sha512-D+ethAE8+2f7RH7kqS+//EsC2wNblhmssJYVE0hCXM5BKIBixjs8eCOAvLbJsw0u/5LqFYjsyAimTqa4hD5uvg==
|
||||
"@tiptap/extension-link@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.24.2.tgz#9cdb346cd5cae71f360e96dfd8beda5b8904e62c"
|
||||
integrity sha512-wsK1hqrQaJEoawsWFOdbhlaQRLtbuElAuIzGo2nOXAA3eur+fu/fTV6NebDyIroP6JUb04DMIW3w/ETYGCz0Lw==
|
||||
dependencies:
|
||||
linkifyjs "^4.2.0"
|
||||
|
||||
"@tiptap/extension-list-item@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.23.0.tgz#fb5f1a607e1fdf1ff7e7faa81861946af96fb208"
|
||||
integrity sha512-tYhLqCaQRjX2S6ICt8FJ+eCAxBMVtXWth6dWt3w7wpkoCVU6n0Dva/2Z3x5lNJPZxUKrsqXc1oYOgvY1pUYyAA==
|
||||
"@tiptap/extension-list-item@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.24.2.tgz#f138dacb48ea75d3f14010d77f49f28f3640528c"
|
||||
integrity sha512-W1goyAjBdvzITy6W+fCv6kWiXMTxF8+D+FG/9VVZOzGX0o1kIFH2szkadS73L88RgUm3RLPkMP4ZhsqTQbGI5g==
|
||||
|
||||
"@tiptap/extension-ordered-list@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.23.0.tgz#8e3c320174b7970f6a45042538577cb4b87f1e0e"
|
||||
integrity sha512-IMlPpAPuiFl5L5QwP0aFb8jmJtOceNy4E4tUZulvqARnrzFv//wSuHBZKJziygvm/XK7VcV/clk4fCk/ca5r4g==
|
||||
"@tiptap/extension-ordered-list@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.24.2.tgz#56d99ff5f52a81466cfde781f48aba04a0f80765"
|
||||
integrity sha512-02IlOIv91PB1b0CS5CkjtO+BuJYpCt3Sc7NYQiG6PBK1Fr+PQ9KitFYK1eqbJCsrLdUW7SUu1Y/8w7OA+gTPyA==
|
||||
|
||||
"@tiptap/extension-paragraph@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.23.0.tgz#c6ee5a3ef009421631b6a06772012f6635faa2e5"
|
||||
integrity sha512-MXhRkb741UOcJp2evG/H0MY3WJQnX7z8PsejmJbJXOHBrS/Esxq0AlrDAjuFhbfAnJwYiWQ1lk6ucvKV6DhFuQ==
|
||||
"@tiptap/extension-paragraph@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.24.2.tgz#0950d315118e1389a449ca32151de0af60b25134"
|
||||
integrity sha512-u10UFm3WifUGf60/UGLucJjw1U01nDS4qYWDI9pGvdYdi00nvQaONj6cUK4/v/yrrzbWi94nf82/xXpH0qWIKA==
|
||||
|
||||
"@tiptap/extension-strike@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.23.0.tgz#212aaed49149e72c2487ee2721bb9ab971188cc8"
|
||||
integrity sha512-zdYO4xdg15BE8gmPYFgA5Xn5+hPA6NAiDBWxv5KNWD9cJ5OhsJx2OsfSCWc0CxYQaIIbHhGM9EGzqH5lF+UnwQ==
|
||||
"@tiptap/extension-strike@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.24.2.tgz#7620eebf56fb3ec7849e52837568e0fad7b3f831"
|
||||
integrity sha512-7JJ+IOTOoXlAqXDiUY9A+oRx01vRClvKuQzIDQoDtvd4Ut9rkZ+9L+Iv7AE/HzGkOOAVvfvLzYcyHiHDOpArDA==
|
||||
|
||||
"@tiptap/extension-subscript@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-subscript/-/extension-subscript-2.23.0.tgz#cbcbe44b7e486ac813ce7b32d2bbec2d1e97c9a9"
|
||||
integrity sha512-37O9zKn5XNScSvFtesI2xL99uwBp4XWj186tMjBDael1/vjnnCxy5cWMXrg4l8+gxyz2owS3OB6ryYtxmEABkw==
|
||||
"@tiptap/extension-subscript@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-subscript/-/extension-subscript-2.24.2.tgz#f91f13ed5418b98617cda4f0fb98ba530fc40489"
|
||||
integrity sha512-cLEf0gyyXm9kSZRwjFElxDebRJ1yvhKSjNNBGgOA4cr4uGw+6hSfuK0ZvGLGpkXnz+NPDW+58ZUejny6p3Ztfw==
|
||||
|
||||
"@tiptap/extension-superscript@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-superscript/-/extension-superscript-2.23.0.tgz#d47f120d967d0dbb796fd8ac2ec27c428c777175"
|
||||
integrity sha512-ySe2Dbx5ZOlS//zuTxHCHrMgQIvfHGRhJWqvwacb5R0Jm8lLoaJDvlANbjuc+GfELb2L6rPhAXVu/txotyAgfA==
|
||||
"@tiptap/extension-superscript@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-superscript/-/extension-superscript-2.24.2.tgz#3cc18f525b249c613a2c5f552c4e74978f92f5a0"
|
||||
integrity sha512-Tl5z3D0cAFOMmUT0uUU1/uAqGc3P5kaeYkVQ4cTXDv/95OHGqftI9jcVlIBHV6yAqzlQ/QeNO60h6kBuF5mBaQ==
|
||||
|
||||
"@tiptap/extension-table-cell@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.23.0.tgz#f048978eeebd2158d1dab3237a4bd350bb0f1dd0"
|
||||
integrity sha512-+fYhtoUPAveDfbvz0aUuyzBZf3swD3Lo5Vf6oLL+rU5kIS9hHkYW8opkLnH87dOauRiTbwlM60lK9qaW07VGuA==
|
||||
"@tiptap/extension-table-cell@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.24.2.tgz#43c104d81ed1b1ec215fc61723d5740a6236ae76"
|
||||
integrity sha512-Sjmn4qkedy5HVXXUFE5v13hrq+CSJrcol1HjXlP1HMtDdJFBDVXz5ZrkIXvQrt1SyBA9S1fftsK9pQfnJMt8WQ==
|
||||
|
||||
"@tiptap/extension-table-header@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.23.0.tgz#6a15220db9d25dbe1be96366f73b8320167cf3a2"
|
||||
integrity sha512-WTd6tGUzMR1oX07BkgNPwX9HJczB3GCZfiqtXjAcFSfEwiE2CxhCxyZ3BHxmobxEs57tmANwsTPGApQnLvxAuw==
|
||||
"@tiptap/extension-table-header@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.24.2.tgz#dfbdb704650fc49805c6c688e2e8bab059d3b002"
|
||||
integrity sha512-Exvpc84tPfTYcRQCrUgSVwztsRZobSFqlDEWB68f++iIeh5ZzDz2XrQGJ7KryymrYs10wdXljv4A9hepngiGwg==
|
||||
|
||||
"@tiptap/extension-table-row@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.23.0.tgz#d8b08a9c64232616a0251d8dbf7d05be5f74ed92"
|
||||
integrity sha512-0BO1FEU9w2cMZvdjStwF9fiVbu60HqarBLJcpsCYSUHKt6XdaYd8vuX8YOd5moqL9EpexfmDWwoUj/LwPi6PYw==
|
||||
"@tiptap/extension-table-row@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.24.2.tgz#bb40c2a5ec57ffa8eb0d691e7d7f8bbf2b14267c"
|
||||
integrity sha512-nfc+samnjYcNksvtgNJ/9U/xk4hAzUJM34d3IXEKdCWLuMPa3smEkEsGJTSymnsI7M7m8hNTTQxDFah5OjNGPw==
|
||||
|
||||
"@tiptap/extension-table@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.23.0.tgz#89b7b052b4424812905a5c06e4171b238d036335"
|
||||
integrity sha512-DkXW9px5gXmiMxQdG0++j3v8D4c8lw4Op2KjZVdZ+JAy8cDZJne9BQlZ/NWPsDUhA5iB4D+oRNyTfMOgDXMXew==
|
||||
"@tiptap/extension-table@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.24.2.tgz#ff6797d632a169c5ae1b16a7833f990e3f63bc41"
|
||||
integrity sha512-MaOzmkZMQIp8j4GJRojKfbgRp7I19WSG6iWUTVDKLne5W0jt2PWnSqz7AXpoo9XDPrq7lckOTuBMb+woZRQBYQ==
|
||||
|
||||
"@tiptap/extension-task-item@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-task-item/-/extension-task-item-2.23.0.tgz#06d44ec73bf306ddbb9d870b706355dc53a7bb44"
|
||||
integrity sha512-KdxuaXkASapTq8giUiwC5pL6LAZc9slY+3TqYVdiC1Mo3c9fzQ3QNqbUu5lyesSkVkvXRsHYGphzufeoFn5lDA==
|
||||
"@tiptap/extension-task-item@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-task-item/-/extension-task-item-2.24.2.tgz#b455031b8febe61e111dfb251f765ce3e712394d"
|
||||
integrity sha512-8xKmSWKhmfaoyGgea41ZGab9fYQlE4sHazlbk5Tipe8FrEKn5t/TxumtjiN6aBbCSuvk+pR8wXWVJeZtdtaoHg==
|
||||
|
||||
"@tiptap/extension-task-list@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.23.0.tgz#7c66ad3793fae3d9e2f84154e19660ca2e1d8ddb"
|
||||
integrity sha512-gYL3Zvk6EMZNyoByT2XqI1beAyeusdefGWVblgBKuTwxTmwZMwwI4agwJy03D4RMQkZBOR2Mg0vQ2Jd6wKKydg==
|
||||
"@tiptap/extension-task-list@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.24.2.tgz#ddd6d42c0a2507b98db317528b680c6548c0f774"
|
||||
integrity sha512-83ahktl9NvtqQpVqYuwHVUrt/kEGG/q2qEQWJ0FkjNuut8l0yT+Mad2J/2aXskN8XSgFTiNlTeWFrkDcGrTCzw==
|
||||
|
||||
"@tiptap/extension-text@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.23.0.tgz#5913bcb51612bcd5ceb59c812b22715801f23bf9"
|
||||
integrity sha512-hF+CU1H4B4UgqjBXXPPaACVZdSGuMH0TDYTd7h403qUAIBKkYbjuan7laQpiT0qnF0Dg+sGgvmGcd4H1tTBM8g==
|
||||
"@tiptap/extension-text@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.24.2.tgz#78efc1a90affdad2fb5624921e47d868a620bfac"
|
||||
integrity sha512-spccJxacijTf+pdBNgyzIfxDScLKjtcpvACEw/5isYzlZ0vLyC7QhWQe8jeYEM6K9yYixIuoayV8QWRd3tzG9w==
|
||||
|
||||
"@tiptap/pm@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.23.0.tgz#0f93e7a98498bb3ae4e7c457b02e66b56c1cbb7f"
|
||||
integrity sha512-PQFi8H+OrcaNXNGxbXSjJmZFh1wxiFMbUg25LjOX148d7i+21uWKy6avsr5rsBQNBAKIIMB6PQY61Lhv5r61uA==
|
||||
"@tiptap/pm@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/pm/-/pm-2.24.2.tgz#9b8df334b3c12643b7139e233f565f8ad1ecf949"
|
||||
integrity sha512-g9UGZRVtJJsGNtaQUlIwQQVX5akPJRZSMGvxyp02tj32mFTS8Q+ldD/4J7jCwevCJWZmb/fIbVrANzIFEiHsLw==
|
||||
dependencies:
|
||||
prosemirror-changeset "^2.3.0"
|
||||
prosemirror-collab "^1.3.1"
|
||||
|
|
@ -3413,18 +3413,18 @@
|
|||
prosemirror-transform "^1.10.2"
|
||||
prosemirror-view "^1.37.0"
|
||||
|
||||
"@tiptap/suggestion@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.23.0.tgz#2ecdbed74d0ee3fdac1cbbb847c5c128e8159ebb"
|
||||
integrity sha512-WUUGADu8ZezXZ4hXZWdfGcfoitB5tiBrc2u1oXqqL8VmJJedhY4MdWUPYqgh3359tAI2yJWmv+gPabX361gBEA==
|
||||
"@tiptap/suggestion@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/suggestion/-/suggestion-2.24.2.tgz#db45b2a1ea95f73dd10d1cf493c281f3d8714a55"
|
||||
integrity sha512-4gP4WQ0CCeYbu7MV+j7FE0GRbmHzJb/iahdN+Z7/Y9uXam+dPdSNN9cUQqREY/cJP+ACzuD+BJvVqpwNV6m/RA==
|
||||
|
||||
"@tiptap/vue-2@^2.23.0":
|
||||
version "2.23.0"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/vue-2/-/vue-2-2.23.0.tgz#e49b2b249cfe7ab31b2641dc427fb409ba5eab48"
|
||||
integrity sha512-dvMsySW+J6oBlCHKR5wRv4R6J1mrWy+qVqAuf7XNwqoHff991KHgHjXKMOuvIkhpam0pnt7iai6JcRpUZrXcLA==
|
||||
"@tiptap/vue-2@^2.24.2":
|
||||
version "2.24.2"
|
||||
resolved "https://registry.yarnpkg.com/@tiptap/vue-2/-/vue-2-2.24.2.tgz#1f3aa44567fa29b06ccbcc06c87e204c1aa4303d"
|
||||
integrity sha512-ricbPdcX4k7jO2v8OshcxDlH4EwIKnw2cNjFAOS6AWB+i08hPY01tQ7MgAL8TpA5UlJ0904NebhDDmIxEXEnMw==
|
||||
dependencies:
|
||||
"@tiptap/extension-bubble-menu" "^2.23.0"
|
||||
"@tiptap/extension-floating-menu" "^2.23.0"
|
||||
"@tiptap/extension-bubble-menu" "^2.24.2"
|
||||
"@tiptap/extension-floating-menu" "^2.24.2"
|
||||
vue-ts-types "1.6.2"
|
||||
|
||||
"@tootallnate/once@2":
|
||||
|
|
|
|||
Loading…
Reference in New Issue