Commit d1031b6c authored by GitLab Bot's avatar GitLab Bot

Automatic merge of gitlab-org/gitlab master

parents e90f195a df6b100c
...@@ -16,8 +16,14 @@ module Ci ...@@ -16,8 +16,14 @@ module Ci
private private
def create_pipeline_for(pull_request) def create_pipeline_for(pull_request)
Ci::CreatePipelineService.new(project, current_user, create_params(pull_request)) if ::Feature.enabled?(:ci_create_external_pr_pipeline_async, project, default_enabled: :yaml)
.execute(:external_pull_request_event, external_pull_request: pull_request) Ci::ExternalPullRequests::CreatePipelineWorker.perform_async(
project.id, current_user.id, pull_request.id
)
else
Ci::CreatePipelineService.new(project, current_user, create_params(pull_request))
.execute(:external_pull_request_event, external_pull_request: pull_request)
end
end end
def create_params(pull_request) def create_params(pull_request)
......
...@@ -1470,6 +1470,15 @@ ...@@ -1470,6 +1470,15 @@
:weight: 3 :weight: 3
:idempotent: :idempotent:
:tags: [] :tags: []
- :name: pipeline_creation:ci_external_pull_requests_create_pipeline
:worker_name: Ci::ExternalPullRequests::CreatePipelineWorker
:feature_category: :pipeline_authoring
:has_external_dependencies:
:urgency: :high
:resource_boundary: :cpu
:weight: 4
:idempotent:
:tags: []
- :name: pipeline_creation:create_pipeline - :name: pipeline_creation:create_pipeline
:worker_name: CreatePipelineWorker :worker_name: CreatePipelineWorker
:feature_category: :continuous_integration :feature_category: :continuous_integration
......
# frozen_string_literal: true
module Ci
module ExternalPullRequests
class CreatePipelineWorker # rubocop:disable Scalability/IdempotentWorker
include ApplicationWorker
data_consistency :always
queue_namespace :pipeline_creation
feature_category :pipeline_authoring
urgency :high
worker_resource_boundary :cpu
def perform(project_id, user_id, external_pull_request_id)
user = User.find_by_id(user_id)
return unless user
project = Project.find_by_id(project_id)
return unless project
external_pull_request = project.external_pull_requests.find_by_id(external_pull_request_id)
return unless external_pull_request
::Ci::CreatePipelineService
.new(project, user, execute_params(external_pull_request))
.execute(:external_pull_request_event, external_pull_request: external_pull_request)
end
private
def execute_params(pull_request)
{
ref: pull_request.source_ref,
source_sha: pull_request.source_sha,
target_sha: pull_request.target_sha
}
end
end
end
end
---
name: ci_create_external_pr_pipeline_async
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/68567
rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/338908
milestone: '14.3'
type: development
group: group::pipeline authoring
default_enabled: false
---
name: usage_data_i_testing_web_performance_widget_total
introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/46746
rollout_issue_url:
milestone: '13.8'
type: development
group: group::testing
default_enabled: true
...@@ -290,6 +290,35 @@ You can use the `$` character for both variables and paths. For example, if the ...@@ -290,6 +290,35 @@ You can use the `$` character for both variables and paths. For example, if the
`$DOCKERFILES_DIR` variable exists, its value is used. If it does not exist, the `$DOCKERFILES_DIR` variable exists, its value is used. If it does not exist, the
`$` is interpreted as being part of a path. `$` is interpreted as being part of a path.
## Reuse rules in different jobs
> [Introduced in](https://gitlab.com/gitlab-org/gitlab/-/issues/322992) GitLab 14.3.
Use [`!reference` tags](../yaml/index.md#reference-tags) to reuse rules in different
jobs. You can combine `!reference` rules with regular job-defined rules:
```yaml
.default_rules:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: never
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
job1:
rules:
- !reference [.default_rules, rules]
script:
- echo "This job runs for the default branch, but not schedules."
job2:
rules:
- !reference [.default_rules, rules]
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This job runs for the default branch, but not schedules."
- echo "It also runs for merge requests."
```
## Specify when jobs run with `only` and `except` ## Specify when jobs run with `only` and `except`
You can use [`only`](../yaml/index.md#only--except) and [`except`](../yaml/index.md#only--except) You can use [`only`](../yaml/index.md#only--except) and [`except`](../yaml/index.md#only--except)
......
...@@ -1141,6 +1141,9 @@ The job is not added to the pipeline: ...@@ -1141,6 +1141,9 @@ The job is not added to the pipeline:
- If no rules match. - If no rules match.
- If a rule matches and has `when: never`. - If a rule matches and has `when: never`.
You can use [`!reference` tags](#reference-tags) to [reuse `rules` configuration](../jobs/job_control.md#reuse-rules-in-different-jobs)
in different jobs.
#### `rules:if` #### `rules:if`
Use `rules:if` clauses to specify when to add a job to a pipeline: Use `rules:if` clauses to specify when to add a job to a pipeline:
...@@ -4765,6 +4768,7 @@ into templates. ...@@ -4765,6 +4768,7 @@ into templates.
### `!reference` tags ### `!reference` tags
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/266173) in GitLab 13.9. > - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/266173) in GitLab 13.9.
> - `rules` keyword support [introduced in](https://gitlab.com/gitlab-org/gitlab/-/issues/322992) GitLab 14.3.
Use the `!reference` custom YAML tag to select keyword configuration from other job Use the `!reference` custom YAML tag to select keyword configuration from other job
sections and reuse it in the current section. Unlike [YAML anchors](#anchors), you can sections and reuse it in the current section. Unlike [YAML anchors](#anchors), you can
......
...@@ -10,27 +10,27 @@ The Slack notifications service enables your GitLab project to send events ...@@ -10,27 +10,27 @@ The Slack notifications service enables your GitLab project to send events
(such as issue creation) to your existing Slack team as notifications. Setting up (such as issue creation) to your existing Slack team as notifications. Setting up
Slack notifications requires configuration changes for both Slack and GitLab. Slack notifications requires configuration changes for both Slack and GitLab.
You can also use Slack slash commands to control GitLab inside Slack. This is the You can also use [Slack slash commands](slack_slash_commands.md)
separately configured [Slack slash commands](slack_slash_commands.md). to control GitLab from Slack. Slash commands are configured separately.
## Slack configuration ## Configure Slack
1. Sign in to your Slack team and [start a new Incoming WebHooks configuration](https://my.slack.com/services/new/incoming-webhook). 1. Sign in to your Slack team and [start a new Incoming WebHooks configuration](https://my.slack.com/services/new/incoming-webhook).
1. Identify the Slack channel where notifications should be sent to by default. 1. Identify the Slack channel where notifications should be sent to by default.
Select **Add Incoming WebHooks integration** to add the configuration. Select **Add Incoming WebHooks integration** to add the configuration.
1. Copy the **Webhook URL**, which is used later in the GitLab configuration. 1. Copy the **Webhook URL** to use later when you configure GitLab.
## GitLab configuration ## Configure GitLab
1. On the top bar, select **Menu > Projects** and find your project. 1. On the top bar, select **Menu > Projects** and find your project.
1. On the left sidebar, select **Settings > Integrations**. 1. On the left sidebar, select **Settings > Integrations**.
1. Select the **Slack notifications** integration to configure it. 1. Select **Slack notifications**.
1. In the **Enable integration** section, select the **Active** checkbox. 1. In the **Enable integration** section, select the **Active** checkbox.
1. In the **Trigger** section, select the checkboxes for each type of GitLab 1. In the **Trigger** section, select the checkboxes for each type of GitLab
event to send to Slack as a notification. For a full list, see event to send to Slack as a notification. For a full list, see
[Triggers available for Slack notifications](#triggers-available-for-slack-notifications). [Triggers for Slack notifications](#triggers-for-slack-notifications).
By default, messages are sent to the channel you configured during By default, messages are sent to the channel you configured during
[Slack integration](#slack-configuration). [Slack configuration](#configure-slack).
1. (Optional) To send messages to a different channel, multiple channels, or as 1. (Optional) To send messages to a different channel, multiple channels, or as
a direct message: a direct message:
- *To send messages to channels,* enter the Slack channel names, separated by - *To send messages to channels,* enter the Slack channel names, separated by
...@@ -40,38 +40,38 @@ separately configured [Slack slash commands](slack_slash_commands.md). ...@@ -40,38 +40,38 @@ separately configured [Slack slash commands](slack_slash_commands.md).
NOTE: NOTE:
Usernames and private channels are not supported. Usernames and private channels are not supported.
1. In **Webhook**, enter the webhook URL you copied from the previous 1. In **Webhook**, enter the webhook URL you copied in the
[Slack integration](#slack-configuration) step. [Slack configuration](#configure-slack) step.
1. (Optional) In **Username**, enter the username of the Slack bot that sends 1. (Optional) In **Username**, enter the username of the Slack bot that sends
the notifications. the notifications.
1. Select the **Notify only broken pipelines** checkbox to notify only on failures. 1. Select the **Notify only broken pipelines** checkbox to notify only on failures.
1. In the **Branches to be notified** dropdown, select which types of branches 1. In the **Branches to be notified** dropdown, select which types of branches
to send notifications for. to send notifications for.
1. Leave the **Labels to be notified** field blank to get all notifications or 1. Leave the **Labels to be notified** field blank to get all notifications, or
add labels that the issue or merge request must have in order to trigger a add labels that the issue or merge request must have to trigger a
notification. notification.
1. Select **Test settings** to verify your information, and then select 1. Select **Test settings** to verify your information, and then select
**Save changes**. **Save changes**.
Your Slack team now starts receiving GitLab event notifications as configured. Your Slack team now starts receiving GitLab event notifications as configured.
### Triggers available for Slack notifications ## Triggers for Slack notifications
The following triggers are available for Slack notifications: The following triggers are available for Slack notifications:
| Trigger | Description | | Trigger name | Trigger event |
|------------------------|-------------| |------------------------|------------------------------------------------------|
| **Push** | Triggered by a push to the repository. | | **Push** | A push to the repository. |
| **Issue** | Triggered when an issue is created, updated, or closed. | | **Issue** | An issue is created, updated, or closed. |
| **Confidential issue** | Triggered when a confidential issue is created, updated, or closed. | | **Confidential issue** | A confidential issue is created, updated, or closed. |
| **Merge request** | Triggered when a merge request is created, updated, or merged. | | **Merge request** | A merge request is created, updated, or merged. |
| **Note** | Triggered when someone adds a comment. | | **Note** | A comment is added. |
| **Confidential note** | Triggered when someone adds a confidential note. | | **Confidential note** | A confidential note is added. |
| **Tag push** | Triggered when a new tag is pushed to the repository. | | **Tag push** | A new tag is pushed to the repository. |
| **Pipeline** | Triggered when a pipeline status changes. | | **Pipeline** | A pipeline status changed. |
| **Wiki page** | Triggered when a wiki page is created or updated. | | **Wiki page** | A wiki page is created or updated. |
| **Deployment** | Triggered when a deployment starts or finishes. | | **Deployment** | A deployment starts or finishes. |
| **Alert** | Triggered when a new, unique alert is recorded. | | **Alert** | A new, unique alert is recorded. |
## Troubleshooting ## Troubleshooting
...@@ -81,45 +81,48 @@ for errors relating to your Slack service. ...@@ -81,45 +81,48 @@ for errors relating to your Slack service.
### Something went wrong on our end ### Something went wrong on our end
This is a generic error shown in the GitLab UI and does not mean much by itself. You might get this generic error message in the GitLab UI.
Review [the logs](../../../administration/logs.md#productionlog) to find Review [the logs](../../../administration/logs.md#productionlog) to find
an error message and keep troubleshooting from there. the error message and keep troubleshooting from there.
### `certificate verify failed` ### `certificate verify failed`
You may see an entry similar to the following in your Sidekiq log: You might see an entry like the following in your Sidekiq log:
```plaintext ```plaintext
2019-01-10_13:22:08.42572 2019-01-10T13:22:08.425Z 6877 TID-abcdefg ProjectServiceWorker JID-3bade5fb3dd47a85db6d78c5 ERROR: {:class=>"ProjectServiceWorker", :service_class=>"SlackService", :message=>"SSL_connect returned=1 errno=0 state=error: certificate verify failed"} 2019-01-10_13:22:08.42572 2019-01-10T13:22:08.425Z 6877 TID-abcdefg ProjectServiceWorker JID-3bade5fb3dd47a85db6d78c5 ERROR: {:class=>"ProjectServiceWorker", :service_class=>"SlackService", :message=>"SSL_connect returned=1 errno=0 state=error: certificate verify failed"}
``` ```
This is probably a problem either with GitLab communicating with Slack, or GitLab This issue occurs when there is a problem with GitLab communicating with Slack,
communicating with itself. The former is less likely, as Slack's security certificates or GitLab communicating with itself.
should _hopefully_ always be trusted. We can establish which we're dealing with by using The former is less likely, as Slack security certificates should always be trusted.
the below rails console script.
```shell To view which of these problems is the cause of the issue:
# start a rails console:
sudo gitlab-rails console -e production
# or for source installs: 1. Start a Rails console:
bundle exec rails console -e production
```
```ruby ```shell
# run this in the Rails console sudo gitlab-rails console -e production
# replace <SLACK URL> with your actual Slack URL
result = Net::HTTP.get(URI('https://<SLACK URL>'));0
# replace <GITLAB URL> with your actual GitLab URL # for source installs:
result = Net::HTTP.get(URI('https://<GITLAB URL>'));0 bundle exec rails console -e production
``` ```
1. Run the following commands:
```ruby
# replace <SLACK URL> with your actual Slack URL
result = Net::HTTP.get(URI('https://<SLACK URL>'));0
# replace <GITLAB URL> with your actual GitLab URL
result = Net::HTTP.get(URI('https://<GITLAB URL>'));0
```
If GitLab is not trusting HTTPS connections to itself, then you may If GitLab does not trust HTTPS connections to itself,
need to [add your certificate to the GitLab trusted certificates](https://docs.gitlab.com/omnibus/settings/ssl.html#install-custom-public-certificates). [add your certificate to the GitLab trusted certificates](https://docs.gitlab.com/omnibus/settings/ssl.html#install-custom-public-certificates).
If GitLab is not trusting connections to Slack, then the GitLab If GitLab does not trust connections to Slack,
OpenSSL trust store is incorrect. Some typical causes: the GitLab OpenSSL trust store is incorrect. Typical causes are:
- Overriding the trust store with `gitlab_rails['env'] = {"SSL_CERT_FILE" => "/path/to/file.pem"}`. - Overriding the trust store with `gitlab_rails['env'] = {"SSL_CERT_FILE" => "/path/to/file.pem"}`.
- Accidentally modifying the default CA bundle `/opt/gitlab/embedded/ssl/certs/cacert.pem`. - Accidentally modifying the default CA bundle `/opt/gitlab/embedded/ssl/certs/cacert.pem`.
...@@ -3,14 +3,12 @@ import { once } from 'lodash'; ...@@ -3,14 +3,12 @@ import { once } from 'lodash';
import { componentNames } from 'ee/reports/components/issue_body'; import { componentNames } from 'ee/reports/components/issue_body';
import api from '~/api'; import api from '~/api';
import ReportSection from '~/reports/components/report_section.vue'; import ReportSection from '~/reports/components/report_section.vue';
import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
export default { export default {
name: 'GroupedBrowserPerformanceReportsApp', name: 'GroupedBrowserPerformanceReportsApp',
components: { components: {
ReportSection, ReportSection,
}, },
mixins: [glFeatureFlagsMixin()],
props: { props: {
status: { status: {
type: String, type: String,
...@@ -49,9 +47,7 @@ export default { ...@@ -49,9 +47,7 @@ export default {
computed: { computed: {
handleBrowserPerformanceToggleEvent() { handleBrowserPerformanceToggleEvent() {
return once(() => { return once(() => {
if (this.glFeatures.usageDataITestingWebPerformanceWidgetTotal) { api.trackRedisHllUserEvent(this.$options.expandEvent);
api.trackRedisHllUserEvent(this.$options.expandEvent);
}
}); });
}, },
}, },
......
...@@ -12,7 +12,6 @@ module EE ...@@ -12,7 +12,6 @@ module EE
push_frontend_feature_flag(:anonymous_visual_review_feedback) push_frontend_feature_flag(:anonymous_visual_review_feedback)
push_frontend_feature_flag(:missing_mr_security_scan_types, @project) push_frontend_feature_flag(:missing_mr_security_scan_types, @project)
push_frontend_feature_flag(:usage_data_i_testing_metrics_report_widget_total, @project, default_enabled: true) push_frontend_feature_flag(:usage_data_i_testing_metrics_report_widget_total, @project, default_enabled: true)
push_frontend_feature_flag(:usage_data_i_testing_web_performance_widget_total, @project, default_enabled: true)
push_frontend_feature_flag(:usage_data_i_testing_load_performance_widget_total, @project, default_enabled: true) push_frontend_feature_flag(:usage_data_i_testing_load_performance_widget_total, @project, default_enabled: true)
end end
......
...@@ -9,7 +9,7 @@ const localVue = createLocalVue(); ...@@ -9,7 +9,7 @@ const localVue = createLocalVue();
describe('Grouped test reports app', () => { describe('Grouped test reports app', () => {
let wrapper; let wrapper;
const mountComponent = ({ usageDataITestingWebPerformanceWidgetTotal = false } = {}) => { const mountComponent = () => {
wrapper = mount(GroupedBrowserPerformanceReportsApp, { wrapper = mount(GroupedBrowserPerformanceReportsApp, {
localVue, localVue,
propsData: { propsData: {
...@@ -22,42 +22,23 @@ describe('Grouped test reports app', () => { ...@@ -22,42 +22,23 @@ describe('Grouped test reports app', () => {
neutralIssues: [], neutralIssues: [],
hasIssues: true, hasIssues: true,
}, },
provide: {
glFeatures: {
usageDataITestingWebPerformanceWidgetTotal,
},
},
}); });
}; };
beforeEach(() => {
mountComponent();
});
afterEach(() => { afterEach(() => {
wrapper.destroy(); wrapper.destroy();
wrapper = null; wrapper = null;
}); });
describe('service ping events', () => { describe('service ping events', () => {
describe('when feature flag is enabled', () => { it('tracks an event when the widget is expanded', () => {
beforeEach(() => { wrapper.find('[data-testid="report-section-expand-button"]').trigger('click');
mountComponent({ usageDataITestingWebPerformanceWidgetTotal: true });
});
it('tracks an event when the widget is expanded', () => {
wrapper.find('[data-testid="report-section-expand-button"]').trigger('click');
expect(Api.trackRedisHllUserEvent).toHaveBeenCalledWith(wrapper.vm.$options.expandEvent);
});
});
describe('when feature flag is disabled', () => {
beforeEach(() => {
mountComponent({ usageDataITestingWebPerformanceWidgetTotal: false });
});
it('tracks an event when the widget is expanded', () => {
wrapper.find('[data-testid="report-section-expand-button"]').trigger('click');
expect(Api.trackRedisHllUserEvent).not.toHaveBeenCalled(); expect(Api.trackRedisHllUserEvent).toHaveBeenCalledWith(wrapper.vm.$options.expandEvent);
});
}); });
}); });
}); });
...@@ -48,6 +48,7 @@ RSpec.describe API::ProjectMirror do ...@@ -48,6 +48,7 @@ RSpec.describe API::ProjectMirror do
let(:source_branch) { branch.name } let(:source_branch) { branch.name }
let(:source_sha) { branch.target } let(:source_sha) { branch.target }
let(:action) { 'opened' } let(:action) { 'opened' }
let(:user) { project_mirrored.mirror_user }
let(:params) do let(:params) do
{ {
...@@ -80,26 +81,55 @@ RSpec.describe API::ProjectMirror do ...@@ -80,26 +81,55 @@ RSpec.describe API::ProjectMirror do
stub_licensed_features(ci_cd_projects: true, github_project_service_integration: true) stub_licensed_features(ci_cd_projects: true, github_project_service_integration: true)
end end
it 'triggers a pipeline for pull request' do subject(:send_request) { do_post(params: params) }
expect(Ci::CreatePipelineService)
.to receive(:new)
.with(project_mirrored, project_mirrored.mirror_user, pipeline_params)
.and_return(create_pipeline_service)
expect(create_pipeline_service) shared_examples_for 'triggering pipeline creation' do
.to receive(:execute) context 'when the FF ci_create_external_pr_pipeline_async is disabled' do
.with(:external_pull_request_event, any_args) before do
stub_feature_flags(ci_create_external_pr_pipeline_async: false)
end
let(:create_pipeline_service) { instance_double(Ci::CreatePipelineService) }
it 'triggers a pipeline for pull request' do
expect(Ci::CreatePipelineService)
.to receive(:new)
.with(project_mirrored, user, pipeline_params)
.and_return(create_pipeline_service)
expect(create_pipeline_service)
.to receive(:execute)
.with(:external_pull_request_event, any_args)
send_request
do_post(params: params) expect(response).to have_gitlab_http_status(:ok)
end
end
it 'enqueues Ci::ExternalPullRequests::CreatePipelineWorker' do
expect { send_request }
.to change { ExternalPullRequest.count }.by(1)
.and change { ::Ci::ExternalPullRequests::CreatePipelineWorker.jobs.count }.by(1)
expect(response).to have_gitlab_http_status(:ok)
expect(response).to have_gitlab_http_status(:ok) args = ::Ci::ExternalPullRequests::CreatePipelineWorker.jobs.last['args']
pull_request = ExternalPullRequest.last
expect(args[0]).to eq(project_mirrored.id)
expect(args[1]).to eq(user.id)
expect(args[2]).to eq(pull_request.id)
end
end end
it_behaves_like 'triggering pipeline creation'
context 'when any param is missing' do context 'when any param is missing' do
let(:source_sha) { nil } let(:source_sha) { nil }
it 'returns the error message' do it 'returns the error message' do
do_post(params: params) send_request
expect(response).to have_gitlab_http_status(:bad_request) expect(response).to have_gitlab_http_status(:bad_request)
end end
...@@ -111,31 +141,22 @@ RSpec.describe API::ProjectMirror do ...@@ -111,31 +141,22 @@ RSpec.describe API::ProjectMirror do
it 'ignores it and return success status' do it 'ignores it and return success status' do
expect(Ci::CreatePipelineService).not_to receive(:new) expect(Ci::CreatePipelineService).not_to receive(:new)
do_post(params: params) send_request
expect(response).to have_gitlab_http_status(:unprocessable_entity) expect(response).to have_gitlab_http_status(:unprocessable_entity)
end end
end end
context 'when authenticated as user' do context 'when authenticated as user' do
let(:user) { create(:user) } let_it_be(:user) { create(:user) }
it 'triggers a pipeline for pull request' do before do
project_member(:maintainer, user) project_member(:maintainer, user)
end
expect(Ci::CreatePipelineService) subject(:send_request) { do_post(params: params, user: user, headers: {}) }
.to receive(:new)
.with(project_mirrored, user, pipeline_params)
.and_return(create_pipeline_service)
expect(create_pipeline_service)
.to receive(:execute)
.with(:external_pull_request_event, any_args)
do_post(params: params, user: user, headers: {})
expect(response).to have_gitlab_http_status(:ok) it_behaves_like 'triggering pipeline creation'
end
end end
context 'when ci_cd_projects is not available' do context 'when ci_cd_projects is not available' do
...@@ -144,7 +165,7 @@ RSpec.describe API::ProjectMirror do ...@@ -144,7 +165,7 @@ RSpec.describe API::ProjectMirror do
end end
it 'returns the error message' do it 'returns the error message' do
do_post(params: params) send_request
expect(response).to have_gitlab_http_status(:unprocessable_entity) expect(response).to have_gitlab_http_status(:unprocessable_entity)
end end
...@@ -156,7 +177,7 @@ RSpec.describe API::ProjectMirror do ...@@ -156,7 +177,7 @@ RSpec.describe API::ProjectMirror do
end end
it 'returns the error message' do it 'returns the error message' do
do_post(params: params) send_request
expect(response).to have_gitlab_http_status(:unprocessable_entity) expect(response).to have_gitlab_http_status(:unprocessable_entity)
end end
......
...@@ -53,21 +53,40 @@ RSpec.describe Ci::ExternalPullRequests::ProcessGithubEventService do ...@@ -53,21 +53,40 @@ RSpec.describe Ci::ExternalPullRequests::ProcessGithubEventService do
let(:source_branch) { branch.name } let(:source_branch) { branch.name }
let(:source_sha) { branch.target } let(:source_sha) { branch.target }
let(:create_pipeline_service) { instance_double(Ci::CreatePipelineService) } context 'when the FF ci_create_external_pr_pipeline_async is disabled' do
before do
it 'creates a pipeline and the external pull request' do stub_feature_flags(ci_create_external_pr_pipeline_async: false)
pipeline_params = { end
ref: Gitlab::Git::BRANCH_REF_PREFIX + branch.name,
source_sha: branch.target, let(:create_pipeline_service) { instance_double(Ci::CreatePipelineService) }
target_sha: 'a09386439ca39abe575675ffd4b89ae824fec22f'
} it 'creates a pipeline and the external pull request' do
expect(Ci::CreatePipelineService).to receive(:new) pipeline_params = {
.with(project, user, pipeline_params) ref: Gitlab::Git::BRANCH_REF_PREFIX + branch.name,
.and_return(create_pipeline_service) source_sha: branch.target,
expect(create_pipeline_service).to receive(:execute) target_sha: 'a09386439ca39abe575675ffd4b89ae824fec22f'
.with(:external_pull_request_event, any_args) }
expect(Ci::CreatePipelineService).to receive(:new)
.with(project, user, pipeline_params)
.and_return(create_pipeline_service)
expect(create_pipeline_service).to receive(:execute)
.with(:external_pull_request_event, any_args)
expect { subject.execute(params) }.to change { ExternalPullRequest.count }.by(1)
end
end
expect { subject.execute(params) }.to change { ExternalPullRequest.count }.by(1) it 'enqueues Ci::ExternalPullRequests::CreatePipelineWorker' do
expect { subject.execute(params) }
.to change { ExternalPullRequest.count }.by(1)
.and change { ::Ci::ExternalPullRequests::CreatePipelineWorker.jobs.count }.by(1)
args = ::Ci::ExternalPullRequests::CreatePipelineWorker.jobs.last['args']
pull_request = ExternalPullRequest.last
expect(args[0]).to eq(project.id)
expect(args[1]).to eq(user.id)
expect(args[2]).to eq(pull_request.id)
end end
end end
......
...@@ -168,7 +168,6 @@ ...@@ -168,7 +168,6 @@
category: testing category: testing
redis_slot: testing redis_slot: testing
aggregation: weekly aggregation: weekly
feature_flag: usage_data_i_testing_web_performance_widget_total
- name: i_testing_group_code_coverage_project_click_total - name: i_testing_group_code_coverage_project_click_total
category: testing category: testing
redis_slot: testing redis_slot: testing
......
...@@ -66,34 +66,34 @@ ...@@ -66,34 +66,34 @@
"@sentry/browser": "5.26.0", "@sentry/browser": "5.26.0",
"@sourcegraph/code-host-integration": "0.0.59", "@sourcegraph/code-host-integration": "0.0.59",
"@tiptap/core": "^2.0.0-beta.86", "@tiptap/core": "^2.0.0-beta.86",
"@tiptap/extension-blockquote": "^2.0.0-beta.14", "@tiptap/extension-blockquote": "^2.0.0-beta.15",
"@tiptap/extension-bold": "^2.0.0-beta.14", "@tiptap/extension-bold": "^2.0.0-beta.15",
"@tiptap/extension-bullet-list": "^2.0.0-beta.14", "@tiptap/extension-bullet-list": "^2.0.0-beta.15",
"@tiptap/extension-code": "^2.0.0-beta.14", "@tiptap/extension-code": "^2.0.0-beta.16",
"@tiptap/extension-code-block-lowlight": "2.0.0-beta.32", "@tiptap/extension-code-block-lowlight": "2.0.0-beta.32",
"@tiptap/extension-document": "^2.0.0-beta.12", "@tiptap/extension-document": "^2.0.0-beta.13",
"@tiptap/extension-dropcursor": "^2.0.0-beta.17", "@tiptap/extension-dropcursor": "^2.0.0-beta.18",
"@tiptap/extension-gapcursor": "^2.0.0-beta.18", "@tiptap/extension-gapcursor": "^2.0.0-beta.19",
"@tiptap/extension-hard-break": "^2.0.0-beta.14", "@tiptap/extension-hard-break": "^2.0.0-beta.14",
"@tiptap/extension-heading": "^2.0.0-beta.14", "@tiptap/extension-heading": "^2.0.0-beta.15",
"@tiptap/extension-history": "^2.0.0-beta.14", "@tiptap/extension-history": "^2.0.0-beta.16",
"@tiptap/extension-horizontal-rule": "^2.0.0-beta.17", "@tiptap/extension-horizontal-rule": "^2.0.0-beta.19",
"@tiptap/extension-image": "^2.0.0-beta.14", "@tiptap/extension-image": "^2.0.0-beta.15",
"@tiptap/extension-italic": "^2.0.0-beta.14", "@tiptap/extension-italic": "^2.0.0-beta.15",
"@tiptap/extension-link": "^2.0.0-beta.18", "@tiptap/extension-link": "^2.0.0-beta.19",
"@tiptap/extension-list-item": "^2.0.0-beta.13", "@tiptap/extension-list-item": "^2.0.0-beta.14",
"@tiptap/extension-ordered-list": "^2.0.0-beta.14", "@tiptap/extension-ordered-list": "^2.0.0-beta.15",
"@tiptap/extension-paragraph": "^2.0.0-beta.15", "@tiptap/extension-paragraph": "^2.0.0-beta.17",
"@tiptap/extension-strike": "^2.0.0-beta.16", "@tiptap/extension-strike": "^2.0.0-beta.17",
"@tiptap/extension-subscript": "^2.0.0-beta.4", "@tiptap/extension-subscript": "^2.0.0-beta.4",
"@tiptap/extension-superscript": "^2.0.0-beta.4", "@tiptap/extension-superscript": "^2.0.0-beta.4",
"@tiptap/extension-table": "^2.0.0-beta.25", "@tiptap/extension-table": "^2.0.0-beta.29",
"@tiptap/extension-table-cell": "^2.0.0-beta.13", "@tiptap/extension-table-cell": "^2.0.0-beta.14",
"@tiptap/extension-table-header": "^2.0.0-beta.15", "@tiptap/extension-table-header": "^2.0.0-beta.16",
"@tiptap/extension-table-row": "^2.0.0-beta.13", "@tiptap/extension-table-row": "^2.0.0-beta.14",
"@tiptap/extension-task-item": "^2.0.0-beta.17", "@tiptap/extension-task-item": "^2.0.0-beta.17",
"@tiptap/extension-task-list": "^2.0.0-beta.17", "@tiptap/extension-task-list": "^2.0.0-beta.17",
"@tiptap/extension-text": "^2.0.0-beta.12", "@tiptap/extension-text": "^2.0.0-beta.13",
"@tiptap/vue-2": "^2.0.0-beta.39", "@tiptap/vue-2": "^2.0.0-beta.39",
"@toast-ui/editor": "^2.5.2", "@toast-ui/editor": "^2.5.2",
"@toast-ui/vue-editor": "^2.5.2", "@toast-ui/vue-editor": "^2.5.2",
...@@ -259,6 +259,7 @@ ...@@ -259,6 +259,7 @@
"postcss": "^7.0.14", "postcss": "^7.0.14",
"prettier": "2.2.1", "prettier": "2.2.1",
"prosemirror-schema-basic": "^1.1.2", "prosemirror-schema-basic": "^1.1.2",
"prosemirror-schema-list": "^1.1.5",
"prosemirror-test-builder": "^1.0.4", "prosemirror-test-builder": "^1.0.4",
"purgecss": "^4.0.3", "purgecss": "^4.0.3",
"purgecss-from-html": "^4.0.3", "purgecss-from-html": "^4.0.3",
......
...@@ -12,7 +12,7 @@ RSpec.describe Ci::ExternalPullRequests::CreatePipelineService do ...@@ -12,7 +12,7 @@ RSpec.describe Ci::ExternalPullRequests::CreatePipelineService do
project.add_maintainer(user) project.add_maintainer(user)
end end
subject(:response) { described_class.new(project, user).execute(pull_request) } subject(:execute) { described_class.new(project, user).execute(pull_request) }
context 'when pull request is open' do context 'when pull request is open' do
before do before do
...@@ -21,26 +21,43 @@ RSpec.describe Ci::ExternalPullRequests::CreatePipelineService do ...@@ -21,26 +21,43 @@ RSpec.describe Ci::ExternalPullRequests::CreatePipelineService do
context 'when source sha is the head of the source branch' do context 'when source sha is the head of the source branch' do
let(:source_branch) { project.repository.branches.last } let(:source_branch) { project.repository.branches.last }
let(:create_pipeline_service) { instance_double(Ci::CreatePipelineService) }
before do before do
pull_request.update!(source_branch: source_branch.name, source_sha: source_branch.target) pull_request.update!(source_branch: source_branch.name, source_sha: source_branch.target)
end end
it 'creates a pipeline for external pull request', :aggregate_failures do context 'when the FF ci_create_external_pr_pipeline_async is disabled' do
pipeline = response.payload before do
stub_feature_flags(ci_create_external_pr_pipeline_async: false)
expect(response).to be_success end
expect(pipeline).to be_valid
expect(pipeline).to be_persisted it 'creates a pipeline for external pull request', :aggregate_failures do
expect(pipeline).to be_external_pull_request_event pipeline = execute.payload
expect(pipeline).to eq(project.ci_pipelines.last)
expect(pipeline.external_pull_request).to eq(pull_request) expect(execute).to be_success
expect(pipeline.user).to eq(user) expect(pipeline).to be_valid
expect(pipeline.status).to eq('created') expect(pipeline).to be_persisted
expect(pipeline.ref).to eq(pull_request.source_branch) expect(pipeline).to be_external_pull_request_event
expect(pipeline.sha).to eq(pull_request.source_sha) expect(pipeline).to eq(project.ci_pipelines.last)
expect(pipeline.source_sha).to eq(pull_request.source_sha) expect(pipeline.external_pull_request).to eq(pull_request)
expect(pipeline.user).to eq(user)
expect(pipeline.status).to eq('created')
expect(pipeline.ref).to eq(pull_request.source_branch)
expect(pipeline.sha).to eq(pull_request.source_sha)
expect(pipeline.source_sha).to eq(pull_request.source_sha)
end
end
it 'enqueues Ci::ExternalPullRequests::CreatePipelineWorker' do
expect { execute }
.to change { ::Ci::ExternalPullRequests::CreatePipelineWorker.jobs.count }
.by(1)
args = ::Ci::ExternalPullRequests::CreatePipelineWorker.jobs.last['args']
expect(args[0]).to eq(project.id)
expect(args[1]).to eq(user.id)
expect(args[2]).to eq(pull_request.id)
end end
end end
...@@ -53,11 +70,12 @@ RSpec.describe Ci::ExternalPullRequests::CreatePipelineService do ...@@ -53,11 +70,12 @@ RSpec.describe Ci::ExternalPullRequests::CreatePipelineService do
end end
it 'does nothing', :aggregate_failures do it 'does nothing', :aggregate_failures do
expect(Ci::CreatePipelineService).not_to receive(:new) expect { execute }
.not_to change { ::Ci::ExternalPullRequests::CreatePipelineWorker.jobs.count }
expect(response).to be_error expect(execute).to be_error
expect(response.message).to eq('The source sha is not the head of the source branch') expect(execute.message).to eq('The source sha is not the head of the source branch')
expect(response.payload).to be_nil expect(execute.payload).to be_nil
end end
end end
end end
...@@ -68,11 +86,12 @@ RSpec.describe Ci::ExternalPullRequests::CreatePipelineService do ...@@ -68,11 +86,12 @@ RSpec.describe Ci::ExternalPullRequests::CreatePipelineService do
end end
it 'does nothing', :aggregate_failures do it 'does nothing', :aggregate_failures do
expect(Ci::CreatePipelineService).not_to receive(:new) expect { execute }
.not_to change { ::Ci::ExternalPullRequests::CreatePipelineWorker.jobs.count }
expect(response).to be_error expect(execute).to be_error
expect(response.message).to eq('The pull request is not opened') expect(execute.message).to eq('The pull request is not opened')
expect(response.payload).to be_nil expect(execute.payload).to be_nil
end end
end end
end end
......
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe Ci::ExternalPullRequests::CreatePipelineWorker do
let_it_be(:project) { create(:project, :auto_devops, :repository) }
let_it_be(:user) { project.owner }
let_it_be(:external_pull_request) do
branch = project.repository.branches.last
create(:external_pull_request, project: project, source_branch: branch.name, source_sha: branch.target)
end
let(:worker) { described_class.new }
describe '#perform' do
let(:project_id) { project.id }
let(:user_id) { user.id }
let(:external_pull_request_id) { external_pull_request.id }
subject(:perform) { worker.perform(project_id, user_id, external_pull_request_id) }
it 'creates the pipeline' do
pipeline = perform.payload
expect(pipeline).to be_valid
expect(pipeline).to be_persisted
expect(pipeline).to be_external_pull_request_event
expect(pipeline.project).to eq(project)
expect(pipeline.user).to eq(user)
expect(pipeline.external_pull_request).to eq(external_pull_request)
expect(pipeline.status).to eq('created')
expect(pipeline.ref).to eq(external_pull_request.source_branch)
expect(pipeline.sha).to eq(external_pull_request.source_sha)
expect(pipeline.source_sha).to eq(external_pull_request.source_sha)
expect(pipeline.target_sha).to eq(external_pull_request.target_sha)
end
shared_examples_for 'not calling service' do
it 'does not call the service' do
expect(Ci::CreatePipelineService).not_to receive(:new)
perform
end
end
context 'when the project not found' do
let(:project_id) { non_existing_record_id }
it_behaves_like 'not calling service'
end
context 'when the user not found' do
let(:user_id) { non_existing_record_id }
it_behaves_like 'not calling service'
end
context 'when the pull request not found' do
let(:external_pull_request_id) { non_existing_record_id }
it_behaves_like 'not calling service'
end
context 'when the pull request does not belong to the project' do
let(:external_pull_request_id) { create(:external_pull_request).id }
it_behaves_like 'not calling service'
end
end
end
...@@ -1326,17 +1326,17 @@ ...@@ -1326,17 +1326,17 @@
prosemirror-transform "^1.3.2" prosemirror-transform "^1.3.2"
prosemirror-view "^1.18.8" prosemirror-view "^1.18.8"
"@tiptap/extension-blockquote@^2.0.0-beta.14": "@tiptap/extension-blockquote@^2.0.0-beta.15":
version "2.0.0-beta.14" version "2.0.0-beta.15"
resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.14.tgz#f49872981aecdd21341c4d5db32ab68cba945756" resolved "https://registry.yarnpkg.com/@tiptap/extension-blockquote/-/extension-blockquote-2.0.0-beta.15.tgz#40be203f7db47e027ea1a5ba42bbb0e33bb6c004"
integrity sha512-1U/mJA1Yncl1Uvdv66oRhWrT7RZC/GdrZrvzU4EHdpRRwW4s71jvDVzqGX2tYwMO70TnwmkqMEWm0Csb1pOhMg== integrity sha512-Cso44KsYsqKqaNveQmx5KVaLy9krq5AzE9WhGVDBSFqWhvuIJkQYrTRBbOTfUDs/st9VuwJrbjTDD65ow50wEw==
dependencies: dependencies:
prosemirror-inputrules "^1.1.3" prosemirror-inputrules "^1.1.3"
"@tiptap/extension-bold@^2.0.0-beta.14": "@tiptap/extension-bold@^2.0.0-beta.15":
version "2.0.0-beta.14" version "2.0.0-beta.15"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.14.tgz#6bf9ea70f7e24e6d674c7780471fcb6a7a4b91f4" resolved "https://registry.yarnpkg.com/@tiptap/extension-bold/-/extension-bold-2.0.0-beta.15.tgz#cf9ddb3fc316be9707753ad4e497bfb8a3ebb0c2"
integrity sha512-WhKB3GfXhIDISQE2jYIVYe0aVQCvQRJQZCRFeac7kMxHE2veHWpjqjbp7jSbvTQ7YVZxPZFvezVs+3HWz1K0xg== integrity sha512-jKyV6iiwhxwa0+7uuKD74jNDVNLNOS1GmU14MgaA95pY5e1fyaRBPPX8Gtt89niz2CLOY711AV17RPZTe/e60w==
"@tiptap/extension-bubble-menu@^2.0.0-beta.24": "@tiptap/extension-bubble-menu@^2.0.0-beta.24":
version "2.0.0-beta.24" version "2.0.0-beta.24"
...@@ -1347,10 +1347,10 @@ ...@@ -1347,10 +1347,10 @@
prosemirror-view "^1.18.8" prosemirror-view "^1.18.8"
tippy.js "^6.3.1" tippy.js "^6.3.1"
"@tiptap/extension-bullet-list@^2.0.0-beta.14": "@tiptap/extension-bullet-list@^2.0.0-beta.15":
version "2.0.0-beta.14" version "2.0.0-beta.15"
resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.14.tgz#29b9bfa2e908cdb01943242f75daf82115f5afd1" resolved "https://registry.yarnpkg.com/@tiptap/extension-bullet-list/-/extension-bullet-list-2.0.0-beta.15.tgz#74876851a8d227ba1a031d031631ed621c175e05"
integrity sha512-PcyaTNk/aGaXVC98mPAq4TRjXG6dDNb0CAeBqFIo8hLywwwKTaLfLQJNHtm605MSoEo2f8XO6gfQhWgJQQ6qwA== integrity sha512-5i44JzsZOh8Ci6CuYRQy6W3jCpYgX0+VuJKeHvZ6Aomy4Qqrtc9Jk43PBmCj91lNUUtH6Io9l+kDrLCumEFnEg==
dependencies: dependencies:
prosemirror-inputrules "^1.1.3" prosemirror-inputrules "^1.1.3"
...@@ -1367,26 +1367,26 @@ ...@@ -1367,26 +1367,26 @@
prosemirror-view "^1.18.8" prosemirror-view "^1.18.8"
"@tiptap/extension-code-block@^2.0.0-beta.16": "@tiptap/extension-code-block@^2.0.0-beta.16":
version "2.0.0-beta.16" version "2.0.0-beta.17"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.16.tgz#7788ee1af04eb84fe194261bb1bb835dbe7ad59e" resolved "https://registry.yarnpkg.com/@tiptap/extension-code-block/-/extension-code-block-2.0.0-beta.17.tgz#b12ab35561da08b359f4d8dced2b8c30eb62fcdb"
integrity sha512-FgKuobqybmkVidRsOSatgVYEyHldvGPBu7/nr5z131PHMqTe7Z35c4r2ts5DCZRsOoby17Nn4iLAENqtsmyyJQ== integrity sha512-u3RY991mXtjuw+trVaDwbAhuPPlU8l6kS4rXIxWJ5W/sNElbmfHLVu7RP++YwM8KOQrCrQl8TJbZTEIekMw61w==
dependencies: dependencies:
prosemirror-inputrules "^1.1.3" prosemirror-inputrules "^1.1.3"
"@tiptap/extension-code@^2.0.0-beta.14": "@tiptap/extension-code@^2.0.0-beta.16":
version "2.0.0-beta.14" version "2.0.0-beta.16"
resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.0.0-beta.14.tgz#679a741589d63006140605553be7c6148c000814" resolved "https://registry.yarnpkg.com/@tiptap/extension-code/-/extension-code-2.0.0-beta.16.tgz#b258ff90ebe703a4d36ff0c650e6b2cab634028d"
integrity sha512-Z67Ae2BPTAXG8VxHaw2SAS9HjUmfL1fUew5IUdaML8GOSaBYjzIffvN/+0MNdxkBEFxMJu4zm3o/WdWIoUckdQ== integrity sha512-Kakg/RMiVrxjzIkLVDXtbCzRh/9W8dgSG04IhMZNOI8N9vWn8Z78jdUyxEEDTcL/JyWWcMxn9AsJw2U5ajO3pA==
"@tiptap/extension-document@^2.0.0-beta.12": "@tiptap/extension-document@^2.0.0-beta.13":
version "2.0.0-beta.12" version "2.0.0-beta.13"
resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.0.0-beta.12.tgz#dfbc7e686075a38662a43708903cd2047cf7f4b2" resolved "https://registry.yarnpkg.com/@tiptap/extension-document/-/extension-document-2.0.0-beta.13.tgz#8cfb29d4de64bf4a790817f730c05b4f9b7167b2"
integrity sha512-i5anc2n98Jg1gi6WDLTaS76jLIUe41FHuMHgL4DCIDXv8m2q0qnktfmOvh9AMF7cPzJ2NVAR9xYw0Pxm3qXY4w== integrity sha512-nrufdKziA/wovaY4DjGkc8OGuIZi8CH8CW3+yYfeWbruwFKkyZHlZy9nplFWSEqBHPAeqD+px9r91yGMW3ontA==
"@tiptap/extension-dropcursor@^2.0.0-beta.17": "@tiptap/extension-dropcursor@^2.0.0-beta.18":
version "2.0.0-beta.17" version "2.0.0-beta.18"
resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.17.tgz#3ca59c264b49a91c1a5b2ce8de3e898903d0a5bc" resolved "https://registry.yarnpkg.com/@tiptap/extension-dropcursor/-/extension-dropcursor-2.0.0-beta.18.tgz#25f0676b0cae6900ac18e11a2e1ea2627904dfa3"
integrity sha512-f7hSA4e9xaVi1GAb6JJErVy2QtdpTxjJmtyV8nG7xGvoI0QH1IIiftD88FWGvUGN1CHBg83XpPpmIIFH7oKthw== integrity sha512-P9cMKO7YXsqp62WA2sliWA6TZThO0yoQprv8Em5BPnW53ttZn9RR9sZaeLL/y02cl/aLVtqdLtl2CPSER43ieA==
dependencies: dependencies:
"@types/prosemirror-dropcursor" "^1.0.2" "@types/prosemirror-dropcursor" "^1.0.2"
prosemirror-dropcursor "^1.3.5" prosemirror-dropcursor "^1.3.5"
...@@ -1400,79 +1400,79 @@ ...@@ -1400,79 +1400,79 @@
prosemirror-view "^1.18.8" prosemirror-view "^1.18.8"
tippy.js "^6.3.1" tippy.js "^6.3.1"
"@tiptap/extension-gapcursor@^2.0.0-beta.18": "@tiptap/extension-gapcursor@^2.0.0-beta.19":
version "2.0.0-beta.18" version "2.0.0-beta.19"
resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.18.tgz#67c2266ec21c90f003e989862b709475f5427fea" resolved "https://registry.yarnpkg.com/@tiptap/extension-gapcursor/-/extension-gapcursor-2.0.0-beta.19.tgz#6d826c240496b1a77808999d51b8917adb372cc5"
integrity sha512-J75xnNrNWHILZviu5ikHtIKF5WFMmmAgkwyateNwgoMwRpyTrZI5Go2LpZ1VEw4AhEA2OcBEvPBEtxWefrBV5g== integrity sha512-GZYMR+Z45bn87CMuOHyxzTJOFoCv58mNakIBdSGX+8A+ExBFeZr/qLqxDxN3wz+LRqy7pREe5K3UxJxpsYnCzA==
dependencies: dependencies:
"@types/prosemirror-gapcursor" "^1.0.4" "@types/prosemirror-gapcursor" "^1.0.4"
prosemirror-gapcursor "^1.1.5" prosemirror-gapcursor "^1.1.5"
"@tiptap/extension-hard-break@^2.0.0-beta.14": "@tiptap/extension-hard-break@^2.0.0-beta.14":
version "2.0.0-beta.14" version "2.0.0-beta.15"
resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.14.tgz#dce00c49dc614caac82720b930501a59b38d5584" resolved "https://registry.yarnpkg.com/@tiptap/extension-hard-break/-/extension-hard-break-2.0.0-beta.15.tgz#ce00dd40f5abeaff8574f2288ade6815ab696c94"
integrity sha512-PbGQJGvgYdsEzeHidlodVCaOkcPaib4A7i0MJlXIyzUnBz8Eiv5+Ks2UBG5JgfBB4GGopatZaLfz8VkG3qfGxw== integrity sha512-MS7MjGOtKtC1bVNAShwCetFRuk8nPr/j18OOzKChNrJFrZXWNJrid3dUojwDLqCraYdzSTmiOmMgU+yoUe/gnw==
"@tiptap/extension-heading@^2.0.0-beta.14": "@tiptap/extension-heading@^2.0.0-beta.15":
version "2.0.0-beta.14" version "2.0.0-beta.15"
resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.14.tgz#63df6d7282afd3c2db2253af2e538c3bf2800751" resolved "https://registry.yarnpkg.com/@tiptap/extension-heading/-/extension-heading-2.0.0-beta.15.tgz#d62f32a2ec8ce5a6d4e716aa7a45dfb707283848"
integrity sha512-ezJRM5ikZK5bmzYCsvq6xCw1KlellSwHcmAVJsupHk3aPD3UF2IEXnKQYbtDjGN62sB2KwnNy6gKFJ5v48gpxA== integrity sha512-UoXDwEdCV9KiPh0wj0jj2Jt6VDqkoTaSU3d9bmEBLwg1Gjgbuv39JDst7oxSqbf9rgbl3txbeOy35wVBKe9CqA==
dependencies: dependencies:
prosemirror-inputrules "^1.1.3" prosemirror-inputrules "^1.1.3"
"@tiptap/extension-history@^2.0.0-beta.14": "@tiptap/extension-history@^2.0.0-beta.16":
version "2.0.0-beta.14" version "2.0.0-beta.16"
resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.0.0-beta.14.tgz#7990a592a521ca4147e733eed78fcb738ed6ba95" resolved "https://registry.yarnpkg.com/@tiptap/extension-history/-/extension-history-2.0.0-beta.16.tgz#f40317bab795e2daf981aa1a01d6025f306be72c"
integrity sha512-Uf9FKgp2/+Z1FD5R55huDvkBorZZMeOU3dfo8K4YL/lnSc4Yyk4huQu+6kK9XDrisIK68NlfYY1GFts49KbZmA== integrity sha512-nrNwV8a7zUt1t2I/kPX5Y6N9vZ8mrugimJIQmPGIp/4mmw1SEUzkaPpIsv6+ELmqMHSDktQ0ofb3pXeWDXWZvw==
dependencies: dependencies:
"@types/prosemirror-history" "^1.0.3" "@types/prosemirror-history" "^1.0.3"
prosemirror-history "^1.1.3" prosemirror-history "^1.2.0"
"@tiptap/extension-horizontal-rule@^2.0.0-beta.17": "@tiptap/extension-horizontal-rule@^2.0.0-beta.19":
version "2.0.0-beta.17" version "2.0.0-beta.19"
resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.17.tgz#25c15bfab5794a3f1bcf6f4df03bef56ddac80aa" resolved "https://registry.yarnpkg.com/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.0.0-beta.19.tgz#d98d0070a2cead32a497b62586c0e259d31f3f2e"
integrity sha512-JDjwRSEWFTgdx0ob4zKjfzKcRxkiQTyPEGEZ2uIcTeXTPD0B0j2ysuWIWnqgwtpFdYfv1wOCU59kNLQx+a5JmA== integrity sha512-RrU7+inExgC+rRmFWoTxALbu/IgRGRik11LPhMhqrCB+n0XFRUMyVEb/jbfgHWVrPmTXq0MbSWW6LYw3iREzRA==
dependencies: dependencies:
prosemirror-state "^1.3.4" prosemirror-state "^1.3.4"
"@tiptap/extension-image@^2.0.0-beta.14": "@tiptap/extension-image@^2.0.0-beta.15":
version "2.0.0-beta.14" version "2.0.0-beta.15"
resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.0.0-beta.14.tgz#31eae69cce3d81af81a1c0fbd253beca3c253429" resolved "https://registry.yarnpkg.com/@tiptap/extension-image/-/extension-image-2.0.0-beta.15.tgz#07bdc23c9804c830a394f78242648dd7783a469e"
integrity sha512-OguktQVJ8D0wFm8jrnct16Pu+T5J0N+rzMNk5kguJJCMiFjhQZ4USZw5jHU6BIAKwulupXmZ/PUBIYCx02LhIA== integrity sha512-iMwQ154RPefOxgqTTHjOA735YWesyjBhYvD9fFxRDctM2vLxEYYYFOENXEBCFLNAr94gfaxefCEdkuNYHl9H7g==
"@tiptap/extension-italic@^2.0.0-beta.14": "@tiptap/extension-italic@^2.0.0-beta.15":
version "2.0.0-beta.14" version "2.0.0-beta.15"
resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.14.tgz#5b56a806ef6507dc2001eaeeeb234ee0b25d8544" resolved "https://registry.yarnpkg.com/@tiptap/extension-italic/-/extension-italic-2.0.0-beta.15.tgz#9a81f686cf221110478935596f0b47a76d4c2f45"
integrity sha512-kDdHVHfHuQe3s0A+xrJm0OTE3MrCRWDFHiJ+rC5JnY3/b8GEzovOD6cslz6CeVSZAUDERmHKVPF+ioAct7HXtw== integrity sha512-ZCz1vCysLdvOUrwODuyBP0BDaemCLh6ib7qTYoSDKdive9kfn0Vc5Fg3o8xgHrtrUfwKIJz/sWOknjDEGIc9cw==
"@tiptap/extension-link@^2.0.0-beta.18": "@tiptap/extension-link@^2.0.0-beta.19":
version "2.0.0-beta.18" version "2.0.0-beta.19"
resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.0.0-beta.18.tgz#792c671daf3db79873b8425e68da43dd19af230b" resolved "https://registry.yarnpkg.com/@tiptap/extension-link/-/extension-link-2.0.0-beta.19.tgz#cba1bd266058fa25543d347a20fba1f9acef8538"
integrity sha512-i87vd82hsBCw6ROR8qjffWMsm7pd/4kwqhytq3l8zrArWLZXxC6JwknYjVNcwiWs2JFr+xJNAnzNgr0oGXguTg== integrity sha512-XTj4w3TbkN8sGqoTr7XCtlyOojAkCWpufjLBpKmQnm2Cd8q6Gy7At0z93H0kx3vDKM8u1ELzXRsO/RiYrFK0lQ==
dependencies: dependencies:
prosemirror-state "^1.3.4" prosemirror-state "^1.3.4"
"@tiptap/extension-list-item@^2.0.0-beta.13": "@tiptap/extension-list-item@^2.0.0-beta.14":
version "2.0.0-beta.13"
resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.13.tgz#49f32d70a554897ffa3b37b492ebaf5953f8a975"
integrity sha512-5nvrCvcV35J6WjLd8xQCQWnj2HIDsfTalr0D57jMwym3ZCIEvLwf23DQQ1nNsOHhopmS/Emixh+RQpXUZjH8lQ==
"@tiptap/extension-ordered-list@^2.0.0-beta.14":
version "2.0.0-beta.14" version "2.0.0-beta.14"
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.14.tgz#54487f8b9246226586d0190d07a449a97536436a" resolved "https://registry.yarnpkg.com/@tiptap/extension-list-item/-/extension-list-item-2.0.0-beta.14.tgz#65a9ff9daa11bc9ca8bc2989a891abe68081cfbd"
integrity sha512-7Tq8jotj7WSUIRlMhNWCv6u99Yu+lyuI8SLx7hRZbmUiGShCQX1J5YI+dti4qlrlhOjjqs1kV95Dgg0JaBtNQw== integrity sha512-t6xwEqP+d5443Ul2Jvqz9kXb3ro7bA7yY9HA0vskm3120WxxHW9jxgxZN+82Ot5Tm7nXOAlsN6vuqnt4idnxZQ==
"@tiptap/extension-ordered-list@^2.0.0-beta.15":
version "2.0.0-beta.15"
resolved "https://registry.yarnpkg.com/@tiptap/extension-ordered-list/-/extension-ordered-list-2.0.0-beta.15.tgz#5645efe300489d5ea2ed7f98eaa84fbdb6951af8"
integrity sha512-j9Xh8CYtV+C/wrTXEWN+U7NJIQ/cQrjta80Mm2hFiE2KDtFNkpsPqG6UBoky04EPFphR5xDUsO1nCT7T7Tei5A==
dependencies: dependencies:
prosemirror-inputrules "^1.1.3" prosemirror-inputrules "^1.1.3"
"@tiptap/extension-paragraph@^2.0.0-beta.15": "@tiptap/extension-paragraph@^2.0.0-beta.17":
version "2.0.0-beta.15" version "2.0.0-beta.17"
resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.15.tgz#89483a2f438d8412287d441c890304985c2ac07f" resolved "https://registry.yarnpkg.com/@tiptap/extension-paragraph/-/extension-paragraph-2.0.0-beta.17.tgz#f8f0263359b95dec9c10078699697908568d9be9"
integrity sha512-mYGjo85oyLVwgWc8+XZ0cvr5GSHSKvkj5t2t1PyHXDmt6Nhl5cJcHgXDztIUhyh0gbRVFKjwQMeUAZWg6DGxMg== integrity sha512-qCQVCf9c2hgaeIdfy22PaoZyW5Vare/1aGkOEAaZma5RjrUbV9hrRKwoW9LsDjnh1EN1fIeKdg02yEhnHWtG8A==
"@tiptap/extension-strike@^2.0.0-beta.16": "@tiptap/extension-strike@^2.0.0-beta.17":
version "2.0.0-beta.16" version "2.0.0-beta.17"
resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.16.tgz#cccce9713824e05ebde895f84f747b8bbed45f7d" resolved "https://registry.yarnpkg.com/@tiptap/extension-strike/-/extension-strike-2.0.0-beta.17.tgz#2280ea4e8c50189c2729814d2ae484e58c712a36"
integrity sha512-SPSCUVzxFLKZzgMXYfeUZE+xy52CJckswo0dZ/8NcUthl3mkDS/TwzokpQ/wsyEsKaJNYt8vh2S9HpadSrLcug== integrity sha512-+WRd0RuCK4+jFKNVN+4rHTa5VMqqGDO2uc+TknkqhFqWp/z96OAGlpHJOwPrnW1fLbpjEBBQIr1vVYSw6KgcZg==
"@tiptap/extension-subscript@^2.0.0-beta.4": "@tiptap/extension-subscript@^2.0.0-beta.4":
version "2.0.0-beta.4" version "2.0.0-beta.4"
...@@ -1484,28 +1484,28 @@ ...@@ -1484,28 +1484,28 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-superscript/-/extension-superscript-2.0.0-beta.4.tgz#16906d71dd8f9892101cf792f42005f8cd404516" resolved "https://registry.yarnpkg.com/@tiptap/extension-superscript/-/extension-superscript-2.0.0-beta.4.tgz#16906d71dd8f9892101cf792f42005f8cd404516"
integrity sha512-rTQCnSnloSf6UN1y3zhu6j41MxrcCVWm5JIPX8VEt60WsOXJLAc/YJHLYi2FWhh/Psq8k78sPrmZbjYUrj3Dkw== integrity sha512-rTQCnSnloSf6UN1y3zhu6j41MxrcCVWm5JIPX8VEt60WsOXJLAc/YJHLYi2FWhh/Psq8k78sPrmZbjYUrj3Dkw==
"@tiptap/extension-table-cell@^2.0.0-beta.13": "@tiptap/extension-table-cell@^2.0.0-beta.14":
version "2.0.0-beta.13" version "2.0.0-beta.14"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.0.0-beta.13.tgz#c01eada4859d5ea487d61e68cc7fab7ed2e4842a" resolved "https://registry.yarnpkg.com/@tiptap/extension-table-cell/-/extension-table-cell-2.0.0-beta.14.tgz#a164a82ba6e15ba95673a9a9d9cbd68fdaf0362b"
integrity sha512-dnPMsBySCbOLG9irQt+cle44y6RxNVwEdknpVocjME6wAgyLpyiShHpS4Tq1j6jAhTYcXR29lNCVMcsIwzSK0A== integrity sha512-VoZ8SF8urU1/I3XnjDez2pbDO0h4cow+o8Xi6mhkMTXbxr212T674W7lu5DVMJ4Y1NF1eLe9eJ9kGJE43cA0+Q==
"@tiptap/extension-table-header@^2.0.0-beta.15": "@tiptap/extension-table-header@^2.0.0-beta.16":
version "2.0.0-beta.15" version "2.0.0-beta.16"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.0.0-beta.15.tgz#884d16f104671ee672f1f629f4e4fef0b096bfbb" resolved "https://registry.yarnpkg.com/@tiptap/extension-table-header/-/extension-table-header-2.0.0-beta.16.tgz#7c200d8c64111b6d84f23888752b421b89c2428e"
integrity sha512-8K0YXFG7bcM1iMZ1pAVcshXdchDQv17a1jGjKXC1+e1NjH1eb/Ya8eyFWlyxC0ZjAFNzQF4r3mGzmGTbWoI6cA== integrity sha512-L/r+ez4G7ZlninS4MwK4tYoVuA6bMMCz7OLvHGBmp24vZm7OA3qyUP4+GGtOXtdhv3aydeBis03gSrrB50aRWw==
"@tiptap/extension-table-row@^2.0.0-beta.13": "@tiptap/extension-table-row@^2.0.0-beta.14":
version "2.0.0-beta.13" version "2.0.0-beta.14"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.0.0-beta.13.tgz#3f9a61112afcde750228f4437ae3cd7b82d02f74" resolved "https://registry.yarnpkg.com/@tiptap/extension-table-row/-/extension-table-row-2.0.0-beta.14.tgz#9ec98c73e309ee966b71ccd140019874d179e0c8"
integrity sha512-tGE3/ADBaVgpBYXgdx5YkAs7waYLKDRormUXKNnTpR+4qVHKUmXrDUTdJ2urXaANaB95F8R5Lj146h+EYiLxgw== integrity sha512-mewdlTqgBCyzeZIZ6F08gfuzwsiYjQ7BvABo2UhDfr0+EN2UvfJj0bT3tGgeZhMxT5Js2DXL+c+ZOVJxWJ9faQ==
"@tiptap/extension-table@^2.0.0-beta.25": "@tiptap/extension-table@^2.0.0-beta.29":
version "2.0.0-beta.25" version "2.0.0-beta.29"
resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.0.0-beta.25.tgz#57accf19c07e96bd0db868eb791da20bd423af36" resolved "https://registry.yarnpkg.com/@tiptap/extension-table/-/extension-table-2.0.0-beta.29.tgz#bc2a13203c432b297f3f4806d5dcb21271af7fa9"
integrity sha512-mVUJL3FKX1vksmrnUcNqRzbAk4kJjKVxAf5RMuUQRcyp8sp3vJinR/C8v5nBrDgurXLB3wF0bD2/FRu7GWEqPA== integrity sha512-2yK4dZboe7+KQoJeM0p6v7xx+G/yKDWbbtDtYRnFecD2Oiz1u44DeMKGzVqPXcMYWxmCnAeUK0kcbmwnPYyBTg==
dependencies: dependencies:
prosemirror-tables "^1.1.1" prosemirror-tables "^1.1.1"
prosemirror-view "^1.18.8" prosemirror-view "^1.19.3"
"@tiptap/extension-task-item@^2.0.0-beta.17": "@tiptap/extension-task-item@^2.0.0-beta.17":
version "2.0.0-beta.17" version "2.0.0-beta.17"
...@@ -1519,10 +1519,10 @@ ...@@ -1519,10 +1519,10 @@
resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.0.0-beta.17.tgz#c0f40325abf1b6a23868e72ab32f9724a8b42a7b" resolved "https://registry.yarnpkg.com/@tiptap/extension-task-list/-/extension-task-list-2.0.0-beta.17.tgz#c0f40325abf1b6a23868e72ab32f9724a8b42a7b"
integrity sha512-E17VBqW2lXF59hCQ/3/Kg0hYSDGvVC4B3W8miZwCXt5WTOl98Gk6qAiDXl+2mDKZvnsLty/YrgkD88OlZSIEbQ== integrity sha512-E17VBqW2lXF59hCQ/3/Kg0hYSDGvVC4B3W8miZwCXt5WTOl98Gk6qAiDXl+2mDKZvnsLty/YrgkD88OlZSIEbQ==
"@tiptap/extension-text@^2.0.0-beta.12": "@tiptap/extension-text@^2.0.0-beta.13":
version "2.0.0-beta.12" version "2.0.0-beta.13"
resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.0.0-beta.12.tgz#b857f36dda5e8cedd350f9bad7115e4060f8d9c0" resolved "https://registry.yarnpkg.com/@tiptap/extension-text/-/extension-text-2.0.0-beta.13.tgz#da0af8d9a3f149d20076e15d88c6af21fb6d940f"
integrity sha512-JEWLYOJKSpmpaI0YTzj30uodpsrSYDGSvy5dT5bYvWovIvLmggKPHl0iKIPDWAM5xfd07CkP2+BFFRblMh96IA== integrity sha512-0EtAwuRldCAoFaL/iXgkRepEeOd55rPg5N4FQUN1xTwZT7PDofukP0DG/2jff/Uj17x4uTaJAa9qlFWuNnDvjw==
"@tiptap/vue-2@^2.0.0-beta.39": "@tiptap/vue-2@^2.0.0-beta.39":
version "2.0.0-beta.39" version "2.0.0-beta.39"
...@@ -1715,9 +1715,9 @@ ...@@ -1715,9 +1715,9 @@
"@types/prosemirror-view" "*" "@types/prosemirror-view" "*"
"@types/prosemirror-dropcursor@^1.0.2": "@types/prosemirror-dropcursor@^1.0.2":
version "1.0.2" version "1.0.3"
resolved "https://registry.yarnpkg.com/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.2.tgz#476b90a661f32d6d6a21599f53fcd71e36c65a1f" resolved "https://registry.yarnpkg.com/@types/prosemirror-dropcursor/-/prosemirror-dropcursor-1.0.3.tgz#49250849b8a0b86e8c29eb1ba70a463e53e46947"
integrity sha512-5Ez7yIAvHQgn5YJkuafEh0w4sHV7pksCX9LTPBFRjCuznamcKsnYCez4mR0PwIWq/WuPDvHkR+wqKb4l0t9/aQ== integrity sha512-b0/8njnJ4lwyHKcGuCMf3x7r1KjxyugB1R/c2iMCjplsJHSC7UY9+OysqgJR5uUXRekUSGniiLgBtac/lvH6wg==
dependencies: dependencies:
"@types/prosemirror-state" "*" "@types/prosemirror-state" "*"
...@@ -1756,9 +1756,9 @@ ...@@ -1756,9 +1756,9 @@
"@types/prosemirror-view" "*" "@types/prosemirror-view" "*"
"@types/prosemirror-model@*", "@types/prosemirror-model@^1.13.1": "@types/prosemirror-model@*", "@types/prosemirror-model@^1.13.1":
version "1.13.1" version "1.13.2"
resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.13.1.tgz#53df04ee174a7e1dc12747005b1b4c02565adcc4" resolved "https://registry.yarnpkg.com/@types/prosemirror-model/-/prosemirror-model-1.13.2.tgz#2adad3ec478f83204f155d7fb94c9dfde2fc3296"
integrity sha512-tA1AlI+YR2t3Ve5eeQVJnQm4yV4wVlNfeogHusD1X3OEqqMYTuPssThgIMR4PxPHtvV871Ix8a20bUiJvULDgw== integrity sha512-a2rDB0aZ+7aIP7uBqQq1wLb4Hg4qqEvpkCqvhsgT/gG8IWC0peCAZfQ24sgTco0qSJLeDgIbtPeU6mgr869/kg==
dependencies: dependencies:
"@types/orderedmap" "*" "@types/orderedmap" "*"
...@@ -1788,9 +1788,9 @@ ...@@ -1788,9 +1788,9 @@
"@types/prosemirror-model" "*" "@types/prosemirror-model" "*"
"@types/prosemirror-view@*", "@types/prosemirror-view@^1.17.2": "@types/prosemirror-view@*", "@types/prosemirror-view@^1.17.2":
version "1.17.2" version "1.18.0"
resolved "https://registry.yarnpkg.com/@types/prosemirror-view/-/prosemirror-view-1.17.2.tgz#3aff71a0802bdfc310404db8a37ced2db69fd74f" resolved "https://registry.yarnpkg.com/@types/prosemirror-view/-/prosemirror-view-1.18.0.tgz#3ec23f48f0d8d9fe290a9bd43a91ce0622bec9b1"
integrity sha512-1yUTQZ3yx2YvJTHZdY/rmvSiJ8tJLhUmlNgbFdkFaFcKC6LTBntg5lQvOZ53Aytadab+M/xz7/TzGX8iYB/7gw== integrity sha512-7NBy7qIV/ig49ThfkrIJrvW8E+HwumMgmpopUTYJlKwOh/fQ6SVUG/RtdnAIBLD+4uK0R2SMObbGZm06x6OwbA==
dependencies: dependencies:
"@types/prosemirror-model" "*" "@types/prosemirror-model" "*"
"@types/prosemirror-state" "*" "@types/prosemirror-state" "*"
...@@ -7792,9 +7792,9 @@ lines-and-columns@^1.1.6: ...@@ -7792,9 +7792,9 @@ lines-and-columns@^1.1.6:
integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=
linkify-it@^2.0.0: linkify-it@^2.0.0:
version "2.1.0" version "2.2.0"
resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.1.0.tgz#c4caf38a6cd7ac2212ef3c7d2bde30a91561f9db" resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-2.2.0.tgz#e3b54697e78bf915c70a38acd78fd09e0058b1cf"
integrity sha512-4REs8/062kV2DSHxNfq5183zrqXMl7WP0WzABH9IeJI+NLm429FgE1PDecltYfnOoFDFlZGh2T8PfZn0r+GTRg== integrity sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==
dependencies: dependencies:
uc.micro "^1.0.1" uc.micro "^1.0.1"
...@@ -9742,10 +9742,10 @@ prosemirror-gapcursor@^1.1.5: ...@@ -9742,10 +9742,10 @@ prosemirror-gapcursor@^1.1.5:
prosemirror-state "^1.0.0" prosemirror-state "^1.0.0"
prosemirror-view "^1.0.0" prosemirror-view "^1.0.0"
prosemirror-history@^1.1.3: prosemirror-history@^1.1.3, prosemirror-history@^1.2.0:
version "1.1.3" version "1.2.0"
resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.1.3.tgz#4f76a1e71db4ef7cdf0e13dec6d8da2aeaecd489" resolved "https://registry.yarnpkg.com/prosemirror-history/-/prosemirror-history-1.2.0.tgz#04cc4df8d2f7b2a46651a2780de191ada6d465ea"
integrity sha512-zGDotijea+vnfnyyUGyiy1wfOQhf0B/b6zYcCouBV8yo6JmrE9X23M5q7Nf/nATywEZbgRLG70R4DmfSTC+gfg== integrity sha512-B9v9xtf4fYbKxQwIr+3wtTDNLDZcmMMmGiI3TAPShnUzvo+Rmv1GiUrsQChY1meetHl7rhML2cppF3FTs7f7UQ==
dependencies: dependencies:
prosemirror-state "^1.2.2" prosemirror-state "^1.2.2"
prosemirror-transform "^1.0.0" prosemirror-transform "^1.0.0"
...@@ -9775,10 +9775,10 @@ prosemirror-markdown@^1.5.1: ...@@ -9775,10 +9775,10 @@ prosemirror-markdown@^1.5.1:
markdown-it "^10.0.0" markdown-it "^10.0.0"
prosemirror-model "^1.0.0" prosemirror-model "^1.0.0"
prosemirror-model@^1.0.0, prosemirror-model@^1.1.0, prosemirror-model@^1.13.1, prosemirror-model@^1.13.3, prosemirror-model@^1.14.2, prosemirror-model@^1.2.0, prosemirror-model@^1.8.1: prosemirror-model@^1.0.0, prosemirror-model@^1.13.1, prosemirror-model@^1.13.3, prosemirror-model@^1.14.2, prosemirror-model@^1.14.3, prosemirror-model@^1.2.0, prosemirror-model@^1.8.1:
version "1.14.2" version "1.14.3"
resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.14.2.tgz#4e8c39cfff4e097631af4495e125d9a8a9773116" resolved "https://registry.yarnpkg.com/prosemirror-model/-/prosemirror-model-1.14.3.tgz#a9c250d3c4023ddf10ecb41a0a7a130e9741d37e"
integrity sha512-TwkACyEiSi8FJiRhg2ffbzmQRy5DR+aTwAr7trNQNZL24HJR8ouxy4qCkG99PnWK0xZ0AjSMtPXSU6hnxAiP7Q== integrity sha512-yzZlBaSxfUPIIP6U5Edh5zKxJPZ5f7bwZRhiCuH3UYkWhj+P3d8swHsbuAMOu/iDatDc5J/Qs5Mb3++mZf+CvQ==
dependencies: dependencies:
orderedmap "^1.1.0" orderedmap "^1.1.0"
...@@ -9828,12 +9828,12 @@ prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transfor ...@@ -9828,12 +9828,12 @@ prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transfor
dependencies: dependencies:
prosemirror-model "^1.0.0" prosemirror-model "^1.0.0"
prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.16.5, prosemirror-view@^1.18.8: prosemirror-view@^1.0.0, prosemirror-view@^1.1.0, prosemirror-view@^1.13.3, prosemirror-view@^1.16.5, prosemirror-view@^1.18.8, prosemirror-view@^1.19.3:
version "1.18.9" version "1.19.3"
resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.18.9.tgz#29bc11759438aecc5b7fadaa8520165c84c2144a" resolved "https://registry.yarnpkg.com/prosemirror-view/-/prosemirror-view-1.19.3.tgz#8d9bc91705bcf9cb5ae3b4de2668f73c7b93fa14"
integrity sha512-AkknqYyt7QBJIfA993O5NNOXLyQji5vr0SnOk/eig18dr7hbe1CK9FKd4Cnh9/f0JSHhZwadHlc3w+wZkIdmIQ== integrity sha512-YP/ZzVwqPPwbHbJi97U2/CeyZ8PIHmLJt0gIhZWP8XfnuBRGG3y+jwLzUoBVmiuoUCy3R6PSB+pOATliGzLfPg==
dependencies: dependencies:
prosemirror-model "^1.1.0" prosemirror-model "^1.14.3"
prosemirror-state "^1.0.0" prosemirror-state "^1.0.0"
prosemirror-transform "^1.1.0" prosemirror-transform "^1.1.0"
...@@ -11846,9 +11846,9 @@ typedarray@^0.0.6: ...@@ -11846,9 +11846,9 @@ typedarray@^0.0.6:
integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA== integrity sha512-6OSu9PTIzmn9TCDiovULTnET6BgXtDYL4Gg4szY+cGsc3JP1dQL8qvE8kShTRx1NIw4Q9IBHlwODjkjWEtMUyA==
uc.micro@^1.0.1, uc.micro@^1.0.5: uc.micro@^1.0.1, uc.micro@^1.0.5:
version "1.0.5" version "1.0.6"
resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.5.tgz#0c65f15f815aa08b560a61ce8b4db7ffc3f45376" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac"
integrity sha512-JoLI4g5zv5qNyT09f4YAvEZIIV1oOjqnewYg5D38dkQljIzpPT296dbIGvKro3digYI1bkb7W6EP1y4uDlmzLg== integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==
uglify-js@^3.1.4, uglify-js@^3.5.1: uglify-js@^3.1.4, uglify-js@^3.5.1:
version "3.6.0" version "3.6.0"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment