├── .discourse-compatibility
├── .eslintignore
├── .github
└── workflows
│ └── discourse-plugin.yml
├── .gitignore
├── .npmrc
├── .prettierignore
├── .prettierrc.cjs
├── .rubocop.yml
├── .streerc
├── .template-lintrc.cjs
├── Gemfile
├── Gemfile.lock
├── LICENSE
├── app
├── controllers
│ └── discourse_shared_edits
│ │ └── revision_controller.rb
├── jobs
│ └── commit_shared_revision.rb
└── models
│ └── shared_edit_revision.rb
├── assets
├── javascripts
│ └── discourse
│ │ ├── components
│ │ └── shared-edit-button.gjs
│ │ ├── connectors
│ │ └── composer-fields-below
│ │ │ └── shared-edit-buttons.gjs
│ │ ├── initializers
│ │ ├── extend-composer-service.js
│ │ └── shared-edits-init.js
│ │ └── services
│ │ └── shared-edit-manager.js
└── stylesheets
│ └── common
│ └── discourse-shared-edits.scss
├── config
├── locales
│ ├── client.ar.yml
│ ├── client.be.yml
│ ├── client.bg.yml
│ ├── client.bs_BA.yml
│ ├── client.ca.yml
│ ├── client.cs.yml
│ ├── client.da.yml
│ ├── client.de.yml
│ ├── client.el.yml
│ ├── client.en.yml
│ ├── client.en_GB.yml
│ ├── client.es.yml
│ ├── client.et.yml
│ ├── client.fa_IR.yml
│ ├── client.fi.yml
│ ├── client.fr.yml
│ ├── client.gl.yml
│ ├── client.he.yml
│ ├── client.hr.yml
│ ├── client.hu.yml
│ ├── client.hy.yml
│ ├── client.id.yml
│ ├── client.it.yml
│ ├── client.ja.yml
│ ├── client.ko.yml
│ ├── client.lt.yml
│ ├── client.lv.yml
│ ├── client.nb_NO.yml
│ ├── client.nl.yml
│ ├── client.pl_PL.yml
│ ├── client.pt.yml
│ ├── client.pt_BR.yml
│ ├── client.ro.yml
│ ├── client.ru.yml
│ ├── client.sk.yml
│ ├── client.sl.yml
│ ├── client.sq.yml
│ ├── client.sr.yml
│ ├── client.sv.yml
│ ├── client.sw.yml
│ ├── client.te.yml
│ ├── client.th.yml
│ ├── client.tr_TR.yml
│ ├── client.ug.yml
│ ├── client.uk.yml
│ ├── client.ur.yml
│ ├── client.vi.yml
│ ├── client.zh_CN.yml
│ ├── client.zh_TW.yml
│ ├── server.ar.yml
│ ├── server.be.yml
│ ├── server.bg.yml
│ ├── server.bs_BA.yml
│ ├── server.ca.yml
│ ├── server.cs.yml
│ ├── server.da.yml
│ ├── server.de.yml
│ ├── server.el.yml
│ ├── server.en.yml
│ ├── server.en_GB.yml
│ ├── server.es.yml
│ ├── server.et.yml
│ ├── server.fa_IR.yml
│ ├── server.fi.yml
│ ├── server.fr.yml
│ ├── server.gl.yml
│ ├── server.he.yml
│ ├── server.hr.yml
│ ├── server.hu.yml
│ ├── server.hy.yml
│ ├── server.id.yml
│ ├── server.it.yml
│ ├── server.ja.yml
│ ├── server.ko.yml
│ ├── server.lt.yml
│ ├── server.lv.yml
│ ├── server.nb_NO.yml
│ ├── server.nl.yml
│ ├── server.pl_PL.yml
│ ├── server.pt.yml
│ ├── server.pt_BR.yml
│ ├── server.ro.yml
│ ├── server.ru.yml
│ ├── server.sk.yml
│ ├── server.sl.yml
│ ├── server.sq.yml
│ ├── server.sr.yml
│ ├── server.sv.yml
│ ├── server.sw.yml
│ ├── server.te.yml
│ ├── server.th.yml
│ ├── server.tr_TR.yml
│ ├── server.ug.yml
│ ├── server.uk.yml
│ ├── server.ur.yml
│ ├── server.vi.yml
│ ├── server.zh_CN.yml
│ └── server.zh_TW.yml
└── settings.yml
├── db
└── migrate
│ └── 20200721001123_migrate_shared_edits.rb
├── eslint.config.mjs
├── lib
├── discourse_shared_edits
│ └── guardian_extension.rb
└── ot_text_unicode.rb
├── package.json
├── plugin.rb
├── pnpm-lock.yaml
├── public
└── javascripts
│ └── text-unicode-dist.js
├── readme.md
├── spec
├── lib
│ ├── guardian_spec.rb
│ └── ot_text_unicode_spec.rb
├── models
│ └── shared_edit_revision_spec.rb
├── requests
│ └── revision_controller_spec.rb
├── serializers
│ └── post_serializer_spec.rb
└── system
│ ├── core_features_spec.rb
│ └── edit_spec.rb
├── stylelint.config.mjs
├── support
├── fake_writer.rb
└── text-unicode-webpack
│ ├── package.json
│ ├── src
│ └── index.js
│ ├── webpack.config.js
│ └── yarn.lock
├── test
└── javascripts
│ └── acceptance
│ └── composer-test.js
└── translator.yml
/.discourse-compatibility:
--------------------------------------------------------------------------------
1 | < 3.5.0.beta3-dev: 3373b37aa1ca50095efa0657e3992c86c824e29f
2 | < 3.5.0.beta2-dev: d9bd732d058e67694e15422f6c19779f78f87231
3 | < 3.5.0.beta1-dev: 17024d2d5a35172bd5f665d1f3aa0416db77e5ef
4 | < 3.4.0.beta3-dev: d2ca0b892b1c5613b477a327c059430bf67e66d2
5 | < 3.4.0.beta2-dev: d6e32339851d30d5477fdeb3ec9a7d7450d84920
6 | < 3.4.0.beta1-dev: 0c6709d138ec6618536ff78fc637cd77e5126eac
7 | < 3.3.0.beta1-dev: 60977e100a0f6e278bb146a86352c721e52682f0
8 | 3.1.999: a9d259402541b3079e17ae2b61a15110f38cd059
9 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | /support
2 | /public
3 |
--------------------------------------------------------------------------------
/.github/workflows/discourse-plugin.yml:
--------------------------------------------------------------------------------
1 | name: Discourse Plugin
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 |
9 | jobs:
10 | ci:
11 | uses: discourse/.github/.github/workflows/discourse-plugin.yml@v1
12 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | /gems
3 | /auto_generated
4 |
--------------------------------------------------------------------------------
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict = true
2 | auto-install-peers = false
3 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | /public
2 |
--------------------------------------------------------------------------------
/.prettierrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = require("@discourse/lint-configs/prettier");
2 |
--------------------------------------------------------------------------------
/.rubocop.yml:
--------------------------------------------------------------------------------
1 | inherit_gem:
2 | rubocop-discourse: stree-compat.yml
3 |
--------------------------------------------------------------------------------
/.streerc:
--------------------------------------------------------------------------------
1 | --print-width=100
2 | --plugins=plugin/trailing_comma
3 |
--------------------------------------------------------------------------------
/.template-lintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = require("@discourse/lint-configs/template-lint");
2 |
--------------------------------------------------------------------------------
/Gemfile:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | source "https://rubygems.org"
4 |
5 | group :development do
6 | gem "rubocop-discourse"
7 | gem "syntax_tree"
8 | end
9 |
--------------------------------------------------------------------------------
/Gemfile.lock:
--------------------------------------------------------------------------------
1 | GEM
2 | remote: https://rubygems.org/
3 | specs:
4 | activesupport (8.0.2)
5 | base64
6 | benchmark (>= 0.3)
7 | bigdecimal
8 | concurrent-ruby (~> 1.0, >= 1.3.1)
9 | connection_pool (>= 2.2.5)
10 | drb
11 | i18n (>= 1.6, < 2)
12 | logger (>= 1.4.2)
13 | minitest (>= 5.1)
14 | securerandom (>= 0.3)
15 | tzinfo (~> 2.0, >= 2.0.5)
16 | uri (>= 0.13.1)
17 | ast (2.4.3)
18 | base64 (0.2.0)
19 | benchmark (0.4.0)
20 | bigdecimal (3.1.9)
21 | concurrent-ruby (1.3.5)
22 | connection_pool (2.5.3)
23 | drb (2.2.3)
24 | i18n (1.14.7)
25 | concurrent-ruby (~> 1.0)
26 | json (2.12.2)
27 | language_server-protocol (3.17.0.5)
28 | lint_roller (1.1.0)
29 | logger (1.7.0)
30 | minitest (5.25.5)
31 | parallel (1.27.0)
32 | parser (3.3.8.0)
33 | ast (~> 2.4.1)
34 | racc
35 | prettier_print (1.2.1)
36 | prism (1.4.0)
37 | racc (1.8.1)
38 | rack (3.1.15)
39 | rainbow (3.1.1)
40 | regexp_parser (2.10.0)
41 | rubocop (1.75.8)
42 | json (~> 2.3)
43 | language_server-protocol (~> 3.17.0.2)
44 | lint_roller (~> 1.1.0)
45 | parallel (~> 1.10)
46 | parser (>= 3.3.0.2)
47 | rainbow (>= 2.2.2, < 4.0)
48 | regexp_parser (>= 2.9.3, < 3.0)
49 | rubocop-ast (>= 1.44.0, < 2.0)
50 | ruby-progressbar (~> 1.7)
51 | unicode-display_width (>= 2.4.0, < 4.0)
52 | rubocop-ast (1.44.1)
53 | parser (>= 3.3.7.2)
54 | prism (~> 1.4)
55 | rubocop-capybara (2.22.1)
56 | lint_roller (~> 1.1)
57 | rubocop (~> 1.72, >= 1.72.1)
58 | rubocop-discourse (3.12.1)
59 | activesupport (>= 6.1)
60 | lint_roller (>= 1.1.0)
61 | rubocop (>= 1.73.2)
62 | rubocop-capybara (>= 2.22.0)
63 | rubocop-factory_bot (>= 2.27.0)
64 | rubocop-rails (>= 2.30.3)
65 | rubocop-rspec (>= 3.0.1)
66 | rubocop-rspec_rails (>= 2.31.0)
67 | rubocop-factory_bot (2.27.1)
68 | lint_roller (~> 1.1)
69 | rubocop (~> 1.72, >= 1.72.1)
70 | rubocop-rails (2.32.0)
71 | activesupport (>= 4.2.0)
72 | lint_roller (~> 1.1)
73 | rack (>= 1.1)
74 | rubocop (>= 1.75.0, < 2.0)
75 | rubocop-ast (>= 1.44.0, < 2.0)
76 | rubocop-rspec (3.6.0)
77 | lint_roller (~> 1.1)
78 | rubocop (~> 1.72, >= 1.72.1)
79 | rubocop-rspec_rails (2.31.0)
80 | lint_roller (~> 1.1)
81 | rubocop (~> 1.72, >= 1.72.1)
82 | rubocop-rspec (~> 3.5)
83 | ruby-progressbar (1.13.0)
84 | securerandom (0.4.1)
85 | syntax_tree (6.2.0)
86 | prettier_print (>= 1.2.0)
87 | tzinfo (2.0.6)
88 | concurrent-ruby (~> 1.0)
89 | unicode-display_width (3.1.4)
90 | unicode-emoji (~> 4.0, >= 4.0.4)
91 | unicode-emoji (4.0.4)
92 | uri (1.0.3)
93 |
94 | PLATFORMS
95 | ruby
96 |
97 | DEPENDENCIES
98 | rubocop-discourse
99 | syntax_tree
100 |
101 | BUNDLED WITH
102 | 2.6.9
103 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2020 Sam Saffron
2 |
3 | http://creativecommons.org/licenses/MIT/
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/app/controllers/discourse_shared_edits/revision_controller.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | module ::DiscourseSharedEdits
4 | class RevisionController < ::ApplicationController
5 | requires_plugin PLUGIN_NAME
6 |
7 | requires_login
8 | before_action :ensure_logged_in, :ensure_shared_edits
9 | skip_before_action :preload_json, :check_xhr
10 |
11 | def enable
12 | guardian.ensure_can_toggle_shared_edits!
13 | SharedEditRevision.toggle_shared_edits!(params[:post_id].to_i, true)
14 | render json: success_json
15 | end
16 |
17 | def disable
18 | guardian.ensure_can_toggle_shared_edits!
19 | SharedEditRevision.toggle_shared_edits!(params[:post_id].to_i, false)
20 | render json: success_json
21 | end
22 |
23 | def latest
24 | post = Post.find(params[:post_id].to_i)
25 | guardian.ensure_can_see!(post)
26 | SharedEditRevision.commit!(post.id, apply_to_post: false)
27 | version, raw = SharedEditRevision.latest_raw(post)
28 | render json: { raw: raw, version: version }
29 | end
30 |
31 | def commit
32 | params.require(:post_id)
33 |
34 | post = Post.find(params[:post_id].to_i)
35 | guardian.ensure_can_see!(post)
36 | SharedEditRevision.commit!(post.id)
37 |
38 | render json: success_json
39 | end
40 |
41 | def revise
42 | params.require(:revision)
43 | params.require(:client_id)
44 | params.require(:version)
45 |
46 | master_version = params[:version].to_i
47 |
48 | post = Post.find(params[:post_id].to_i)
49 | guardian.ensure_can_see!(post)
50 |
51 | version, revision =
52 | SharedEditRevision.revise!(
53 | post_id: post.id,
54 | user_id: current_user.id,
55 | client_id: params[:client_id],
56 | version: master_version,
57 | revision: params[:revision],
58 | )
59 |
60 | revisions =
61 | if version == master_version + 1
62 | [{ version: version, revision: revision, client_id: params[:client_id] }]
63 | else
64 | SharedEditRevision
65 | .where(post_id: post.id)
66 | .where("version > ?", master_version)
67 | .order(:version)
68 | .pluck(:revision, :version, :client_id)
69 | .map { |r, v, c| { version: v, revision: r, client_id: c } }
70 | end
71 |
72 | SharedEditRevision.ensure_will_commit(post.id)
73 |
74 | render json: { version: version, revisions: revisions }
75 | end
76 |
77 | protected
78 |
79 | def ensure_shared_edits
80 | raise Discourse::InvalidAccess if !SiteSetting.shared_edits_enabled
81 | end
82 | end
83 | end
84 |
--------------------------------------------------------------------------------
/app/jobs/commit_shared_revision.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | module Jobs
4 | class CommitSharedRevision < ::Jobs::Base
5 | def execute(args)
6 | post_id = args[:post_id]
7 | Discourse.redis.del SharedEditRevision.will_commit_key(post_id)
8 | SharedEditRevision.commit!(post_id)
9 | end
10 | end
11 | end
12 |
--------------------------------------------------------------------------------
/app/models/shared_edit_revision.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | class SharedEditRevision < ActiveRecord::Base
4 | belongs_to :post
5 | belongs_to :post_revision
6 |
7 | def self.will_commit_key(post_id)
8 | "shared_revision_will_commit_#{post_id}"
9 | end
10 |
11 | def self.ensure_will_commit(post_id)
12 | key = will_commit_key(post_id)
13 | if !Discourse.redis.get(key)
14 | Discourse.redis.setex(key, 60, "1")
15 | Jobs.enqueue_in(10.seconds, :commit_shared_revision, post_id: post_id)
16 | end
17 | end
18 |
19 | def self.last_revision_id_for_post(post)
20 | PostRevision.where(post: post).limit(1).order("number desc").pluck(:id).first || -1
21 | end
22 |
23 | def self.toggle_shared_edits!(post_id, enable)
24 | post = Post.find(post_id)
25 | if enable
26 | init!(post)
27 | post.custom_fields[DiscourseSharedEdits::SHARED_EDITS_ENABLED] = true
28 | else
29 | commit!(post_id)
30 | SharedEditRevision.where(post_id: post_id).delete_all
31 | post.custom_fields.delete(DiscourseSharedEdits::SHARED_EDITS_ENABLED)
32 | end
33 | post.save_custom_fields
34 | end
35 |
36 | def self.init!(post)
37 | if !SharedEditRevision.where(post_id: post.id).exists?
38 | revision_id = last_revision_id_for_post(post)
39 |
40 | SharedEditRevision.create!(
41 | post: post,
42 | client_id: "system",
43 | user_id: Discourse.system_user.id,
44 | version: 1,
45 | revision: "[]",
46 | raw: post.raw,
47 | post_revision_id: revision_id,
48 | )
49 | end
50 | end
51 |
52 | def self.commit!(post_id, apply_to_post: true)
53 | version_with_raw =
54 | SharedEditRevision
55 | .where(post_id: post_id)
56 | .where("raw IS NOT NULL")
57 | .order("version desc")
58 | .first
59 |
60 | return if !version_with_raw
61 |
62 | raw = version_with_raw.raw
63 |
64 | to_resolve =
65 | SharedEditRevision
66 | .where(post_id: post_id)
67 | .where("version > ?", version_with_raw.version)
68 | .order(:version)
69 |
70 | last_revision = version_with_raw
71 |
72 | editors = []
73 |
74 | to_resolve.each do |rev|
75 | raw = OtTextUnicode.apply(raw, rev.revision)
76 | last_revision = rev
77 | editors << rev.user_id
78 | end
79 |
80 | last_revision.update!(raw: raw) if last_revision.raw != raw
81 | return if last_revision.post_revision_id
82 | return if !apply_to_post
83 |
84 | post = Post.find(post_id)
85 | revisor = PostRevisor.new(post)
86 |
87 | # TODO decide if we need fidelity here around skip_revision
88 | # skip_revision: true
89 |
90 | opts = { bypass_rate_limiter: true, bypass_bump: true, skip_staff_log: true }
91 |
92 | # revise must be called outside of transaction
93 | # otherwise you get phantom edits where and edit can take 2 cycles
94 | # to take
95 | done = revisor.revise!(Discourse.system_user, { raw: raw }, opts)
96 |
97 | Post.transaction do
98 | if done
99 | last_post_revision = PostRevision.where(post: post).limit(1).order("number desc").first
100 |
101 | reason = last_post_revision.modifications["edit_reason"] || ""
102 |
103 | reason = reason[1] if Array === reason
104 |
105 | usernames = reason&.split(",")&.map(&:strip) || []
106 |
107 | if usernames.length > 0
108 | reason_length = I18n.t("shared_edits.reason", users: "").length
109 | usernames[0] = usernames[0][reason_length..-1]
110 | end
111 |
112 | User.where(id: editors).pluck(:username).each { |name| usernames << name }
113 |
114 | usernames.uniq!
115 |
116 | new_reason = I18n.t("shared_edits.reason", users: usernames.join(", "))
117 |
118 | if new_reason != reason
119 | last_post_revision.modifications["edit_reason"] = [nil, new_reason]
120 | last_post_revision.save!
121 | post.update!(edit_reason: new_reason)
122 | end
123 |
124 | last_revision.update!(post_revision_id: last_post_revision.id)
125 | end
126 | end
127 |
128 | raw
129 | end
130 |
131 | def self.latest_raw(post_id)
132 | SharedEditRevision
133 | .where("raw IS NOT NULL")
134 | .where(post_id: post_id)
135 | .order("version desc")
136 | .limit(1)
137 | .pluck(:version, :raw)
138 | .first
139 | end
140 |
141 | def self.revise!(post_id:, user_id:, client_id:, revision:, version:)
142 | revision = revision.to_json if !(String === revision)
143 |
144 | args = {
145 | user_id: user_id,
146 | client_id: client_id,
147 | revision: revision,
148 | post_id: post_id,
149 | version: version + 1,
150 | now: Time.zone.now,
151 | }
152 |
153 | rows = DB.exec(<<~SQL, args)
154 | INSERT INTO shared_edit_revisions
155 | (
156 | post_id,
157 | user_id,
158 | client_id,
159 | revision,
160 | version,
161 | created_at,
162 | updated_at
163 | )
164 | SELECT
165 | :post_id,
166 | :user_id,
167 | :client_id,
168 | :revision,
169 | :version,
170 | :now,
171 | :now
172 | WHERE :version = (
173 | SELECT MAX(version) + 1
174 | FROM shared_edit_revisions
175 | WHERE post_id = :post_id
176 | )
177 | SQL
178 |
179 | if rows == 1
180 | post = Post.find(post_id)
181 | message = { version: version + 1, revision: revision, client_id: client_id, user_id: user_id }
182 | post.publish_message!("/shared_edits/#{post.id}", message)
183 | [version + 1, revision]
184 | else
185 | missing =
186 | SharedEditRevision
187 | .where(post_id: post_id)
188 | .where("version > ?", version)
189 | .order(:version)
190 | .pluck(:version, :revision)
191 |
192 | raise StandardError, "no revisions to apply" if missing.length == 0
193 |
194 | missing.each do |missing_version, missing_revision|
195 | revision = OtTextUnicode.transform(revision, missing_revision)
196 | version = missing_version
197 | end
198 |
199 | revise!(
200 | post_id: post_id,
201 | user_id: user_id,
202 | client_id: client_id,
203 | revision: revision,
204 | version: version,
205 | )
206 | end
207 | end
208 | end
209 |
210 | # == Schema Information
211 | #
212 | # Table name: shared_edit_revisions
213 | #
214 | # id :bigint not null, primary key
215 | # post_id :integer not null
216 | # raw :string
217 | # revision :string not null
218 | # user_id :integer not null
219 | # client_id :string not null
220 | # version :integer not null
221 | # post_revision_id :integer
222 | # created_at :datetime not null
223 | # updated_at :datetime not null
224 | #
225 | # Indexes
226 | #
227 | # index_shared_edit_revisions_on_post_id_and_version (post_id,version) UNIQUE
228 | #
229 |
--------------------------------------------------------------------------------
/assets/javascripts/discourse/components/shared-edit-button.gjs:
--------------------------------------------------------------------------------
1 | import Component from "@glimmer/component";
2 | import { action } from "@ember/object";
3 | import { service } from "@ember/service";
4 | import DButton from "discourse/components/d-button";
5 | import concatClass from "discourse/helpers/concat-class";
6 |
7 | export default class SharedEditButton extends Component {
8 | static shouldRender(args) {
9 | return args.post.can_edit;
10 | }
11 |
12 | @service appEvents;
13 | @service site;
14 |
15 | get showLabel() {
16 | return this.args.showLabel ?? this.site.desktopView;
17 | }
18 |
19 | @action
20 | sharedEdit() {
21 | this.appEvents.trigger("shared-edit-on-post", this.args.post);
22 | }
23 |
24 |
25 |
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/assets/javascripts/discourse/connectors/composer-fields-below/shared-edit-buttons.gjs:
--------------------------------------------------------------------------------
1 | import Component from "@glimmer/component";
2 | import { action } from "@ember/object";
3 | import { service } from "@ember/service";
4 | import DButton from "discourse/components/d-button";
5 | import { i18n } from "discourse-i18n";
6 |
7 | export default class SharedEditButtons extends Component {
8 | @service composer;
9 | @service site;
10 |
11 | @action
12 | endSharedEdit() {
13 | this.composer.close();
14 | }
15 |
16 |
17 | {{#if @outletArgs.model.creatingSharedEdit}}
18 |
19 |
26 |
27 | {{/if}}
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/assets/javascripts/discourse/initializers/extend-composer-service.js:
--------------------------------------------------------------------------------
1 | import { service } from "@ember/service";
2 | import { withPluginApi } from "discourse/lib/plugin-api";
3 |
4 | const SHARED_EDIT_ACTION = "sharedEdit";
5 |
6 | export default {
7 | name: "discourse-shared-edits-composer-service",
8 |
9 | initialize: (container) => {
10 | const siteSettings = container.lookup("service:site-settings");
11 | if (!siteSettings.shared_edits_enabled) {
12 | return;
13 | }
14 |
15 | withPluginApi("0.8.6", (api) => {
16 | api.modifyClass(
17 | "service:composer",
18 | (Superclass) =>
19 | class extends Superclass {
20 | @service sharedEditManager;
21 |
22 | async open(opts) {
23 | await super.open(...arguments);
24 |
25 | if (opts.action === SHARED_EDIT_ACTION) {
26 | await this.sharedEditManager.subscribe();
27 | }
28 | }
29 |
30 | collapse() {
31 | if (this.model?.action === SHARED_EDIT_ACTION) {
32 | return this.close();
33 | }
34 | return super.collapse(...arguments);
35 | }
36 |
37 | close() {
38 | if (this.model?.action === SHARED_EDIT_ACTION) {
39 | this.sharedEditManager.commit();
40 | }
41 | return super.close(...arguments);
42 | }
43 |
44 | save() {
45 | if (this.model?.action === SHARED_EDIT_ACTION) {
46 | return this.close();
47 | }
48 | return super.save(...arguments);
49 | }
50 |
51 | _saveDraft() {
52 | if (this.model?.action === SHARED_EDIT_ACTION) {
53 | return;
54 | }
55 | return super._saveDraft(...arguments);
56 | }
57 | }
58 | );
59 | });
60 | },
61 | };
62 |
--------------------------------------------------------------------------------
/assets/javascripts/discourse/initializers/shared-edits-init.js:
--------------------------------------------------------------------------------
1 | import { ajax } from "discourse/lib/ajax";
2 | import { popupAjaxError } from "discourse/lib/ajax-error";
3 | import { withPluginApi } from "discourse/lib/plugin-api";
4 | import { SAVE_ICONS, SAVE_LABELS } from "discourse/models/composer";
5 | import SharedEditButton from "../components/shared-edit-button";
6 |
7 | const SHARED_EDIT_ACTION = "sharedEdit";
8 |
9 | function initWithApi(api) {
10 | SAVE_LABELS[SHARED_EDIT_ACTION] = "composer.save_edit";
11 | SAVE_ICONS[SHARED_EDIT_ACTION] = "pencil";
12 |
13 | customizePostMenu(api);
14 |
15 | const currentUser = api.getCurrentUser();
16 |
17 | api.addPostAdminMenuButton((attrs) => {
18 | if (!currentUser?.staff && currentUser?.trust_level < 4) {
19 | return;
20 | }
21 |
22 | return {
23 | icon: "far-pen-to-square",
24 | className: "admin-toggle-shared-edits",
25 | label: attrs.shared_edits_enabled
26 | ? "shared_edits.disable_shared_edits"
27 | : "shared_edits.enable_shared_edits",
28 | action: async (post) => {
29 | const url = `/shared_edits/p/${post.id}/${
30 | post.shared_edits_enabled ? "disable" : "enable"
31 | }.json`;
32 |
33 | try {
34 | await ajax(url, { type: "PUT" });
35 | post.set("shared_edits_enabled", !post.shared_edits_enabled);
36 | } catch (e) {
37 | popupAjaxError(e);
38 | }
39 | },
40 | };
41 | });
42 |
43 | api.addTrackedPostProperties("shared_edits_enabled");
44 |
45 | api.addPostClassesCallback((attrs) => {
46 | if (attrs.shared_edits_enabled && attrs.canEdit) {
47 | return ["shared-edits-post"];
48 | }
49 | });
50 |
51 | api.modifyClass(
52 | "component:scrolling-post-stream",
53 | (Superclass) =>
54 | class extends Superclass {
55 | sharedEdit() {
56 | this.appEvents.trigger("shared-edit-on-post");
57 | }
58 | }
59 | );
60 |
61 | api.modifyClass(
62 | "model:composer",
63 | (Superclass) =>
64 | class extends Superclass {
65 | get creatingSharedEdit() {
66 | return this.get("action") === SHARED_EDIT_ACTION;
67 | }
68 |
69 | get editingPost() {
70 | return super.editingPost || this.creatingSharedEdit;
71 | }
72 | }
73 | );
74 |
75 | api.modifyClass(
76 | "controller:topic",
77 | (Superclass) =>
78 | class extends Superclass {
79 | init() {
80 | super.init(...arguments);
81 |
82 | this.appEvents.on(
83 | "shared-edit-on-post",
84 | this,
85 | this._handleSharedEditOnPost
86 | );
87 | }
88 |
89 | willDestroy() {
90 | super.willDestroy(...arguments);
91 | this.appEvents.off(
92 | "shared-edit-on-post",
93 | this,
94 | this._handleSharedEditOnPost
95 | );
96 | }
97 |
98 | _handleSharedEditOnPost(post) {
99 | const draftKey = post.get("topic.draft_key");
100 | const draftSequence = post.get("topic.draft_sequence");
101 |
102 | this.get("composer").open({
103 | post,
104 | action: SHARED_EDIT_ACTION,
105 | draftKey,
106 | draftSequence,
107 | });
108 | }
109 | }
110 | );
111 | }
112 |
113 | function customizePostMenu(api) {
114 | api.registerValueTransformer(
115 | "post-menu-buttons",
116 | ({ value: dag, context: { post, buttonLabels, buttonKeys } }) => {
117 | if (!post.shared_edits_enabled || !post.canEdit) {
118 | return;
119 | }
120 |
121 | dag.replace(buttonKeys.EDIT, SharedEditButton, {
122 | after: [buttonKeys.SHOW_MORE, buttonKeys.REPLY],
123 | });
124 | dag.reposition(buttonKeys.REPLY, {
125 | after: buttonKeys.SHOW_MORE,
126 | before: buttonKeys.EDIT,
127 | });
128 |
129 | buttonLabels.hide(buttonKeys.REPLY);
130 | }
131 | );
132 |
133 | // register the property as tracked to ensure the button is correctly updated
134 | api.addTrackedPostProperties("shared_edits_enabled");
135 | }
136 |
137 | export default {
138 | name: "discourse-shared-edits",
139 | initialize: (container) => {
140 | const siteSettings = container.lookup("service:site-settings");
141 | if (!siteSettings.shared_edits_enabled) {
142 | return;
143 | }
144 |
145 | withPluginApi("1.39.2", initWithApi);
146 | },
147 | };
148 |
--------------------------------------------------------------------------------
/assets/javascripts/discourse/services/shared-edit-manager.js:
--------------------------------------------------------------------------------
1 | import { debounce } from "@ember/runloop";
2 | import Service, { service } from "@ember/service";
3 | import { ajax } from "discourse/lib/ajax";
4 | import { popupAjaxError } from "discourse/lib/ajax-error";
5 | import loadScript from "discourse/lib/load-script";
6 |
7 | const THROTTLE_SAVE = 500;
8 |
9 | let loadedTextUnicode = false;
10 |
11 | function diff(before, after) {
12 | const diffLib = window.otLib.default.OtDiff.diff;
13 | const changes = diffLib(before, after);
14 | return compress(changes);
15 | }
16 |
17 | function compress(change) {
18 | const compressed = [];
19 |
20 | if (change.action !== "noop") {
21 | if (change.start > 0) {
22 | compressed.push(change.start);
23 | }
24 |
25 | switch (change.action) {
26 | case "replace":
27 | compressed.push({ d: change.remove });
28 | compressed.push(change.payload);
29 | break;
30 | case "insert":
31 | compressed.push(change.payload);
32 | break;
33 | case "delete":
34 | compressed.push({ d: change.remove });
35 | break;
36 | }
37 | }
38 |
39 | return compressed;
40 | }
41 |
42 | export default class SharedEditManager extends Service {
43 | @service composer;
44 | @service messageBus;
45 |
46 | ajaxInProgress = false;
47 | raw = null;
48 | version = null;
49 |
50 | async subscribe() {
51 | try {
52 | const data = await ajax(`/shared_edits/p/${this.#postId}`);
53 |
54 | if (!this.composer.model || this.isDestroying || this.isDestroyed) {
55 | return;
56 | }
57 |
58 | this.version = data.version;
59 | this.raw = data.raw;
60 | this.composer.model.set("reply", data.raw);
61 |
62 | this.addObserver("composer.model.reply", this, this.#update);
63 | this.messageBus.subscribe(`/shared_edits/${this.#postId}`, (message) => {
64 | if (
65 | message.client_id !== this.messageBus.clientId &&
66 | !this.ajaxInProgress
67 | ) {
68 | this.#applyRevisions([message]);
69 | }
70 | });
71 | } catch (e) {
72 | popupAjaxError(e);
73 | }
74 | }
75 |
76 | async commit() {
77 | try {
78 | this.removeObserver("composer.model.reply", this, this.#update);
79 | this.messageBus.unsubscribe(`/shared_edits/${this.#postId}`);
80 | this.raw = null;
81 | this.version = null;
82 |
83 | await ajax(`/shared_edits/p/${this.#postId}/commit`, {
84 | method: "PUT",
85 | });
86 | } catch (e) {
87 | popupAjaxError(e);
88 | }
89 | }
90 |
91 | async #update() {
92 | if (!loadedTextUnicode) {
93 | await loadScript(
94 | "/plugins/discourse-shared-edits/javascripts/text-unicode-dist.js"
95 | );
96 | loadedTextUnicode = true;
97 | }
98 |
99 | this.#sendDiffThrottled();
100 | }
101 |
102 | get #postId() {
103 | return this.composer.model?.post.id;
104 | }
105 |
106 | #sendDiffThrottled() {
107 | debounce(this, this.#sendDiff, THROTTLE_SAVE);
108 | }
109 |
110 | async #sendDiff() {
111 | if (!this.composer.model || !this.version) {
112 | return;
113 | }
114 |
115 | if (this.ajaxInProgress) {
116 | this.#sendDiffThrottled();
117 | return;
118 | }
119 |
120 | const changes = diff(this.raw, this.composer.model.reply);
121 | const submittedRaw = this.composer.model.reply;
122 |
123 | if (changes.length === 0) {
124 | return;
125 | }
126 |
127 | this.ajaxInProgress = true;
128 |
129 | try {
130 | const result = await ajax(`/shared_edits/p/${this.#postId}`, {
131 | method: "PUT",
132 | data: {
133 | revision: JSON.stringify(changes),
134 | version: this.version,
135 | client_id: this.messageBus.clientId,
136 | },
137 | });
138 |
139 | const inProgressChanges = diff(submittedRaw, this.composer.model.reply);
140 | this.#applyRevisions(result.revisions, inProgressChanges);
141 | } finally {
142 | this.ajaxInProgress = false;
143 | }
144 | }
145 |
146 | #applyRevisions(revs, inProgressChanges) {
147 | let newRaw = this.raw;
148 | let newVersion = this.version;
149 | let currentChanges =
150 | inProgressChanges || diff(this.raw, this.composer.model.reply);
151 |
152 | const otUnicode = window.otLib.default.OtUnicode;
153 |
154 | let newChanges = [];
155 |
156 | for (const revision of revs) {
157 | if (revision.version !== newVersion + 1) {
158 | continue;
159 | }
160 |
161 | const parsedRevision = JSON.parse(revision.revision);
162 | newRaw = otUnicode.apply(newRaw, parsedRevision);
163 | newVersion = revision.version;
164 |
165 | if (revision.client_id !== this.messageBus.clientId) {
166 | newChanges = otUnicode.compose(newChanges, parsedRevision);
167 | currentChanges = otUnicode.transform(
168 | currentChanges,
169 | parsedRevision,
170 | "left"
171 | );
172 | }
173 | }
174 |
175 | this.raw = newRaw;
176 | this.version = newVersion;
177 |
178 | if (currentChanges.length > 0) {
179 | newRaw = otUnicode.apply(newRaw, currentChanges);
180 | }
181 |
182 | if (newRaw !== this.composer.model.reply) {
183 | const input = document.querySelector(
184 | "#reply-control textarea.d-editor-input"
185 | );
186 |
187 | if (input.selectionStart || input.selectionStart === 0) {
188 | const selLength = input.selectionEnd - input.selectionStart;
189 | const position = otUnicode.transformPosition(
190 | input.selectionStart,
191 | newChanges
192 | );
193 |
194 | // still need to compensate for scrollHeight changes
195 | // but at least this is mostly stable
196 | const scrollTop = input.scrollTop;
197 |
198 | input.value = newRaw;
199 | input.selectionStart = position;
200 | input.selectionEnd = position + selLength;
201 |
202 | window.requestAnimationFrame(() => {
203 | input.scrollTop = scrollTop;
204 | });
205 | }
206 |
207 | this.composer.model.set("reply", newRaw);
208 | }
209 | }
210 | }
211 |
--------------------------------------------------------------------------------
/assets/stylesheets/common/discourse-shared-edits.scss:
--------------------------------------------------------------------------------
1 | #reply-control.composer-action-sharedEdit {
2 | .save-or-cancel {
3 | button,
4 | a {
5 | display: none;
6 | }
7 | }
8 |
9 | .title-and-category,
10 | .composer-actions {
11 | display: none;
12 | }
13 |
14 | .d-editor-preview-wrapper {
15 | margin-top: 0;
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/config/locales/client.ar.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ar:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "تفعيل التعديلات المشتركة"
11 | disable_shared_edits: "تعطيل التعديلات المشتركة"
12 | edit: "تعديل"
13 | button_title: "تعديل المنشور بشكلٍ تعاوني"
14 | done: "تم"
15 |
--------------------------------------------------------------------------------
/config/locales/client.be.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | be:
8 | js:
9 | shared_edits:
10 | edit: "рэдагаваць"
11 | done: "Выканана"
12 |
--------------------------------------------------------------------------------
/config/locales/client.bg.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | bg:
8 | js:
9 | shared_edits:
10 | edit: "Редактирай"
11 | done: "Готово"
12 |
--------------------------------------------------------------------------------
/config/locales/client.bs_BA.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | bs_BA:
8 | js:
9 | shared_edits:
10 | edit: "Edit"
11 | done: "Urađeno"
12 |
--------------------------------------------------------------------------------
/config/locales/client.ca.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ca:
8 | js:
9 | shared_edits:
10 | edit: "Edita"
11 | done: "Fet"
12 |
--------------------------------------------------------------------------------
/config/locales/client.cs.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | cs:
8 | js:
9 | shared_edits:
10 | edit: "Upravit"
11 | done: "Hotovo"
12 |
--------------------------------------------------------------------------------
/config/locales/client.da.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | da:
8 | js:
9 | shared_edits:
10 | edit: "Rediger"
11 | done: "Færdig"
12 |
--------------------------------------------------------------------------------
/config/locales/client.de.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | de:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Gemeinsame Bearbeitungen aktivieren"
11 | disable_shared_edits: "Gemeinsame Bearbeitungen deaktivieren"
12 | edit: "Bearbeiten"
13 | button_title: "Beitrag gemeinsam bearbeiten"
14 | done: "Erledigt"
15 |
--------------------------------------------------------------------------------
/config/locales/client.el.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | el:
8 | js:
9 | shared_edits:
10 | edit: "Επεξεργασία"
11 | done: "Ολοκληρώθηκε"
12 |
--------------------------------------------------------------------------------
/config/locales/client.en.yml:
--------------------------------------------------------------------------------
1 | en:
2 | js:
3 | shared_edits:
4 | enable_shared_edits: "Enable Shared Edits"
5 | disable_shared_edits: "Disable Shared Edits"
6 | edit: "Edit"
7 | button_title: "Edit Post Collaboratively"
8 | done: "Done"
9 |
--------------------------------------------------------------------------------
/config/locales/client.en_GB.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | en_GB:
8 |
--------------------------------------------------------------------------------
/config/locales/client.es.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | es:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Habilitar ediciones compartidas"
11 | disable_shared_edits: "Deshabilitar ediciones compartidas"
12 | edit: "Editar"
13 | button_title: "Editar publicación de forma colaborativa"
14 | done: "Hecho"
15 |
--------------------------------------------------------------------------------
/config/locales/client.et.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | et:
8 | js:
9 | shared_edits:
10 | edit: "Muuda"
11 | done: "Tehtud"
12 |
--------------------------------------------------------------------------------
/config/locales/client.fa_IR.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | fa_IR:
8 | js:
9 | shared_edits:
10 | edit: "ویرایش"
11 | done: "انجام شد"
12 |
--------------------------------------------------------------------------------
/config/locales/client.fi.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | fi:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Ota jaetut muokkaukset käyttöön"
11 | disable_shared_edits: "Poista jaetut muokkaukset käytöstä"
12 | edit: "Muokkaa"
13 | button_title: "Muokkaa viestiä yhteistyössä"
14 | done: "Valmis"
15 |
--------------------------------------------------------------------------------
/config/locales/client.fr.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | fr:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Activer les modifications partagées"
11 | disable_shared_edits: "Désactiver les modifications partagées"
12 | edit: "Modifier"
13 | button_title: "Modifier la publication en collaboration"
14 | done: "Terminé"
15 |
--------------------------------------------------------------------------------
/config/locales/client.gl.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | gl:
8 | js:
9 | shared_edits:
10 | edit: "Editar"
11 | done: "Feito"
12 |
--------------------------------------------------------------------------------
/config/locales/client.he.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | he:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "הפעלת עריכות משותפות"
11 | disable_shared_edits: "השבתת עריכות משותפות"
12 | edit: "עריכה"
13 | button_title: "עריכת הפוסט בשיתוף פעולה"
14 | done: "סיום"
15 |
--------------------------------------------------------------------------------
/config/locales/client.hr.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | hr:
8 | js:
9 | shared_edits:
10 | edit: "Uredi"
11 | done: "Gotovo"
12 |
--------------------------------------------------------------------------------
/config/locales/client.hu.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | hu:
8 | js:
9 | shared_edits:
10 | edit: "Szerkesztés"
11 | done: "Kész"
12 |
--------------------------------------------------------------------------------
/config/locales/client.hy.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | hy:
8 | js:
9 | shared_edits:
10 | edit: "Խմբագրել"
11 | done: "Կատարված է"
12 |
--------------------------------------------------------------------------------
/config/locales/client.id.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | id:
8 | js:
9 | shared_edits:
10 | edit: "Ubah"
11 |
--------------------------------------------------------------------------------
/config/locales/client.it.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | it:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Abilita modifiche condivise"
11 | disable_shared_edits: "Disabilita modifiche condivise"
12 | edit: "Modifica"
13 | button_title: "Modifica messaggio in collaborazione"
14 | done: "Fatto"
15 |
--------------------------------------------------------------------------------
/config/locales/client.ja.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ja:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "共同編集を有効にする"
11 | disable_shared_edits: "共同編集を無効にする"
12 | edit: "編集"
13 | button_title: "投稿を共同で編集する"
14 | done: "完了"
15 |
--------------------------------------------------------------------------------
/config/locales/client.ko.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ko:
8 | js:
9 | shared_edits:
10 | edit: "편집"
11 | done: "완료"
12 |
--------------------------------------------------------------------------------
/config/locales/client.lt.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | lt:
8 | js:
9 | shared_edits:
10 | edit: "Redaguoti"
11 | done: "Baigta"
12 |
--------------------------------------------------------------------------------
/config/locales/client.lv.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | lv:
8 | js:
9 | shared_edits:
10 | edit: "Rediģēt"
11 | done: "Pabeigt"
12 |
--------------------------------------------------------------------------------
/config/locales/client.nb_NO.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | nb_NO:
8 | js:
9 | shared_edits:
10 | edit: "Endre"
11 | done: "Ferdig"
12 |
--------------------------------------------------------------------------------
/config/locales/client.nl.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | nl:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Gedeelde bewerkingen inschakelen"
11 | disable_shared_edits: "Gedeelde bewerkingen uitschakelen"
12 | edit: "Bewerken"
13 | button_title: "Bericht gezamenlijk bewerken"
14 | done: "Gereed"
15 |
--------------------------------------------------------------------------------
/config/locales/client.pl_PL.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | pl_PL:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Włącz wspólne edycje"
11 | disable_shared_edits: "Wyłącz wspólne edycje"
12 | edit: "Edytuj"
13 | button_title: "Edytuj post wspólnie"
14 | done: "Zrobione"
15 |
--------------------------------------------------------------------------------
/config/locales/client.pt.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | pt:
8 | js:
9 | shared_edits:
10 | edit: "Editar"
11 | done: "Concluído"
12 |
--------------------------------------------------------------------------------
/config/locales/client.pt_BR.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | pt_BR:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Ativar edições compartilhadas"
11 | disable_shared_edits: "Desativar edições compartilhadas"
12 | edit: "Editar"
13 | button_title: "Editar postagem colaborativamente"
14 | done: "Concluído(a)"
15 |
--------------------------------------------------------------------------------
/config/locales/client.ro.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ro:
8 | js:
9 | shared_edits:
10 | edit: "Modifică"
11 | done: "Terminat"
12 |
--------------------------------------------------------------------------------
/config/locales/client.ru.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ru:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Включить совместное редактирование"
11 | disable_shared_edits: "Отключить совместное редактирование"
12 | edit: "Редактировать"
13 | button_title: "Совместное редактирование записи"
14 | done: "Готово"
15 |
--------------------------------------------------------------------------------
/config/locales/client.sk.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sk:
8 | js:
9 | shared_edits:
10 | edit: "Upraviť"
11 | done: "Hotovo"
12 |
--------------------------------------------------------------------------------
/config/locales/client.sl.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sl:
8 | js:
9 | shared_edits:
10 | edit: "Uredi"
11 | done: "Končano"
12 |
--------------------------------------------------------------------------------
/config/locales/client.sq.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sq:
8 | js:
9 | shared_edits:
10 | edit: "Redakto"
11 | done: "Përfundo"
12 |
--------------------------------------------------------------------------------
/config/locales/client.sr.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sr:
8 | js:
9 | shared_edits:
10 | edit: "Izmeni"
11 | done: "Gotovo"
12 |
--------------------------------------------------------------------------------
/config/locales/client.sv.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sv:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Aktivera delade redigeringar"
11 | disable_shared_edits: "Inaktivera delade redigeringar"
12 | edit: "Redigera"
13 | button_title: "Redigera inlägg genom samarbete"
14 | done: "Klar"
15 |
--------------------------------------------------------------------------------
/config/locales/client.sw.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sw:
8 | js:
9 | shared_edits:
10 | edit: "Hariri"
11 | done: "Imekwisha"
12 |
--------------------------------------------------------------------------------
/config/locales/client.te.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | te:
8 | js:
9 | shared_edits:
10 | edit: "సవరణ"
11 | done: "పూర్తయింది"
12 |
--------------------------------------------------------------------------------
/config/locales/client.th.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | th:
8 | js:
9 | shared_edits:
10 | edit: "แก้ไข"
11 | done: "เสร็จ"
12 |
--------------------------------------------------------------------------------
/config/locales/client.tr_TR.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | tr_TR:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "Paylaşılan Düzenlemeleri Etkinleştir"
11 | disable_shared_edits: "Paylaşılan Düzenlemeleri Devre Dışı Bırak"
12 | edit: "Düzenle"
13 | button_title: "Gönderiyi İş Birliği İçinde Düzenleyin"
14 | done: "Tamamlandı"
15 |
--------------------------------------------------------------------------------
/config/locales/client.ug.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ug:
8 | js:
9 | shared_edits:
10 | edit: "تەھرىر"
11 |
--------------------------------------------------------------------------------
/config/locales/client.uk.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | uk:
8 | js:
9 | shared_edits:
10 | edit: "Редагувати"
11 | done: "Виконано"
12 |
--------------------------------------------------------------------------------
/config/locales/client.ur.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ur:
8 | js:
9 | shared_edits:
10 | edit: "ترمیم کریں"
11 | done: "مکمل"
12 |
--------------------------------------------------------------------------------
/config/locales/client.vi.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | vi:
8 | js:
9 | shared_edits:
10 | edit: "Sửa"
11 | done: "Hoàn tất"
12 |
--------------------------------------------------------------------------------
/config/locales/client.zh_CN.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | zh_CN:
8 | js:
9 | shared_edits:
10 | enable_shared_edits: "启用共享编辑"
11 | disable_shared_edits: "禁用共享编辑"
12 | edit: "编辑"
13 | button_title: "协作编辑帖子"
14 | done: "完成"
15 |
--------------------------------------------------------------------------------
/config/locales/client.zh_TW.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | zh_TW:
8 | js:
9 | shared_edits:
10 | edit: "編輯"
11 | done: "完成"
12 |
--------------------------------------------------------------------------------
/config/locales/server.ar.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ar:
8 | shared_edits:
9 | reason: "تم التعديل بواسطة: %{users}"
10 | site_settings:
11 | shared_edits_enabled: تفعيل التعديل التعاوني على المنشورات المحدَّدة.
12 |
--------------------------------------------------------------------------------
/config/locales/server.be.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | be:
8 |
--------------------------------------------------------------------------------
/config/locales/server.bg.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | bg:
8 |
--------------------------------------------------------------------------------
/config/locales/server.bs_BA.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | bs_BA:
8 |
--------------------------------------------------------------------------------
/config/locales/server.ca.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ca:
8 |
--------------------------------------------------------------------------------
/config/locales/server.cs.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | cs:
8 |
--------------------------------------------------------------------------------
/config/locales/server.da.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | da:
8 |
--------------------------------------------------------------------------------
/config/locales/server.de.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | de:
8 | shared_edits:
9 | reason: "Bearbeitet von: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Ermögliche die gemeinsame Bearbeitung von bestimmten Beiträgen.
12 |
--------------------------------------------------------------------------------
/config/locales/server.el.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | el:
8 |
--------------------------------------------------------------------------------
/config/locales/server.en.yml:
--------------------------------------------------------------------------------
1 | en:
2 | shared_edits:
3 | reason: "Edited By: %{users}"
4 | site_settings:
5 | shared_edits_enabled: Enable shared, collaborative, editing on designated posts.
6 |
--------------------------------------------------------------------------------
/config/locales/server.en_GB.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | en_GB:
8 |
--------------------------------------------------------------------------------
/config/locales/server.es.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | es:
8 | shared_edits:
9 | reason: "Editado por: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Habilitar la edición compartida y colaborativa en las publicaciones designadas.
12 |
--------------------------------------------------------------------------------
/config/locales/server.et.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | et:
8 |
--------------------------------------------------------------------------------
/config/locales/server.fa_IR.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | fa_IR:
8 |
--------------------------------------------------------------------------------
/config/locales/server.fi.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | fi:
8 | shared_edits:
9 | reason: "Muokannut: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Ota käyttöön määritettyjen viestien jakaminen, yhteistyö ja muokkaaminen.
12 |
--------------------------------------------------------------------------------
/config/locales/server.fr.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | fr:
8 | shared_edits:
9 | reason: "Modifié par : %{users}"
10 | site_settings:
11 | shared_edits_enabled: Activer le partage, la collaboration et l'édition sur les messages désignés.
12 |
--------------------------------------------------------------------------------
/config/locales/server.gl.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | gl:
8 |
--------------------------------------------------------------------------------
/config/locales/server.he.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | he:
8 | shared_edits:
9 | reason: "נערך על ידי: %{users}"
10 | site_settings:
11 | shared_edits_enabled: לאפשר עריכה בשיתוף פעולה של פוסטים יעודיים.
12 |
--------------------------------------------------------------------------------
/config/locales/server.hr.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | hr:
8 |
--------------------------------------------------------------------------------
/config/locales/server.hu.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | hu:
8 |
--------------------------------------------------------------------------------
/config/locales/server.hy.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | hy:
8 |
--------------------------------------------------------------------------------
/config/locales/server.id.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | id:
8 |
--------------------------------------------------------------------------------
/config/locales/server.it.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | it:
8 | shared_edits:
9 | reason: "Modificato da: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Abilita la modifica condivisa e in collaborazione sui messaggi indicati.
12 |
--------------------------------------------------------------------------------
/config/locales/server.ja.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ja:
8 | shared_edits:
9 | reason: "編集者: %{users}"
10 | site_settings:
11 | shared_edits_enabled: 指定された投稿での共有、コラボレーション、編集を有効にします。
12 |
--------------------------------------------------------------------------------
/config/locales/server.ko.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ko:
8 |
--------------------------------------------------------------------------------
/config/locales/server.lt.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | lt:
8 |
--------------------------------------------------------------------------------
/config/locales/server.lv.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | lv:
8 |
--------------------------------------------------------------------------------
/config/locales/server.nb_NO.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | nb_NO:
8 |
--------------------------------------------------------------------------------
/config/locales/server.nl.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | nl:
8 | shared_edits:
9 | reason: "Bewerkt door: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Schakel gedeeld, gezamenlijk bewerken in voor opgegeven berichten.
12 |
--------------------------------------------------------------------------------
/config/locales/server.pl_PL.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | pl_PL:
8 | shared_edits:
9 | reason: "Edytowany przez: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Włącz udostępnianie, współpracę, edycję na wyznaczonych postach.
12 |
--------------------------------------------------------------------------------
/config/locales/server.pt.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | pt:
8 |
--------------------------------------------------------------------------------
/config/locales/server.pt_BR.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | pt_BR:
8 | shared_edits:
9 | reason: "Edição de: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Ative edições colaborativas e compartilhadas nas postagens designadas.
12 |
--------------------------------------------------------------------------------
/config/locales/server.ro.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ro:
8 |
--------------------------------------------------------------------------------
/config/locales/server.ru.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ru:
8 | shared_edits:
9 | reason: "Отредактировано пользователями: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Разрешить совместное редактирование определенных записей.
12 |
--------------------------------------------------------------------------------
/config/locales/server.sk.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sk:
8 |
--------------------------------------------------------------------------------
/config/locales/server.sl.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sl:
8 |
--------------------------------------------------------------------------------
/config/locales/server.sq.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sq:
8 |
--------------------------------------------------------------------------------
/config/locales/server.sr.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sr:
8 |
--------------------------------------------------------------------------------
/config/locales/server.sv.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sv:
8 | shared_edits:
9 | reason: "Redigerad av: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Aktivera delad, samverkande, redigering på angivna inlägg.
12 |
--------------------------------------------------------------------------------
/config/locales/server.sw.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | sw:
8 |
--------------------------------------------------------------------------------
/config/locales/server.te.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | te:
8 |
--------------------------------------------------------------------------------
/config/locales/server.th.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | th:
8 |
--------------------------------------------------------------------------------
/config/locales/server.tr_TR.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | tr_TR:
8 | shared_edits:
9 | reason: "Düzenleyen: %{users}"
10 | site_settings:
11 | shared_edits_enabled: Belirlenen gönderilerde paylaşılan, iş birliğine dayalı düzenlemeyi etkinleştirin.
12 |
--------------------------------------------------------------------------------
/config/locales/server.ug.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ug:
8 |
--------------------------------------------------------------------------------
/config/locales/server.uk.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | uk:
8 |
--------------------------------------------------------------------------------
/config/locales/server.ur.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | ur:
8 |
--------------------------------------------------------------------------------
/config/locales/server.vi.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | vi:
8 |
--------------------------------------------------------------------------------
/config/locales/server.zh_CN.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | zh_CN:
8 | shared_edits:
9 | reason: "编辑者:%{users}"
10 | site_settings:
11 | shared_edits_enabled: 在指定帖子上启用共享协作编辑。
12 |
--------------------------------------------------------------------------------
/config/locales/server.zh_TW.yml:
--------------------------------------------------------------------------------
1 | # WARNING: Never edit this file.
2 | # It will be overwritten when translations are pulled from Crowdin.
3 | #
4 | # To work with us on translations, join this project:
5 | # https://translate.discourse.org/
6 |
7 | zh_TW:
8 |
--------------------------------------------------------------------------------
/config/settings.yml:
--------------------------------------------------------------------------------
1 | plugins:
2 | shared_edits_enabled:
3 | default: true
4 | client: true
5 |
--------------------------------------------------------------------------------
/db/migrate/20200721001123_migrate_shared_edits.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | class MigrateSharedEdits < ActiveRecord::Migration[6.0]
4 | def up
5 | create_table :shared_edit_revisions do |t|
6 | t.integer :post_id, null: false
7 | t.string :raw
8 | t.string :revision, null: false
9 | t.integer :user_id, null: false
10 | t.string :client_id, null: false
11 | t.integer :version, null: false
12 | t.integer :post_revision_id
13 | t.timestamps
14 | end
15 |
16 | add_index :shared_edit_revisions, %i[post_id version], unique: true
17 | end
18 |
19 | def down
20 | drop_table :shared_edit_revisions
21 | end
22 | end
23 |
--------------------------------------------------------------------------------
/eslint.config.mjs:
--------------------------------------------------------------------------------
1 | import DiscourseRecommended from "@discourse/lint-configs/eslint";
2 |
3 | export default [...DiscourseRecommended];
4 |
--------------------------------------------------------------------------------
/lib/discourse_shared_edits/guardian_extension.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | module DiscourseSharedEdits
4 | module GuardianExtension
5 | extend ActiveSupport::Concern
6 |
7 | def can_toggle_shared_edits?
8 | SiteSetting.shared_edits_enabled && authenticated? &&
9 | (is_staff? || @user.has_trust_level?(TrustLevel[4]))
10 | end
11 | end
12 | end
13 |
--------------------------------------------------------------------------------
/lib/ot_text_unicode.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | module OtTextUnicode
4 | LOCK = Mutex.new
5 |
6 | def self.context
7 | LOCK.synchronize do
8 | return @context if @context
9 | context = MiniRacer::Context.new
10 | context.eval("module = {exports: {}}")
11 | ot_path = File.expand_path("../../public/javascripts/text-unicode-dist.js", __FILE__)
12 |
13 | context.eval("window = {}; #{File.read(ot_path)}; ot = window.otLib.default.OtUnicode")
14 |
15 | @context = context
16 | end
17 | end
18 |
19 | def self.apply(text, ops = [])
20 | json = String === ops ? ops : ops.to_json
21 | context.eval("ot.apply(#{text.inspect}, #{json})")
22 | end
23 |
24 | def self.compose(ops1 = [], ops2 = [])
25 | json1 = String === ops1 ? ops1 : ops1.to_json
26 | json2 = String === ops2 ? ops2 : ops2.to_json
27 | context.eval("ot.compose(#{json1}, #{json2})")
28 | end
29 |
30 | def self.transform(ops1 = [], ops2 = [], side = "right")
31 | json1 = String === ops1 ? ops1 : ops1.to_json
32 | json2 = String === ops2 ? ops2 : ops2.to_json
33 | context.eval("ot.transform(#{json1}, #{json2}, #{side.inspect})")
34 | end
35 | end
36 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "devDependencies": {
4 | "@discourse/lint-configs": "2.21.0",
5 | "ember-template-lint": "7.7.0",
6 | "eslint": "9.27.0",
7 | "prettier": "3.5.3",
8 | "stylelint": "16.19.1"
9 | },
10 | "engines": {
11 | "node": ">= 22",
12 | "npm": "please-use-pnpm",
13 | "yarn": "please-use-pnpm",
14 | "pnpm": "9.x"
15 | },
16 | "packageManager": "pnpm@9.15.5"
17 | }
18 |
--------------------------------------------------------------------------------
/plugin.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | # name: discourse-shared-edits
4 | # about: Allows multiple users to collaboratively edit posts in real time.
5 | # meta_topic_id: 167583
6 | # version: 0.1.0
7 | # authors: Sam Saffron
8 | # url: https://github.com/discourse/discourse-shared-edits
9 |
10 | enabled_site_setting :shared_edits_enabled
11 |
12 | register_asset "stylesheets/common/discourse-shared-edits.scss"
13 |
14 | after_initialize do
15 | module ::DiscourseSharedEdits
16 | SHARED_EDITS_ENABLED = "shared_edits_enabled"
17 | PLUGIN_NAME = "discourse-shared-edits"
18 |
19 | class Engine < ::Rails::Engine
20 | engine_name PLUGIN_NAME
21 | isolate_namespace ::DiscourseSharedEdits
22 | end
23 | end
24 |
25 | require_relative "lib/ot_text_unicode"
26 | require_relative "app/models/shared_edit_revision"
27 | require_relative "app/controllers/discourse_shared_edits/revision_controller"
28 | require_relative "app/jobs/commit_shared_revision"
29 | require_relative "lib/discourse_shared_edits/guardian_extension"
30 |
31 | ::DiscourseSharedEdits::Engine.routes.draw do
32 | put "/p/:post_id/enable" => "revision#enable"
33 | put "/p/:post_id/disable" => "revision#disable"
34 | put "/p/:post_id" => "revision#revise"
35 | get "/p/:post_id" => "revision#latest"
36 | put "/p/:post_id/commit" => "revision#commit"
37 | end
38 |
39 | Discourse::Application.routes.append { mount ::DiscourseSharedEdits::Engine, at: "/shared_edits" }
40 |
41 | reloadable_patch { Guardian.prepend(DiscourseSharedEdits::GuardianExtension) }
42 |
43 | register_post_custom_field_type(DiscourseSharedEdits::SHARED_EDITS_ENABLED, :boolean)
44 | topic_view_post_custom_fields_allowlister { [DiscourseSharedEdits::SHARED_EDITS_ENABLED] }
45 |
46 | add_to_serializer(:post, :shared_edits_enabled) do
47 | if SiteSetting.shared_edits_enabled
48 | post_custom_fields[DiscourseSharedEdits::SHARED_EDITS_ENABLED]
49 | end
50 | end
51 | end
52 |
--------------------------------------------------------------------------------
/public/javascripts/text-unicode-dist.js:
--------------------------------------------------------------------------------
1 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.otLib=t():e.otLib=t()}(window,(()=>(()=>{var e={75:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=function(){function e(e,t){for(var n=0;nn&&t.length-r>n&&e[e.length-1-r]==t[t.length-1-r];)r++;return r}},{key:"getChangeStart",value:function(e,t){for(var n=0;n0?{action:"insert",start:e.changeStart,payload:e.newString.slice(e.changeStart,e.changeEndIndexNew)}:e.charsRemoved>0&&0===e.charsAdded?{action:"delete",start:e.changeStart,remove:e.charsRemoved}:e.charsRemoved>0&&e.charsAdded>0?{action:"replace",start:e.changeStart,remove:e.charsRemoved,payload:e.newString.substr(e.changeStart,e.charsAdded)}:{action:"noop"},e.raw&&(t.raw=e),t}}]),e}();t.default=new r},935:(e,t,n)=>{"use strict";var r,o=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],r=i.default.assignOpts(e,t,n);return i.default.payload(r)}},{key:"transform",value:function(e,t){return this[t.action](e,t)}},{key:"insert",value:function(e,t){return e.slice(0,parseInt(t.start))+t.payload+e.slice(parseInt(t.start))}},{key:"delete",value:function(e,t){return e.slice(0,parseInt(t.start))+e.slice(parseInt(t.start)+parseInt(t.remove))}},{key:"replace",value:function(e,t){return this.insert(this.delete(e,t),t)}},{key:"noop",value:function(e){return e}}]),e}();t.default=new s},213:(e,t,n)=>{e.exports=n(935)},48:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(562),o=n(681);function i(e,t){return{get:e,getLength:()=>e().length,insert(n,r,i){const s=o.strPosToUni(e(),n);return t([s,r],i)},remove(n,r,i){const s=o.strPosToUni(e(),n);return t([s,{d:r}],i)},_onOp(e){r.eachOp(e,((e,t,n)=>{switch(typeof e){case"string":this.onInsert&&this.onInsert(n,e);break;case"object":const t=r.dlen(e.d);this.onRemove&&this.onRemove(n,t)}}))},onInsert:null,onRemove:null}}t.default=i,i.provides={text:!0}},700:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.type=t.remove=t.insert=void 0;const a=n(681),c=i(n(562)),u=s(n(48)),l={create:e=>e,toString:e=>e,builder(e){if("string"!=typeof e)throw Error("Invalid document snapshot: "+e);const t=[];return{skip(n){let r=a.uniToStrPos(e,n);if(r>e.length)throw Error("The op is too long for this document");t.push(e.slice(0,r)),e=e.slice(r)},append(e){t.push(e)},del(t){e=e.slice(a.uniToStrPos(e,t))},build:()=>t.join("")+e}},slice:c.uniSlice},d=c.default(l),f=Object.assign(Object.assign({},d),{api:u.default});t.type=f,t.insert=(e,t)=>0===t.length?[]:0===e?[t]:[e,t],t.remove=(e,t)=>0===c.dlen(t)?[]:0===e?[{d:t}]:[e,{d:t}];var p=n(562);Object.defineProperty(t,"makeType",{enumerable:!0,get:function(){return p.default}})},562:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.uniSlice=t.dlen=t.eachOp=void 0;const r=n(681),o=e=>{if(!Array.isArray(e))throw Error("Op must be an array of components");let n=null;for(let r=0;r0))throw Error("Inserts cannot be empty");break;case"number":if(!(o>0))throw Error("Skip components must be >0");if("number"==typeof n)throw Error("Adjacent skip components should be combined")}n=o}if("number"==typeof n)throw Error("Op has a trailing skip")};function i(e,n){let o=0,i=0;for(let s=0;s{r(t(e,n,o))})),p(n)}t.eachOp=i;const a=e=>e,c=e=>s(e,a);t.dlen=e=>"number"==typeof e?e:r.strPosToUni(e);const u=e=>n=>{if(n&&0!==n.d&&""!==n.d)if(0===e.length)e.push(n);else if(typeof n==typeof e[e.length-1])if("object"==typeof n){const r=e[e.length-1];r.d="string"==typeof r.d&&"string"==typeof n.d?r.d+n.d:t.dlen(r.d)+t.dlen(n.d)}else e[e.length-1]+=n;else e.push(n)},l=e=>"number"==typeof e?e:"string"==typeof e?r.strPosToUni(e):"number"==typeof e.d?e.d:r.strPosToUni(e.d);t.uniSlice=(e,t,n)=>{const o=r.uniToStrPos(e,t),i=null==n?1/0:r.uniToStrPos(e,n);return e.slice(o,i)};const d=(e,n,r)=>"number"==typeof e?null==r?e-n:Math.min(e,r)-n:t.uniSlice(e,n,r),f=e=>{let n=0,o=0;return{take:(i,s)=>{if(n===e.length)return-1===i?null:i;const a=e[n];let c;if("number"==typeof a)return-1===i||a-o<=i?(c=a-o,++n,o=0,c):(o+=i,i);if("string"==typeof a){if(-1===i||"i"===s||r.strPosToUni(a.slice(o))<=i)return c=a.slice(o),++n,o=0,c;{const e=o+r.uniToStrPos(a.slice(o),i);return c=a.slice(o,e),o=e,c}}if(-1===i||"d"===s||t.dlen(a.d)-o<=i)return c={d:d(a.d,o)},++n,o=0,c;{let e=d(a.d,o,o+i);return o+=i,{d:e}}},peek:()=>e[n]}},p=e=>(e.length>0&&"number"==typeof e[e.length-1]&&e.pop(),e);function h(e,n,i){if("left"!==i&&"right"!==i)throw Error("side ("+i+") must be 'left' or 'right'");o(e),o(n);const s=[],a=u(s),{take:c,peek:d}=f(e);for(let e=0;e0;)u=c(s,"i"),a(u),"string"!=typeof u&&(s-=l(u));break;case"string":"left"===i&&"string"==typeof d()&&a(c(-1)),a(r.strPosToUni(o));break;case"object":for(s=t.dlen(o.d);s>0;)switch(u=c(s,"i"),typeof u){case"number":s-=u;break;case"string":a(u);break;case"object":s-=t.dlen(u.d)}}}let h;for(;h=c(-1);)a(h);return p(s)}function b(e,n){o(e),o(n);const i=[],s=u(i),{take:a}=f(e);for(let e=0;e0;)c=a(i,"d"),s(c),"object"!=typeof c&&(i-=l(c));break;case"string":s(o);break;case"object":i=t.dlen(o.d);let e=0;for(;e{let o=0;for(let i=0;io;i++){const s=n[i];switch(typeof s){case"number":o+=s;break;case"string":const n=r.strPosToUni(s);o+=n,e+=n;break;case"object":e-=Math.min(t.dlen(s.d),e-o)}}return e},y=(e,t)=>"number"==typeof e?g(e,t):e.map((e=>g(e,t)));function m(e,t,n){return s(e,((e,r)=>"object"==typeof e&&"number"==typeof e.d?{d:n.slice(t,r,r+e.d)}:e))}function v(e){return s(e,(e=>{switch(typeof e){case"object":if("number"==typeof e.d)throw Error("Cannot invert text op: Deleted characters missing from operation. makeInvertible must be called first.");return e.d;case"string":return{d:e};case"number":return e}}))}function w(e){return s(e,(e=>"object"==typeof e&&"string"==typeof e.d?{d:r.strPosToUni(e.d)}:e))}function k(e){let t=!0;return i(e,(e=>{"object"==typeof e&&"number"==typeof e.d&&(t=!1)})),t}t.default=function(e){return{name:"text-unicode",uri:"http://sharejs.org/types/text-unicode",trim:p,normalize:c,checkOp:o,create(t=""){if("string"!=typeof t)throw Error("Initial data must be a string");return e.create(t)},apply(n,r){o(r);const i=e.builder(n);for(let e=0;em(t,n,e),stripInvertible:w,invert:v,invertWithDoc:(t,n)=>v(m(t,n,e)),isNoop:e=>0===e.length}}},681:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.uniToStrPos=t.strPosToUni=void 0,t.strPosToUni=(e,t=e.length)=>{let n=0,r=0;for(;r=55296&&t<=57343&&(n++,r++)}if(r!==t)throw Error("Invalid offset - splits unicode bytes");return r-n},t.uniToStrPos=(e,t)=>{let n=0;for(;t>0;t--){const t=e.charCodeAt(n);n+=t>=55296&&t<=57343?2:1}return n}}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r={};return(()=>{"use strict";n.r(r),n.d(r,{default:()=>o});var e=n(213),t=n(700);const o={OtDiff:e.default,OtUnicode:t.type}})(),r})()));
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 | # Discourse Shared Edits Plugin
2 |
3 | Discourse shared edits allows multiple users to collaboratively edit posts in real time.
4 | This feature is default disabled and must be enabled explicitly by moderators on posts.
5 |
6 | For more information, please see: https://meta.discourse.org/t/discourse-shared-edits/167583
7 |
--------------------------------------------------------------------------------
/spec/lib/guardian_spec.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | RSpec.describe Guardian do
4 | fab!(:moderator)
5 | fab!(:user)
6 |
7 | it "disallows shared edits from anon" do
8 | expect(Guardian.new.can_toggle_shared_edits?).to eq(false)
9 | end
10 |
11 | it "disallows shared edits for tl3 users" do
12 | user.trust_level = 3
13 | expect(Guardian.new(user).can_toggle_shared_edits?).to eq(false)
14 | end
15 |
16 | it "allows shared edits for staff" do
17 | expect(Guardian.new(moderator).can_toggle_shared_edits?).to eq(true)
18 | end
19 |
20 | it "allows shared edits for tl4" do
21 | user.trust_level = 4
22 | expect(Guardian.new(user).can_toggle_shared_edits?).to eq(true)
23 | end
24 | end
25 |
--------------------------------------------------------------------------------
/spec/lib/ot_text_unicode_spec.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | RSpec.describe OtTextUnicode do
4 | it "can apply operations to text" do
5 | result = OtTextUnicode.apply("😎hello world", [7, { d: 9 }, "hello"])
6 | expect(result).to eq("😎hello hello")
7 | end
8 |
9 | it "what happens when stuff is stacked" do
10 | text = "I like bananas"
11 | op1 = [2, { d: 4 }, "eat"]
12 | op2 = [7, { d: 7 }, "apples"]
13 |
14 | op1a = OtTextUnicode.transform(op1, op2)
15 |
16 | result = OtTextUnicode.apply(text, op2)
17 | result = OtTextUnicode.apply(result, op1a)
18 |
19 | expect(result).to eq("I eat apples")
20 | end
21 | end
22 |
--------------------------------------------------------------------------------
/spec/models/shared_edit_revision_spec.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | RSpec.describe SharedEditRevision do
4 | def fake_edit(post, user_id, data, version:)
5 | SharedEditRevision.revise!(
6 | post_id: post.id,
7 | user_id: user_id,
8 | client_id: user_id,
9 | revision: data.to_json,
10 | version: version,
11 | )
12 | end
13 |
14 | it "can resolve complex edits and notify" do
15 | raw = <<~RAW
16 | 0123456
17 | 0123456
18 | 0123456
19 | RAW
20 |
21 | user1 = Fabricate(:user)
22 | user2 = Fabricate(:user)
23 |
24 | post = Fabricate(:post, raw: raw)
25 | SharedEditRevision.init!(post)
26 |
27 | version, revision = nil
28 |
29 | messages =
30 | MessageBus.track_publish("/shared_edits/#{post.id}") do
31 | version, revision = fake_edit(post, user1.id, [8, { d: 7 }, "mister"], version: 1)
32 | end
33 |
34 | expected_rev = [8, { d: 7 }, "mister"].to_json
35 | expect(messages.length).to eq(1)
36 | expect(messages.first.data[:version]).to eq(2)
37 | expect(messages.first.data[:revision]).to eq(expected_rev)
38 |
39 | expect(version).to eq(2)
40 | expect(revision).to eq(expected_rev)
41 |
42 | SharedEditRevision.commit!(post.id)
43 |
44 | new_raw = (<<~RAW).strip
45 | 0123456
46 | mister
47 | 0123456
48 | RAW
49 |
50 | post.reload
51 | expect(post.raw).to eq(new_raw)
52 |
53 | version, revision = fake_edit(post, user2.id, [{ d: 7 }, "hello"], version: 1)
54 |
55 | expect(version).to eq(3)
56 | expect(revision).to eq("[{\"d\":7},\"hello\"]")
57 |
58 | version, revision = fake_edit(post, user1.id, [16, { d: 7 }, "world"], version: 1)
59 |
60 | expect(version).to eq(4)
61 | expect(revision).to eq("[13,{\"d\":7},\"world\"]")
62 |
63 | fake_edit(post, 3, [{ d: 1 }, "H"], version: 3)
64 |
65 | SharedEditRevision.commit!(post.id)
66 |
67 | new_raw = (<<~RAW).strip
68 | Hello
69 | mister
70 | world
71 | RAW
72 |
73 | post.reload
74 |
75 | expect(post.raw).to eq(new_raw)
76 |
77 | rev = post.revisions.order(:number).first
78 |
79 | reason = rev.modifications["edit_reason"][1].to_s
80 | expect(reason).to include(user1.username)
81 | expect(reason).to include(user2.username)
82 | expect(reason).not_to include("d,")
83 |
84 | edit_rev = SharedEditRevision.where(post_id: post.id).order("version desc").first
85 |
86 | expect(edit_rev.post_revision_id).to eq(rev.id)
87 | end
88 |
89 | it "does not update the post if validation fails" do
90 | user = Fabricate(:admin)
91 | post = Fabricate(:post, user: user, raw: "Hello world")
92 |
93 | SharedEditRevision.init!(post)
94 | SharedEditRevision.revise!(
95 | post_id: post.id,
96 | user_id: user.id,
97 | client_id: user.id,
98 | revision: [{ d: 11 }, "Test"],
99 | version: 1,
100 | )
101 |
102 | expect(post.reload.raw).to eq("Hello world")
103 | end
104 | end
105 |
--------------------------------------------------------------------------------
/spec/requests/revision_controller_spec.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | RSpec.describe DiscourseSharedEdits::RevisionController do
4 | fab!(:post1) { Fabricate(:post) }
5 | fab!(:admin)
6 | fab!(:user)
7 |
8 | context :admin do
9 | before { sign_in admin }
10 |
11 | it "is hard disabled when plugin is disabled" do
12 | SiteSetting.shared_edits_enabled = false
13 | put "/shared_edits/p/#{post1.id}/enable"
14 | expect(response.status).to eq(404)
15 | end
16 |
17 | it "is able to enable revisions on a post" do
18 | put "/shared_edits/p/#{post1.id}/enable"
19 | expect(response.status).to eq(200)
20 |
21 | post1.reload
22 | expect(post1.custom_fields[DiscourseSharedEdits::SHARED_EDITS_ENABLED]).to eq(true)
23 |
24 | put "/shared_edits/p/#{post1.id}/disable"
25 | expect(response.status).to eq(200)
26 |
27 | post1.reload
28 | expect(post1.custom_fields[DiscourseSharedEdits::SHARED_EDITS_ENABLED]).to eq(nil)
29 | end
30 | end
31 |
32 | context :user do
33 | before do
34 | sign_in user
35 | SharedEditRevision.toggle_shared_edits!(post1.id, true)
36 | end
37 |
38 | it "can submit edits on a post" do
39 | put "/shared_edits/p/#{post1.id}",
40 | params: {
41 | client_id: "abc",
42 | version: 1,
43 | revision: [{ d: 4 }, "1234"].to_json,
44 | }
45 | expect(response.status).to eq(200)
46 |
47 | SharedEditRevision.commit!(post1.id)
48 |
49 | post1.reload
50 | expect(post1.raw[0..3]).to eq("1234")
51 | end
52 |
53 | it "can get the latest version" do
54 | put "/shared_edits/p/#{post1.id}",
55 | params: {
56 | client_id: "abc",
57 | version: 1,
58 | revision: [{ d: 4 }, "1234"].to_json,
59 | }
60 |
61 | get "/shared_edits/p/#{post1.id}"
62 | expect(response.status).to eq(200)
63 |
64 | raw = response.parsed_body["raw"]
65 | version = response.parsed_body["version"]
66 |
67 | expect(raw[0..3]).to eq("1234")
68 | expect(version).to eq(2)
69 | end
70 |
71 | it "will defer commit" do
72 | Discourse.redis.del SharedEditRevision.will_commit_key(post1.id)
73 |
74 | Sidekiq::Testing.inline! do
75 | put "/shared_edits/p/#{post1.id}",
76 | params: {
77 | client_id: "abc",
78 | version: 1,
79 | revision: [{ d: 4 }, "1234"].to_json,
80 | }
81 |
82 | get "/shared_edits/p/#{post1.id}"
83 | expect(response.status).to eq(200)
84 |
85 | raw = response.parsed_body["raw"]
86 | version = response.parsed_body["version"]
87 |
88 | expect(raw[0..3]).to eq("1234")
89 | expect(version).to eq(2)
90 | end
91 | end
92 |
93 | it "can submit old edits to a post and get sane info" do
94 | put "/shared_edits/p/#{post1.id}",
95 | params: {
96 | client_id: "abc",
97 | version: 1,
98 | revision: [{ d: 4 }, "1234"].to_json,
99 | }
100 |
101 | put "/shared_edits/p/#{post1.id}",
102 | params: {
103 | client_id: "123",
104 | version: 1,
105 | revision: [4, { d: 4 }, "abcd"].to_json,
106 | }
107 | expect(response.status).to eq(200)
108 |
109 | SharedEditRevision.commit!(post1.id)
110 |
111 | post1.reload
112 | expect(post1.raw[4..7]).to eq("abcd")
113 | end
114 |
115 | it "can not enable revisions as normal user" do
116 | put "/shared_edits/p/#{post1.id}/enable"
117 | expect(response.status).to eq(403)
118 | put "/shared_edits/p/#{post1.id}/disable"
119 | expect(response.status).to eq(403)
120 | end
121 | end
122 | end
123 |
--------------------------------------------------------------------------------
/spec/serializers/post_serializer_spec.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | RSpec.describe PostSerializer do
4 | fab!(:post)
5 |
6 | before { SiteSetting.shared_edits_enabled }
7 |
8 | describe "#shared_edits_enabled" do
9 | before do
10 | post.custom_fields[DiscourseSharedEdits::SHARED_EDITS_ENABLED] = true
11 | post.save_custom_fields
12 | end
13 |
14 | it "returns the right value when shared edits exists for a post" do
15 | payload = PostSerializer.new(post, scope: Guardian.new, root: false).as_json
16 |
17 | expect(payload[:shared_edits_enabled]).to eq(true)
18 | end
19 |
20 | it "returns the right value when shared edits exists in the topic view context" do
21 | serializer = PostSerializer.new(post, scope: Guardian.new, root: false)
22 | serializer.topic_view = TopicView.new(post.topic)
23 |
24 | expect(serializer.as_json[:shared_edits_enabled]).to eq(true)
25 | end
26 | end
27 | end
28 |
--------------------------------------------------------------------------------
/spec/system/core_features_spec.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | RSpec.describe "Core features", type: :system do
4 | before { enable_current_plugin }
5 |
6 | it_behaves_like "having working core features"
7 | end
8 |
--------------------------------------------------------------------------------
/spec/system/edit_spec.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 |
3 | RSpec.describe "Discourse Shared Edits | Editing a post", system: true do
4 | fab!(:admin)
5 | fab!(:post) { Fabricate(:post, user: admin, raw: "lorem ipsum\n") }
6 | let(:composer) { PageObjects::Components::Composer.new }
7 |
8 | before { sign_in(admin) }
9 |
10 | %w[enabled disabled].each do |value|
11 | before { SiteSetting.glimmer_post_stream_mode = value }
12 |
13 | context "when glimmer_post_stream_mode=#{value}" do
14 | it "allows the user to edit and save a post" do
15 | visit(post.topic.relative_url)
16 |
17 | find(".show-more-actions").click
18 | find(".show-post-admin-menu").click
19 | find(".admin-toggle-shared-edits").click
20 |
21 | try_until_success do
22 | revision = SharedEditRevision.find_by(post_id: post.id, version: 1)
23 | expect(revision).to be_present
24 | expect(revision.raw).to eq("lorem ipsum\n")
25 | expect(revision.revision).to eq("[]")
26 | expect(SharedEditRevision.count).to eq(1)
27 | end
28 |
29 | find(".shared-edit").click
30 | expect(composer).to have_content("lorem ipsum")
31 |
32 | composer.type_content "foo"
33 | try_until_success do
34 | revision = SharedEditRevision.find_by(post_id: post.id, version: 2)
35 | expect(revision).to be_present
36 | expect(revision.revision).to eq("[12,\"foo\"]")
37 | expect(SharedEditRevision.count).to eq(2)
38 | end
39 |
40 | composer.type_content " bar"
41 | try_until_success do
42 | revision = SharedEditRevision.find_by(post_id: post.id, version: 3)
43 | expect(revision).to be_present
44 | expect(revision.revision).to eq("[15,\" bar\"]")
45 | expect(SharedEditRevision.count).to eq(3)
46 | end
47 |
48 | find(".leave-shared-edit .btn-primary").click
49 | try_until_success do
50 | expect(post.reload.raw).to eq("lorem ipsum\nfoo bar")
51 | expect(find("#post_1 .cooked > p")).to have_content("lorem ipsum\nfoo bar")
52 | expect(SharedEditRevision.count).to eq(3)
53 | end
54 | end
55 | end
56 | end
57 | end
58 |
--------------------------------------------------------------------------------
/stylelint.config.mjs:
--------------------------------------------------------------------------------
1 | export default {
2 | extends: ["@discourse/lint-configs/stylelint"],
3 | };
4 |
--------------------------------------------------------------------------------
/support/fake_writer.rb:
--------------------------------------------------------------------------------
1 | # frozen_string_literal: true
2 | require "fileutils"
3 |
4 | Dir.chdir(File.expand_path("../../../..", __FILE__)) do # rubocop:disable Discourse/NoChdir
5 | require File.expand_path("../../config/environment", __FILE__)
6 |
7 | post_id = ARGV[0].to_i
8 |
9 | if post_id == 0
10 | STDERR.puts "Please specify a post id"
11 | exit 1
12 | end
13 |
14 | puts "Simulating writing on #{post_id}"
15 |
16 | post = Post.find(post_id)
17 |
18 | revisions = %w[the quick brown fox jumped over the lazy fox.].map { |s| s + " " }
19 |
20 | revisions << { d: revisions.join.length }
21 |
22 | i = 0
23 | while true
24 | rev = [revisions[i % revisions.length]]
25 | ver = SharedEditRevision.where(post_id: post_id).maximum(:version)
26 | SharedEditRevision.revise!(
27 | post_id: post.id,
28 | user_id: 1,
29 | client_id: "a",
30 | revision: rev,
31 | version: ver,
32 | )
33 | sleep(rand * 0.2 + 0.5)
34 | print "."
35 | i += 1
36 | end
37 | end
38 |
--------------------------------------------------------------------------------
/support/text-unicode-webpack/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "text-unicode-webpack",
3 | "private": true,
4 | "main": "index.js",
5 | "dependencies": {
6 | "ot-diff": "^1.1.1",
7 | "ot-text-unicode": "^4.0.0"
8 | },
9 | "devDependencies": {
10 | "@babel/core": "^7.24.0",
11 | "@babel/preset-env": "^7.24.0",
12 | "babel-loader": "^9.1.3",
13 | "webpack": "^5.94.0",
14 | "webpack-cli": "^5.1.4"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/support/text-unicode-webpack/src/index.js:
--------------------------------------------------------------------------------
1 | import OtDiff from "ot-diff";
2 | import { type } from "ot-text-unicode";
3 |
4 | export default { OtDiff, OtUnicode: type };
5 |
--------------------------------------------------------------------------------
/support/text-unicode-webpack/webpack.config.js:
--------------------------------------------------------------------------------
1 | const path = require("path");
2 |
3 | module.exports = {
4 | mode: "production",
5 | output: {
6 | path: path.resolve(__dirname, "..", "..", "public", "javascripts"),
7 | filename: "text-unicode-dist.js",
8 | library: "otLib",
9 | libraryTarget: "umd",
10 | globalObject: "window",
11 | },
12 | module: {
13 | rules: [
14 | {
15 | test: /\.js$/,
16 | use: { loader: "babel-loader" },
17 | },
18 | ],
19 | },
20 | };
21 |
--------------------------------------------------------------------------------
/support/text-unicode-webpack/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@ampproject/remapping@^2.2.0":
6 | version "2.3.0"
7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4"
8 | integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==
9 | dependencies:
10 | "@jridgewell/gen-mapping" "^0.3.5"
11 | "@jridgewell/trace-mapping" "^0.3.24"
12 |
13 | "@babel/code-frame@^7.23.5":
14 | version "7.23.5"
15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244"
16 | integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==
17 | dependencies:
18 | "@babel/highlight" "^7.23.4"
19 | chalk "^2.4.2"
20 |
21 | "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.23.5":
22 | version "7.23.5"
23 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.5.tgz#ffb878728bb6bdcb6f4510aa51b1be9afb8cfd98"
24 | integrity sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==
25 |
26 | "@babel/core@^7.24.0":
27 | version "7.24.0"
28 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.0.tgz#56cbda6b185ae9d9bed369816a8f4423c5f2ff1b"
29 | integrity sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==
30 | dependencies:
31 | "@ampproject/remapping" "^2.2.0"
32 | "@babel/code-frame" "^7.23.5"
33 | "@babel/generator" "^7.23.6"
34 | "@babel/helper-compilation-targets" "^7.23.6"
35 | "@babel/helper-module-transforms" "^7.23.3"
36 | "@babel/helpers" "^7.24.0"
37 | "@babel/parser" "^7.24.0"
38 | "@babel/template" "^7.24.0"
39 | "@babel/traverse" "^7.24.0"
40 | "@babel/types" "^7.24.0"
41 | convert-source-map "^2.0.0"
42 | debug "^4.1.0"
43 | gensync "^1.0.0-beta.2"
44 | json5 "^2.2.3"
45 | semver "^6.3.1"
46 |
47 | "@babel/generator@^7.23.6":
48 | version "7.23.6"
49 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.6.tgz#9e1fca4811c77a10580d17d26b57b036133f3c2e"
50 | integrity sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==
51 | dependencies:
52 | "@babel/types" "^7.23.6"
53 | "@jridgewell/gen-mapping" "^0.3.2"
54 | "@jridgewell/trace-mapping" "^0.3.17"
55 | jsesc "^2.5.1"
56 |
57 | "@babel/helper-annotate-as-pure@^7.22.5":
58 | version "7.22.5"
59 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882"
60 | integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==
61 | dependencies:
62 | "@babel/types" "^7.22.5"
63 |
64 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15":
65 | version "7.22.15"
66 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956"
67 | integrity sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==
68 | dependencies:
69 | "@babel/types" "^7.22.15"
70 |
71 | "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.23.6":
72 | version "7.23.6"
73 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz#4d79069b16cbcf1461289eccfbbd81501ae39991"
74 | integrity sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==
75 | dependencies:
76 | "@babel/compat-data" "^7.23.5"
77 | "@babel/helper-validator-option" "^7.23.5"
78 | browserslist "^4.22.2"
79 | lru-cache "^5.1.1"
80 | semver "^6.3.1"
81 |
82 | "@babel/helper-create-class-features-plugin@^7.22.15":
83 | version "7.24.0"
84 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz#fc7554141bdbfa2d17f7b4b80153b9b090e5d158"
85 | integrity sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==
86 | dependencies:
87 | "@babel/helper-annotate-as-pure" "^7.22.5"
88 | "@babel/helper-environment-visitor" "^7.22.20"
89 | "@babel/helper-function-name" "^7.23.0"
90 | "@babel/helper-member-expression-to-functions" "^7.23.0"
91 | "@babel/helper-optimise-call-expression" "^7.22.5"
92 | "@babel/helper-replace-supers" "^7.22.20"
93 | "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
94 | "@babel/helper-split-export-declaration" "^7.22.6"
95 | semver "^6.3.1"
96 |
97 | "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5":
98 | version "7.22.15"
99 | resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1"
100 | integrity sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==
101 | dependencies:
102 | "@babel/helper-annotate-as-pure" "^7.22.5"
103 | regexpu-core "^5.3.1"
104 | semver "^6.3.1"
105 |
106 | "@babel/helper-define-polyfill-provider@^0.5.0":
107 | version "0.5.0"
108 | resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.5.0.tgz#465805b7361f461e86c680f1de21eaf88c25901b"
109 | integrity sha512-NovQquuQLAQ5HuyjCz7WQP9MjRj7dx++yspwiyUiGl9ZyadHRSql1HZh5ogRd8W8w6YM6EQ/NTB8rgjLt5W65Q==
110 | dependencies:
111 | "@babel/helper-compilation-targets" "^7.22.6"
112 | "@babel/helper-plugin-utils" "^7.22.5"
113 | debug "^4.1.1"
114 | lodash.debounce "^4.0.8"
115 | resolve "^1.14.2"
116 |
117 | "@babel/helper-define-polyfill-provider@^0.6.0":
118 | version "0.6.0"
119 | resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.0.tgz#4d1a8b898c8299a2fcf295d7d356d2648471ab31"
120 | integrity sha512-efwOM90nCG6YeT8o3PCyBVSxRfmILxCNL+TNI8CGQl7a62M0Wd9VkV+XHwIlkOz1r4b+lxu6gBjdWiOMdUCrCQ==
121 | dependencies:
122 | "@babel/helper-compilation-targets" "^7.22.6"
123 | "@babel/helper-plugin-utils" "^7.22.5"
124 | debug "^4.1.1"
125 | lodash.debounce "^4.0.8"
126 | resolve "^1.14.2"
127 |
128 | "@babel/helper-environment-visitor@^7.22.20":
129 | version "7.22.20"
130 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167"
131 | integrity sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==
132 |
133 | "@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0":
134 | version "7.23.0"
135 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759"
136 | integrity sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==
137 | dependencies:
138 | "@babel/template" "^7.22.15"
139 | "@babel/types" "^7.23.0"
140 |
141 | "@babel/helper-hoist-variables@^7.22.5":
142 | version "7.22.5"
143 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb"
144 | integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==
145 | dependencies:
146 | "@babel/types" "^7.22.5"
147 |
148 | "@babel/helper-member-expression-to-functions@^7.22.15", "@babel/helper-member-expression-to-functions@^7.23.0":
149 | version "7.23.0"
150 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366"
151 | integrity sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==
152 | dependencies:
153 | "@babel/types" "^7.23.0"
154 |
155 | "@babel/helper-module-imports@^7.22.15":
156 | version "7.22.15"
157 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0"
158 | integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==
159 | dependencies:
160 | "@babel/types" "^7.22.15"
161 |
162 | "@babel/helper-module-transforms@^7.23.3":
163 | version "7.23.3"
164 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz#d7d12c3c5d30af5b3c0fcab2a6d5217773e2d0f1"
165 | integrity sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==
166 | dependencies:
167 | "@babel/helper-environment-visitor" "^7.22.20"
168 | "@babel/helper-module-imports" "^7.22.15"
169 | "@babel/helper-simple-access" "^7.22.5"
170 | "@babel/helper-split-export-declaration" "^7.22.6"
171 | "@babel/helper-validator-identifier" "^7.22.20"
172 |
173 | "@babel/helper-optimise-call-expression@^7.22.5":
174 | version "7.22.5"
175 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e"
176 | integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==
177 | dependencies:
178 | "@babel/types" "^7.22.5"
179 |
180 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
181 | version "7.24.0"
182 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz#945681931a52f15ce879fd5b86ce2dae6d3d7f2a"
183 | integrity sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==
184 |
185 | "@babel/helper-remap-async-to-generator@^7.22.20":
186 | version "7.22.20"
187 | resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0"
188 | integrity sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==
189 | dependencies:
190 | "@babel/helper-annotate-as-pure" "^7.22.5"
191 | "@babel/helper-environment-visitor" "^7.22.20"
192 | "@babel/helper-wrap-function" "^7.22.20"
193 |
194 | "@babel/helper-replace-supers@^7.22.20":
195 | version "7.22.20"
196 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793"
197 | integrity sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==
198 | dependencies:
199 | "@babel/helper-environment-visitor" "^7.22.20"
200 | "@babel/helper-member-expression-to-functions" "^7.22.15"
201 | "@babel/helper-optimise-call-expression" "^7.22.5"
202 |
203 | "@babel/helper-simple-access@^7.22.5":
204 | version "7.22.5"
205 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de"
206 | integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==
207 | dependencies:
208 | "@babel/types" "^7.22.5"
209 |
210 | "@babel/helper-skip-transparent-expression-wrappers@^7.22.5":
211 | version "7.22.5"
212 | resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847"
213 | integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==
214 | dependencies:
215 | "@babel/types" "^7.22.5"
216 |
217 | "@babel/helper-split-export-declaration@^7.22.6":
218 | version "7.22.6"
219 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c"
220 | integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==
221 | dependencies:
222 | "@babel/types" "^7.22.5"
223 |
224 | "@babel/helper-string-parser@^7.23.4":
225 | version "7.23.4"
226 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz#9478c707febcbbe1ddb38a3d91a2e054ae622d83"
227 | integrity sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==
228 |
229 | "@babel/helper-validator-identifier@^7.22.20":
230 | version "7.22.20"
231 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0"
232 | integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==
233 |
234 | "@babel/helper-validator-option@^7.23.5":
235 | version "7.23.5"
236 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz#907a3fbd4523426285365d1206c423c4c5520307"
237 | integrity sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==
238 |
239 | "@babel/helper-wrap-function@^7.22.20":
240 | version "7.22.20"
241 | resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569"
242 | integrity sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==
243 | dependencies:
244 | "@babel/helper-function-name" "^7.22.5"
245 | "@babel/template" "^7.22.15"
246 | "@babel/types" "^7.22.19"
247 |
248 | "@babel/helpers@^7.24.0":
249 | version "7.24.0"
250 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.0.tgz#a3dd462b41769c95db8091e49cfe019389a9409b"
251 | integrity sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==
252 | dependencies:
253 | "@babel/template" "^7.24.0"
254 | "@babel/traverse" "^7.24.0"
255 | "@babel/types" "^7.24.0"
256 |
257 | "@babel/highlight@^7.23.4":
258 | version "7.23.4"
259 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b"
260 | integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==
261 | dependencies:
262 | "@babel/helper-validator-identifier" "^7.22.20"
263 | chalk "^2.4.2"
264 | js-tokens "^4.0.0"
265 |
266 | "@babel/parser@^7.24.0":
267 | version "7.24.0"
268 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.0.tgz#26a3d1ff49031c53a97d03b604375f028746a9ac"
269 | integrity sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==
270 |
271 | "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3":
272 | version "7.23.3"
273 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz#5cd1c87ba9380d0afb78469292c954fee5d2411a"
274 | integrity sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==
275 | dependencies:
276 | "@babel/helper-plugin-utils" "^7.22.5"
277 |
278 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3":
279 | version "7.23.3"
280 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz#f6652bb16b94f8f9c20c50941e16e9756898dc5d"
281 | integrity sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==
282 | dependencies:
283 | "@babel/helper-plugin-utils" "^7.22.5"
284 | "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
285 | "@babel/plugin-transform-optional-chaining" "^7.23.3"
286 |
287 | "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.7":
288 | version "7.23.7"
289 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.7.tgz#516462a95d10a9618f197d39ad291a9b47ae1d7b"
290 | integrity sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==
291 | dependencies:
292 | "@babel/helper-environment-visitor" "^7.22.20"
293 | "@babel/helper-plugin-utils" "^7.22.5"
294 |
295 | "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2":
296 | version "7.21.0-placeholder-for-preset-env.2"
297 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703"
298 | integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==
299 |
300 | "@babel/plugin-syntax-async-generators@^7.8.4":
301 | version "7.8.4"
302 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d"
303 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==
304 | dependencies:
305 | "@babel/helper-plugin-utils" "^7.8.0"
306 |
307 | "@babel/plugin-syntax-class-properties@^7.12.13":
308 | version "7.12.13"
309 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10"
310 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==
311 | dependencies:
312 | "@babel/helper-plugin-utils" "^7.12.13"
313 |
314 | "@babel/plugin-syntax-class-static-block@^7.14.5":
315 | version "7.14.5"
316 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406"
317 | integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==
318 | dependencies:
319 | "@babel/helper-plugin-utils" "^7.14.5"
320 |
321 | "@babel/plugin-syntax-dynamic-import@^7.8.3":
322 | version "7.8.3"
323 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3"
324 | integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==
325 | dependencies:
326 | "@babel/helper-plugin-utils" "^7.8.0"
327 |
328 | "@babel/plugin-syntax-export-namespace-from@^7.8.3":
329 | version "7.8.3"
330 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a"
331 | integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==
332 | dependencies:
333 | "@babel/helper-plugin-utils" "^7.8.3"
334 |
335 | "@babel/plugin-syntax-import-assertions@^7.23.3":
336 | version "7.23.3"
337 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz#9c05a7f592982aff1a2768260ad84bcd3f0c77fc"
338 | integrity sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==
339 | dependencies:
340 | "@babel/helper-plugin-utils" "^7.22.5"
341 |
342 | "@babel/plugin-syntax-import-attributes@^7.23.3":
343 | version "7.23.3"
344 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz#992aee922cf04512461d7dae3ff6951b90a2dc06"
345 | integrity sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==
346 | dependencies:
347 | "@babel/helper-plugin-utils" "^7.22.5"
348 |
349 | "@babel/plugin-syntax-import-meta@^7.10.4":
350 | version "7.10.4"
351 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
352 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==
353 | dependencies:
354 | "@babel/helper-plugin-utils" "^7.10.4"
355 |
356 | "@babel/plugin-syntax-json-strings@^7.8.3":
357 | version "7.8.3"
358 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a"
359 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==
360 | dependencies:
361 | "@babel/helper-plugin-utils" "^7.8.0"
362 |
363 | "@babel/plugin-syntax-logical-assignment-operators@^7.10.4":
364 | version "7.10.4"
365 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699"
366 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==
367 | dependencies:
368 | "@babel/helper-plugin-utils" "^7.10.4"
369 |
370 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3":
371 | version "7.8.3"
372 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9"
373 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==
374 | dependencies:
375 | "@babel/helper-plugin-utils" "^7.8.0"
376 |
377 | "@babel/plugin-syntax-numeric-separator@^7.10.4":
378 | version "7.10.4"
379 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97"
380 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==
381 | dependencies:
382 | "@babel/helper-plugin-utils" "^7.10.4"
383 |
384 | "@babel/plugin-syntax-object-rest-spread@^7.8.3":
385 | version "7.8.3"
386 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871"
387 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==
388 | dependencies:
389 | "@babel/helper-plugin-utils" "^7.8.0"
390 |
391 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3":
392 | version "7.8.3"
393 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1"
394 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==
395 | dependencies:
396 | "@babel/helper-plugin-utils" "^7.8.0"
397 |
398 | "@babel/plugin-syntax-optional-chaining@^7.8.3":
399 | version "7.8.3"
400 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a"
401 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==
402 | dependencies:
403 | "@babel/helper-plugin-utils" "^7.8.0"
404 |
405 | "@babel/plugin-syntax-private-property-in-object@^7.14.5":
406 | version "7.14.5"
407 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad"
408 | integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==
409 | dependencies:
410 | "@babel/helper-plugin-utils" "^7.14.5"
411 |
412 | "@babel/plugin-syntax-top-level-await@^7.14.5":
413 | version "7.14.5"
414 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c"
415 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==
416 | dependencies:
417 | "@babel/helper-plugin-utils" "^7.14.5"
418 |
419 | "@babel/plugin-syntax-unicode-sets-regex@^7.18.6":
420 | version "7.18.6"
421 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357"
422 | integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==
423 | dependencies:
424 | "@babel/helper-create-regexp-features-plugin" "^7.18.6"
425 | "@babel/helper-plugin-utils" "^7.18.6"
426 |
427 | "@babel/plugin-transform-arrow-functions@^7.23.3":
428 | version "7.23.3"
429 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz#94c6dcfd731af90f27a79509f9ab7fb2120fc38b"
430 | integrity sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==
431 | dependencies:
432 | "@babel/helper-plugin-utils" "^7.22.5"
433 |
434 | "@babel/plugin-transform-async-generator-functions@^7.23.9":
435 | version "7.23.9"
436 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.9.tgz#9adaeb66fc9634a586c5df139c6240d41ed801ce"
437 | integrity sha512-8Q3veQEDGe14dTYuwagbRtwxQDnytyg1JFu4/HwEMETeofocrB0U0ejBJIXoeG/t2oXZ8kzCyI0ZZfbT80VFNQ==
438 | dependencies:
439 | "@babel/helper-environment-visitor" "^7.22.20"
440 | "@babel/helper-plugin-utils" "^7.22.5"
441 | "@babel/helper-remap-async-to-generator" "^7.22.20"
442 | "@babel/plugin-syntax-async-generators" "^7.8.4"
443 |
444 | "@babel/plugin-transform-async-to-generator@^7.23.3":
445 | version "7.23.3"
446 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz#d1f513c7a8a506d43f47df2bf25f9254b0b051fa"
447 | integrity sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==
448 | dependencies:
449 | "@babel/helper-module-imports" "^7.22.15"
450 | "@babel/helper-plugin-utils" "^7.22.5"
451 | "@babel/helper-remap-async-to-generator" "^7.22.20"
452 |
453 | "@babel/plugin-transform-block-scoped-functions@^7.23.3":
454 | version "7.23.3"
455 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz#fe1177d715fb569663095e04f3598525d98e8c77"
456 | integrity sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==
457 | dependencies:
458 | "@babel/helper-plugin-utils" "^7.22.5"
459 |
460 | "@babel/plugin-transform-block-scoping@^7.23.4":
461 | version "7.23.4"
462 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz#b2d38589531c6c80fbe25e6b58e763622d2d3cf5"
463 | integrity sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==
464 | dependencies:
465 | "@babel/helper-plugin-utils" "^7.22.5"
466 |
467 | "@babel/plugin-transform-class-properties@^7.23.3":
468 | version "7.23.3"
469 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz#35c377db11ca92a785a718b6aa4e3ed1eb65dc48"
470 | integrity sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==
471 | dependencies:
472 | "@babel/helper-create-class-features-plugin" "^7.22.15"
473 | "@babel/helper-plugin-utils" "^7.22.5"
474 |
475 | "@babel/plugin-transform-class-static-block@^7.23.4":
476 | version "7.23.4"
477 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz#2a202c8787a8964dd11dfcedf994d36bfc844ab5"
478 | integrity sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==
479 | dependencies:
480 | "@babel/helper-create-class-features-plugin" "^7.22.15"
481 | "@babel/helper-plugin-utils" "^7.22.5"
482 | "@babel/plugin-syntax-class-static-block" "^7.14.5"
483 |
484 | "@babel/plugin-transform-classes@^7.23.8":
485 | version "7.23.8"
486 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.8.tgz#d08ae096c240347badd68cdf1b6d1624a6435d92"
487 | integrity sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==
488 | dependencies:
489 | "@babel/helper-annotate-as-pure" "^7.22.5"
490 | "@babel/helper-compilation-targets" "^7.23.6"
491 | "@babel/helper-environment-visitor" "^7.22.20"
492 | "@babel/helper-function-name" "^7.23.0"
493 | "@babel/helper-plugin-utils" "^7.22.5"
494 | "@babel/helper-replace-supers" "^7.22.20"
495 | "@babel/helper-split-export-declaration" "^7.22.6"
496 | globals "^11.1.0"
497 |
498 | "@babel/plugin-transform-computed-properties@^7.23.3":
499 | version "7.23.3"
500 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz#652e69561fcc9d2b50ba4f7ac7f60dcf65e86474"
501 | integrity sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==
502 | dependencies:
503 | "@babel/helper-plugin-utils" "^7.22.5"
504 | "@babel/template" "^7.22.15"
505 |
506 | "@babel/plugin-transform-destructuring@^7.23.3":
507 | version "7.23.3"
508 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz#8c9ee68228b12ae3dff986e56ed1ba4f3c446311"
509 | integrity sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==
510 | dependencies:
511 | "@babel/helper-plugin-utils" "^7.22.5"
512 |
513 | "@babel/plugin-transform-dotall-regex@^7.23.3":
514 | version "7.23.3"
515 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz#3f7af6054882ede89c378d0cf889b854a993da50"
516 | integrity sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==
517 | dependencies:
518 | "@babel/helper-create-regexp-features-plugin" "^7.22.15"
519 | "@babel/helper-plugin-utils" "^7.22.5"
520 |
521 | "@babel/plugin-transform-duplicate-keys@^7.23.3":
522 | version "7.23.3"
523 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz#664706ca0a5dfe8d066537f99032fc1dc8b720ce"
524 | integrity sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==
525 | dependencies:
526 | "@babel/helper-plugin-utils" "^7.22.5"
527 |
528 | "@babel/plugin-transform-dynamic-import@^7.23.4":
529 | version "7.23.4"
530 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz#c7629e7254011ac3630d47d7f34ddd40ca535143"
531 | integrity sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==
532 | dependencies:
533 | "@babel/helper-plugin-utils" "^7.22.5"
534 | "@babel/plugin-syntax-dynamic-import" "^7.8.3"
535 |
536 | "@babel/plugin-transform-exponentiation-operator@^7.23.3":
537 | version "7.23.3"
538 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz#ea0d978f6b9232ba4722f3dbecdd18f450babd18"
539 | integrity sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==
540 | dependencies:
541 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15"
542 | "@babel/helper-plugin-utils" "^7.22.5"
543 |
544 | "@babel/plugin-transform-export-namespace-from@^7.23.4":
545 | version "7.23.4"
546 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz#084c7b25e9a5c8271e987a08cf85807b80283191"
547 | integrity sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==
548 | dependencies:
549 | "@babel/helper-plugin-utils" "^7.22.5"
550 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
551 |
552 | "@babel/plugin-transform-for-of@^7.23.6":
553 | version "7.23.6"
554 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz#81c37e24171b37b370ba6aaffa7ac86bcb46f94e"
555 | integrity sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==
556 | dependencies:
557 | "@babel/helper-plugin-utils" "^7.22.5"
558 | "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
559 |
560 | "@babel/plugin-transform-function-name@^7.23.3":
561 | version "7.23.3"
562 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz#8f424fcd862bf84cb9a1a6b42bc2f47ed630f8dc"
563 | integrity sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==
564 | dependencies:
565 | "@babel/helper-compilation-targets" "^7.22.15"
566 | "@babel/helper-function-name" "^7.23.0"
567 | "@babel/helper-plugin-utils" "^7.22.5"
568 |
569 | "@babel/plugin-transform-json-strings@^7.23.4":
570 | version "7.23.4"
571 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz#a871d9b6bd171976efad2e43e694c961ffa3714d"
572 | integrity sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==
573 | dependencies:
574 | "@babel/helper-plugin-utils" "^7.22.5"
575 | "@babel/plugin-syntax-json-strings" "^7.8.3"
576 |
577 | "@babel/plugin-transform-literals@^7.23.3":
578 | version "7.23.3"
579 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz#8214665f00506ead73de157eba233e7381f3beb4"
580 | integrity sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==
581 | dependencies:
582 | "@babel/helper-plugin-utils" "^7.22.5"
583 |
584 | "@babel/plugin-transform-logical-assignment-operators@^7.23.4":
585 | version "7.23.4"
586 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz#e599f82c51d55fac725f62ce55d3a0886279ecb5"
587 | integrity sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==
588 | dependencies:
589 | "@babel/helper-plugin-utils" "^7.22.5"
590 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
591 |
592 | "@babel/plugin-transform-member-expression-literals@^7.23.3":
593 | version "7.23.3"
594 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz#e37b3f0502289f477ac0e776b05a833d853cabcc"
595 | integrity sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==
596 | dependencies:
597 | "@babel/helper-plugin-utils" "^7.22.5"
598 |
599 | "@babel/plugin-transform-modules-amd@^7.23.3":
600 | version "7.23.3"
601 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz#e19b55436a1416829df0a1afc495deedfae17f7d"
602 | integrity sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==
603 | dependencies:
604 | "@babel/helper-module-transforms" "^7.23.3"
605 | "@babel/helper-plugin-utils" "^7.22.5"
606 |
607 | "@babel/plugin-transform-modules-commonjs@^7.23.3":
608 | version "7.23.3"
609 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz#661ae831b9577e52be57dd8356b734f9700b53b4"
610 | integrity sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==
611 | dependencies:
612 | "@babel/helper-module-transforms" "^7.23.3"
613 | "@babel/helper-plugin-utils" "^7.22.5"
614 | "@babel/helper-simple-access" "^7.22.5"
615 |
616 | "@babel/plugin-transform-modules-systemjs@^7.23.9":
617 | version "7.23.9"
618 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.9.tgz#105d3ed46e4a21d257f83a2f9e2ee4203ceda6be"
619 | integrity sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==
620 | dependencies:
621 | "@babel/helper-hoist-variables" "^7.22.5"
622 | "@babel/helper-module-transforms" "^7.23.3"
623 | "@babel/helper-plugin-utils" "^7.22.5"
624 | "@babel/helper-validator-identifier" "^7.22.20"
625 |
626 | "@babel/plugin-transform-modules-umd@^7.23.3":
627 | version "7.23.3"
628 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz#5d4395fccd071dfefe6585a4411aa7d6b7d769e9"
629 | integrity sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==
630 | dependencies:
631 | "@babel/helper-module-transforms" "^7.23.3"
632 | "@babel/helper-plugin-utils" "^7.22.5"
633 |
634 | "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5":
635 | version "7.22.5"
636 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f"
637 | integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==
638 | dependencies:
639 | "@babel/helper-create-regexp-features-plugin" "^7.22.5"
640 | "@babel/helper-plugin-utils" "^7.22.5"
641 |
642 | "@babel/plugin-transform-new-target@^7.23.3":
643 | version "7.23.3"
644 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz#5491bb78ed6ac87e990957cea367eab781c4d980"
645 | integrity sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==
646 | dependencies:
647 | "@babel/helper-plugin-utils" "^7.22.5"
648 |
649 | "@babel/plugin-transform-nullish-coalescing-operator@^7.23.4":
650 | version "7.23.4"
651 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz#45556aad123fc6e52189ea749e33ce090637346e"
652 | integrity sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==
653 | dependencies:
654 | "@babel/helper-plugin-utils" "^7.22.5"
655 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
656 |
657 | "@babel/plugin-transform-numeric-separator@^7.23.4":
658 | version "7.23.4"
659 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz#03d08e3691e405804ecdd19dd278a40cca531f29"
660 | integrity sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==
661 | dependencies:
662 | "@babel/helper-plugin-utils" "^7.22.5"
663 | "@babel/plugin-syntax-numeric-separator" "^7.10.4"
664 |
665 | "@babel/plugin-transform-object-rest-spread@^7.24.0":
666 | version "7.24.0"
667 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz#7b836ad0088fdded2420ce96d4e1d3ed78b71df1"
668 | integrity sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==
669 | dependencies:
670 | "@babel/compat-data" "^7.23.5"
671 | "@babel/helper-compilation-targets" "^7.23.6"
672 | "@babel/helper-plugin-utils" "^7.24.0"
673 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
674 | "@babel/plugin-transform-parameters" "^7.23.3"
675 |
676 | "@babel/plugin-transform-object-super@^7.23.3":
677 | version "7.23.3"
678 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz#81fdb636dcb306dd2e4e8fd80db5b2362ed2ebcd"
679 | integrity sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==
680 | dependencies:
681 | "@babel/helper-plugin-utils" "^7.22.5"
682 | "@babel/helper-replace-supers" "^7.22.20"
683 |
684 | "@babel/plugin-transform-optional-catch-binding@^7.23.4":
685 | version "7.23.4"
686 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz#318066de6dacce7d92fa244ae475aa8d91778017"
687 | integrity sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==
688 | dependencies:
689 | "@babel/helper-plugin-utils" "^7.22.5"
690 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
691 |
692 | "@babel/plugin-transform-optional-chaining@^7.23.3", "@babel/plugin-transform-optional-chaining@^7.23.4":
693 | version "7.23.4"
694 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz#6acf61203bdfc4de9d4e52e64490aeb3e52bd017"
695 | integrity sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==
696 | dependencies:
697 | "@babel/helper-plugin-utils" "^7.22.5"
698 | "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
699 | "@babel/plugin-syntax-optional-chaining" "^7.8.3"
700 |
701 | "@babel/plugin-transform-parameters@^7.23.3":
702 | version "7.23.3"
703 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz#83ef5d1baf4b1072fa6e54b2b0999a7b2527e2af"
704 | integrity sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==
705 | dependencies:
706 | "@babel/helper-plugin-utils" "^7.22.5"
707 |
708 | "@babel/plugin-transform-private-methods@^7.23.3":
709 | version "7.23.3"
710 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz#b2d7a3c97e278bfe59137a978d53b2c2e038c0e4"
711 | integrity sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==
712 | dependencies:
713 | "@babel/helper-create-class-features-plugin" "^7.22.15"
714 | "@babel/helper-plugin-utils" "^7.22.5"
715 |
716 | "@babel/plugin-transform-private-property-in-object@^7.23.4":
717 | version "7.23.4"
718 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz#3ec711d05d6608fd173d9b8de39872d8dbf68bf5"
719 | integrity sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==
720 | dependencies:
721 | "@babel/helper-annotate-as-pure" "^7.22.5"
722 | "@babel/helper-create-class-features-plugin" "^7.22.15"
723 | "@babel/helper-plugin-utils" "^7.22.5"
724 | "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
725 |
726 | "@babel/plugin-transform-property-literals@^7.23.3":
727 | version "7.23.3"
728 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz#54518f14ac4755d22b92162e4a852d308a560875"
729 | integrity sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==
730 | dependencies:
731 | "@babel/helper-plugin-utils" "^7.22.5"
732 |
733 | "@babel/plugin-transform-regenerator@^7.23.3":
734 | version "7.23.3"
735 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz#141afd4a2057298602069fce7f2dc5173e6c561c"
736 | integrity sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==
737 | dependencies:
738 | "@babel/helper-plugin-utils" "^7.22.5"
739 | regenerator-transform "^0.15.2"
740 |
741 | "@babel/plugin-transform-reserved-words@^7.23.3":
742 | version "7.23.3"
743 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz#4130dcee12bd3dd5705c587947eb715da12efac8"
744 | integrity sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==
745 | dependencies:
746 | "@babel/helper-plugin-utils" "^7.22.5"
747 |
748 | "@babel/plugin-transform-shorthand-properties@^7.23.3":
749 | version "7.23.3"
750 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz#97d82a39b0e0c24f8a981568a8ed851745f59210"
751 | integrity sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==
752 | dependencies:
753 | "@babel/helper-plugin-utils" "^7.22.5"
754 |
755 | "@babel/plugin-transform-spread@^7.23.3":
756 | version "7.23.3"
757 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz#41d17aacb12bde55168403c6f2d6bdca563d362c"
758 | integrity sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==
759 | dependencies:
760 | "@babel/helper-plugin-utils" "^7.22.5"
761 | "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5"
762 |
763 | "@babel/plugin-transform-sticky-regex@^7.23.3":
764 | version "7.23.3"
765 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz#dec45588ab4a723cb579c609b294a3d1bd22ff04"
766 | integrity sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==
767 | dependencies:
768 | "@babel/helper-plugin-utils" "^7.22.5"
769 |
770 | "@babel/plugin-transform-template-literals@^7.23.3":
771 | version "7.23.3"
772 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz#5f0f028eb14e50b5d0f76be57f90045757539d07"
773 | integrity sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==
774 | dependencies:
775 | "@babel/helper-plugin-utils" "^7.22.5"
776 |
777 | "@babel/plugin-transform-typeof-symbol@^7.23.3":
778 | version "7.23.3"
779 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz#9dfab97acc87495c0c449014eb9c547d8966bca4"
780 | integrity sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==
781 | dependencies:
782 | "@babel/helper-plugin-utils" "^7.22.5"
783 |
784 | "@babel/plugin-transform-unicode-escapes@^7.23.3":
785 | version "7.23.3"
786 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz#1f66d16cab01fab98d784867d24f70c1ca65b925"
787 | integrity sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==
788 | dependencies:
789 | "@babel/helper-plugin-utils" "^7.22.5"
790 |
791 | "@babel/plugin-transform-unicode-property-regex@^7.23.3":
792 | version "7.23.3"
793 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz#19e234129e5ffa7205010feec0d94c251083d7ad"
794 | integrity sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==
795 | dependencies:
796 | "@babel/helper-create-regexp-features-plugin" "^7.22.15"
797 | "@babel/helper-plugin-utils" "^7.22.5"
798 |
799 | "@babel/plugin-transform-unicode-regex@^7.23.3":
800 | version "7.23.3"
801 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz#26897708d8f42654ca4ce1b73e96140fbad879dc"
802 | integrity sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==
803 | dependencies:
804 | "@babel/helper-create-regexp-features-plugin" "^7.22.15"
805 | "@babel/helper-plugin-utils" "^7.22.5"
806 |
807 | "@babel/plugin-transform-unicode-sets-regex@^7.23.3":
808 | version "7.23.3"
809 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz#4fb6f0a719c2c5859d11f6b55a050cc987f3799e"
810 | integrity sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==
811 | dependencies:
812 | "@babel/helper-create-regexp-features-plugin" "^7.22.15"
813 | "@babel/helper-plugin-utils" "^7.22.5"
814 |
815 | "@babel/preset-env@^7.24.0":
816 | version "7.24.0"
817 | resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.0.tgz#11536a7f4b977294f0bdfad780f01a8ac8e183fc"
818 | integrity sha512-ZxPEzV9IgvGn73iK0E6VB9/95Nd7aMFpbE0l8KQFDG70cOV9IxRP7Y2FUPmlK0v6ImlLqYX50iuZ3ZTVhOF2lA==
819 | dependencies:
820 | "@babel/compat-data" "^7.23.5"
821 | "@babel/helper-compilation-targets" "^7.23.6"
822 | "@babel/helper-plugin-utils" "^7.24.0"
823 | "@babel/helper-validator-option" "^7.23.5"
824 | "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3"
825 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3"
826 | "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.7"
827 | "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2"
828 | "@babel/plugin-syntax-async-generators" "^7.8.4"
829 | "@babel/plugin-syntax-class-properties" "^7.12.13"
830 | "@babel/plugin-syntax-class-static-block" "^7.14.5"
831 | "@babel/plugin-syntax-dynamic-import" "^7.8.3"
832 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3"
833 | "@babel/plugin-syntax-import-assertions" "^7.23.3"
834 | "@babel/plugin-syntax-import-attributes" "^7.23.3"
835 | "@babel/plugin-syntax-import-meta" "^7.10.4"
836 | "@babel/plugin-syntax-json-strings" "^7.8.3"
837 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4"
838 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3"
839 | "@babel/plugin-syntax-numeric-separator" "^7.10.4"
840 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
841 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
842 | "@babel/plugin-syntax-optional-chaining" "^7.8.3"
843 | "@babel/plugin-syntax-private-property-in-object" "^7.14.5"
844 | "@babel/plugin-syntax-top-level-await" "^7.14.5"
845 | "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6"
846 | "@babel/plugin-transform-arrow-functions" "^7.23.3"
847 | "@babel/plugin-transform-async-generator-functions" "^7.23.9"
848 | "@babel/plugin-transform-async-to-generator" "^7.23.3"
849 | "@babel/plugin-transform-block-scoped-functions" "^7.23.3"
850 | "@babel/plugin-transform-block-scoping" "^7.23.4"
851 | "@babel/plugin-transform-class-properties" "^7.23.3"
852 | "@babel/plugin-transform-class-static-block" "^7.23.4"
853 | "@babel/plugin-transform-classes" "^7.23.8"
854 | "@babel/plugin-transform-computed-properties" "^7.23.3"
855 | "@babel/plugin-transform-destructuring" "^7.23.3"
856 | "@babel/plugin-transform-dotall-regex" "^7.23.3"
857 | "@babel/plugin-transform-duplicate-keys" "^7.23.3"
858 | "@babel/plugin-transform-dynamic-import" "^7.23.4"
859 | "@babel/plugin-transform-exponentiation-operator" "^7.23.3"
860 | "@babel/plugin-transform-export-namespace-from" "^7.23.4"
861 | "@babel/plugin-transform-for-of" "^7.23.6"
862 | "@babel/plugin-transform-function-name" "^7.23.3"
863 | "@babel/plugin-transform-json-strings" "^7.23.4"
864 | "@babel/plugin-transform-literals" "^7.23.3"
865 | "@babel/plugin-transform-logical-assignment-operators" "^7.23.4"
866 | "@babel/plugin-transform-member-expression-literals" "^7.23.3"
867 | "@babel/plugin-transform-modules-amd" "^7.23.3"
868 | "@babel/plugin-transform-modules-commonjs" "^7.23.3"
869 | "@babel/plugin-transform-modules-systemjs" "^7.23.9"
870 | "@babel/plugin-transform-modules-umd" "^7.23.3"
871 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5"
872 | "@babel/plugin-transform-new-target" "^7.23.3"
873 | "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.4"
874 | "@babel/plugin-transform-numeric-separator" "^7.23.4"
875 | "@babel/plugin-transform-object-rest-spread" "^7.24.0"
876 | "@babel/plugin-transform-object-super" "^7.23.3"
877 | "@babel/plugin-transform-optional-catch-binding" "^7.23.4"
878 | "@babel/plugin-transform-optional-chaining" "^7.23.4"
879 | "@babel/plugin-transform-parameters" "^7.23.3"
880 | "@babel/plugin-transform-private-methods" "^7.23.3"
881 | "@babel/plugin-transform-private-property-in-object" "^7.23.4"
882 | "@babel/plugin-transform-property-literals" "^7.23.3"
883 | "@babel/plugin-transform-regenerator" "^7.23.3"
884 | "@babel/plugin-transform-reserved-words" "^7.23.3"
885 | "@babel/plugin-transform-shorthand-properties" "^7.23.3"
886 | "@babel/plugin-transform-spread" "^7.23.3"
887 | "@babel/plugin-transform-sticky-regex" "^7.23.3"
888 | "@babel/plugin-transform-template-literals" "^7.23.3"
889 | "@babel/plugin-transform-typeof-symbol" "^7.23.3"
890 | "@babel/plugin-transform-unicode-escapes" "^7.23.3"
891 | "@babel/plugin-transform-unicode-property-regex" "^7.23.3"
892 | "@babel/plugin-transform-unicode-regex" "^7.23.3"
893 | "@babel/plugin-transform-unicode-sets-regex" "^7.23.3"
894 | "@babel/preset-modules" "0.1.6-no-external-plugins"
895 | babel-plugin-polyfill-corejs2 "^0.4.8"
896 | babel-plugin-polyfill-corejs3 "^0.9.0"
897 | babel-plugin-polyfill-regenerator "^0.5.5"
898 | core-js-compat "^3.31.0"
899 | semver "^6.3.1"
900 |
901 | "@babel/preset-modules@0.1.6-no-external-plugins":
902 | version "0.1.6-no-external-plugins"
903 | resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a"
904 | integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==
905 | dependencies:
906 | "@babel/helper-plugin-utils" "^7.0.0"
907 | "@babel/types" "^7.4.4"
908 | esutils "^2.0.2"
909 |
910 | "@babel/regjsgen@^0.8.0":
911 | version "0.8.0"
912 | resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
913 | integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
914 |
915 | "@babel/runtime@^7.8.4":
916 | version "7.20.7"
917 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd"
918 | integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==
919 | dependencies:
920 | regenerator-runtime "^0.13.11"
921 |
922 | "@babel/template@^7.22.15", "@babel/template@^7.24.0":
923 | version "7.24.0"
924 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
925 | integrity sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==
926 | dependencies:
927 | "@babel/code-frame" "^7.23.5"
928 | "@babel/parser" "^7.24.0"
929 | "@babel/types" "^7.24.0"
930 |
931 | "@babel/traverse@^7.24.0":
932 | version "7.24.0"
933 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.0.tgz#4a408fbf364ff73135c714a2ab46a5eab2831b1e"
934 | integrity sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==
935 | dependencies:
936 | "@babel/code-frame" "^7.23.5"
937 | "@babel/generator" "^7.23.6"
938 | "@babel/helper-environment-visitor" "^7.22.20"
939 | "@babel/helper-function-name" "^7.23.0"
940 | "@babel/helper-hoist-variables" "^7.22.5"
941 | "@babel/helper-split-export-declaration" "^7.22.6"
942 | "@babel/parser" "^7.24.0"
943 | "@babel/types" "^7.24.0"
944 | debug "^4.3.1"
945 | globals "^11.1.0"
946 |
947 | "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.23.6", "@babel/types@^7.24.0", "@babel/types@^7.4.4":
948 | version "7.24.0"
949 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.0.tgz#3b951f435a92e7333eba05b7566fd297960ea1bf"
950 | integrity sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==
951 | dependencies:
952 | "@babel/helper-string-parser" "^7.23.4"
953 | "@babel/helper-validator-identifier" "^7.22.20"
954 | to-fast-properties "^2.0.0"
955 |
956 | "@discoveryjs/json-ext@^0.5.0":
957 | version "0.5.7"
958 | resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
959 | integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
960 |
961 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2", "@jridgewell/gen-mapping@^0.3.5":
962 | version "0.3.5"
963 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36"
964 | integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==
965 | dependencies:
966 | "@jridgewell/set-array" "^1.2.1"
967 | "@jridgewell/sourcemap-codec" "^1.4.10"
968 | "@jridgewell/trace-mapping" "^0.3.24"
969 |
970 | "@jridgewell/resolve-uri@^3.1.0":
971 | version "3.1.1"
972 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
973 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
974 |
975 | "@jridgewell/set-array@^1.2.1":
976 | version "1.2.1"
977 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280"
978 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==
979 |
980 | "@jridgewell/source-map@^0.3.3":
981 | version "0.3.5"
982 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91"
983 | integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==
984 | dependencies:
985 | "@jridgewell/gen-mapping" "^0.3.0"
986 | "@jridgewell/trace-mapping" "^0.3.9"
987 |
988 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14":
989 | version "1.4.15"
990 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
991 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
992 |
993 | "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.9":
994 | version "0.3.25"
995 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0"
996 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==
997 | dependencies:
998 | "@jridgewell/resolve-uri" "^3.1.0"
999 | "@jridgewell/sourcemap-codec" "^1.4.14"
1000 |
1001 | "@types/estree@^1.0.5":
1002 | version "1.0.5"
1003 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
1004 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
1005 |
1006 | "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9":
1007 | version "7.0.15"
1008 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841"
1009 | integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==
1010 |
1011 | "@types/node@*":
1012 | version "20.11.25"
1013 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.25.tgz#0f50d62f274e54dd7a49f7704cc16bfbcccaf49f"
1014 | integrity sha512-TBHyJxk2b7HceLVGFcpAUjsa5zIdsPWlR6XHfyGzd0SFu+/NFgQgMAl96MSDZgQDvJAvV6BKsFOrt6zIL09JDw==
1015 | dependencies:
1016 | undici-types "~5.26.4"
1017 |
1018 | "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1":
1019 | version "1.12.1"
1020 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb"
1021 | integrity sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==
1022 | dependencies:
1023 | "@webassemblyjs/helper-numbers" "1.11.6"
1024 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
1025 |
1026 | "@webassemblyjs/floating-point-hex-parser@1.11.6":
1027 | version "1.11.6"
1028 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431"
1029 | integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==
1030 |
1031 | "@webassemblyjs/helper-api-error@1.11.6":
1032 | version "1.11.6"
1033 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768"
1034 | integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==
1035 |
1036 | "@webassemblyjs/helper-buffer@1.12.1":
1037 | version "1.12.1"
1038 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz#6df20d272ea5439bf20ab3492b7fb70e9bfcb3f6"
1039 | integrity sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==
1040 |
1041 | "@webassemblyjs/helper-numbers@1.11.6":
1042 | version "1.11.6"
1043 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5"
1044 | integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==
1045 | dependencies:
1046 | "@webassemblyjs/floating-point-hex-parser" "1.11.6"
1047 | "@webassemblyjs/helper-api-error" "1.11.6"
1048 | "@xtuc/long" "4.2.2"
1049 |
1050 | "@webassemblyjs/helper-wasm-bytecode@1.11.6":
1051 | version "1.11.6"
1052 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9"
1053 | integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==
1054 |
1055 | "@webassemblyjs/helper-wasm-section@1.12.1":
1056 | version "1.12.1"
1057 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz#3da623233ae1a60409b509a52ade9bc22a37f7bf"
1058 | integrity sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==
1059 | dependencies:
1060 | "@webassemblyjs/ast" "1.12.1"
1061 | "@webassemblyjs/helper-buffer" "1.12.1"
1062 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
1063 | "@webassemblyjs/wasm-gen" "1.12.1"
1064 |
1065 | "@webassemblyjs/ieee754@1.11.6":
1066 | version "1.11.6"
1067 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a"
1068 | integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==
1069 | dependencies:
1070 | "@xtuc/ieee754" "^1.2.0"
1071 |
1072 | "@webassemblyjs/leb128@1.11.6":
1073 | version "1.11.6"
1074 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7"
1075 | integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==
1076 | dependencies:
1077 | "@xtuc/long" "4.2.2"
1078 |
1079 | "@webassemblyjs/utf8@1.11.6":
1080 | version "1.11.6"
1081 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a"
1082 | integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==
1083 |
1084 | "@webassemblyjs/wasm-edit@^1.12.1":
1085 | version "1.12.1"
1086 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz#9f9f3ff52a14c980939be0ef9d5df9ebc678ae3b"
1087 | integrity sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==
1088 | dependencies:
1089 | "@webassemblyjs/ast" "1.12.1"
1090 | "@webassemblyjs/helper-buffer" "1.12.1"
1091 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
1092 | "@webassemblyjs/helper-wasm-section" "1.12.1"
1093 | "@webassemblyjs/wasm-gen" "1.12.1"
1094 | "@webassemblyjs/wasm-opt" "1.12.1"
1095 | "@webassemblyjs/wasm-parser" "1.12.1"
1096 | "@webassemblyjs/wast-printer" "1.12.1"
1097 |
1098 | "@webassemblyjs/wasm-gen@1.12.1":
1099 | version "1.12.1"
1100 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz#a6520601da1b5700448273666a71ad0a45d78547"
1101 | integrity sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==
1102 | dependencies:
1103 | "@webassemblyjs/ast" "1.12.1"
1104 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
1105 | "@webassemblyjs/ieee754" "1.11.6"
1106 | "@webassemblyjs/leb128" "1.11.6"
1107 | "@webassemblyjs/utf8" "1.11.6"
1108 |
1109 | "@webassemblyjs/wasm-opt@1.12.1":
1110 | version "1.12.1"
1111 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz#9e6e81475dfcfb62dab574ac2dda38226c232bc5"
1112 | integrity sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==
1113 | dependencies:
1114 | "@webassemblyjs/ast" "1.12.1"
1115 | "@webassemblyjs/helper-buffer" "1.12.1"
1116 | "@webassemblyjs/wasm-gen" "1.12.1"
1117 | "@webassemblyjs/wasm-parser" "1.12.1"
1118 |
1119 | "@webassemblyjs/wasm-parser@1.12.1", "@webassemblyjs/wasm-parser@^1.12.1":
1120 | version "1.12.1"
1121 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz#c47acb90e6f083391e3fa61d113650eea1e95937"
1122 | integrity sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==
1123 | dependencies:
1124 | "@webassemblyjs/ast" "1.12.1"
1125 | "@webassemblyjs/helper-api-error" "1.11.6"
1126 | "@webassemblyjs/helper-wasm-bytecode" "1.11.6"
1127 | "@webassemblyjs/ieee754" "1.11.6"
1128 | "@webassemblyjs/leb128" "1.11.6"
1129 | "@webassemblyjs/utf8" "1.11.6"
1130 |
1131 | "@webassemblyjs/wast-printer@1.12.1":
1132 | version "1.12.1"
1133 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz#bcecf661d7d1abdaf989d8341a4833e33e2b31ac"
1134 | integrity sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==
1135 | dependencies:
1136 | "@webassemblyjs/ast" "1.12.1"
1137 | "@xtuc/long" "4.2.2"
1138 |
1139 | "@webpack-cli/configtest@^2.1.1":
1140 | version "2.1.1"
1141 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-2.1.1.tgz#3b2f852e91dac6e3b85fb2a314fb8bef46d94646"
1142 | integrity sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==
1143 |
1144 | "@webpack-cli/info@^2.0.2":
1145 | version "2.0.2"
1146 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-2.0.2.tgz#cc3fbf22efeb88ff62310cf885c5b09f44ae0fdd"
1147 | integrity sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==
1148 |
1149 | "@webpack-cli/serve@^2.0.5":
1150 | version "2.0.5"
1151 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
1152 | integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
1153 |
1154 | "@xtuc/ieee754@^1.2.0":
1155 | version "1.2.0"
1156 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790"
1157 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==
1158 |
1159 | "@xtuc/long@4.2.2":
1160 | version "4.2.2"
1161 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d"
1162 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==
1163 |
1164 | acorn-import-attributes@^1.9.5:
1165 | version "1.9.5"
1166 | resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef"
1167 | integrity sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==
1168 |
1169 | acorn@^8.7.1, acorn@^8.8.2:
1170 | version "8.11.3"
1171 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
1172 | integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
1173 |
1174 | ajv-formats@^2.1.1:
1175 | version "2.1.1"
1176 | resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
1177 | integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
1178 | dependencies:
1179 | ajv "^8.0.0"
1180 |
1181 | ajv-keywords@^3.5.2:
1182 | version "3.5.2"
1183 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d"
1184 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==
1185 |
1186 | ajv-keywords@^5.1.0:
1187 | version "5.1.0"
1188 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16"
1189 | integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==
1190 | dependencies:
1191 | fast-deep-equal "^3.1.3"
1192 |
1193 | ajv@^6.12.5:
1194 | version "6.12.6"
1195 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
1196 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
1197 | dependencies:
1198 | fast-deep-equal "^3.1.1"
1199 | fast-json-stable-stringify "^2.0.0"
1200 | json-schema-traverse "^0.4.1"
1201 | uri-js "^4.2.2"
1202 |
1203 | ajv@^8.0.0, ajv@^8.9.0:
1204 | version "8.12.0"
1205 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
1206 | integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
1207 | dependencies:
1208 | fast-deep-equal "^3.1.1"
1209 | json-schema-traverse "^1.0.0"
1210 | require-from-string "^2.0.2"
1211 | uri-js "^4.2.2"
1212 |
1213 | ansi-styles@^3.2.1:
1214 | version "3.2.1"
1215 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
1216 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
1217 | dependencies:
1218 | color-convert "^1.9.0"
1219 |
1220 | babel-loader@^9.1.3:
1221 | version "9.1.3"
1222 | resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a"
1223 | integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==
1224 | dependencies:
1225 | find-cache-dir "^4.0.0"
1226 | schema-utils "^4.0.0"
1227 |
1228 | babel-plugin-polyfill-corejs2@^0.4.8:
1229 | version "0.4.9"
1230 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.9.tgz#15a285f681e1c5495093d85f1cf72bd1cbed41ce"
1231 | integrity sha512-BXIWIaO3MewbXWdJdIGDWZurv5OGJlFNo7oy20DpB3kWDVJLcY2NRypRsRUbRe5KMqSNLuOGnWTFQQtY5MAsRw==
1232 | dependencies:
1233 | "@babel/compat-data" "^7.22.6"
1234 | "@babel/helper-define-polyfill-provider" "^0.6.0"
1235 | semver "^6.3.1"
1236 |
1237 | babel-plugin-polyfill-corejs3@^0.9.0:
1238 | version "0.9.0"
1239 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.9.0.tgz#9eea32349d94556c2ad3ab9b82ebb27d4bf04a81"
1240 | integrity sha512-7nZPG1uzK2Ymhy/NbaOWTg3uibM2BmGASS4vHS4szRZAIR8R6GwA/xAujpdrXU5iyklrimWnLWU+BLF9suPTqg==
1241 | dependencies:
1242 | "@babel/helper-define-polyfill-provider" "^0.5.0"
1243 | core-js-compat "^3.34.0"
1244 |
1245 | babel-plugin-polyfill-regenerator@^0.5.5:
1246 | version "0.5.5"
1247 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.5.tgz#8b0c8fc6434239e5d7b8a9d1f832bb2b0310f06a"
1248 | integrity sha512-OJGYZlhLqBh2DDHeqAxWB1XIvr49CxiJ2gIt61/PU55CQK4Z58OzMqjDe1zwQdQk+rBYsRc+1rJmdajM3gimHg==
1249 | dependencies:
1250 | "@babel/helper-define-polyfill-provider" "^0.5.0"
1251 |
1252 | browserslist@^4.21.10, browserslist@^4.22.2, browserslist@^4.22.3:
1253 | version "4.23.0"
1254 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.0.tgz#8f3acc2bbe73af7213399430890f86c63a5674ab"
1255 | integrity sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==
1256 | dependencies:
1257 | caniuse-lite "^1.0.30001587"
1258 | electron-to-chromium "^1.4.668"
1259 | node-releases "^2.0.14"
1260 | update-browserslist-db "^1.0.13"
1261 |
1262 | buffer-from@^1.0.0:
1263 | version "1.1.2"
1264 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
1265 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
1266 |
1267 | caniuse-lite@^1.0.30001587:
1268 | version "1.0.30001596"
1269 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001596.tgz#da06b79c3d9c3d9958eb307aa832ac68ead79bee"
1270 | integrity sha512-zpkZ+kEr6We7w63ORkoJ2pOfBwBkY/bJrG/UZ90qNb45Isblu8wzDgevEOrRL1r9dWayHjYiiyCMEXPn4DweGQ==
1271 |
1272 | chalk@^2.4.2:
1273 | version "2.4.2"
1274 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
1275 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
1276 | dependencies:
1277 | ansi-styles "^3.2.1"
1278 | escape-string-regexp "^1.0.5"
1279 | supports-color "^5.3.0"
1280 |
1281 | chrome-trace-event@^1.0.2:
1282 | version "1.0.3"
1283 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
1284 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==
1285 |
1286 | clone-deep@^4.0.1:
1287 | version "4.0.1"
1288 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387"
1289 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==
1290 | dependencies:
1291 | is-plain-object "^2.0.4"
1292 | kind-of "^6.0.2"
1293 | shallow-clone "^3.0.0"
1294 |
1295 | color-convert@^1.9.0:
1296 | version "1.9.3"
1297 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
1298 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
1299 | dependencies:
1300 | color-name "1.1.3"
1301 |
1302 | color-name@1.1.3:
1303 | version "1.1.3"
1304 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
1305 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
1306 |
1307 | colorette@^2.0.14:
1308 | version "2.0.20"
1309 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a"
1310 | integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==
1311 |
1312 | commander@^10.0.1:
1313 | version "10.0.1"
1314 | resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
1315 | integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
1316 |
1317 | commander@^2.20.0:
1318 | version "2.20.3"
1319 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
1320 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
1321 |
1322 | common-path-prefix@^3.0.0:
1323 | version "3.0.0"
1324 | resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0"
1325 | integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==
1326 |
1327 | convert-source-map@^2.0.0:
1328 | version "2.0.0"
1329 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a"
1330 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==
1331 |
1332 | core-js-compat@^3.31.0, core-js-compat@^3.34.0:
1333 | version "3.36.0"
1334 | resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.36.0.tgz#087679119bc2fdbdefad0d45d8e5d307d45ba190"
1335 | integrity sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==
1336 | dependencies:
1337 | browserslist "^4.22.3"
1338 |
1339 | cross-spawn@^7.0.3:
1340 | version "7.0.6"
1341 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
1342 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
1343 | dependencies:
1344 | path-key "^3.1.0"
1345 | shebang-command "^2.0.0"
1346 | which "^2.0.1"
1347 |
1348 | debug@^4.1.0, debug@^4.1.1, debug@^4.3.1:
1349 | version "4.3.4"
1350 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
1351 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
1352 | dependencies:
1353 | ms "2.1.2"
1354 |
1355 | electron-to-chromium@^1.4.668:
1356 | version "1.4.699"
1357 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.699.tgz#dd53c939e13da64e94b341e563f0a3011b4ef0e9"
1358 | integrity sha512-I7q3BbQi6e4tJJN5CRcyvxhK0iJb34TV8eJQcgh+fR2fQ8miMgZcEInckCo1U9exDHbfz7DLDnFn8oqH/VcRKw==
1359 |
1360 | enhanced-resolve@^5.17.1:
1361 | version "5.17.1"
1362 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz#67bfbbcc2f81d511be77d686a90267ef7f898a15"
1363 | integrity sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==
1364 | dependencies:
1365 | graceful-fs "^4.2.4"
1366 | tapable "^2.2.0"
1367 |
1368 | envinfo@^7.7.3:
1369 | version "7.11.1"
1370 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.11.1.tgz#2ffef77591057081b0129a8fd8cf6118da1b94e1"
1371 | integrity sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==
1372 |
1373 | es-module-lexer@^1.2.1:
1374 | version "1.4.1"
1375 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.4.1.tgz#41ea21b43908fe6a287ffcbe4300f790555331f5"
1376 | integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==
1377 |
1378 | escalade@^3.1.1:
1379 | version "3.1.1"
1380 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
1381 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
1382 |
1383 | escape-string-regexp@^1.0.5:
1384 | version "1.0.5"
1385 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1386 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
1387 |
1388 | eslint-scope@5.1.1:
1389 | version "5.1.1"
1390 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
1391 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
1392 | dependencies:
1393 | esrecurse "^4.3.0"
1394 | estraverse "^4.1.1"
1395 |
1396 | esrecurse@^4.3.0:
1397 | version "4.3.0"
1398 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
1399 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
1400 | dependencies:
1401 | estraverse "^5.2.0"
1402 |
1403 | estraverse@^4.1.1:
1404 | version "4.3.0"
1405 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
1406 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
1407 |
1408 | estraverse@^5.2.0:
1409 | version "5.3.0"
1410 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
1411 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
1412 |
1413 | esutils@^2.0.2:
1414 | version "2.0.3"
1415 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1416 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1417 |
1418 | events@^3.2.0:
1419 | version "3.3.0"
1420 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
1421 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
1422 |
1423 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
1424 | version "3.1.3"
1425 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1426 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1427 |
1428 | fast-json-stable-stringify@^2.0.0:
1429 | version "2.1.0"
1430 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
1431 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
1432 |
1433 | fastest-levenshtein@^1.0.12:
1434 | version "1.0.16"
1435 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5"
1436 | integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==
1437 |
1438 | find-cache-dir@^4.0.0:
1439 | version "4.0.0"
1440 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-4.0.0.tgz#a30ee0448f81a3990708f6453633c733e2f6eec2"
1441 | integrity sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==
1442 | dependencies:
1443 | common-path-prefix "^3.0.0"
1444 | pkg-dir "^7.0.0"
1445 |
1446 | find-up@^4.0.0:
1447 | version "4.1.0"
1448 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
1449 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
1450 | dependencies:
1451 | locate-path "^5.0.0"
1452 | path-exists "^4.0.0"
1453 |
1454 | find-up@^6.3.0:
1455 | version "6.3.0"
1456 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790"
1457 | integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==
1458 | dependencies:
1459 | locate-path "^7.1.0"
1460 | path-exists "^5.0.0"
1461 |
1462 | flat@^5.0.2:
1463 | version "5.0.2"
1464 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
1465 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
1466 |
1467 | function-bind@^1.1.2:
1468 | version "1.1.2"
1469 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
1470 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
1471 |
1472 | gensync@^1.0.0-beta.2:
1473 | version "1.0.0-beta.2"
1474 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
1475 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==
1476 |
1477 | glob-to-regexp@^0.4.1:
1478 | version "0.4.1"
1479 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
1480 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
1481 |
1482 | globals@^11.1.0:
1483 | version "11.12.0"
1484 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
1485 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
1486 |
1487 | graceful-fs@^4.1.2, graceful-fs@^4.2.11, graceful-fs@^4.2.4:
1488 | version "4.2.11"
1489 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
1490 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
1491 |
1492 | has-flag@^3.0.0:
1493 | version "3.0.0"
1494 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1495 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
1496 |
1497 | has-flag@^4.0.0:
1498 | version "4.0.0"
1499 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1500 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1501 |
1502 | hasown@^2.0.0:
1503 | version "2.0.2"
1504 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
1505 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
1506 | dependencies:
1507 | function-bind "^1.1.2"
1508 |
1509 | import-local@^3.0.2:
1510 | version "3.1.0"
1511 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
1512 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
1513 | dependencies:
1514 | pkg-dir "^4.2.0"
1515 | resolve-cwd "^3.0.0"
1516 |
1517 | interpret@^3.1.1:
1518 | version "3.1.1"
1519 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4"
1520 | integrity sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==
1521 |
1522 | is-core-module@^2.13.0:
1523 | version "2.13.1"
1524 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384"
1525 | integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
1526 | dependencies:
1527 | hasown "^2.0.0"
1528 |
1529 | is-plain-object@^2.0.4:
1530 | version "2.0.4"
1531 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677"
1532 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==
1533 | dependencies:
1534 | isobject "^3.0.1"
1535 |
1536 | isexe@^2.0.0:
1537 | version "2.0.0"
1538 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1539 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1540 |
1541 | isobject@^3.0.1:
1542 | version "3.0.1"
1543 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
1544 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==
1545 |
1546 | jest-worker@^27.4.5:
1547 | version "27.5.1"
1548 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
1549 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==
1550 | dependencies:
1551 | "@types/node" "*"
1552 | merge-stream "^2.0.0"
1553 | supports-color "^8.0.0"
1554 |
1555 | js-tokens@^4.0.0:
1556 | version "4.0.0"
1557 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1558 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1559 |
1560 | jsesc@^2.5.1:
1561 | version "2.5.2"
1562 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
1563 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==
1564 |
1565 | jsesc@~0.5.0:
1566 | version "0.5.0"
1567 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
1568 | integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==
1569 |
1570 | json-parse-even-better-errors@^2.3.1:
1571 | version "2.3.1"
1572 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
1573 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1574 |
1575 | json-schema-traverse@^0.4.1:
1576 | version "0.4.1"
1577 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1578 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1579 |
1580 | json-schema-traverse@^1.0.0:
1581 | version "1.0.0"
1582 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
1583 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
1584 |
1585 | json5@^2.2.3:
1586 | version "2.2.3"
1587 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283"
1588 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==
1589 |
1590 | kind-of@^6.0.2:
1591 | version "6.0.3"
1592 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
1593 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
1594 |
1595 | loader-runner@^4.2.0:
1596 | version "4.3.0"
1597 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1"
1598 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==
1599 |
1600 | locate-path@^5.0.0:
1601 | version "5.0.0"
1602 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
1603 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
1604 | dependencies:
1605 | p-locate "^4.1.0"
1606 |
1607 | locate-path@^7.1.0:
1608 | version "7.2.0"
1609 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.2.0.tgz#69cb1779bd90b35ab1e771e1f2f89a202c2a8a8a"
1610 | integrity sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==
1611 | dependencies:
1612 | p-locate "^6.0.0"
1613 |
1614 | lodash.debounce@^4.0.8:
1615 | version "4.0.8"
1616 | resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
1617 | integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==
1618 |
1619 | lru-cache@^5.1.1:
1620 | version "5.1.1"
1621 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920"
1622 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==
1623 | dependencies:
1624 | yallist "^3.0.2"
1625 |
1626 | merge-stream@^2.0.0:
1627 | version "2.0.0"
1628 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1629 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1630 |
1631 | mime-db@1.52.0:
1632 | version "1.52.0"
1633 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
1634 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
1635 |
1636 | mime-types@^2.1.27:
1637 | version "2.1.35"
1638 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
1639 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
1640 | dependencies:
1641 | mime-db "1.52.0"
1642 |
1643 | ms@2.1.2:
1644 | version "2.1.2"
1645 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
1646 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1647 |
1648 | neo-async@^2.6.2:
1649 | version "2.6.2"
1650 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
1651 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==
1652 |
1653 | node-releases@^2.0.14:
1654 | version "2.0.14"
1655 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b"
1656 | integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==
1657 |
1658 | ot-diff@^1.1.1:
1659 | version "1.1.1"
1660 | resolved "https://registry.yarnpkg.com/ot-diff/-/ot-diff-1.1.1.tgz#c587f17d15efd0d9170a5d38e606368a57643ad4"
1661 | integrity sha512-Nf6vUblD0oKsMJA+dKbQ1njBjU/BHZjj9A00IdHdk7AjvXk42U/7uhiCZMuUr/OIbft5YZn9cUwFXG4E8oLjIg==
1662 |
1663 | ot-text-unicode@^4.0.0:
1664 | version "4.0.0"
1665 | resolved "https://registry.yarnpkg.com/ot-text-unicode/-/ot-text-unicode-4.0.0.tgz#778a327535c81ed265b36ebe1bd677f31bae1e32"
1666 | integrity sha512-W7ZLU8QXesY2wagYFv47zErXud3E93FGImmSGJsQnBzE+idcPPyo2u2KMilIrTwBh4pbCizy71qRjmmV6aDhcQ==
1667 | dependencies:
1668 | unicount "1.1"
1669 |
1670 | p-limit@^2.2.0:
1671 | version "2.3.0"
1672 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1673 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1674 | dependencies:
1675 | p-try "^2.0.0"
1676 |
1677 | p-limit@^4.0.0:
1678 | version "4.0.0"
1679 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644"
1680 | integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==
1681 | dependencies:
1682 | yocto-queue "^1.0.0"
1683 |
1684 | p-locate@^4.1.0:
1685 | version "4.1.0"
1686 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1687 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1688 | dependencies:
1689 | p-limit "^2.2.0"
1690 |
1691 | p-locate@^6.0.0:
1692 | version "6.0.0"
1693 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f"
1694 | integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==
1695 | dependencies:
1696 | p-limit "^4.0.0"
1697 |
1698 | p-try@^2.0.0:
1699 | version "2.2.0"
1700 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1701 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1702 |
1703 | path-exists@^4.0.0:
1704 | version "4.0.0"
1705 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1706 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1707 |
1708 | path-exists@^5.0.0:
1709 | version "5.0.0"
1710 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7"
1711 | integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==
1712 |
1713 | path-key@^3.1.0:
1714 | version "3.1.1"
1715 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1716 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1717 |
1718 | path-parse@^1.0.7:
1719 | version "1.0.7"
1720 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1721 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1722 |
1723 | picocolors@^1.0.0:
1724 | version "1.0.0"
1725 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
1726 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
1727 |
1728 | pkg-dir@^4.2.0:
1729 | version "4.2.0"
1730 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1731 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1732 | dependencies:
1733 | find-up "^4.0.0"
1734 |
1735 | pkg-dir@^7.0.0:
1736 | version "7.0.0"
1737 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-7.0.0.tgz#8f0c08d6df4476756c5ff29b3282d0bab7517d11"
1738 | integrity sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==
1739 | dependencies:
1740 | find-up "^6.3.0"
1741 |
1742 | punycode@^2.1.0:
1743 | version "2.3.1"
1744 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
1745 | integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
1746 |
1747 | randombytes@^2.1.0:
1748 | version "2.1.0"
1749 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
1750 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
1751 | dependencies:
1752 | safe-buffer "^5.1.0"
1753 |
1754 | rechoir@^0.8.0:
1755 | version "0.8.0"
1756 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22"
1757 | integrity sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==
1758 | dependencies:
1759 | resolve "^1.20.0"
1760 |
1761 | regenerate-unicode-properties@^10.1.0:
1762 | version "10.1.0"
1763 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c"
1764 | integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==
1765 | dependencies:
1766 | regenerate "^1.4.2"
1767 |
1768 | regenerate@^1.4.2:
1769 | version "1.4.2"
1770 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a"
1771 | integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==
1772 |
1773 | regenerator-runtime@^0.13.11:
1774 | version "0.13.11"
1775 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
1776 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
1777 |
1778 | regenerator-transform@^0.15.2:
1779 | version "0.15.2"
1780 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4"
1781 | integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==
1782 | dependencies:
1783 | "@babel/runtime" "^7.8.4"
1784 |
1785 | regexpu-core@^5.3.1:
1786 | version "5.3.2"
1787 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b"
1788 | integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==
1789 | dependencies:
1790 | "@babel/regjsgen" "^0.8.0"
1791 | regenerate "^1.4.2"
1792 | regenerate-unicode-properties "^10.1.0"
1793 | regjsparser "^0.9.1"
1794 | unicode-match-property-ecmascript "^2.0.0"
1795 | unicode-match-property-value-ecmascript "^2.1.0"
1796 |
1797 | regjsparser@^0.9.1:
1798 | version "0.9.1"
1799 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709"
1800 | integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==
1801 | dependencies:
1802 | jsesc "~0.5.0"
1803 |
1804 | require-from-string@^2.0.2:
1805 | version "2.0.2"
1806 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
1807 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
1808 |
1809 | resolve-cwd@^3.0.0:
1810 | version "3.0.0"
1811 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
1812 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
1813 | dependencies:
1814 | resolve-from "^5.0.0"
1815 |
1816 | resolve-from@^5.0.0:
1817 | version "5.0.0"
1818 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
1819 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
1820 |
1821 | resolve@^1.14.2, resolve@^1.20.0:
1822 | version "1.22.8"
1823 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d"
1824 | integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==
1825 | dependencies:
1826 | is-core-module "^2.13.0"
1827 | path-parse "^1.0.7"
1828 | supports-preserve-symlinks-flag "^1.0.0"
1829 |
1830 | safe-buffer@^5.1.0:
1831 | version "5.2.1"
1832 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
1833 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1834 |
1835 | schema-utils@^3.1.1, schema-utils@^3.2.0:
1836 | version "3.3.0"
1837 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe"
1838 | integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==
1839 | dependencies:
1840 | "@types/json-schema" "^7.0.8"
1841 | ajv "^6.12.5"
1842 | ajv-keywords "^3.5.2"
1843 |
1844 | schema-utils@^4.0.0:
1845 | version "4.2.0"
1846 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b"
1847 | integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==
1848 | dependencies:
1849 | "@types/json-schema" "^7.0.9"
1850 | ajv "^8.9.0"
1851 | ajv-formats "^2.1.1"
1852 | ajv-keywords "^5.1.0"
1853 |
1854 | semver@^6.3.1:
1855 | version "6.3.1"
1856 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
1857 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
1858 |
1859 | serialize-javascript@^6.0.1:
1860 | version "6.0.2"
1861 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2"
1862 | integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==
1863 | dependencies:
1864 | randombytes "^2.1.0"
1865 |
1866 | shallow-clone@^3.0.0:
1867 | version "3.0.1"
1868 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
1869 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==
1870 | dependencies:
1871 | kind-of "^6.0.2"
1872 |
1873 | shebang-command@^2.0.0:
1874 | version "2.0.0"
1875 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
1876 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
1877 | dependencies:
1878 | shebang-regex "^3.0.0"
1879 |
1880 | shebang-regex@^3.0.0:
1881 | version "3.0.0"
1882 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
1883 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
1884 |
1885 | source-map-support@~0.5.20:
1886 | version "0.5.21"
1887 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
1888 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
1889 | dependencies:
1890 | buffer-from "^1.0.0"
1891 | source-map "^0.6.0"
1892 |
1893 | source-map@^0.6.0:
1894 | version "0.6.1"
1895 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
1896 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1897 |
1898 | supports-color@^5.3.0:
1899 | version "5.5.0"
1900 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1901 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1902 | dependencies:
1903 | has-flag "^3.0.0"
1904 |
1905 | supports-color@^8.0.0:
1906 | version "8.1.1"
1907 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
1908 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
1909 | dependencies:
1910 | has-flag "^4.0.0"
1911 |
1912 | supports-preserve-symlinks-flag@^1.0.0:
1913 | version "1.0.0"
1914 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
1915 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
1916 |
1917 | tapable@^2.1.1, tapable@^2.2.0:
1918 | version "2.2.1"
1919 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
1920 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
1921 |
1922 | terser-webpack-plugin@^5.3.10:
1923 | version "5.3.10"
1924 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz#904f4c9193c6fd2a03f693a2150c62a92f40d199"
1925 | integrity sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==
1926 | dependencies:
1927 | "@jridgewell/trace-mapping" "^0.3.20"
1928 | jest-worker "^27.4.5"
1929 | schema-utils "^3.1.1"
1930 | serialize-javascript "^6.0.1"
1931 | terser "^5.26.0"
1932 |
1933 | terser@^5.26.0:
1934 | version "5.29.1"
1935 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.29.1.tgz#44e58045b70c09792ba14bfb7b4e14ca8755b9fa"
1936 | integrity sha512-lZQ/fyaIGxsbGxApKmoPTODIzELy3++mXhS5hOqaAWZjQtpq/hFHAc+rm29NND1rYRxRWKcjuARNwULNXa5RtQ==
1937 | dependencies:
1938 | "@jridgewell/source-map" "^0.3.3"
1939 | acorn "^8.8.2"
1940 | commander "^2.20.0"
1941 | source-map-support "~0.5.20"
1942 |
1943 | to-fast-properties@^2.0.0:
1944 | version "2.0.0"
1945 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
1946 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==
1947 |
1948 | undici-types@~5.26.4:
1949 | version "5.26.5"
1950 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
1951 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
1952 |
1953 | unicode-canonical-property-names-ecmascript@^2.0.0:
1954 | version "2.0.0"
1955 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc"
1956 | integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==
1957 |
1958 | unicode-match-property-ecmascript@^2.0.0:
1959 | version "2.0.0"
1960 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3"
1961 | integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==
1962 | dependencies:
1963 | unicode-canonical-property-names-ecmascript "^2.0.0"
1964 | unicode-property-aliases-ecmascript "^2.0.0"
1965 |
1966 | unicode-match-property-value-ecmascript@^2.1.0:
1967 | version "2.1.0"
1968 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0"
1969 | integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==
1970 |
1971 | unicode-property-aliases-ecmascript@^2.0.0:
1972 | version "2.1.0"
1973 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd"
1974 | integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==
1975 |
1976 | unicount@1.1:
1977 | version "1.1.0"
1978 | resolved "https://registry.yarnpkg.com/unicount/-/unicount-1.1.0.tgz#396a3df661c19675a93861ac878c2c9c0042abf0"
1979 | integrity sha512-RlwWt1ywVW4WErPGAVHw/rIuJ2+MxvTME0siJ6lk9zBhpDfExDbspe6SRlWT3qU6AucNjotPl9qAJRVjP7guCQ==
1980 |
1981 | update-browserslist-db@^1.0.13:
1982 | version "1.0.13"
1983 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4"
1984 | integrity sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==
1985 | dependencies:
1986 | escalade "^3.1.1"
1987 | picocolors "^1.0.0"
1988 |
1989 | uri-js@^4.2.2:
1990 | version "4.4.1"
1991 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
1992 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
1993 | dependencies:
1994 | punycode "^2.1.0"
1995 |
1996 | watchpack@^2.4.1:
1997 | version "2.4.2"
1998 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da"
1999 | integrity sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==
2000 | dependencies:
2001 | glob-to-regexp "^0.4.1"
2002 | graceful-fs "^4.1.2"
2003 |
2004 | webpack-cli@^5.1.4:
2005 | version "5.1.4"
2006 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-5.1.4.tgz#c8e046ba7eaae4911d7e71e2b25b776fcc35759b"
2007 | integrity sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==
2008 | dependencies:
2009 | "@discoveryjs/json-ext" "^0.5.0"
2010 | "@webpack-cli/configtest" "^2.1.1"
2011 | "@webpack-cli/info" "^2.0.2"
2012 | "@webpack-cli/serve" "^2.0.5"
2013 | colorette "^2.0.14"
2014 | commander "^10.0.1"
2015 | cross-spawn "^7.0.3"
2016 | envinfo "^7.7.3"
2017 | fastest-levenshtein "^1.0.12"
2018 | import-local "^3.0.2"
2019 | interpret "^3.1.1"
2020 | rechoir "^0.8.0"
2021 | webpack-merge "^5.7.3"
2022 |
2023 | webpack-merge@^5.7.3:
2024 | version "5.10.0"
2025 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.10.0.tgz#a3ad5d773241e9c682803abf628d4cd62b8a4177"
2026 | integrity sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==
2027 | dependencies:
2028 | clone-deep "^4.0.1"
2029 | flat "^5.0.2"
2030 | wildcard "^2.0.0"
2031 |
2032 | webpack-sources@^3.2.3:
2033 | version "3.2.3"
2034 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde"
2035 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==
2036 |
2037 | webpack@^5.94.0:
2038 | version "5.94.0"
2039 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.94.0.tgz#77a6089c716e7ab90c1c67574a28da518a20970f"
2040 | integrity sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==
2041 | dependencies:
2042 | "@types/estree" "^1.0.5"
2043 | "@webassemblyjs/ast" "^1.12.1"
2044 | "@webassemblyjs/wasm-edit" "^1.12.1"
2045 | "@webassemblyjs/wasm-parser" "^1.12.1"
2046 | acorn "^8.7.1"
2047 | acorn-import-attributes "^1.9.5"
2048 | browserslist "^4.21.10"
2049 | chrome-trace-event "^1.0.2"
2050 | enhanced-resolve "^5.17.1"
2051 | es-module-lexer "^1.2.1"
2052 | eslint-scope "5.1.1"
2053 | events "^3.2.0"
2054 | glob-to-regexp "^0.4.1"
2055 | graceful-fs "^4.2.11"
2056 | json-parse-even-better-errors "^2.3.1"
2057 | loader-runner "^4.2.0"
2058 | mime-types "^2.1.27"
2059 | neo-async "^2.6.2"
2060 | schema-utils "^3.2.0"
2061 | tapable "^2.1.1"
2062 | terser-webpack-plugin "^5.3.10"
2063 | watchpack "^2.4.1"
2064 | webpack-sources "^3.2.3"
2065 |
2066 | which@^2.0.1:
2067 | version "2.0.2"
2068 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2069 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2070 | dependencies:
2071 | isexe "^2.0.0"
2072 |
2073 | wildcard@^2.0.0:
2074 | version "2.0.1"
2075 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67"
2076 | integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==
2077 |
2078 | yallist@^3.0.2:
2079 | version "3.1.1"
2080 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
2081 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==
2082 |
2083 | yocto-queue@^1.0.0:
2084 | version "1.0.0"
2085 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251"
2086 | integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==
2087 |
--------------------------------------------------------------------------------
/test/javascripts/acceptance/composer-test.js:
--------------------------------------------------------------------------------
1 | import { click, visit } from "@ember/test-helpers";
2 | import { test } from "qunit";
3 | import { acceptance } from "discourse/tests/helpers/qunit-helpers";
4 |
5 | ["enabled", "disabled"].forEach((postStreamMode) => {
6 | acceptance(
7 | `Discourse Shared Edits | Composer (glimmer_post_stream_mode = ${postStreamMode})`,
8 | function (needs) {
9 | needs.settings({
10 | glimmer_post_stream_mode: postStreamMode,
11 | });
12 | needs.user();
13 |
14 | needs.pretender((server, helper) => {
15 | server.put("/shared_edits/p/398/enable.json", () =>
16 | helper.response({ success: "OK" })
17 | );
18 |
19 | server.get("/shared_edits/p/398", () =>
20 | helper.response({
21 | raw: "the latest iteration of the post",
22 | version: 2,
23 | })
24 | );
25 |
26 | server.put("/shared_edits/p/398/commit", () =>
27 | helper.response({ success: "OK" })
28 | );
29 | });
30 |
31 | test("edit the first post", async function (assert) {
32 | await visit("/t/internationalization-localization/280");
33 |
34 | await click(".show-more-actions");
35 | await click(".show-post-admin-menu");
36 | await click(".admin-toggle-shared-edits");
37 |
38 | await click(".shared-edit");
39 |
40 | assert
41 | .dom(".d-editor-input")
42 | .hasValue(
43 | "the latest iteration of the post",
44 | "populates the input with the post text"
45 | );
46 |
47 | await click(".leave-shared-edit .btn-primary");
48 | });
49 | }
50 | );
51 | });
52 |
--------------------------------------------------------------------------------
/translator.yml:
--------------------------------------------------------------------------------
1 | # Configuration file for discourse-translator-bot
2 |
3 | files:
4 | - source_path: config/locales/client.en.yml
5 | destination_path: client.yml
6 | - source_path: config/locales/server.en.yml
7 | destination_path: server.yml
8 |
--------------------------------------------------------------------------------