├── .editorconfig ├── LICENSE.txt ├── README.md ├── composer.json ├── extend.php ├── js ├── admin.ts ├── dist │ ├── admin.js │ └── admin.js.map ├── package.json ├── tsconfig.json ├── webpack.config.js └── yarn.lock ├── resources └── locale │ └── en.yml └── src ├── Console ├── FlushCommand.php ├── ImportAllCommand.php ├── ImportCommand.php └── ModifiedImportTrait.php ├── Extend └── Scout.php ├── FlarumEngineManager.php ├── FlarumSearchableScope.php ├── Job ├── MakeSearchable.php ├── RemoveFromSearch.php └── SerializesAndRestoresWrappedModelIdentifiers.php ├── Listener └── DeletingDiscussion.php ├── MakeSearchableDisable.php ├── ScoutModelWrapper.php ├── ScoutServiceProvider.php ├── ScoutStatic.php ├── Search ├── DiscussionGambit.php ├── ImprovedGambitManager.php └── UserGambit.php └── helpers.php /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | [*] 3 | end_of_line = lf 4 | charset = utf-8 5 | trim_trailing_whitespace = true 6 | insert_final_newline = true 7 | indent_style = space 8 | indent_size = 4 9 | [*.md] 10 | indent_size = 2 11 | trim_trailing_whitespace = false 12 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022-2023 Clark Winkelmann 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Scout Search for Flarum 2 | 3 | [![MIT license](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/clarkwinkelmann/flarum-ext-scout/blob/master/LICENSE.md) [![Latest Stable Version](https://img.shields.io/packagist/v/clarkwinkelmann/flarum-ext-scout.svg)](https://packagist.org/packages/clarkwinkelmann/flarum-ext-scout) [![Total Downloads](https://img.shields.io/packagist/dt/clarkwinkelmann/flarum-ext-scout.svg)](https://packagist.org/packages/clarkwinkelmann/flarum-ext-scout) [![Donate](https://img.shields.io/badge/paypal-donate-yellow.svg)](https://www.paypal.me/clarkwinkelmann) 4 | 5 | Integrates [Laravel Scout](https://laravel.com/docs/9.x/scout) with [Flarum](https://flarum.org/) discussion and user search. 6 | 7 | Just like with Laravel, the data is automatically synced with the search index every time a model is updated in Flarum. 8 | You only need to manually import data when you enable the extension (see commands below). 9 | 10 | The external search driver is used server-side to filter down the MySQL results, so it should still be compatible with every other extension and search gambits. 11 | 12 | [Algolia](https://www.algolia.com/) and [Meilisearch](https://www.meilisearch.com/) drivers are included in the extension. 13 | [TNTSearch](https://github.com/teamtnt/tntsearch) is supported but requires the manual installation of an additional package. 14 | The Scout database and collection drivers cannot be used (they would be worst than Flarum's built-in database search). 15 | 16 | See below for the specific requirements and configuration of each driver. 17 | 18 | While only discussions and users are searchable in Flarum, this implementation also uses a `posts` search index which is merged with discussion search results in a similar way to the Flarum native search. 19 | The discussion result sort currently prioritize best post matching because I have not found a way to merge the match score of discussions and posts indices. 20 | 21 | All CLI commands from Scout are available, with an additional special "import all" command: 22 | 23 | ``` 24 | php flarum scout:import-all Import all Flarum models into the search index 25 | (a shortcut to scout:import with every searchable class known to Flarum) 26 | php flarum scout:flush {model} Flush all of the model's records from the index 27 | php flarum scout:import {model} Import the given model into the search index 28 | php flarum scout:index {name} Create an index (generally not needed) 29 | php flarum scout:delete-index {name} Delete an index (generally not needed) 30 | ``` 31 | 32 | ### Algolia 33 | 34 | The Algolia driver requires an account on the eponymous cloud service. 35 | 36 | ### Meilisearch 37 | 38 | The Meilisearch driver requires a running Meilisearch server instance. 39 | The server can be hosted anywhere as long as it can be reached over the network. 40 | By default, the extension attempts to connect to a server at `127.0.0.1:7700`. 41 | 42 | If you are not running the latest Meilisearch version you might need to explicitly install an older version of the SDK. 43 | Likewise, if you are regularly running `composer update` on all your dependencies, you should also add an explicit requirement for the Meilisearch SDK in your `composer.json` because the extension requires `*` which might jump to a newer Meilisearch SDK version as soon as it comes out. 44 | 45 | To install and lock the current latest version: 46 | 47 | composer require meilisearch/meilisearch-php 48 | 49 | Unfortunately Meilisearch doesn't seem to advertise which specific version of the Composer package is compatible with each server version. 50 | You can find the list of releases at https://packagist.org/packages/meilisearch/meilisearch-php 51 | 52 | Once you know which version you need, you can lock it, for example to install the older 0.23: 53 | 54 | composer require meilisearch/meilisearch-php:"0.23.*" 55 | 56 | The only settings for Meilisearch are **Host** and **Key**. 57 | Everything else is configured in the Meilisearch server itself. 58 | 59 | Even if you don't configure the **Default Results Limit** value and use Meilisearch, the extension will automatically set it to 200 for you because the default for Meilisearch (20) is extremely low and result in only 2 pages of results at best. 60 | 61 | ### TNTSearch 62 | 63 | The TNTSearch library requires the sqlite PHP extension, therefore it's not included by default with Scout. 64 | 65 | To install it, make sure you have the sqlite PHP extension enabled for both command line and webserver and run: 66 | 67 | composer require teamtnt/laravel-scout-tntsearch-driver 68 | 69 | TNTSearch uses local sqlite databases for each index. 70 | The databases are stored in `/storage/tntsearch` which must be writable. 71 | 72 | The following settings are exposed. 73 | What each setting does isn't entirely clear, TNTSearch own documentation doesn't offer much guidance. 74 | 75 | - **Max Docs**: this likely impacts how many results Flarum will be able to show for a query 76 | - **Fuziness** (on/off): seems to be the typos/variation matching 77 | - **Fuzziness Levenshtein Distance** 78 | - **Fuzziness Prefix Length**: no idea what it does 79 | - **Fuzziness Max Expansions** no idea what it does 80 | 81 | **As You Type** and **Search Boolean** are hard-coded to enabled, though they don't seem to work as described in TNTSearch documentation. 82 | 83 | ## Installation 84 | 85 | > This extension is still experimental. Please test on a staging server first. 86 | > I have not tested Algolia personally yet, but from feedback it seems to be working. 87 | 88 | composer require clarkwinkelmann/flarum-ext-scout 89 | 90 | ## Supported extensions and fields 91 | 92 | This list is not exhaustive. 93 | If you added support for Scout in your extension, let me know so I can update this list. 94 | 95 | ### Discussions 96 | 97 | When searching for discussions via Flarum's search feature, the fields for **Posts** are also queried. 98 | 99 | - **Title**: support built into Scout. 100 | - **Formulaire Discussion Fields**: supported since Formulaire 1.8 (guest-accessible forms only). 101 | 102 | ### Posts 103 | 104 | - **Content**: support built into Scout, the value used is a plain text version of the output HTML without any tag. Some information like link URLs, image URLs and image alts are therefore not indexed. This might be changed in a future version. 105 | 106 | ### Users 107 | 108 | - **Display Name**: support built into Scout. 109 | - **Username**: support built into Scout. 110 | - **FoF Bio**: support built into Scout (not in FoF Bio itself). 111 | - **Formulaire Profile Fields**: supported since Formulaire 1.8 (guest-accessible forms only). 112 | 113 | Email is intentionally not searchable because there's currently no mechanism that would prevent regular users from using that feature to leak email. 114 | 115 | ### Formulaire 116 | 117 | Forms and Submissions are optionally indexed via Scout. See [Formulaire documentation](https://kilowhat.net/flarum/extensions/formulaire#scout-integration) for details. 118 | 119 | ## Developers 120 | 121 | ### Extend the search index of existing models 122 | 123 | Use the extender to register your attributes, similar to extending Flarum's serializers. 124 | 125 | Additionally, you should register an event listener that's triggered when your attribute value changes. 126 | 127 | ```php 128 | listenSaved(SubtitleRenamed::class, function (SubtitleRenamed $event) { 136 | return $event->discussion; 137 | }) 138 | ->attributes(function (Discussion $discussion): array { 139 | return [ 140 | 'subtitle' => $discussion->subtitle, 141 | ]; 142 | }), 143 | ]; 144 | ``` 145 | 146 | If registering an event listener is not an option, you can also call the update code manually after you change the value: 147 | 148 | ```php 149 | subtitle = 'New value'; 158 | $discussion->save(); 159 | 160 | (new ScoutModelWrapper($discussion))->scoutObserverSaved(); 161 | ``` 162 | 163 | If you are modifying a Flarum model outside the original store/edit/delete handlers, don't forget to trigger Flarum events (like `Started` and `Deleted` for discussions) so that Scout can sync your changes. 164 | 165 | ### Add your own search engine 166 | 167 | Any search engine extending `Laravel\Scout\Engines\Engine` that works with Laravel Scout should be compatible with this Flarum implementation. 168 | 169 | There's currently no extender to connect a new engine from an external package. 170 | You will likely need to override the `EngineManager` by forking this extension or by using a container binding. 171 | 172 | ### Make your own models searchable 173 | 174 | Due to the constraints of making Scout optional and extendable, the Scout API for model configuration and retrieval contains a number of changes compared to Laravel. 175 | Where possible, similar names have been kept for the concepts, even if they now happen through extenders or new global methods. 176 | 177 | Because there's no way to add the `Searchable` trait to Flarum (or extensions) Eloquent models without making Scout a requirement, the trait is not used. 178 | Do not add the `Searchable` trait to your Eloquent models, even if you have the ability to edit the model source code! 179 | 180 | This documentation mentions 2 kind of models, "real" models are the Eloquent models from Flarum or extensions that don't have the `Searchable` trait, like `Flarum\User\User`. 181 | "wrapped" models is a special feature of this extension where a "real" model is wrapped into a special model that gives it the `Searchable` abilities. 182 | Generally, "wrapped" models will be transparently used under the hood by this extension without any special action required by the programmers. 183 | If you wish to manually obtain a "wrapped" model to call specific Scout methods on it, you can wrap it with `new ScoutModelWrapper($model)`. 184 | 185 | The built-in Scout model observer is not used, instead Flarum events are used to trigger index updates. 186 | 187 | Summary of the differences with Laravel: 188 | 189 | The Support/Eloquent collection methods work with arrays of either real or wrapped models: 190 | 191 | - `Illuminate\Support\Collection::searchable()`: works identically. 192 | - `Illuminate\Support\Collection::unsearchable()`: works identically. 193 | 194 | The query builder methods/scopes work on real models: 195 | 196 | - `Eloquent\Builder::searchable()`: works identically 197 | - `Eloquent\Builder::unsearchable()`: works identically 198 | 199 | The scout methods aren't available on real models but all the useful methods have alternative means to be called: 200 | 201 | - `Model::shouldBeSearchable()`: Use Extender to modify. 202 | - `Model::searchIndexShouldBeUpdated()`: Not customizable. Could be added to Extender later. 203 | - `Model::search()`: Not available. Use Builder directly. 204 | - `Model::makeAllSearchable()`: Use `ScoutStatic::makeAllSearchable()` instead. 205 | - `Model::makeAllSearchableUsing()`: Not customizable. Could be added to Extender later. 206 | - `Model::searchable()`: Not available. Manually wrap in collection or `ScoutModelWrapper` to call. 207 | - `Model::removeAllFromSearch()`: Use `ScoutStatic::removeAllFromSearch()` instead. 208 | - `Model::unsearchable()`: Not available. Manually wrap in collection or `ScoutModelWrapper` to call. 209 | - `Model::wasSearchableBeforeUpdate()`: Not customizable. Could be added to Extender later. 210 | - `Model::wasSearchableBeforeDelete()`: Not customizable. Could be added to Extender later. 211 | - `Model::getScoutModelsByIds()`: Should be usable via wrapper, but I recommend not using it. 212 | - `Model::queryScoutModelsByIds()`: Should be usable via wrapper, but I recommend not using it. 213 | - `Model::enableSearchSyncing()`: Not available. 214 | - `Model::disableSearchSyncing()`: Not available. 215 | - `Model::withoutSyncingToSearch()`: Not available. 216 | - `Model::searchableAs()`: Not customizable. Prefix can be changed in extension settings. 217 | - `Model::toSearchableArray()`: Use Extender to modify. 218 | - `Model::syncWithSearchUsing()`: Not customizable. Could be added to Extender later. 219 | - `Model::syncWithSearchUsingQueue()`: Not customizable. Could be added to Extender later. 220 | - `Model::pushSoftDeleteMetadata()`: Not available. 221 | - `Model::scoutMetadata()`: Not customizable. Could be added to Extender later. 222 | - `Model::withScoutMetadata()`: Not available. 223 | - `Model::getScoutKey()`: Not customizable. Could be added to Extender later. 224 | - `Model::getScoutKeyName()`: Not customizable. Could be added to Extender later. 225 | - `Model::usesSoftDelete()`: Not available. 226 | 227 | The `Scout::` static object is not used: 228 | 229 | - `Laravel\Scout\Scout::$makeSearchableJob`: Not customizable. 230 | - `Laravel\Scout\Scout::$removeFromSearchJob`: Not customizable. 231 | - `Laravel\Scout\Scout::makeSearchableUsing()`: Not customizable. 232 | - `Laravel\Scout\Scout::removeFromSearchUsing()`: Not customizable. 233 | 234 | A new object not part of the original Scout is offered for static methods: 235 | 236 | - `ScoutStatic::makeAllSearchable(string $modelClass)`: trigger indexing or every model of the given class. 237 | - `ScoutStatic::removeAllFromSearch(string $modelClass)`: trigger de-indexing or every model of the given class. 238 | - `ScoutStatic::makeBuilder(string $modelClass, string $query, callable $callback = null)`: Obtain an instance of `Laravel\Scout\Builder` configured for a given model. 239 | 240 | To use the scout to filter results in your code, I recommend ignoring every builder/model methods and directly retrieve the matching IDs through the Scout Builder instance. 241 | 242 | You can then use that array of matching IDs to modify a Flarum searcher (see this extension source code for the post/user searchers), filterer, or a manual query. 243 | 244 | Caution: the array of IDs will contain deleted and private content as well. 245 | Make sure to always use Flarum's `whereVisibleTo()` somewhere in the query. 246 | 247 | To preserve the search result order, one option is to use the `FIELD()` SQL method. 248 | You could also re-sort the results in PHP after retrieving them from the database if you are not paginating. 249 | 250 | ```php 251 | keys(); 259 | 260 | $users = User::newQuery() 261 | ->whereVisibleTo($actor) 262 | ->whereIn('id', $ids) 263 | ->orderByRaw('FIELD(id' . str_repeat(', ?', count($ids)) . ')', $ids) 264 | ->limit(10) 265 | ->get(); 266 | ``` 267 | 268 | ## Support 269 | 270 | This extension is under **minimal maintenance**. 271 | 272 | It was developed for a client and released as open-source for the benefit of the community. 273 | I might publish simple bugfixes or compatibility updates for free. 274 | 275 | You can [contact me](https://clarkwinkelmann.com/flarum) to sponsor additional features or updates. 276 | 277 | Support is offered on a "best effort" basis through the Flarum community thread. 278 | 279 | ## Links 280 | 281 | - [GitHub](https://github.com/clarkwinkelmann/flarum-ext-scout) 282 | - [Packagist](https://packagist.org/packages/clarkwinkelmann/flarum-ext-scout) 283 | - [Discuss](https://discuss.flarum.org/d/30874) 284 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "clarkwinkelmann/flarum-ext-scout", 3 | "description": "Algolia and Meilisearch search for Flarum", 4 | "keywords": [ 5 | "flarum" 6 | ], 7 | "type": "flarum-extension", 8 | "license": "MIT", 9 | "require": { 10 | "flarum/core": "^1.2", 11 | "laravel/scout": "^9.4", 12 | "algolia/algoliasearch-client-php": "^3.2", 13 | "http-interop/http-factory-guzzle": "^1.0", 14 | "meilisearch/meilisearch-php": "*" 15 | }, 16 | "require-dev": { 17 | "teamtnt/laravel-scout-tntsearch-driver": "^11.6" 18 | }, 19 | "suggest": { 20 | "clarkwinkelmann/flarum-ext-advanced-search-highlight": "*" 21 | }, 22 | "authors": [ 23 | { 24 | "name": "Clark Winkelmann", 25 | "email": "clark.winkelmann@gmail.com", 26 | "role": "Developer" 27 | } 28 | ], 29 | "support": { 30 | "source": "https://github.com/clarkwinkelmann/flarum-ext-scout", 31 | "forum": "https://discuss.flarum.org/d/30874" 32 | }, 33 | "autoload": { 34 | "psr-4": { 35 | "ClarkWinkelmann\\Scout\\": "src/" 36 | }, 37 | "files": [ 38 | "src/helpers.php" 39 | ] 40 | }, 41 | "extra": { 42 | "flarum-extension": { 43 | "title": "Scout Search", 44 | "category": "feature", 45 | "icon": { 46 | "name": "fas fa-search", 47 | "backgroundColor": "#f47f68", 48 | "color": "#fff" 49 | }, 50 | "optional-dependencies": [ 51 | "clarkwinkelmann/flarum-ext-advanced-search-highlight" 52 | ] 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /extend.php: -------------------------------------------------------------------------------- 1 | js(__DIR__ . '/js/dist/admin.js'), 22 | 23 | new Extend\Locales(__DIR__ . '/resources/locale'), 24 | 25 | (new Extend\ServiceProvider()) 26 | ->register(ScoutServiceProvider::class), 27 | 28 | (new Extend\SimpleFlarumSearch(DiscussionSearcher::class)) 29 | ->setFullTextGambit(Search\DiscussionGambit::class), 30 | (new Extend\SimpleFlarumSearch(UserSearcher::class)) 31 | ->setFullTextGambit(Search\UserGambit::class), 32 | 33 | (new Extend\Console()) 34 | ->command(Console\FlushCommand::class) 35 | ->command(Console\ImportAllCommand::class) 36 | ->command(Console\ImportCommand::class) 37 | ->command(ScoutConsole\IndexCommand::class) 38 | ->command(ScoutConsole\DeleteIndexCommand::class), 39 | 40 | (new ScoutExtend(Discussion::class)) 41 | ->listenSaved(DiscussionEvent\Started::class, function (DiscussionEvent\Started $event) { 42 | return $event->discussion; 43 | }) 44 | ->listenSaved(DiscussionEvent\Renamed::class, function (DiscussionEvent\Renamed $event) { 45 | return $event->discussion; 46 | }) 47 | // Hidden/Restored events might be needed if we save it as meta in a future version 48 | /*->listenSaved(DiscussionEvent\Hidden::class, function (DiscussionEvent\Hidden $event) { 49 | return $event->discussion; 50 | }) 51 | ->listenSaved(DiscussionEvent\Restored::class, function (DiscussionEvent\Restored $event) { 52 | return $event->discussion; 53 | })*/ 54 | ->listenDeleted(DiscussionEvent\Deleted::class, function (DiscussionEvent\Deleted $event) { 55 | return $event->discussion; 56 | }) 57 | ->attributes(function (Discussion $discussion): array { 58 | return [ 59 | 'id' => $discussion->id, // TNTSearch requires the ID to be part of the searchable data 60 | 'title' => $discussion->title, 61 | ]; 62 | }), 63 | (new ScoutExtend(Post::class)) 64 | ->listenSaved(PostEvent\Posted::class, function (PostEvent\Posted $event) { 65 | return $event->post; 66 | }) 67 | ->listenSaved(PostEvent\Revised::class, function (PostEvent\Revised $event) { 68 | return $event->post; 69 | }) 70 | // Hidden/Restored events might be needed if we save it as meta in a future version 71 | /*->listenSaved(PostEvent\Hidden::class, function (PostEvent\Hidden $event) { 72 | return $event->post; 73 | }) 74 | ->listenSaved(PostEvent\Restored::class, function (PostEvent\Restored $event) { 75 | return $event->post; 76 | })*/ 77 | ->listenDeleted(PostEvent\Deleted::class, function (PostEvent\Deleted $event) { 78 | return $event->post; 79 | }) 80 | ->searchable(function (Post $post) { 81 | if ($post->type !== 'comment') { 82 | return false; 83 | } 84 | }) 85 | ->attributes(function (Post $post): array { 86 | return [ 87 | 'id' => $post->id, 88 | ]; 89 | }), 90 | // We use a separate extender call specifically for CommentPost 91 | // This is both a good way to organise the code and removes the need to check for instanceof before rendering the content 92 | // Natively we only index comments, but an extension could make more posts searchable so this code is nicely isolated in anticipation for that 93 | (new ScoutExtend(CommentPost::class)) 94 | ->attributes(function (CommentPost $post): array { 95 | return [ 96 | // We use the rendered version and not unparsed version as the unparsed version might expose original text that's hidden by extensions in the output 97 | // strip_tags is used to strip HTML tags and their properties from the index but not provide any additional security 98 | 'content' => strip_tags($post->formatContent()), 99 | ]; 100 | }), 101 | (new ScoutExtend(User::class)) 102 | ->listenSaved(UserEvent\Registered::class, function (UserEvent\Registered $event) { 103 | return $event->user; 104 | }) 105 | ->listenDeleted(UserEvent\Deleted::class, function (UserEvent\Deleted $event) { 106 | return $event->user; 107 | }) 108 | ->listenSaved(BioChanged::class, function (BioChanged $event) { 109 | return $event->user; 110 | }) 111 | ->attributes(function (User $user): array { 112 | return [ 113 | 'id' => $user->id, 114 | 'displayName' => $user->display_name, 115 | 'username' => $user->username, 116 | // It doesn't matter if fof/user-bio is installed or not, it'll just be null if not 117 | 'bio' => $user->bio, 118 | ]; 119 | }), 120 | 121 | (new Extend\Event()) 122 | ->listen(DiscussionEvent\Deleting::class, Listener\DeletingDiscussion::class), 123 | ]; 124 | -------------------------------------------------------------------------------- /js/admin.ts: -------------------------------------------------------------------------------- 1 | export * from './src/admin'; 2 | -------------------------------------------------------------------------------- /js/dist/admin.js: -------------------------------------------------------------------------------- 1 | (()=>{var t={n:n=>{var e=n&&n.__esModule?()=>n.default:()=>n;return t.d(e,{a:e}),e},d:(n,e)=>{for(var a in e)t.o(e,a)&&!t.o(n,a)&&Object.defineProperty(n,a,{enumerable:!0,get:e[a]})},o:(t,n)=>Object.prototype.hasOwnProperty.call(t,n),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},n={};(()=>{"use strict";t.r(n);const e=flarum.core.compat["admin/app"];var a=t.n(e);a().initializers.add("clarkwinkelmann-scout",(function(){a().extensionData.for("clarkwinkelmann-scout").registerSetting({type:"select",setting:"clarkwinkelmann-scout.driver",options:{null:a().translator.trans("clarkwinkelmann-scout.admin.setting.driverOption.null"),algolia:a().translator.trans("clarkwinkelmann-scout.admin.setting.driverOption.algolia"),meilisearch:a().translator.trans("clarkwinkelmann-scout.admin.setting.driverOption.meilisearch"),tntsearch:a().translator.trans("clarkwinkelmann-scout.admin.setting.driverOption.tntsearch")},default:"null",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.driver")}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.prefix",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.prefix")}).registerSetting({type:"switch",setting:"clarkwinkelmann-scout.queue",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.queue"),help:a().translator.trans("clarkwinkelmann-scout.admin.setting.queueHelp")}).registerSetting({type:"number",setting:"clarkwinkelmann-scout.limit",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.limit"),placeholder:a().translator.trans("clarkwinkelmann-scout.admin.setting.limitPlaceholder"),help:a().translator.trans("clarkwinkelmann-scout.admin.setting.limitHelp")}).registerSetting({type:"number",setting:"clarkwinkelmann-scout.queryMinLength",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.queryMinLength"),placeholder:a().translator.trans("clarkwinkelmann-scout.admin.setting.queryMinLengthPlaceholder"),help:a().translator.trans("clarkwinkelmann-scout.admin.setting.queryMinLengthHelp")}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.algoliaId",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.algoliaId")}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.algoliaSecret",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.algoliaSecret")}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.algoliaConnectTimeout",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.algoliaConnectTimeout")}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.algoliaReadTimeout",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.algoliaReadTimeout")}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.algoliaWriteTimeout",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.algoliaWriteTimeout")}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.meilisearchHost",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.meilisearchHost"),placeholder:"127.0.0.1:7700"}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.meilisearchKey",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.meilisearchKey")}).registerSetting({type:"number",setting:"clarkwinkelmann-scout.tntsearchMaxDocs",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.tntsearchMaxDocs"),placeholder:"500"}).registerSetting({type:"switch",setting:"clarkwinkelmann-scout.tntsearchFuzziness",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.tntsearchFuzziness")}).registerSetting({type:"number",setting:"clarkwinkelmann-scout.tntsearchFuzzyDistance",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.tntsearchFuzzyDistance"),placeholder:"2"}).registerSetting({type:"number",setting:"clarkwinkelmann-scout.tntsearchFuzzyPrefixLength",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.tntsearchFuzzyPrefixLength"),placeholder:"50"}).registerSetting({type:"text",setting:"clarkwinkelmann-scout.tntsearchFuzzyMaxExpansions",label:a().translator.trans("clarkwinkelmann-scout.admin.setting.tntsearchFuzzyMaxExpansions"),placeholder:"2"})}))})(),module.exports=n})(); 2 | //# sourceMappingURL=admin.js.map -------------------------------------------------------------------------------- /js/dist/admin.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAAA,IAAqB,yBAAyB,WAC1CA,IAAAA,cAAAA,IAAsB,yBACjBC,gBAAgB,CACbC,KAAM,SACNC,QAAS,+BACTC,QAAS,CACLC,KAAML,IAAAA,WAAAA,MAAqB,yDAC3BM,QAASN,IAAAA,WAAAA,MAAqB,4DAC9BO,YAAaP,IAAAA,WAAAA,MAAqB,gEAClCQ,UAAWR,IAAAA,WAAAA,MAAqB,+DAEpCS,QAAS,OACTC,MAAOV,IAAAA,WAAAA,MAAqB,gDAE/BC,gBAAgB,CACbC,KAAM,OACNC,QAAS,+BACTO,MAAOV,IAAAA,WAAAA,MAAqB,gDAE/BC,gBAAgB,CACbC,KAAM,SACNC,QAAS,8BACTO,MAAOV,IAAAA,WAAAA,MAAqB,6CAC5BW,KAAMX,IAAAA,WAAAA,MAAqB,mDAE9BC,gBAAgB,CACbC,KAAM,SACNC,QAAS,8BACTO,MAAOV,IAAAA,WAAAA,MAAqB,6CAC5BY,YAAaZ,IAAAA,WAAAA,MAAqB,wDAClCW,KAAMX,IAAAA,WAAAA,MAAqB,mDAE9BC,gBAAgB,CACbC,KAAM,SACNC,QAAS,uCACTO,MAAOV,IAAAA,WAAAA,MAAqB,sDAC5BY,YAAaZ,IAAAA,WAAAA,MAAqB,iEAClCW,KAAMX,IAAAA,WAAAA,MAAqB,4DAE9BC,gBAAgB,CACbC,KAAM,OACNC,QAAS,kCACTO,MAAOV,IAAAA,WAAAA,MAAqB,mDAE/BC,gBAAgB,CACbC,KAAM,OACNC,QAAS,sCACTO,MAAOV,IAAAA,WAAAA,MAAqB,uDAE/BC,gBAAgB,CACbC,KAAM,OACNC,QAAS,8CACTO,MAAOV,IAAAA,WAAAA,MAAqB,+DAE/BC,gBAAgB,CACbC,KAAM,OACNC,QAAS,2CACTO,MAAOV,IAAAA,WAAAA,MAAqB,4DAE/BC,gBAAgB,CACbC,KAAM,OACNC,QAAS,4CACTO,MAAOV,IAAAA,WAAAA,MAAqB,6DAE/BC,gBAAgB,CACbC,KAAM,OACNC,QAAS,wCACTO,MAAOV,IAAAA,WAAAA,MAAqB,uDAC5BY,YAAa,mBAEhBX,gBAAgB,CACbC,KAAM,OACNC,QAAS,uCACTO,MAAOV,IAAAA,WAAAA,MAAqB,wDAE/BC,gBAAgB,CACbC,KAAM,SACNC,QAAS,yCACTO,MAAOV,IAAAA,WAAAA,MAAqB,wDAC5BY,YAAa,QAEhBX,gBAAgB,CACbC,KAAM,SACNC,QAAS,2CACTO,MAAOV,IAAAA,WAAAA,MAAqB,4DAE/BC,gBAAgB,CACbC,KAAM,SACNC,QAAS,+CACTO,MAAOV,IAAAA,WAAAA,MAAqB,8DAC5BY,YAAa,MAEhBX,gBAAgB,CACbC,KAAM,SACNC,QAAS,mDACTO,MAAOV,IAAAA,WAAAA,MAAqB,kEAC5BY,YAAa,OAEhBX,gBAAgB,CACbC,KAAM,OACNC,QAAS,oDACTO,MAAOV,IAAAA,WAAAA,MAAqB,mEAC5BY,YAAa,KAEzB,G","sources":["webpack://@clarkwinkelmann/scout/webpack/bootstrap","webpack://@clarkwinkelmann/scout/webpack/runtime/compat get default export","webpack://@clarkwinkelmann/scout/webpack/runtime/define property getters","webpack://@clarkwinkelmann/scout/webpack/runtime/hasOwnProperty shorthand","webpack://@clarkwinkelmann/scout/webpack/runtime/make namespace object","webpack://@clarkwinkelmann/scout/external root \"flarum.core.compat['admin/app']\"","webpack://@clarkwinkelmann/scout/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('clarkwinkelmann-scout', () => {\n app.extensionData.for('clarkwinkelmann-scout')\n .registerSetting({\n type: 'select',\n setting: 'clarkwinkelmann-scout.driver',\n options: {\n null: app.translator.trans('clarkwinkelmann-scout.admin.setting.driverOption.null'),\n algolia: app.translator.trans('clarkwinkelmann-scout.admin.setting.driverOption.algolia'),\n meilisearch: app.translator.trans('clarkwinkelmann-scout.admin.setting.driverOption.meilisearch'),\n tntsearch: app.translator.trans('clarkwinkelmann-scout.admin.setting.driverOption.tntsearch'),\n },\n default: 'null',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.driver'),\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.prefix',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.prefix'),\n })\n .registerSetting({\n type: 'switch',\n setting: 'clarkwinkelmann-scout.queue',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.queue'),\n help: app.translator.trans('clarkwinkelmann-scout.admin.setting.queueHelp'),\n })\n .registerSetting({\n type: 'number',\n setting: 'clarkwinkelmann-scout.limit',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.limit'),\n placeholder: app.translator.trans('clarkwinkelmann-scout.admin.setting.limitPlaceholder'),\n help: app.translator.trans('clarkwinkelmann-scout.admin.setting.limitHelp'),\n })\n .registerSetting({\n type: 'number',\n setting: 'clarkwinkelmann-scout.queryMinLength',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.queryMinLength'),\n placeholder: app.translator.trans('clarkwinkelmann-scout.admin.setting.queryMinLengthPlaceholder'),\n help: app.translator.trans('clarkwinkelmann-scout.admin.setting.queryMinLengthHelp'),\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.algoliaId',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.algoliaId'),\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.algoliaSecret',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.algoliaSecret'),\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.algoliaConnectTimeout',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.algoliaConnectTimeout'),\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.algoliaReadTimeout',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.algoliaReadTimeout'),\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.algoliaWriteTimeout',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.algoliaWriteTimeout'),\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.meilisearchHost',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.meilisearchHost'),\n placeholder: '127.0.0.1:7700',\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.meilisearchKey',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.meilisearchKey'),\n })\n .registerSetting({\n type: 'number',\n setting: 'clarkwinkelmann-scout.tntsearchMaxDocs',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.tntsearchMaxDocs'),\n placeholder: '500',\n })\n .registerSetting({\n type: 'switch',\n setting: 'clarkwinkelmann-scout.tntsearchFuzziness',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.tntsearchFuzziness'),\n })\n .registerSetting({\n type: 'number',\n setting: 'clarkwinkelmann-scout.tntsearchFuzzyDistance',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.tntsearchFuzzyDistance'),\n placeholder: '2',\n })\n .registerSetting({\n type: 'number',\n setting: 'clarkwinkelmann-scout.tntsearchFuzzyPrefixLength',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.tntsearchFuzzyPrefixLength'),\n placeholder: '50',\n })\n .registerSetting({\n type: 'text',\n setting: 'clarkwinkelmann-scout.tntsearchFuzzyMaxExpansions',\n label: app.translator.trans('clarkwinkelmann-scout.admin.setting.tntsearchFuzzyMaxExpansions'),\n placeholder: '2',\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","core","compat","app","registerSetting","type","setting","options","null","algolia","meilisearch","tntsearch","default","label","help","placeholder"],"sourceRoot":""} -------------------------------------------------------------------------------- /js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@clarkwinkelmann/scout", 3 | "private": true, 4 | "dependencies": { 5 | "flarum-tsconfig": "^1.0", 6 | "flarum-webpack-config": "^2.0", 7 | "webpack": "^5.65", 8 | "webpack-cli": "^4.9" 9 | }, 10 | "scripts": { 11 | "dev": "webpack --mode development --watch", 12 | "build": "webpack --mode production" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /js/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "flarum-tsconfig", 3 | "include": [ 4 | "src/**/*", 5 | "../vendor/flarum/core/js/dist-typings/@types/**/*" 6 | ], 7 | "files": [], 8 | "compilerOptions": { 9 | "baseUrl": ".", 10 | "paths": { 11 | "flarum/*": [ 12 | "../vendor/flarum/core/js/dist-typings/*" 13 | ] 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /js/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = require('flarum-webpack-config')(); 2 | -------------------------------------------------------------------------------- /js/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@ampproject/remapping@^2.1.0": 6 | version "2.2.0" 7 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" 8 | integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== 9 | dependencies: 10 | "@jridgewell/gen-mapping" "^0.1.0" 11 | "@jridgewell/trace-mapping" "^0.3.9" 12 | 13 | "@babel/code-frame@^7.18.6": 14 | version "7.18.6" 15 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" 16 | integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== 17 | dependencies: 18 | "@babel/highlight" "^7.18.6" 19 | 20 | "@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.1", "@babel/compat-data@^7.20.5": 21 | version "7.20.10" 22 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.20.10.tgz#9d92fa81b87542fff50e848ed585b4212c1d34ec" 23 | integrity sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg== 24 | 25 | "@babel/core@^7.14.3": 26 | version "7.20.12" 27 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.20.12.tgz#7930db57443c6714ad216953d1356dac0eb8496d" 28 | integrity sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg== 29 | dependencies: 30 | "@ampproject/remapping" "^2.1.0" 31 | "@babel/code-frame" "^7.18.6" 32 | "@babel/generator" "^7.20.7" 33 | "@babel/helper-compilation-targets" "^7.20.7" 34 | "@babel/helper-module-transforms" "^7.20.11" 35 | "@babel/helpers" "^7.20.7" 36 | "@babel/parser" "^7.20.7" 37 | "@babel/template" "^7.20.7" 38 | "@babel/traverse" "^7.20.12" 39 | "@babel/types" "^7.20.7" 40 | convert-source-map "^1.7.0" 41 | debug "^4.1.0" 42 | gensync "^1.0.0-beta.2" 43 | json5 "^2.2.2" 44 | semver "^6.3.0" 45 | 46 | "@babel/generator@^7.20.7": 47 | version "7.20.7" 48 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.20.7.tgz#f8ef57c8242665c5929fe2e8d82ba75460187b4a" 49 | integrity sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw== 50 | dependencies: 51 | "@babel/types" "^7.20.7" 52 | "@jridgewell/gen-mapping" "^0.3.2" 53 | jsesc "^2.5.1" 54 | 55 | "@babel/helper-annotate-as-pure@^7.18.6": 56 | version "7.18.6" 57 | resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" 58 | integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== 59 | dependencies: 60 | "@babel/types" "^7.18.6" 61 | 62 | "@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": 63 | version "7.18.9" 64 | resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" 65 | integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== 66 | dependencies: 67 | "@babel/helper-explode-assignable-expression" "^7.18.6" 68 | "@babel/types" "^7.18.9" 69 | 70 | "@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.0", "@babel/helper-compilation-targets@^7.20.7": 71 | version "7.20.7" 72 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz#a6cd33e93629f5eb473b021aac05df62c4cd09bb" 73 | integrity sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ== 74 | dependencies: 75 | "@babel/compat-data" "^7.20.5" 76 | "@babel/helper-validator-option" "^7.18.6" 77 | browserslist "^4.21.3" 78 | lru-cache "^5.1.1" 79 | semver "^6.3.0" 80 | 81 | "@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.20.5", "@babel/helper-create-class-features-plugin@^7.20.7": 82 | version "7.20.12" 83 | resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz#4349b928e79be05ed2d1643b20b99bb87c503819" 84 | integrity sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ== 85 | dependencies: 86 | "@babel/helper-annotate-as-pure" "^7.18.6" 87 | "@babel/helper-environment-visitor" "^7.18.9" 88 | "@babel/helper-function-name" "^7.19.0" 89 | "@babel/helper-member-expression-to-functions" "^7.20.7" 90 | "@babel/helper-optimise-call-expression" "^7.18.6" 91 | "@babel/helper-replace-supers" "^7.20.7" 92 | "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" 93 | "@babel/helper-split-export-declaration" "^7.18.6" 94 | 95 | "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": 96 | version "7.20.5" 97 | resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz#5ea79b59962a09ec2acf20a963a01ab4d076ccca" 98 | integrity sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w== 99 | dependencies: 100 | "@babel/helper-annotate-as-pure" "^7.18.6" 101 | regexpu-core "^5.2.1" 102 | 103 | "@babel/helper-define-polyfill-provider@^0.3.3": 104 | version "0.3.3" 105 | resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" 106 | integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== 107 | dependencies: 108 | "@babel/helper-compilation-targets" "^7.17.7" 109 | "@babel/helper-plugin-utils" "^7.16.7" 110 | debug "^4.1.1" 111 | lodash.debounce "^4.0.8" 112 | resolve "^1.14.2" 113 | semver "^6.1.2" 114 | 115 | "@babel/helper-environment-visitor@^7.18.9": 116 | version "7.18.9" 117 | resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" 118 | integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== 119 | 120 | "@babel/helper-explode-assignable-expression@^7.18.6": 121 | version "7.18.6" 122 | resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" 123 | integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== 124 | dependencies: 125 | "@babel/types" "^7.18.6" 126 | 127 | "@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0": 128 | version "7.19.0" 129 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz#941574ed5390682e872e52d3f38ce9d1bef4648c" 130 | integrity sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w== 131 | dependencies: 132 | "@babel/template" "^7.18.10" 133 | "@babel/types" "^7.19.0" 134 | 135 | "@babel/helper-hoist-variables@^7.18.6": 136 | version "7.18.6" 137 | resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" 138 | integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== 139 | dependencies: 140 | "@babel/types" "^7.18.6" 141 | 142 | "@babel/helper-member-expression-to-functions@^7.20.7": 143 | version "7.20.7" 144 | resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz#a6f26e919582275a93c3aa6594756d71b0bb7f05" 145 | integrity sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw== 146 | dependencies: 147 | "@babel/types" "^7.20.7" 148 | 149 | "@babel/helper-module-imports@^7.18.6": 150 | version "7.18.6" 151 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" 152 | integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== 153 | dependencies: 154 | "@babel/types" "^7.18.6" 155 | 156 | "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11": 157 | version "7.20.11" 158 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz#df4c7af713c557938c50ea3ad0117a7944b2f1b0" 159 | integrity sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg== 160 | dependencies: 161 | "@babel/helper-environment-visitor" "^7.18.9" 162 | "@babel/helper-module-imports" "^7.18.6" 163 | "@babel/helper-simple-access" "^7.20.2" 164 | "@babel/helper-split-export-declaration" "^7.18.6" 165 | "@babel/helper-validator-identifier" "^7.19.1" 166 | "@babel/template" "^7.20.7" 167 | "@babel/traverse" "^7.20.10" 168 | "@babel/types" "^7.20.7" 169 | 170 | "@babel/helper-optimise-call-expression@^7.18.6": 171 | version "7.18.6" 172 | resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" 173 | integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== 174 | dependencies: 175 | "@babel/types" "^7.18.6" 176 | 177 | "@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.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": 178 | version "7.20.2" 179 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" 180 | integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== 181 | 182 | "@babel/helper-remap-async-to-generator@^7.18.9": 183 | version "7.18.9" 184 | resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" 185 | integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== 186 | dependencies: 187 | "@babel/helper-annotate-as-pure" "^7.18.6" 188 | "@babel/helper-environment-visitor" "^7.18.9" 189 | "@babel/helper-wrap-function" "^7.18.9" 190 | "@babel/types" "^7.18.9" 191 | 192 | "@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": 193 | version "7.20.7" 194 | resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" 195 | integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== 196 | dependencies: 197 | "@babel/helper-environment-visitor" "^7.18.9" 198 | "@babel/helper-member-expression-to-functions" "^7.20.7" 199 | "@babel/helper-optimise-call-expression" "^7.18.6" 200 | "@babel/template" "^7.20.7" 201 | "@babel/traverse" "^7.20.7" 202 | "@babel/types" "^7.20.7" 203 | 204 | "@babel/helper-simple-access@^7.20.2": 205 | version "7.20.2" 206 | resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" 207 | integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== 208 | dependencies: 209 | "@babel/types" "^7.20.2" 210 | 211 | "@babel/helper-skip-transparent-expression-wrappers@^7.20.0": 212 | version "7.20.0" 213 | resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" 214 | integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== 215 | dependencies: 216 | "@babel/types" "^7.20.0" 217 | 218 | "@babel/helper-split-export-declaration@^7.18.6": 219 | version "7.18.6" 220 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" 221 | integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== 222 | dependencies: 223 | "@babel/types" "^7.18.6" 224 | 225 | "@babel/helper-string-parser@^7.19.4": 226 | version "7.19.4" 227 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" 228 | integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== 229 | 230 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": 231 | version "7.19.1" 232 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" 233 | integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== 234 | 235 | "@babel/helper-validator-option@^7.18.6": 236 | version "7.18.6" 237 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" 238 | integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== 239 | 240 | "@babel/helper-wrap-function@^7.18.9": 241 | version "7.20.5" 242 | resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" 243 | integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== 244 | dependencies: 245 | "@babel/helper-function-name" "^7.19.0" 246 | "@babel/template" "^7.18.10" 247 | "@babel/traverse" "^7.20.5" 248 | "@babel/types" "^7.20.5" 249 | 250 | "@babel/helpers@^7.20.7": 251 | version "7.20.7" 252 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.20.7.tgz#04502ff0feecc9f20ecfaad120a18f011a8e6dce" 253 | integrity sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA== 254 | dependencies: 255 | "@babel/template" "^7.20.7" 256 | "@babel/traverse" "^7.20.7" 257 | "@babel/types" "^7.20.7" 258 | 259 | "@babel/highlight@^7.18.6": 260 | version "7.18.6" 261 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" 262 | integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== 263 | dependencies: 264 | "@babel/helper-validator-identifier" "^7.18.6" 265 | chalk "^2.0.0" 266 | js-tokens "^4.0.0" 267 | 268 | "@babel/parser@^7.20.7": 269 | version "7.20.7" 270 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.20.7.tgz#66fe23b3c8569220817d5feb8b9dcdc95bb4f71b" 271 | integrity sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg== 272 | 273 | "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": 274 | version "7.18.6" 275 | 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.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" 276 | integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== 277 | dependencies: 278 | "@babel/helper-plugin-utils" "^7.18.6" 279 | 280 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.18.9": 281 | version "7.20.7" 282 | resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" 283 | integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== 284 | dependencies: 285 | "@babel/helper-plugin-utils" "^7.20.2" 286 | "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" 287 | "@babel/plugin-proposal-optional-chaining" "^7.20.7" 288 | 289 | "@babel/plugin-proposal-async-generator-functions@^7.20.1": 290 | version "7.20.7" 291 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" 292 | integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== 293 | dependencies: 294 | "@babel/helper-environment-visitor" "^7.18.9" 295 | "@babel/helper-plugin-utils" "^7.20.2" 296 | "@babel/helper-remap-async-to-generator" "^7.18.9" 297 | "@babel/plugin-syntax-async-generators" "^7.8.4" 298 | 299 | "@babel/plugin-proposal-class-properties@^7.13.0", "@babel/plugin-proposal-class-properties@^7.18.6": 300 | version "7.18.6" 301 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" 302 | integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== 303 | dependencies: 304 | "@babel/helper-create-class-features-plugin" "^7.18.6" 305 | "@babel/helper-plugin-utils" "^7.18.6" 306 | 307 | "@babel/plugin-proposal-class-static-block@^7.18.6": 308 | version "7.20.7" 309 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz#92592e9029b13b15be0f7ce6a7aedc2879ca45a7" 310 | integrity sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ== 311 | dependencies: 312 | "@babel/helper-create-class-features-plugin" "^7.20.7" 313 | "@babel/helper-plugin-utils" "^7.20.2" 314 | "@babel/plugin-syntax-class-static-block" "^7.14.5" 315 | 316 | "@babel/plugin-proposal-dynamic-import@^7.18.6": 317 | version "7.18.6" 318 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" 319 | integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== 320 | dependencies: 321 | "@babel/helper-plugin-utils" "^7.18.6" 322 | "@babel/plugin-syntax-dynamic-import" "^7.8.3" 323 | 324 | "@babel/plugin-proposal-export-namespace-from@^7.18.9": 325 | version "7.18.9" 326 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" 327 | integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== 328 | dependencies: 329 | "@babel/helper-plugin-utils" "^7.18.9" 330 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" 331 | 332 | "@babel/plugin-proposal-json-strings@^7.18.6": 333 | version "7.18.6" 334 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" 335 | integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== 336 | dependencies: 337 | "@babel/helper-plugin-utils" "^7.18.6" 338 | "@babel/plugin-syntax-json-strings" "^7.8.3" 339 | 340 | "@babel/plugin-proposal-logical-assignment-operators@^7.18.9": 341 | version "7.20.7" 342 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" 343 | integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== 344 | dependencies: 345 | "@babel/helper-plugin-utils" "^7.20.2" 346 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 347 | 348 | "@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": 349 | version "7.18.6" 350 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" 351 | integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== 352 | dependencies: 353 | "@babel/helper-plugin-utils" "^7.18.6" 354 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 355 | 356 | "@babel/plugin-proposal-numeric-separator@^7.18.6": 357 | version "7.18.6" 358 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" 359 | integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== 360 | dependencies: 361 | "@babel/helper-plugin-utils" "^7.18.6" 362 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 363 | 364 | "@babel/plugin-proposal-object-rest-spread@^7.20.2": 365 | version "7.20.7" 366 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" 367 | integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== 368 | dependencies: 369 | "@babel/compat-data" "^7.20.5" 370 | "@babel/helper-compilation-targets" "^7.20.7" 371 | "@babel/helper-plugin-utils" "^7.20.2" 372 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 373 | "@babel/plugin-transform-parameters" "^7.20.7" 374 | 375 | "@babel/plugin-proposal-optional-catch-binding@^7.18.6": 376 | version "7.18.6" 377 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" 378 | integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== 379 | dependencies: 380 | "@babel/helper-plugin-utils" "^7.18.6" 381 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 382 | 383 | "@babel/plugin-proposal-optional-chaining@^7.18.9", "@babel/plugin-proposal-optional-chaining@^7.20.7": 384 | version "7.20.7" 385 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz#49f2b372519ab31728cc14115bb0998b15bfda55" 386 | integrity sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ== 387 | dependencies: 388 | "@babel/helper-plugin-utils" "^7.20.2" 389 | "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" 390 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 391 | 392 | "@babel/plugin-proposal-private-methods@^7.13.0", "@babel/plugin-proposal-private-methods@^7.18.6": 393 | version "7.18.6" 394 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" 395 | integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== 396 | dependencies: 397 | "@babel/helper-create-class-features-plugin" "^7.18.6" 398 | "@babel/helper-plugin-utils" "^7.18.6" 399 | 400 | "@babel/plugin-proposal-private-property-in-object@^7.18.6": 401 | version "7.20.5" 402 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz#309c7668f2263f1c711aa399b5a9a6291eef6135" 403 | integrity sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ== 404 | dependencies: 405 | "@babel/helper-annotate-as-pure" "^7.18.6" 406 | "@babel/helper-create-class-features-plugin" "^7.20.5" 407 | "@babel/helper-plugin-utils" "^7.20.2" 408 | "@babel/plugin-syntax-private-property-in-object" "^7.14.5" 409 | 410 | "@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": 411 | version "7.18.6" 412 | resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" 413 | integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== 414 | dependencies: 415 | "@babel/helper-create-regexp-features-plugin" "^7.18.6" 416 | "@babel/helper-plugin-utils" "^7.18.6" 417 | 418 | "@babel/plugin-syntax-async-generators@^7.8.4": 419 | version "7.8.4" 420 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 421 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 422 | dependencies: 423 | "@babel/helper-plugin-utils" "^7.8.0" 424 | 425 | "@babel/plugin-syntax-class-properties@^7.12.13": 426 | version "7.12.13" 427 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 428 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 429 | dependencies: 430 | "@babel/helper-plugin-utils" "^7.12.13" 431 | 432 | "@babel/plugin-syntax-class-static-block@^7.14.5": 433 | version "7.14.5" 434 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" 435 | integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== 436 | dependencies: 437 | "@babel/helper-plugin-utils" "^7.14.5" 438 | 439 | "@babel/plugin-syntax-dynamic-import@^7.8.3": 440 | version "7.8.3" 441 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" 442 | integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== 443 | dependencies: 444 | "@babel/helper-plugin-utils" "^7.8.0" 445 | 446 | "@babel/plugin-syntax-export-namespace-from@^7.8.3": 447 | version "7.8.3" 448 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" 449 | integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== 450 | dependencies: 451 | "@babel/helper-plugin-utils" "^7.8.3" 452 | 453 | "@babel/plugin-syntax-import-assertions@^7.20.0": 454 | version "7.20.0" 455 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" 456 | integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== 457 | dependencies: 458 | "@babel/helper-plugin-utils" "^7.19.0" 459 | 460 | "@babel/plugin-syntax-json-strings@^7.8.3": 461 | version "7.8.3" 462 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 463 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 464 | dependencies: 465 | "@babel/helper-plugin-utils" "^7.8.0" 466 | 467 | "@babel/plugin-syntax-jsx@^7.18.6": 468 | version "7.18.6" 469 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz#a8feef63b010150abd97f1649ec296e849943ca0" 470 | integrity sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q== 471 | dependencies: 472 | "@babel/helper-plugin-utils" "^7.18.6" 473 | 474 | "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": 475 | version "7.10.4" 476 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 477 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 478 | dependencies: 479 | "@babel/helper-plugin-utils" "^7.10.4" 480 | 481 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 482 | version "7.8.3" 483 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 484 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 485 | dependencies: 486 | "@babel/helper-plugin-utils" "^7.8.0" 487 | 488 | "@babel/plugin-syntax-numeric-separator@^7.10.4": 489 | version "7.10.4" 490 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 491 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 492 | dependencies: 493 | "@babel/helper-plugin-utils" "^7.10.4" 494 | 495 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 496 | version "7.8.3" 497 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 498 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 499 | dependencies: 500 | "@babel/helper-plugin-utils" "^7.8.0" 501 | 502 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 503 | version "7.8.3" 504 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 505 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 506 | dependencies: 507 | "@babel/helper-plugin-utils" "^7.8.0" 508 | 509 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 510 | version "7.8.3" 511 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 512 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 513 | dependencies: 514 | "@babel/helper-plugin-utils" "^7.8.0" 515 | 516 | "@babel/plugin-syntax-private-property-in-object@^7.14.5": 517 | version "7.14.5" 518 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" 519 | integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== 520 | dependencies: 521 | "@babel/helper-plugin-utils" "^7.14.5" 522 | 523 | "@babel/plugin-syntax-top-level-await@^7.14.5": 524 | version "7.14.5" 525 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 526 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 527 | dependencies: 528 | "@babel/helper-plugin-utils" "^7.14.5" 529 | 530 | "@babel/plugin-syntax-typescript@^7.20.0": 531 | version "7.20.0" 532 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz#4e9a0cfc769c85689b77a2e642d24e9f697fc8c7" 533 | integrity sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ== 534 | dependencies: 535 | "@babel/helper-plugin-utils" "^7.19.0" 536 | 537 | "@babel/plugin-transform-arrow-functions@^7.18.6": 538 | version "7.20.7" 539 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" 540 | integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== 541 | dependencies: 542 | "@babel/helper-plugin-utils" "^7.20.2" 543 | 544 | "@babel/plugin-transform-async-to-generator@^7.18.6": 545 | version "7.20.7" 546 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" 547 | integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== 548 | dependencies: 549 | "@babel/helper-module-imports" "^7.18.6" 550 | "@babel/helper-plugin-utils" "^7.20.2" 551 | "@babel/helper-remap-async-to-generator" "^7.18.9" 552 | 553 | "@babel/plugin-transform-block-scoped-functions@^7.18.6": 554 | version "7.18.6" 555 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" 556 | integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== 557 | dependencies: 558 | "@babel/helper-plugin-utils" "^7.18.6" 559 | 560 | "@babel/plugin-transform-block-scoping@^7.20.2": 561 | version "7.20.11" 562 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz#9f5a3424bd112a3f32fe0cf9364fbb155cff262a" 563 | integrity sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw== 564 | dependencies: 565 | "@babel/helper-plugin-utils" "^7.20.2" 566 | 567 | "@babel/plugin-transform-classes@^7.20.2": 568 | version "7.20.7" 569 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz#f438216f094f6bb31dc266ebfab8ff05aecad073" 570 | integrity sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ== 571 | dependencies: 572 | "@babel/helper-annotate-as-pure" "^7.18.6" 573 | "@babel/helper-compilation-targets" "^7.20.7" 574 | "@babel/helper-environment-visitor" "^7.18.9" 575 | "@babel/helper-function-name" "^7.19.0" 576 | "@babel/helper-optimise-call-expression" "^7.18.6" 577 | "@babel/helper-plugin-utils" "^7.20.2" 578 | "@babel/helper-replace-supers" "^7.20.7" 579 | "@babel/helper-split-export-declaration" "^7.18.6" 580 | globals "^11.1.0" 581 | 582 | "@babel/plugin-transform-computed-properties@^7.18.9": 583 | version "7.20.7" 584 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" 585 | integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== 586 | dependencies: 587 | "@babel/helper-plugin-utils" "^7.20.2" 588 | "@babel/template" "^7.20.7" 589 | 590 | "@babel/plugin-transform-destructuring@^7.20.2": 591 | version "7.20.7" 592 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz#8bda578f71620c7de7c93af590154ba331415454" 593 | integrity sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA== 594 | dependencies: 595 | "@babel/helper-plugin-utils" "^7.20.2" 596 | 597 | "@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": 598 | version "7.18.6" 599 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" 600 | integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== 601 | dependencies: 602 | "@babel/helper-create-regexp-features-plugin" "^7.18.6" 603 | "@babel/helper-plugin-utils" "^7.18.6" 604 | 605 | "@babel/plugin-transform-duplicate-keys@^7.18.9": 606 | version "7.18.9" 607 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" 608 | integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== 609 | dependencies: 610 | "@babel/helper-plugin-utils" "^7.18.9" 611 | 612 | "@babel/plugin-transform-exponentiation-operator@^7.18.6": 613 | version "7.18.6" 614 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" 615 | integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== 616 | dependencies: 617 | "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" 618 | "@babel/helper-plugin-utils" "^7.18.6" 619 | 620 | "@babel/plugin-transform-for-of@^7.18.8": 621 | version "7.18.8" 622 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz#6ef8a50b244eb6a0bdbad0c7c61877e4e30097c1" 623 | integrity sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ== 624 | dependencies: 625 | "@babel/helper-plugin-utils" "^7.18.6" 626 | 627 | "@babel/plugin-transform-function-name@^7.18.9": 628 | version "7.18.9" 629 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" 630 | integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== 631 | dependencies: 632 | "@babel/helper-compilation-targets" "^7.18.9" 633 | "@babel/helper-function-name" "^7.18.9" 634 | "@babel/helper-plugin-utils" "^7.18.9" 635 | 636 | "@babel/plugin-transform-literals@^7.18.9": 637 | version "7.18.9" 638 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" 639 | integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== 640 | dependencies: 641 | "@babel/helper-plugin-utils" "^7.18.9" 642 | 643 | "@babel/plugin-transform-member-expression-literals@^7.18.6": 644 | version "7.18.6" 645 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" 646 | integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== 647 | dependencies: 648 | "@babel/helper-plugin-utils" "^7.18.6" 649 | 650 | "@babel/plugin-transform-modules-amd@^7.19.6": 651 | version "7.20.11" 652 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" 653 | integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== 654 | dependencies: 655 | "@babel/helper-module-transforms" "^7.20.11" 656 | "@babel/helper-plugin-utils" "^7.20.2" 657 | 658 | "@babel/plugin-transform-modules-commonjs@^7.19.6": 659 | version "7.20.11" 660 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz#8cb23010869bf7669fd4b3098598b6b2be6dc607" 661 | integrity sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw== 662 | dependencies: 663 | "@babel/helper-module-transforms" "^7.20.11" 664 | "@babel/helper-plugin-utils" "^7.20.2" 665 | "@babel/helper-simple-access" "^7.20.2" 666 | 667 | "@babel/plugin-transform-modules-systemjs@^7.19.6": 668 | version "7.20.11" 669 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" 670 | integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== 671 | dependencies: 672 | "@babel/helper-hoist-variables" "^7.18.6" 673 | "@babel/helper-module-transforms" "^7.20.11" 674 | "@babel/helper-plugin-utils" "^7.20.2" 675 | "@babel/helper-validator-identifier" "^7.19.1" 676 | 677 | "@babel/plugin-transform-modules-umd@^7.18.6": 678 | version "7.18.6" 679 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" 680 | integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== 681 | dependencies: 682 | "@babel/helper-module-transforms" "^7.18.6" 683 | "@babel/helper-plugin-utils" "^7.18.6" 684 | 685 | "@babel/plugin-transform-named-capturing-groups-regex@^7.19.1": 686 | version "7.20.5" 687 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" 688 | integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== 689 | dependencies: 690 | "@babel/helper-create-regexp-features-plugin" "^7.20.5" 691 | "@babel/helper-plugin-utils" "^7.20.2" 692 | 693 | "@babel/plugin-transform-new-target@^7.18.6": 694 | version "7.18.6" 695 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" 696 | integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== 697 | dependencies: 698 | "@babel/helper-plugin-utils" "^7.18.6" 699 | 700 | "@babel/plugin-transform-object-assign@^7.12.13": 701 | version "7.18.6" 702 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.18.6.tgz#7830b4b6f83e1374a5afb9f6111bcfaea872cdd2" 703 | integrity sha512-mQisZ3JfqWh2gVXvfqYCAAyRs6+7oev+myBsTwW5RnPhYXOTuCEw2oe3YgxlXMViXUS53lG8koulI7mJ+8JE+A== 704 | dependencies: 705 | "@babel/helper-plugin-utils" "^7.18.6" 706 | 707 | "@babel/plugin-transform-object-super@^7.18.6": 708 | version "7.18.6" 709 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" 710 | integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== 711 | dependencies: 712 | "@babel/helper-plugin-utils" "^7.18.6" 713 | "@babel/helper-replace-supers" "^7.18.6" 714 | 715 | "@babel/plugin-transform-parameters@^7.20.1", "@babel/plugin-transform-parameters@^7.20.7": 716 | version "7.20.7" 717 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz#0ee349e9d1bc96e78e3b37a7af423a4078a7083f" 718 | integrity sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA== 719 | dependencies: 720 | "@babel/helper-plugin-utils" "^7.20.2" 721 | 722 | "@babel/plugin-transform-property-literals@^7.18.6": 723 | version "7.18.6" 724 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" 725 | integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== 726 | dependencies: 727 | "@babel/helper-plugin-utils" "^7.18.6" 728 | 729 | "@babel/plugin-transform-react-display-name@^7.18.6": 730 | version "7.18.6" 731 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" 732 | integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== 733 | dependencies: 734 | "@babel/helper-plugin-utils" "^7.18.6" 735 | 736 | "@babel/plugin-transform-react-jsx-development@^7.18.6": 737 | version "7.18.6" 738 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" 739 | integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== 740 | dependencies: 741 | "@babel/plugin-transform-react-jsx" "^7.18.6" 742 | 743 | "@babel/plugin-transform-react-jsx@^7.14.3", "@babel/plugin-transform-react-jsx@^7.18.6": 744 | version "7.20.7" 745 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz#025d85a1935fd7e19dfdcb1b1d4df34d4da484f7" 746 | integrity sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ== 747 | dependencies: 748 | "@babel/helper-annotate-as-pure" "^7.18.6" 749 | "@babel/helper-module-imports" "^7.18.6" 750 | "@babel/helper-plugin-utils" "^7.20.2" 751 | "@babel/plugin-syntax-jsx" "^7.18.6" 752 | "@babel/types" "^7.20.7" 753 | 754 | "@babel/plugin-transform-react-pure-annotations@^7.18.6": 755 | version "7.18.6" 756 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" 757 | integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== 758 | dependencies: 759 | "@babel/helper-annotate-as-pure" "^7.18.6" 760 | "@babel/helper-plugin-utils" "^7.18.6" 761 | 762 | "@babel/plugin-transform-regenerator@^7.18.6": 763 | version "7.20.5" 764 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" 765 | integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== 766 | dependencies: 767 | "@babel/helper-plugin-utils" "^7.20.2" 768 | regenerator-transform "^0.15.1" 769 | 770 | "@babel/plugin-transform-reserved-words@^7.18.6": 771 | version "7.18.6" 772 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" 773 | integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== 774 | dependencies: 775 | "@babel/helper-plugin-utils" "^7.18.6" 776 | 777 | "@babel/plugin-transform-runtime@^7.14.3": 778 | version "7.19.6" 779 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz#9d2a9dbf4e12644d6f46e5e75bfbf02b5d6e9194" 780 | integrity sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw== 781 | dependencies: 782 | "@babel/helper-module-imports" "^7.18.6" 783 | "@babel/helper-plugin-utils" "^7.19.0" 784 | babel-plugin-polyfill-corejs2 "^0.3.3" 785 | babel-plugin-polyfill-corejs3 "^0.6.0" 786 | babel-plugin-polyfill-regenerator "^0.4.1" 787 | semver "^6.3.0" 788 | 789 | "@babel/plugin-transform-shorthand-properties@^7.18.6": 790 | version "7.18.6" 791 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" 792 | integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== 793 | dependencies: 794 | "@babel/helper-plugin-utils" "^7.18.6" 795 | 796 | "@babel/plugin-transform-spread@^7.19.0": 797 | version "7.20.7" 798 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" 799 | integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== 800 | dependencies: 801 | "@babel/helper-plugin-utils" "^7.20.2" 802 | "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" 803 | 804 | "@babel/plugin-transform-sticky-regex@^7.18.6": 805 | version "7.18.6" 806 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" 807 | integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== 808 | dependencies: 809 | "@babel/helper-plugin-utils" "^7.18.6" 810 | 811 | "@babel/plugin-transform-template-literals@^7.18.9": 812 | version "7.18.9" 813 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" 814 | integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== 815 | dependencies: 816 | "@babel/helper-plugin-utils" "^7.18.9" 817 | 818 | "@babel/plugin-transform-typeof-symbol@^7.18.9": 819 | version "7.18.9" 820 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" 821 | integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== 822 | dependencies: 823 | "@babel/helper-plugin-utils" "^7.18.9" 824 | 825 | "@babel/plugin-transform-typescript@^7.18.6": 826 | version "7.20.7" 827 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz#673f49499cd810ae32a1ea5f3f8fab370987e055" 828 | integrity sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw== 829 | dependencies: 830 | "@babel/helper-create-class-features-plugin" "^7.20.7" 831 | "@babel/helper-plugin-utils" "^7.20.2" 832 | "@babel/plugin-syntax-typescript" "^7.20.0" 833 | 834 | "@babel/plugin-transform-unicode-escapes@^7.18.10": 835 | version "7.18.10" 836 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" 837 | integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== 838 | dependencies: 839 | "@babel/helper-plugin-utils" "^7.18.9" 840 | 841 | "@babel/plugin-transform-unicode-regex@^7.18.6": 842 | version "7.18.6" 843 | resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" 844 | integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== 845 | dependencies: 846 | "@babel/helper-create-regexp-features-plugin" "^7.18.6" 847 | "@babel/helper-plugin-utils" "^7.18.6" 848 | 849 | "@babel/preset-env@^7.14.2": 850 | version "7.20.2" 851 | resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.20.2.tgz#9b1642aa47bb9f43a86f9630011780dab7f86506" 852 | integrity sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg== 853 | dependencies: 854 | "@babel/compat-data" "^7.20.1" 855 | "@babel/helper-compilation-targets" "^7.20.0" 856 | "@babel/helper-plugin-utils" "^7.20.2" 857 | "@babel/helper-validator-option" "^7.18.6" 858 | "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" 859 | "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.18.9" 860 | "@babel/plugin-proposal-async-generator-functions" "^7.20.1" 861 | "@babel/plugin-proposal-class-properties" "^7.18.6" 862 | "@babel/plugin-proposal-class-static-block" "^7.18.6" 863 | "@babel/plugin-proposal-dynamic-import" "^7.18.6" 864 | "@babel/plugin-proposal-export-namespace-from" "^7.18.9" 865 | "@babel/plugin-proposal-json-strings" "^7.18.6" 866 | "@babel/plugin-proposal-logical-assignment-operators" "^7.18.9" 867 | "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" 868 | "@babel/plugin-proposal-numeric-separator" "^7.18.6" 869 | "@babel/plugin-proposal-object-rest-spread" "^7.20.2" 870 | "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" 871 | "@babel/plugin-proposal-optional-chaining" "^7.18.9" 872 | "@babel/plugin-proposal-private-methods" "^7.18.6" 873 | "@babel/plugin-proposal-private-property-in-object" "^7.18.6" 874 | "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" 875 | "@babel/plugin-syntax-async-generators" "^7.8.4" 876 | "@babel/plugin-syntax-class-properties" "^7.12.13" 877 | "@babel/plugin-syntax-class-static-block" "^7.14.5" 878 | "@babel/plugin-syntax-dynamic-import" "^7.8.3" 879 | "@babel/plugin-syntax-export-namespace-from" "^7.8.3" 880 | "@babel/plugin-syntax-import-assertions" "^7.20.0" 881 | "@babel/plugin-syntax-json-strings" "^7.8.3" 882 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 883 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 884 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 885 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 886 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 887 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 888 | "@babel/plugin-syntax-private-property-in-object" "^7.14.5" 889 | "@babel/plugin-syntax-top-level-await" "^7.14.5" 890 | "@babel/plugin-transform-arrow-functions" "^7.18.6" 891 | "@babel/plugin-transform-async-to-generator" "^7.18.6" 892 | "@babel/plugin-transform-block-scoped-functions" "^7.18.6" 893 | "@babel/plugin-transform-block-scoping" "^7.20.2" 894 | "@babel/plugin-transform-classes" "^7.20.2" 895 | "@babel/plugin-transform-computed-properties" "^7.18.9" 896 | "@babel/plugin-transform-destructuring" "^7.20.2" 897 | "@babel/plugin-transform-dotall-regex" "^7.18.6" 898 | "@babel/plugin-transform-duplicate-keys" "^7.18.9" 899 | "@babel/plugin-transform-exponentiation-operator" "^7.18.6" 900 | "@babel/plugin-transform-for-of" "^7.18.8" 901 | "@babel/plugin-transform-function-name" "^7.18.9" 902 | "@babel/plugin-transform-literals" "^7.18.9" 903 | "@babel/plugin-transform-member-expression-literals" "^7.18.6" 904 | "@babel/plugin-transform-modules-amd" "^7.19.6" 905 | "@babel/plugin-transform-modules-commonjs" "^7.19.6" 906 | "@babel/plugin-transform-modules-systemjs" "^7.19.6" 907 | "@babel/plugin-transform-modules-umd" "^7.18.6" 908 | "@babel/plugin-transform-named-capturing-groups-regex" "^7.19.1" 909 | "@babel/plugin-transform-new-target" "^7.18.6" 910 | "@babel/plugin-transform-object-super" "^7.18.6" 911 | "@babel/plugin-transform-parameters" "^7.20.1" 912 | "@babel/plugin-transform-property-literals" "^7.18.6" 913 | "@babel/plugin-transform-regenerator" "^7.18.6" 914 | "@babel/plugin-transform-reserved-words" "^7.18.6" 915 | "@babel/plugin-transform-shorthand-properties" "^7.18.6" 916 | "@babel/plugin-transform-spread" "^7.19.0" 917 | "@babel/plugin-transform-sticky-regex" "^7.18.6" 918 | "@babel/plugin-transform-template-literals" "^7.18.9" 919 | "@babel/plugin-transform-typeof-symbol" "^7.18.9" 920 | "@babel/plugin-transform-unicode-escapes" "^7.18.10" 921 | "@babel/plugin-transform-unicode-regex" "^7.18.6" 922 | "@babel/preset-modules" "^0.1.5" 923 | "@babel/types" "^7.20.2" 924 | babel-plugin-polyfill-corejs2 "^0.3.3" 925 | babel-plugin-polyfill-corejs3 "^0.6.0" 926 | babel-plugin-polyfill-regenerator "^0.4.1" 927 | core-js-compat "^3.25.1" 928 | semver "^6.3.0" 929 | 930 | "@babel/preset-modules@^0.1.5": 931 | version "0.1.5" 932 | resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" 933 | integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== 934 | dependencies: 935 | "@babel/helper-plugin-utils" "^7.0.0" 936 | "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" 937 | "@babel/plugin-transform-dotall-regex" "^7.4.4" 938 | "@babel/types" "^7.4.4" 939 | esutils "^2.0.2" 940 | 941 | "@babel/preset-react@^7.13.13": 942 | version "7.18.6" 943 | resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" 944 | integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== 945 | dependencies: 946 | "@babel/helper-plugin-utils" "^7.18.6" 947 | "@babel/helper-validator-option" "^7.18.6" 948 | "@babel/plugin-transform-react-display-name" "^7.18.6" 949 | "@babel/plugin-transform-react-jsx" "^7.18.6" 950 | "@babel/plugin-transform-react-jsx-development" "^7.18.6" 951 | "@babel/plugin-transform-react-pure-annotations" "^7.18.6" 952 | 953 | "@babel/preset-typescript@^7.13.0": 954 | version "7.18.6" 955 | resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" 956 | integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== 957 | dependencies: 958 | "@babel/helper-plugin-utils" "^7.18.6" 959 | "@babel/helper-validator-option" "^7.18.6" 960 | "@babel/plugin-transform-typescript" "^7.18.6" 961 | 962 | "@babel/runtime@^7.14.0", "@babel/runtime@^7.8.4": 963 | version "7.20.7" 964 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.20.7.tgz#fcb41a5a70550e04a7b708037c7c32f7f356d8fd" 965 | integrity sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ== 966 | dependencies: 967 | regenerator-runtime "^0.13.11" 968 | 969 | "@babel/template@^7.18.10", "@babel/template@^7.20.7": 970 | version "7.20.7" 971 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" 972 | integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== 973 | dependencies: 974 | "@babel/code-frame" "^7.18.6" 975 | "@babel/parser" "^7.20.7" 976 | "@babel/types" "^7.20.7" 977 | 978 | "@babel/traverse@^7.20.10", "@babel/traverse@^7.20.12", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7": 979 | version "7.20.12" 980 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.20.12.tgz#7f0f787b3a67ca4475adef1f56cb94f6abd4a4b5" 981 | integrity sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ== 982 | dependencies: 983 | "@babel/code-frame" "^7.18.6" 984 | "@babel/generator" "^7.20.7" 985 | "@babel/helper-environment-visitor" "^7.18.9" 986 | "@babel/helper-function-name" "^7.19.0" 987 | "@babel/helper-hoist-variables" "^7.18.6" 988 | "@babel/helper-split-export-declaration" "^7.18.6" 989 | "@babel/parser" "^7.20.7" 990 | "@babel/types" "^7.20.7" 991 | debug "^4.1.0" 992 | globals "^11.1.0" 993 | 994 | "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.19.0", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.4.4": 995 | version "7.20.7" 996 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.20.7.tgz#54ec75e252318423fc07fb644dc6a58a64c09b7f" 997 | integrity sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg== 998 | dependencies: 999 | "@babel/helper-string-parser" "^7.19.4" 1000 | "@babel/helper-validator-identifier" "^7.19.1" 1001 | to-fast-properties "^2.0.0" 1002 | 1003 | "@discoveryjs/json-ext@^0.5.0": 1004 | version "0.5.7" 1005 | resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" 1006 | integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== 1007 | 1008 | "@jridgewell/gen-mapping@^0.1.0": 1009 | version "0.1.1" 1010 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" 1011 | integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== 1012 | dependencies: 1013 | "@jridgewell/set-array" "^1.0.0" 1014 | "@jridgewell/sourcemap-codec" "^1.4.10" 1015 | 1016 | "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": 1017 | version "0.3.2" 1018 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" 1019 | integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== 1020 | dependencies: 1021 | "@jridgewell/set-array" "^1.0.1" 1022 | "@jridgewell/sourcemap-codec" "^1.4.10" 1023 | "@jridgewell/trace-mapping" "^0.3.9" 1024 | 1025 | "@jridgewell/resolve-uri@3.1.0": 1026 | version "3.1.0" 1027 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 1028 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 1029 | 1030 | "@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": 1031 | version "1.1.2" 1032 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 1033 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 1034 | 1035 | "@jridgewell/source-map@^0.3.2": 1036 | version "0.3.2" 1037 | resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" 1038 | integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== 1039 | dependencies: 1040 | "@jridgewell/gen-mapping" "^0.3.0" 1041 | "@jridgewell/trace-mapping" "^0.3.9" 1042 | 1043 | "@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": 1044 | version "1.4.14" 1045 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 1046 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 1047 | 1048 | "@jridgewell/trace-mapping@^0.3.14", "@jridgewell/trace-mapping@^0.3.9": 1049 | version "0.3.17" 1050 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" 1051 | integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== 1052 | dependencies: 1053 | "@jridgewell/resolve-uri" "3.1.0" 1054 | "@jridgewell/sourcemap-codec" "1.4.14" 1055 | 1056 | "@polka/url@^1.0.0-next.20": 1057 | version "1.0.0-next.21" 1058 | resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" 1059 | integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== 1060 | 1061 | "@types/eslint-scope@^3.7.3": 1062 | version "3.7.4" 1063 | resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" 1064 | integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== 1065 | dependencies: 1066 | "@types/eslint" "*" 1067 | "@types/estree" "*" 1068 | 1069 | "@types/eslint@*": 1070 | version "8.4.10" 1071 | resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.4.10.tgz#19731b9685c19ed1552da7052b6f668ed7eb64bb" 1072 | integrity sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw== 1073 | dependencies: 1074 | "@types/estree" "*" 1075 | "@types/json-schema" "*" 1076 | 1077 | "@types/estree@*": 1078 | version "1.0.0" 1079 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" 1080 | integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== 1081 | 1082 | "@types/estree@^0.0.51": 1083 | version "0.0.51" 1084 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" 1085 | integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== 1086 | 1087 | "@types/jquery@^3.5.5": 1088 | version "3.5.16" 1089 | resolved "https://registry.yarnpkg.com/@types/jquery/-/jquery-3.5.16.tgz#632131baf30951915b0317d48c98e9890bdf051d" 1090 | integrity sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw== 1091 | dependencies: 1092 | "@types/sizzle" "*" 1093 | 1094 | "@types/json-schema@*", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8": 1095 | version "7.0.11" 1096 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" 1097 | integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== 1098 | 1099 | "@types/mithril@^2.0.7": 1100 | version "2.0.12" 1101 | resolved "https://registry.yarnpkg.com/@types/mithril/-/mithril-2.0.12.tgz#3391c691617c79e2e8e60dfa97527fc948cf07db" 1102 | integrity sha512-vedzt04n3EB7rcnfSLCv3+w3qJLkGWdsNRBKvelTqhSJSfg73Roq9b+rcnn9zeqGYtQAMqNcO6vNBR/w0OzipQ== 1103 | 1104 | "@types/node@*": 1105 | version "18.11.18" 1106 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f" 1107 | integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA== 1108 | 1109 | "@types/sizzle@*": 1110 | version "2.3.3" 1111 | resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" 1112 | integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== 1113 | 1114 | "@types/throttle-debounce@^2.1.0": 1115 | version "2.1.0" 1116 | resolved "https://registry.yarnpkg.com/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz#1c3df624bfc4b62f992d3012b84c56d41eab3776" 1117 | integrity sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ== 1118 | 1119 | "@webassemblyjs/ast@1.11.1": 1120 | version "1.11.1" 1121 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" 1122 | integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== 1123 | dependencies: 1124 | "@webassemblyjs/helper-numbers" "1.11.1" 1125 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 1126 | 1127 | "@webassemblyjs/floating-point-hex-parser@1.11.1": 1128 | version "1.11.1" 1129 | resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" 1130 | integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== 1131 | 1132 | "@webassemblyjs/helper-api-error@1.11.1": 1133 | version "1.11.1" 1134 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" 1135 | integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== 1136 | 1137 | "@webassemblyjs/helper-buffer@1.11.1": 1138 | version "1.11.1" 1139 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" 1140 | integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== 1141 | 1142 | "@webassemblyjs/helper-numbers@1.11.1": 1143 | version "1.11.1" 1144 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" 1145 | integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== 1146 | dependencies: 1147 | "@webassemblyjs/floating-point-hex-parser" "1.11.1" 1148 | "@webassemblyjs/helper-api-error" "1.11.1" 1149 | "@xtuc/long" "4.2.2" 1150 | 1151 | "@webassemblyjs/helper-wasm-bytecode@1.11.1": 1152 | version "1.11.1" 1153 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" 1154 | integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== 1155 | 1156 | "@webassemblyjs/helper-wasm-section@1.11.1": 1157 | version "1.11.1" 1158 | resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" 1159 | integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== 1160 | dependencies: 1161 | "@webassemblyjs/ast" "1.11.1" 1162 | "@webassemblyjs/helper-buffer" "1.11.1" 1163 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 1164 | "@webassemblyjs/wasm-gen" "1.11.1" 1165 | 1166 | "@webassemblyjs/ieee754@1.11.1": 1167 | version "1.11.1" 1168 | resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" 1169 | integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== 1170 | dependencies: 1171 | "@xtuc/ieee754" "^1.2.0" 1172 | 1173 | "@webassemblyjs/leb128@1.11.1": 1174 | version "1.11.1" 1175 | resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" 1176 | integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== 1177 | dependencies: 1178 | "@xtuc/long" "4.2.2" 1179 | 1180 | "@webassemblyjs/utf8@1.11.1": 1181 | version "1.11.1" 1182 | resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" 1183 | integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== 1184 | 1185 | "@webassemblyjs/wasm-edit@1.11.1": 1186 | version "1.11.1" 1187 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" 1188 | integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== 1189 | dependencies: 1190 | "@webassemblyjs/ast" "1.11.1" 1191 | "@webassemblyjs/helper-buffer" "1.11.1" 1192 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 1193 | "@webassemblyjs/helper-wasm-section" "1.11.1" 1194 | "@webassemblyjs/wasm-gen" "1.11.1" 1195 | "@webassemblyjs/wasm-opt" "1.11.1" 1196 | "@webassemblyjs/wasm-parser" "1.11.1" 1197 | "@webassemblyjs/wast-printer" "1.11.1" 1198 | 1199 | "@webassemblyjs/wasm-gen@1.11.1": 1200 | version "1.11.1" 1201 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" 1202 | integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== 1203 | dependencies: 1204 | "@webassemblyjs/ast" "1.11.1" 1205 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 1206 | "@webassemblyjs/ieee754" "1.11.1" 1207 | "@webassemblyjs/leb128" "1.11.1" 1208 | "@webassemblyjs/utf8" "1.11.1" 1209 | 1210 | "@webassemblyjs/wasm-opt@1.11.1": 1211 | version "1.11.1" 1212 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" 1213 | integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== 1214 | dependencies: 1215 | "@webassemblyjs/ast" "1.11.1" 1216 | "@webassemblyjs/helper-buffer" "1.11.1" 1217 | "@webassemblyjs/wasm-gen" "1.11.1" 1218 | "@webassemblyjs/wasm-parser" "1.11.1" 1219 | 1220 | "@webassemblyjs/wasm-parser@1.11.1": 1221 | version "1.11.1" 1222 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" 1223 | integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== 1224 | dependencies: 1225 | "@webassemblyjs/ast" "1.11.1" 1226 | "@webassemblyjs/helper-api-error" "1.11.1" 1227 | "@webassemblyjs/helper-wasm-bytecode" "1.11.1" 1228 | "@webassemblyjs/ieee754" "1.11.1" 1229 | "@webassemblyjs/leb128" "1.11.1" 1230 | "@webassemblyjs/utf8" "1.11.1" 1231 | 1232 | "@webassemblyjs/wast-printer@1.11.1": 1233 | version "1.11.1" 1234 | resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" 1235 | integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== 1236 | dependencies: 1237 | "@webassemblyjs/ast" "1.11.1" 1238 | "@xtuc/long" "4.2.2" 1239 | 1240 | "@webpack-cli/configtest@^1.2.0": 1241 | version "1.2.0" 1242 | resolved "https://registry.yarnpkg.com/@webpack-cli/configtest/-/configtest-1.2.0.tgz#7b20ce1c12533912c3b217ea68262365fa29a6f5" 1243 | integrity sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg== 1244 | 1245 | "@webpack-cli/info@^1.5.0": 1246 | version "1.5.0" 1247 | resolved "https://registry.yarnpkg.com/@webpack-cli/info/-/info-1.5.0.tgz#6c78c13c5874852d6e2dd17f08a41f3fe4c261b1" 1248 | integrity sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ== 1249 | dependencies: 1250 | envinfo "^7.7.3" 1251 | 1252 | "@webpack-cli/serve@^1.7.0": 1253 | version "1.7.0" 1254 | resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.7.0.tgz#e1993689ac42d2b16e9194376cfb6753f6254db1" 1255 | integrity sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q== 1256 | 1257 | "@xtuc/ieee754@^1.2.0": 1258 | version "1.2.0" 1259 | resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" 1260 | integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== 1261 | 1262 | "@xtuc/long@4.2.2": 1263 | version "4.2.2" 1264 | resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" 1265 | integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== 1266 | 1267 | acorn-import-assertions@^1.7.6: 1268 | version "1.8.0" 1269 | resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" 1270 | integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== 1271 | 1272 | acorn-walk@^8.0.0: 1273 | version "8.2.0" 1274 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" 1275 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== 1276 | 1277 | acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: 1278 | version "8.8.1" 1279 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73" 1280 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA== 1281 | 1282 | ajv-keywords@^3.5.2: 1283 | version "3.5.2" 1284 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" 1285 | integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== 1286 | 1287 | ajv@^6.12.4, ajv@^6.12.5: 1288 | version "6.12.6" 1289 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 1290 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 1291 | dependencies: 1292 | fast-deep-equal "^3.1.1" 1293 | fast-json-stable-stringify "^2.0.0" 1294 | json-schema-traverse "^0.4.1" 1295 | uri-js "^4.2.2" 1296 | 1297 | ansi-styles@^3.2.1: 1298 | version "3.2.1" 1299 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 1300 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 1301 | dependencies: 1302 | color-convert "^1.9.0" 1303 | 1304 | ansi-styles@^4.1.0: 1305 | version "4.3.0" 1306 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 1307 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 1308 | dependencies: 1309 | color-convert "^2.0.1" 1310 | 1311 | babel-loader@^8.2.2: 1312 | version "8.3.0" 1313 | resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" 1314 | integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== 1315 | dependencies: 1316 | find-cache-dir "^3.3.1" 1317 | loader-utils "^2.0.0" 1318 | make-dir "^3.1.0" 1319 | schema-utils "^2.6.5" 1320 | 1321 | babel-plugin-polyfill-corejs2@^0.3.3: 1322 | version "0.3.3" 1323 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" 1324 | integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== 1325 | dependencies: 1326 | "@babel/compat-data" "^7.17.7" 1327 | "@babel/helper-define-polyfill-provider" "^0.3.3" 1328 | semver "^6.1.1" 1329 | 1330 | babel-plugin-polyfill-corejs3@^0.6.0: 1331 | version "0.6.0" 1332 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" 1333 | integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== 1334 | dependencies: 1335 | "@babel/helper-define-polyfill-provider" "^0.3.3" 1336 | core-js-compat "^3.25.1" 1337 | 1338 | babel-plugin-polyfill-regenerator@^0.4.1: 1339 | version "0.4.1" 1340 | resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" 1341 | integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== 1342 | dependencies: 1343 | "@babel/helper-define-polyfill-provider" "^0.3.3" 1344 | 1345 | big.js@^5.2.2: 1346 | version "5.2.2" 1347 | resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" 1348 | integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== 1349 | 1350 | browserslist@^4.14.5, browserslist@^4.21.3, browserslist@^4.21.4: 1351 | version "4.21.4" 1352 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.4.tgz#e7496bbc67b9e39dd0f98565feccdcb0d4ff6987" 1353 | integrity sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw== 1354 | dependencies: 1355 | caniuse-lite "^1.0.30001400" 1356 | electron-to-chromium "^1.4.251" 1357 | node-releases "^2.0.6" 1358 | update-browserslist-db "^1.0.9" 1359 | 1360 | buffer-from@^1.0.0: 1361 | version "1.1.2" 1362 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 1363 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 1364 | 1365 | caniuse-lite@^1.0.30001400: 1366 | version "1.0.30001442" 1367 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz#40337f1cf3be7c637b061e2f78582dc1daec0614" 1368 | integrity sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow== 1369 | 1370 | chalk@^2.0.0: 1371 | version "2.4.2" 1372 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 1373 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 1374 | dependencies: 1375 | ansi-styles "^3.2.1" 1376 | escape-string-regexp "^1.0.5" 1377 | supports-color "^5.3.0" 1378 | 1379 | chalk@^4.1.0: 1380 | version "4.1.2" 1381 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1382 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1383 | dependencies: 1384 | ansi-styles "^4.1.0" 1385 | supports-color "^7.1.0" 1386 | 1387 | chrome-trace-event@^1.0.2: 1388 | version "1.0.3" 1389 | resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" 1390 | integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== 1391 | 1392 | clone-deep@^4.0.1: 1393 | version "4.0.1" 1394 | resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" 1395 | integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== 1396 | dependencies: 1397 | is-plain-object "^2.0.4" 1398 | kind-of "^6.0.2" 1399 | shallow-clone "^3.0.0" 1400 | 1401 | color-convert@^1.9.0: 1402 | version "1.9.3" 1403 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 1404 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 1405 | dependencies: 1406 | color-name "1.1.3" 1407 | 1408 | color-convert@^2.0.1: 1409 | version "2.0.1" 1410 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1411 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1412 | dependencies: 1413 | color-name "~1.1.4" 1414 | 1415 | color-name@1.1.3: 1416 | version "1.1.3" 1417 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 1418 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 1419 | 1420 | color-name@~1.1.4: 1421 | version "1.1.4" 1422 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1423 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1424 | 1425 | colorette@^2.0.14: 1426 | version "2.0.19" 1427 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" 1428 | integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== 1429 | 1430 | commander@^2.20.0: 1431 | version "2.20.3" 1432 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 1433 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 1434 | 1435 | commander@^7.0.0, commander@^7.2.0: 1436 | version "7.2.0" 1437 | resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" 1438 | integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== 1439 | 1440 | commondir@^1.0.1: 1441 | version "1.0.1" 1442 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 1443 | integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== 1444 | 1445 | convert-source-map@^1.7.0: 1446 | version "1.9.0" 1447 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" 1448 | integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== 1449 | 1450 | core-js-compat@^3.25.1: 1451 | version "3.27.1" 1452 | resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.27.1.tgz#b5695eb25c602d72b1d30cbfba3cb7e5e4cf0a67" 1453 | integrity sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA== 1454 | dependencies: 1455 | browserslist "^4.21.4" 1456 | 1457 | cross-spawn@^7.0.3: 1458 | version "7.0.3" 1459 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 1460 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 1461 | dependencies: 1462 | path-key "^3.1.0" 1463 | shebang-command "^2.0.0" 1464 | which "^2.0.1" 1465 | 1466 | dayjs@^1.10.4: 1467 | version "1.11.7" 1468 | resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" 1469 | integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== 1470 | 1471 | debug@^4.1.0, debug@^4.1.1: 1472 | version "4.3.4" 1473 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 1474 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1475 | dependencies: 1476 | ms "2.1.2" 1477 | 1478 | duplexer@^0.1.2: 1479 | version "0.1.2" 1480 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" 1481 | integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== 1482 | 1483 | electron-to-chromium@^1.4.251: 1484 | version "1.4.284" 1485 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz#61046d1e4cab3a25238f6bf7413795270f125592" 1486 | integrity sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA== 1487 | 1488 | emojis-list@^3.0.0: 1489 | version "3.0.0" 1490 | resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" 1491 | integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== 1492 | 1493 | enhanced-resolve@^5.10.0: 1494 | version "5.12.0" 1495 | resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" 1496 | integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== 1497 | dependencies: 1498 | graceful-fs "^4.2.4" 1499 | tapable "^2.2.0" 1500 | 1501 | envinfo@^7.7.3: 1502 | version "7.8.1" 1503 | resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.8.1.tgz#06377e3e5f4d379fea7ac592d5ad8927e0c4d475" 1504 | integrity sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw== 1505 | 1506 | es-module-lexer@^0.9.0: 1507 | version "0.9.3" 1508 | resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" 1509 | integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== 1510 | 1511 | escalade@^3.1.1: 1512 | version "3.1.1" 1513 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 1514 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 1515 | 1516 | escape-string-regexp@^1.0.5: 1517 | version "1.0.5" 1518 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 1519 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 1520 | 1521 | eslint-scope@5.1.1: 1522 | version "5.1.1" 1523 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 1524 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 1525 | dependencies: 1526 | esrecurse "^4.3.0" 1527 | estraverse "^4.1.1" 1528 | 1529 | esrecurse@^4.3.0: 1530 | version "4.3.0" 1531 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 1532 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 1533 | dependencies: 1534 | estraverse "^5.2.0" 1535 | 1536 | estraverse@^4.1.1: 1537 | version "4.3.0" 1538 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 1539 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1540 | 1541 | estraverse@^5.2.0: 1542 | version "5.3.0" 1543 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 1544 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 1545 | 1546 | esutils@^2.0.2: 1547 | version "2.0.3" 1548 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1549 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1550 | 1551 | events@^3.2.0: 1552 | version "3.3.0" 1553 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 1554 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 1555 | 1556 | fast-deep-equal@^3.1.1: 1557 | version "3.1.3" 1558 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 1559 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 1560 | 1561 | fast-json-stable-stringify@^2.0.0: 1562 | version "2.1.0" 1563 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1564 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1565 | 1566 | fastest-levenshtein@^1.0.12: 1567 | version "1.0.16" 1568 | resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" 1569 | integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== 1570 | 1571 | find-cache-dir@^3.3.1: 1572 | version "3.3.2" 1573 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" 1574 | integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== 1575 | dependencies: 1576 | commondir "^1.0.1" 1577 | make-dir "^3.0.2" 1578 | pkg-dir "^4.1.0" 1579 | 1580 | find-up@^4.0.0: 1581 | version "4.1.0" 1582 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1583 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1584 | dependencies: 1585 | locate-path "^5.0.0" 1586 | path-exists "^4.0.0" 1587 | 1588 | flarum-tsconfig@^1.0: 1589 | version "1.0.2" 1590 | resolved "https://registry.yarnpkg.com/flarum-tsconfig/-/flarum-tsconfig-1.0.2.tgz#1dda4d867a1dddc627c2afbc74af12d602371ecd" 1591 | integrity sha512-RUaN7D6noLK9vY1F86NIc+IlIP1YAA3bJ4jGR5pIm8UxvLBLW8qrAHzIosuQJgvnge7VgTA5c2LoNefUK/9EiQ== 1592 | dependencies: 1593 | "@types/jquery" "^3.5.5" 1594 | "@types/mithril" "^2.0.7" 1595 | "@types/throttle-debounce" "^2.1.0" 1596 | dayjs "^1.10.4" 1597 | 1598 | flarum-webpack-config@^2.0: 1599 | version "2.0.0" 1600 | resolved "https://registry.yarnpkg.com/flarum-webpack-config/-/flarum-webpack-config-2.0.0.tgz#a64d0563aa80773cf6de40891035ad7c0798855e" 1601 | integrity sha512-IdH8SmPzrha1RYIx0VDowKu8Wbxb1X5GwpJ6McF6tWfmIEBOn0z2C2MKh3807cxumBx4DP3YvZCcO5Il8zJGhA== 1602 | dependencies: 1603 | "@babel/core" "^7.14.3" 1604 | "@babel/plugin-proposal-class-properties" "^7.13.0" 1605 | "@babel/plugin-proposal-private-methods" "^7.13.0" 1606 | "@babel/plugin-transform-object-assign" "^7.12.13" 1607 | "@babel/plugin-transform-react-jsx" "^7.14.3" 1608 | "@babel/plugin-transform-runtime" "^7.14.3" 1609 | "@babel/preset-env" "^7.14.2" 1610 | "@babel/preset-react" "^7.13.13" 1611 | "@babel/preset-typescript" "^7.13.0" 1612 | "@babel/runtime" "^7.14.0" 1613 | babel-loader "^8.2.2" 1614 | typescript "^4.3.2" 1615 | webpack-bundle-analyzer "^4.4.2" 1616 | 1617 | function-bind@^1.1.1: 1618 | version "1.1.1" 1619 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1620 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1621 | 1622 | gensync@^1.0.0-beta.2: 1623 | version "1.0.0-beta.2" 1624 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1625 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1626 | 1627 | glob-to-regexp@^0.4.1: 1628 | version "0.4.1" 1629 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" 1630 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== 1631 | 1632 | globals@^11.1.0: 1633 | version "11.12.0" 1634 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1635 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1636 | 1637 | graceful-fs@^4.1.2, graceful-fs@^4.2.4, graceful-fs@^4.2.9: 1638 | version "4.2.10" 1639 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 1640 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 1641 | 1642 | gzip-size@^6.0.0: 1643 | version "6.0.0" 1644 | resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" 1645 | integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== 1646 | dependencies: 1647 | duplexer "^0.1.2" 1648 | 1649 | has-flag@^3.0.0: 1650 | version "3.0.0" 1651 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1652 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 1653 | 1654 | has-flag@^4.0.0: 1655 | version "4.0.0" 1656 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1657 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1658 | 1659 | has@^1.0.3: 1660 | version "1.0.3" 1661 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1662 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1663 | dependencies: 1664 | function-bind "^1.1.1" 1665 | 1666 | import-local@^3.0.2: 1667 | version "3.1.0" 1668 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" 1669 | integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== 1670 | dependencies: 1671 | pkg-dir "^4.2.0" 1672 | resolve-cwd "^3.0.0" 1673 | 1674 | interpret@^2.2.0: 1675 | version "2.2.0" 1676 | resolved "https://registry.yarnpkg.com/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9" 1677 | integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw== 1678 | 1679 | is-core-module@^2.9.0: 1680 | version "2.11.0" 1681 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" 1682 | integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== 1683 | dependencies: 1684 | has "^1.0.3" 1685 | 1686 | is-plain-object@^2.0.4: 1687 | version "2.0.4" 1688 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" 1689 | integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== 1690 | dependencies: 1691 | isobject "^3.0.1" 1692 | 1693 | isexe@^2.0.0: 1694 | version "2.0.0" 1695 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1696 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1697 | 1698 | isobject@^3.0.1: 1699 | version "3.0.1" 1700 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" 1701 | integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== 1702 | 1703 | jest-worker@^27.4.5: 1704 | version "27.5.1" 1705 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" 1706 | integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== 1707 | dependencies: 1708 | "@types/node" "*" 1709 | merge-stream "^2.0.0" 1710 | supports-color "^8.0.0" 1711 | 1712 | js-tokens@^4.0.0: 1713 | version "4.0.0" 1714 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1715 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1716 | 1717 | jsesc@^2.5.1: 1718 | version "2.5.2" 1719 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1720 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1721 | 1722 | jsesc@~0.5.0: 1723 | version "0.5.0" 1724 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1725 | integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== 1726 | 1727 | json-parse-even-better-errors@^2.3.1: 1728 | version "2.3.1" 1729 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1730 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1731 | 1732 | json-schema-traverse@^0.4.1: 1733 | version "0.4.1" 1734 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1735 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1736 | 1737 | json5@^2.1.2, json5@^2.2.2: 1738 | version "2.2.3" 1739 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 1740 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 1741 | 1742 | kind-of@^6.0.2: 1743 | version "6.0.3" 1744 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" 1745 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== 1746 | 1747 | loader-runner@^4.2.0: 1748 | version "4.3.0" 1749 | resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" 1750 | integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== 1751 | 1752 | loader-utils@^2.0.0: 1753 | version "2.0.4" 1754 | resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" 1755 | integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== 1756 | dependencies: 1757 | big.js "^5.2.2" 1758 | emojis-list "^3.0.0" 1759 | json5 "^2.1.2" 1760 | 1761 | locate-path@^5.0.0: 1762 | version "5.0.0" 1763 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 1764 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 1765 | dependencies: 1766 | p-locate "^4.1.0" 1767 | 1768 | lodash.debounce@^4.0.8: 1769 | version "4.0.8" 1770 | resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" 1771 | integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== 1772 | 1773 | lodash@^4.17.20: 1774 | version "4.17.21" 1775 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" 1776 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== 1777 | 1778 | lru-cache@^5.1.1: 1779 | version "5.1.1" 1780 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 1781 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 1782 | dependencies: 1783 | yallist "^3.0.2" 1784 | 1785 | make-dir@^3.0.2, make-dir@^3.1.0: 1786 | version "3.1.0" 1787 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 1788 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 1789 | dependencies: 1790 | semver "^6.0.0" 1791 | 1792 | merge-stream@^2.0.0: 1793 | version "2.0.0" 1794 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 1795 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 1796 | 1797 | mime-db@1.52.0: 1798 | version "1.52.0" 1799 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 1800 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 1801 | 1802 | mime-types@^2.1.27: 1803 | version "2.1.35" 1804 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 1805 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 1806 | dependencies: 1807 | mime-db "1.52.0" 1808 | 1809 | mrmime@^1.0.0: 1810 | version "1.0.1" 1811 | resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" 1812 | integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== 1813 | 1814 | ms@2.1.2: 1815 | version "2.1.2" 1816 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1817 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1818 | 1819 | neo-async@^2.6.2: 1820 | version "2.6.2" 1821 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 1822 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 1823 | 1824 | node-releases@^2.0.6: 1825 | version "2.0.8" 1826 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.8.tgz#0f349cdc8fcfa39a92ac0be9bc48b7706292b9ae" 1827 | integrity sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A== 1828 | 1829 | opener@^1.5.2: 1830 | version "1.5.2" 1831 | resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" 1832 | integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== 1833 | 1834 | p-limit@^2.2.0: 1835 | version "2.3.0" 1836 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 1837 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 1838 | dependencies: 1839 | p-try "^2.0.0" 1840 | 1841 | p-locate@^4.1.0: 1842 | version "4.1.0" 1843 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 1844 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 1845 | dependencies: 1846 | p-limit "^2.2.0" 1847 | 1848 | p-try@^2.0.0: 1849 | version "2.2.0" 1850 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 1851 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 1852 | 1853 | path-exists@^4.0.0: 1854 | version "4.0.0" 1855 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1856 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1857 | 1858 | path-key@^3.1.0: 1859 | version "3.1.1" 1860 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1861 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1862 | 1863 | path-parse@^1.0.7: 1864 | version "1.0.7" 1865 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1866 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1867 | 1868 | picocolors@^1.0.0: 1869 | version "1.0.0" 1870 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" 1871 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== 1872 | 1873 | pkg-dir@^4.1.0, pkg-dir@^4.2.0: 1874 | version "4.2.0" 1875 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 1876 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 1877 | dependencies: 1878 | find-up "^4.0.0" 1879 | 1880 | punycode@^2.1.0: 1881 | version "2.2.0" 1882 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.2.0.tgz#2092cc57cd2582c38e4e7e8bb869dc8d3148bc74" 1883 | integrity sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw== 1884 | 1885 | randombytes@^2.1.0: 1886 | version "2.1.0" 1887 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 1888 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 1889 | dependencies: 1890 | safe-buffer "^5.1.0" 1891 | 1892 | rechoir@^0.7.0: 1893 | version "0.7.1" 1894 | resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.1.tgz#9478a96a1ca135b5e88fc027f03ee92d6c645686" 1895 | integrity sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg== 1896 | dependencies: 1897 | resolve "^1.9.0" 1898 | 1899 | regenerate-unicode-properties@^10.1.0: 1900 | version "10.1.0" 1901 | resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" 1902 | integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== 1903 | dependencies: 1904 | regenerate "^1.4.2" 1905 | 1906 | regenerate@^1.4.2: 1907 | version "1.4.2" 1908 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" 1909 | integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== 1910 | 1911 | regenerator-runtime@^0.13.11: 1912 | version "0.13.11" 1913 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" 1914 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== 1915 | 1916 | regenerator-transform@^0.15.1: 1917 | version "0.15.1" 1918 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" 1919 | integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== 1920 | dependencies: 1921 | "@babel/runtime" "^7.8.4" 1922 | 1923 | regexpu-core@^5.2.1: 1924 | version "5.2.2" 1925 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.2.2.tgz#3e4e5d12103b64748711c3aad69934d7718e75fc" 1926 | integrity sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw== 1927 | dependencies: 1928 | regenerate "^1.4.2" 1929 | regenerate-unicode-properties "^10.1.0" 1930 | regjsgen "^0.7.1" 1931 | regjsparser "^0.9.1" 1932 | unicode-match-property-ecmascript "^2.0.0" 1933 | unicode-match-property-value-ecmascript "^2.1.0" 1934 | 1935 | regjsgen@^0.7.1: 1936 | version "0.7.1" 1937 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.7.1.tgz#ee5ef30e18d3f09b7c369b76e7c2373ed25546f6" 1938 | integrity sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA== 1939 | 1940 | regjsparser@^0.9.1: 1941 | version "0.9.1" 1942 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" 1943 | integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== 1944 | dependencies: 1945 | jsesc "~0.5.0" 1946 | 1947 | resolve-cwd@^3.0.0: 1948 | version "3.0.0" 1949 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 1950 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 1951 | dependencies: 1952 | resolve-from "^5.0.0" 1953 | 1954 | resolve-from@^5.0.0: 1955 | version "5.0.0" 1956 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 1957 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 1958 | 1959 | resolve@^1.14.2, resolve@^1.9.0: 1960 | version "1.22.1" 1961 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" 1962 | integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== 1963 | dependencies: 1964 | is-core-module "^2.9.0" 1965 | path-parse "^1.0.7" 1966 | supports-preserve-symlinks-flag "^1.0.0" 1967 | 1968 | safe-buffer@^5.1.0: 1969 | version "5.2.1" 1970 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1971 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1972 | 1973 | schema-utils@^2.6.5: 1974 | version "2.7.1" 1975 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" 1976 | integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== 1977 | dependencies: 1978 | "@types/json-schema" "^7.0.5" 1979 | ajv "^6.12.4" 1980 | ajv-keywords "^3.5.2" 1981 | 1982 | schema-utils@^3.1.0, schema-utils@^3.1.1: 1983 | version "3.1.1" 1984 | resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" 1985 | integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== 1986 | dependencies: 1987 | "@types/json-schema" "^7.0.8" 1988 | ajv "^6.12.5" 1989 | ajv-keywords "^3.5.2" 1990 | 1991 | semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: 1992 | version "6.3.0" 1993 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1994 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1995 | 1996 | serialize-javascript@^6.0.0: 1997 | version "6.0.0" 1998 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" 1999 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== 2000 | dependencies: 2001 | randombytes "^2.1.0" 2002 | 2003 | shallow-clone@^3.0.0: 2004 | version "3.0.1" 2005 | resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" 2006 | integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== 2007 | dependencies: 2008 | kind-of "^6.0.2" 2009 | 2010 | shebang-command@^2.0.0: 2011 | version "2.0.0" 2012 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2013 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2014 | dependencies: 2015 | shebang-regex "^3.0.0" 2016 | 2017 | shebang-regex@^3.0.0: 2018 | version "3.0.0" 2019 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2020 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2021 | 2022 | sirv@^1.0.7: 2023 | version "1.0.19" 2024 | resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" 2025 | integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== 2026 | dependencies: 2027 | "@polka/url" "^1.0.0-next.20" 2028 | mrmime "^1.0.0" 2029 | totalist "^1.0.0" 2030 | 2031 | source-map-support@~0.5.20: 2032 | version "0.5.21" 2033 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 2034 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 2035 | dependencies: 2036 | buffer-from "^1.0.0" 2037 | source-map "^0.6.0" 2038 | 2039 | source-map@^0.6.0: 2040 | version "0.6.1" 2041 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2042 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2043 | 2044 | supports-color@^5.3.0: 2045 | version "5.5.0" 2046 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2047 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2048 | dependencies: 2049 | has-flag "^3.0.0" 2050 | 2051 | supports-color@^7.1.0: 2052 | version "7.2.0" 2053 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2054 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2055 | dependencies: 2056 | has-flag "^4.0.0" 2057 | 2058 | supports-color@^8.0.0: 2059 | version "8.1.1" 2060 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2061 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2062 | dependencies: 2063 | has-flag "^4.0.0" 2064 | 2065 | supports-preserve-symlinks-flag@^1.0.0: 2066 | version "1.0.0" 2067 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2068 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2069 | 2070 | tapable@^2.1.1, tapable@^2.2.0: 2071 | version "2.2.1" 2072 | resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" 2073 | integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== 2074 | 2075 | terser-webpack-plugin@^5.1.3: 2076 | version "5.3.6" 2077 | resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz#5590aec31aa3c6f771ce1b1acca60639eab3195c" 2078 | integrity sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ== 2079 | dependencies: 2080 | "@jridgewell/trace-mapping" "^0.3.14" 2081 | jest-worker "^27.4.5" 2082 | schema-utils "^3.1.1" 2083 | serialize-javascript "^6.0.0" 2084 | terser "^5.14.1" 2085 | 2086 | terser@^5.14.1: 2087 | version "5.16.1" 2088 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" 2089 | integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== 2090 | dependencies: 2091 | "@jridgewell/source-map" "^0.3.2" 2092 | acorn "^8.5.0" 2093 | commander "^2.20.0" 2094 | source-map-support "~0.5.20" 2095 | 2096 | to-fast-properties@^2.0.0: 2097 | version "2.0.0" 2098 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2099 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 2100 | 2101 | totalist@^1.0.0: 2102 | version "1.1.0" 2103 | resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" 2104 | integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== 2105 | 2106 | typescript@^4.3.2: 2107 | version "4.9.4" 2108 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78" 2109 | integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg== 2110 | 2111 | unicode-canonical-property-names-ecmascript@^2.0.0: 2112 | version "2.0.0" 2113 | resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" 2114 | integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== 2115 | 2116 | unicode-match-property-ecmascript@^2.0.0: 2117 | version "2.0.0" 2118 | resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" 2119 | integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== 2120 | dependencies: 2121 | unicode-canonical-property-names-ecmascript "^2.0.0" 2122 | unicode-property-aliases-ecmascript "^2.0.0" 2123 | 2124 | unicode-match-property-value-ecmascript@^2.1.0: 2125 | version "2.1.0" 2126 | resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" 2127 | integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== 2128 | 2129 | unicode-property-aliases-ecmascript@^2.0.0: 2130 | version "2.1.0" 2131 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" 2132 | integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== 2133 | 2134 | update-browserslist-db@^1.0.9: 2135 | version "1.0.10" 2136 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" 2137 | integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== 2138 | dependencies: 2139 | escalade "^3.1.1" 2140 | picocolors "^1.0.0" 2141 | 2142 | uri-js@^4.2.2: 2143 | version "4.4.1" 2144 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 2145 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 2146 | dependencies: 2147 | punycode "^2.1.0" 2148 | 2149 | watchpack@^2.4.0: 2150 | version "2.4.0" 2151 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" 2152 | integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== 2153 | dependencies: 2154 | glob-to-regexp "^0.4.1" 2155 | graceful-fs "^4.1.2" 2156 | 2157 | webpack-bundle-analyzer@^4.4.2: 2158 | version "4.7.0" 2159 | resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz#33c1c485a7fcae8627c547b5c3328b46de733c66" 2160 | integrity sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg== 2161 | dependencies: 2162 | acorn "^8.0.4" 2163 | acorn-walk "^8.0.0" 2164 | chalk "^4.1.0" 2165 | commander "^7.2.0" 2166 | gzip-size "^6.0.0" 2167 | lodash "^4.17.20" 2168 | opener "^1.5.2" 2169 | sirv "^1.0.7" 2170 | ws "^7.3.1" 2171 | 2172 | webpack-cli@^4.9: 2173 | version "4.10.0" 2174 | resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-4.10.0.tgz#37c1d69c8d85214c5a65e589378f53aec64dab31" 2175 | integrity sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w== 2176 | dependencies: 2177 | "@discoveryjs/json-ext" "^0.5.0" 2178 | "@webpack-cli/configtest" "^1.2.0" 2179 | "@webpack-cli/info" "^1.5.0" 2180 | "@webpack-cli/serve" "^1.7.0" 2181 | colorette "^2.0.14" 2182 | commander "^7.0.0" 2183 | cross-spawn "^7.0.3" 2184 | fastest-levenshtein "^1.0.12" 2185 | import-local "^3.0.2" 2186 | interpret "^2.2.0" 2187 | rechoir "^0.7.0" 2188 | webpack-merge "^5.7.3" 2189 | 2190 | webpack-merge@^5.7.3: 2191 | version "5.8.0" 2192 | resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" 2193 | integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== 2194 | dependencies: 2195 | clone-deep "^4.0.1" 2196 | wildcard "^2.0.0" 2197 | 2198 | webpack-sources@^3.2.3: 2199 | version "3.2.3" 2200 | resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" 2201 | integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== 2202 | 2203 | webpack@^5.65: 2204 | version "5.75.0" 2205 | resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.75.0.tgz#1e440468647b2505860e94c9ff3e44d5b582c152" 2206 | integrity sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ== 2207 | dependencies: 2208 | "@types/eslint-scope" "^3.7.3" 2209 | "@types/estree" "^0.0.51" 2210 | "@webassemblyjs/ast" "1.11.1" 2211 | "@webassemblyjs/wasm-edit" "1.11.1" 2212 | "@webassemblyjs/wasm-parser" "1.11.1" 2213 | acorn "^8.7.1" 2214 | acorn-import-assertions "^1.7.6" 2215 | browserslist "^4.14.5" 2216 | chrome-trace-event "^1.0.2" 2217 | enhanced-resolve "^5.10.0" 2218 | es-module-lexer "^0.9.0" 2219 | eslint-scope "5.1.1" 2220 | events "^3.2.0" 2221 | glob-to-regexp "^0.4.1" 2222 | graceful-fs "^4.2.9" 2223 | json-parse-even-better-errors "^2.3.1" 2224 | loader-runner "^4.2.0" 2225 | mime-types "^2.1.27" 2226 | neo-async "^2.6.2" 2227 | schema-utils "^3.1.0" 2228 | tapable "^2.1.1" 2229 | terser-webpack-plugin "^5.1.3" 2230 | watchpack "^2.4.0" 2231 | webpack-sources "^3.2.3" 2232 | 2233 | which@^2.0.1: 2234 | version "2.0.2" 2235 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2236 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2237 | dependencies: 2238 | isexe "^2.0.0" 2239 | 2240 | wildcard@^2.0.0: 2241 | version "2.0.0" 2242 | resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" 2243 | integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== 2244 | 2245 | ws@^7.3.1: 2246 | version "7.5.9" 2247 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" 2248 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== 2249 | 2250 | yallist@^3.0.2: 2251 | version "3.1.1" 2252 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2253 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2254 | -------------------------------------------------------------------------------- /resources/locale/en.yml: -------------------------------------------------------------------------------- 1 | clarkwinkelmann-scout: 2 | admin: 3 | setting: 4 | driver: Driver 5 | driverOption: 6 | 'null': 'Null' 7 | algolia: Algolia 8 | meilisearch: Meilisearch 9 | tntsearch: TNTSearch 10 | prefix: Index name prefix (optional) 11 | queue: Process index updates in queue 12 | queueHelp: This setting only has effect if an asynchronous queue driver is configured in Flarum. 13 | limit: Default Results Limit 14 | limitPlaceholder: Auto 15 | limitHelp: > 16 | This will override the number of results requested to the search engine and influence the number of pages of results that can be generated (the limit also counts content the user will not be able to see). 17 | Some engines might require additional configuration to change the max allowed. 18 | queryMinLength: Minimum query length for suggestions 19 | queryMinLengthPlaceholder: Auto 20 | queryMinLengthHelp: > 21 | This setting only affects the suggestion dropdown of the search input in the header. 22 | Flarum has a default query length of 3 characters before retrieving suggestions, which you can override with this setting. 23 | The complete search result page never has any minimum query length. 24 | You must clear the cache after changing this value. 25 | algoliaId: Algolia ID 26 | algoliaSecret: Algolia Secret 27 | algoliaConnectTimeout: Algolia Connect Timeout (optional) 28 | algoliaReadTimeout: Algolia Read Timeout (optional) 29 | algoliaWriteTimeout: Algolia Write Timeout (optional) 30 | meilisearchHost: Meilisearch Host 31 | meilisearchKey: Meilisearch Key 32 | tntsearchMaxDocs: TNT Search Max Docs (optional, maximum number of results) 33 | tntsearchFuzziness: TNT Search Fuzziness (typos/variation matching) 34 | tntsearchFuzzyDistance: TNT Search Fuzziness Levenshtein Distance (optional) 35 | tntsearchFuzzyPrefixLength: TNT Search Fuzziness Prefix Length (optional) 36 | tntsearchFuzzyMaxExpansions: TNT Search Fuzziness Max Expansions (optional) 37 | -------------------------------------------------------------------------------- /src/Console/FlushCommand.php: -------------------------------------------------------------------------------- 1 | argument('model'); 12 | 13 | ScoutStatic::removeAllFromSearch($class); 14 | 15 | $this->info('All [' . $class . '] records have been flushed.'); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Console/ImportAllCommand.php: -------------------------------------------------------------------------------- 1 | make('scout.attributes')); 22 | 23 | foreach ($classes as $class) { 24 | // There's no need to index all subclasses of Post separately because they are already handled by Post 25 | if (in_array(Post::class, class_parents($class))) { 26 | continue; 27 | } 28 | 29 | $this->handleClass($events, $class); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Console/ImportCommand.php: -------------------------------------------------------------------------------- 1 | argument('model'); 14 | 15 | $this->handleClass($events, $class); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/Console/ModifiedImportTrait.php: -------------------------------------------------------------------------------- 1 | listen(ModelsImported::class, function ($event) use ($class) { 15 | // The models in the event are the real models, not wrapped, so we can't use getScoutKey() directly 16 | $key = (new ScoutModelWrapper($event->models->last()))->getScoutKey(); 17 | 18 | $this->line('Imported [' . $class . '] models up to ID: ' . $key); 19 | }); 20 | 21 | // Same as original with this line modified to use ScoutStatic 22 | ScoutStatic::makeAllSearchable($class, $this->option('chunk')); 23 | 24 | $events->forget(ModelsImported::class); 25 | 26 | $this->info('All [' . $class . '] records have been imported.'); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/Extend/Scout.php: -------------------------------------------------------------------------------- 1 | modelClass = $modelClass; 29 | } 30 | 31 | /** 32 | * Add to or modify the searchable attributes array of this model. 33 | * 34 | * @param callable|string $callback 35 | * 36 | * The callback can be a closure or an invokable class, and should accept: 37 | * - $model: An instance of the model being serialized. 38 | * - $attributes: An array of existing attributes. 39 | * 40 | * The callable should return: 41 | * - An array of additional attributes to merge with the existing array. 42 | * Or a modified $attributes array. 43 | * 44 | * @return self 45 | */ 46 | public function attributes($callback): self 47 | { 48 | $this->attributes[] = $callback; 49 | 50 | return $this; 51 | } 52 | 53 | /** 54 | * Modify whether a given model should be searchable. 55 | * 56 | * @param callable|string $callback 57 | * 58 | * The callback can be a closure or an invokable class, and should accept: 59 | * - $model: An instance of the model being serialized. 60 | * 61 | * The callable should return: 62 | * - true, false or null. Null will pass to the next condition or default 63 | * 64 | * @return self 65 | */ 66 | public function searchable($callback): self 67 | { 68 | $this->searchable[] = $callback; 69 | 70 | return $this; 71 | } 72 | 73 | /** 74 | * Register an event listener that should cause Scout to update the indexed data. 75 | * 76 | * @param string $eventClass The class to listen for on the event dispatcher 77 | * @param callable|string $callback 78 | * 79 | * The callback can be a closure or an invokable class, and should accept: 80 | * - $event: An instance of the event as specified in the $eventClass parameter. 81 | * 82 | * The callable should return: 83 | * - An instance of the Eloquent Model as specified in this Extender $modelClass 84 | * 85 | * @return self 86 | */ 87 | public function listenSaved(string $eventClass, $callback): self 88 | { 89 | $this->listenSaved[] = [ 90 | $eventClass, 91 | $callback, 92 | ]; 93 | 94 | return $this; 95 | } 96 | 97 | /** 98 | * Register an event listener that should cause Scout to remove the indexed data. 99 | * 100 | * @param string $eventClass The class to listen for on the event dispatcher 101 | * @param callable|string $callback 102 | * 103 | * The callback can be a closure or an invokable class, and should accept: 104 | * - $event: An instance of the event as specified in the $eventClass parameter. 105 | * 106 | * The callable should return: 107 | * - An instance of the Eloquent Model as specified in this Extender $modelClass 108 | * 109 | * @return self 110 | */ 111 | public function listenDeleted(string $eventClass, $callback): self 112 | { 113 | $this->listenDeleted[] = [ 114 | $eventClass, 115 | $callback, 116 | ]; 117 | 118 | return $this; 119 | } 120 | 121 | public function extend(Container $container, Extension $extension = null) 122 | { 123 | if (!class_exists($this->modelClass)) { 124 | return; 125 | } 126 | 127 | /** 128 | * @var $manager ExtensionManager 129 | */ 130 | $manager = $container->make(ExtensionManager::class); 131 | 132 | // By design extensions will always call the extender if Scout is installed without checking if it's enabled 133 | // We could continue setting the container bindings which would just never be used 134 | // But the model scope and event listeners must be skipped if the extension is disabled 135 | if (!$manager->isEnabled('clarkwinkelmann-scout')) { 136 | return; 137 | } 138 | 139 | // It looks like we can safely repeat this call, a new scope instance of the same scope class will just 140 | // override the existing scope of the same class 141 | $this->modelClass::addGlobalScope(new FlarumSearchableScope()); 142 | 143 | if (count($this->attributes)) { 144 | $container->extend('scout.attributes', function (array $attributes) use ($container) { 145 | foreach ($this->attributes as $callback) { 146 | $callback = ContainerUtil::wrapCallback($callback, $container); 147 | } 148 | 149 | $attributes[$this->modelClass][] = $callback; 150 | 151 | return $attributes; 152 | }); 153 | } 154 | 155 | if (count($this->searchable)) { 156 | $container->extend('scout.searchable', function (array $searchable) use ($container) { 157 | foreach ($this->searchable as $callback) { 158 | $callback = ContainerUtil::wrapCallback($callback, $container); 159 | } 160 | 161 | $searchable[$this->modelClass][] = $callback; 162 | 163 | return $searchable; 164 | }); 165 | } 166 | 167 | if (count($this->listenSaved) || count($this->listenDeleted)) { 168 | // Same event registration logic as in Flarum's Extend\Event extender 169 | $events = $container->make(Dispatcher::class); 170 | $app = $container->make('flarum'); 171 | 172 | $app->booted(function () use ($events, $container) { 173 | foreach ($this->listenSaved as $listener) { 174 | $events->listen($listener[0], function ($event) use ($listener, $container) { 175 | $model = ContainerUtil::wrapCallback($listener[1], $container)($event); 176 | 177 | if ($model) { 178 | (new ScoutModelWrapper($model))->scoutObserverSaved(); 179 | } 180 | }); 181 | } 182 | 183 | foreach ($this->listenDeleted as $listener) { 184 | $events->listen($listener[0], function ($event) use ($listener, $container) { 185 | $model = ContainerUtil::wrapCallback($listener[1], $container)($event); 186 | 187 | if ($model) { 188 | (new ScoutModelWrapper($model))->scoutObserverDeleted(); 189 | } 190 | }); 191 | } 192 | }); 193 | } 194 | } 195 | } 196 | -------------------------------------------------------------------------------- /src/FlarumEngineManager.php: -------------------------------------------------------------------------------- 1 | ensureAlgoliaClientIsInstalled(); 25 | 26 | UserAgent::addCustomUserAgent('Laravel Scout', '9.4.7'); 27 | 28 | /** 29 | * @var SettingsRepositoryInterface $settings 30 | */ 31 | $settings = resolve(SettingsRepositoryInterface::class); 32 | 33 | $config = SearchConfig::create( 34 | $settings->get('clarkwinkelmann-scout.algoliaId'), 35 | $settings->get('clarkwinkelmann-scout.algoliaSecret') 36 | )->setDefaultHeaders( 37 | $this->defaultAlgoliaHeaders() 38 | ); 39 | 40 | if (is_int($connectTimeout = $settings->get('clarkwinkelmann-scout.algoliaConnectTimeout'))) { 41 | $config->setConnectTimeout($connectTimeout); 42 | } 43 | 44 | if (is_int($readTimeout = $settings->get('clarkwinkelmann-scout.algoliaReadTimeout'))) { 45 | $config->setReadTimeout($readTimeout); 46 | } 47 | 48 | if (is_int($writeTimeout = $settings->get('clarkwinkelmann-scout.algoliaWriteTimeout'))) { 49 | $config->setWriteTimeout($writeTimeout); 50 | } 51 | 52 | return new AlgoliaEngine(Algolia::createWithConfig($config)); 53 | } 54 | 55 | public function createTntsearchDriver(): TNTSearchEngine 56 | { 57 | if (!class_exists(TNTSearch::class) || !class_exists(TNTSearchEngine::class)) { 58 | throw new Exception('Please install the TNTSearch scout package: teamtnt/laravel-scout-tntsearch-driver.'); 59 | } 60 | 61 | $storage = resolve(Paths::class)->storage . '/tntsearch'; 62 | 63 | // TNTSearch won't create the folder automatically, so we need to do it 64 | if (!file_exists($storage)) { 65 | mkdir($storage); 66 | } 67 | 68 | /** 69 | * @var SettingsRepositoryInterface $settings 70 | */ 71 | $settings = resolve(SettingsRepositoryInterface::class); 72 | 73 | $tnt = new TNTSearch(); 74 | $tnt->loadConfig([ 75 | 'storage' => $storage, 76 | 'searchBoolean' => true, 77 | ]); 78 | $tnt->setDatabaseHandle(resolve(ConnectionInterface::class)->getPdo()); 79 | $tnt->maxDocs = $settings->get('clarkwinkelmann-scout.tntsearchMaxDocs') ?: 500; 80 | $tnt->fuzziness = (bool)$settings->get('clarkwinkelmann-scout.tntsearchFuzziness'); 81 | // We could retrieve the defaults from the $tnt instance, but since we hard-code those in the javascript 82 | // it's safer to also hard-code them here so we stay consistent if the default ever change 83 | $tnt->fuzzy_distance = $settings->get('clarkwinkelmann-scout.tntsearchFuzzyDistance') ?: 2; 84 | $tnt->fuzzy_prefix_length = $settings->get('clarkwinkelmann-scout.tntsearchFuzzyPrefixLength') ?: 50; 85 | $tnt->fuzzy_max_expansions = $settings->get('clarkwinkelmann-scout.tntsearchFuzzyMaxExpansions') ?: 2; 86 | $tnt->asYouType = true; 87 | 88 | return new TNTSearchEngine($tnt); 89 | } 90 | 91 | /** 92 | * Same as original getDefaultDriver() but uses Flarum settings as source 93 | * @return mixed|string 94 | */ 95 | public function getDefaultDriver() 96 | { 97 | /** 98 | * @var SettingsRepositoryInterface $settings 99 | */ 100 | $settings = resolve(SettingsRepositoryInterface::class); 101 | 102 | if (is_null($driver = $settings->get('clarkwinkelmann-scout.driver'))) { 103 | return 'null'; 104 | } 105 | 106 | return $driver; 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /src/FlarumSearchableScope.php: -------------------------------------------------------------------------------- 1 | dispatch(new $eventClass($models->map(function (Model $model) { 27 | // For consistency, extract any wrapper so that the event contains an array of real models only 28 | if ($model instanceof ScoutModelWrapper) { 29 | return $model->getRealModel(); 30 | } 31 | 32 | return $model; 33 | }))); 34 | } 35 | 36 | public function extend(EloquentBuilder $builder) 37 | { 38 | $builder->macro('searchable', function (EloquentBuilder $builder, $chunk = null) { 39 | $builder->chunkById($chunk ?: 500, function ($models) { 40 | $models->filter(function (Model $model) { 41 | if (!($model instanceof ScoutModelWrapper)) { 42 | $model = new ScoutModelWrapper($model); 43 | } 44 | 45 | return $model->shouldBeSearchable(); 46 | })->searchable(); 47 | 48 | FlarumSearchableScope::dispatchEvent(ModelsImported::class, $models); 49 | }); 50 | }); 51 | 52 | $builder->macro('unsearchable', function (EloquentBuilder $builder, $chunk = null) { 53 | $builder->chunkById($chunk ?: 500, function ($models) { 54 | $models->unsearchable(); 55 | 56 | FlarumSearchableScope::dispatchEvent(ModelsFlushed::class, $models); 57 | }); 58 | }); 59 | 60 | HasManyThrough::macro('searchable', function ($chunk = null) { 61 | $this->chunkById($chunk ?: 500, function ($models) { 62 | $models->filter(function (Model $model) { 63 | if (!($model instanceof ScoutModelWrapper)) { 64 | $model = new ScoutModelWrapper($model); 65 | } 66 | 67 | return $model->shouldBeSearchable(); 68 | })->searchable(); 69 | 70 | FlarumSearchableScope::dispatchEvent(ModelsImported::class, $models); 71 | }); 72 | }); 73 | 74 | HasManyThrough::macro('unsearchable', function ($chunk = null) { 75 | $this->chunkById($chunk ?: 500, function ($models) { 76 | $models->unsearchable(); 77 | 78 | FlarumSearchableScope::dispatchEvent(ModelsFlushed::class, $models); 79 | }); 80 | }); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/Job/MakeSearchable.php: -------------------------------------------------------------------------------- 1 | class || count($value->id) === 0) { 15 | return new EloquentCollection; 16 | } 17 | 18 | return new EloquentCollection( 19 | collect($value->id)->map(function ($id) use ($value) { 20 | $model = new ScoutModelWrapper(new $value->class); 21 | 22 | $keyName = $this->getUnqualifiedScoutKeyName( 23 | $model->getScoutKeyName() 24 | ); 25 | 26 | $model->getRealModel()->forceFill([$keyName => $id]); 27 | 28 | return $model; 29 | }) 30 | ); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/Job/SerializesAndRestoresWrappedModelIdentifiers.php: -------------------------------------------------------------------------------- 1 | first(); 18 | 19 | if ($first instanceof ScoutModelWrapper) { 20 | return new ModelIdentifier( 21 | // This is the reason we need to extend this whole method, because the class is otherwise not accessible 22 | // We could also extend the RemoveableScoutCollection that would only help for one of the Scout jobs 23 | get_class($first->getRealModel()), 24 | // This can be left as-is, we modified the method called in ScoutModelWrapper 25 | $value->getQueueableIds(), 26 | $value->getQueueableRelations(), 27 | $value->getQueueableConnection() 28 | ); 29 | } 30 | } 31 | 32 | return parent::getRestoredPropertyValue($value); 33 | } 34 | 35 | protected function restoreCollection($value) 36 | { 37 | return parent::restoreCollection($value)->map(function ($model) { 38 | // The class stored is the real class, now we wrap it again so we don't have to modify every method in this job 39 | return new ScoutModelWrapper($model); 40 | }); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /src/Listener/DeletingDiscussion.php: -------------------------------------------------------------------------------- 1 | discussion->posts; 13 | 14 | // Flarum doesn't dispatch the Deleted event for each post when deleting a discussion, so we'll hook into it manually 15 | // This is also an opportunity to delete all posts from the index in a single job/request instead of one by one 16 | $event->discussion->afterDelete(function () use ($posts) { 17 | $posts->unsearchable(); 18 | }); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/MakeSearchableDisable.php: -------------------------------------------------------------------------------- 1 | realModel = $realModel; 24 | } 25 | 26 | public function getRealModel(): Model 27 | { 28 | return $this->realModel; 29 | } 30 | 31 | /** 32 | * We could do without this method, but there are instances where we copy-pasted the original Scout code which calls 33 | * newQuery() directly on the scout model, so we'll proxy it to the real underlying model 34 | * @return \Illuminate\Database\Eloquent\Builder 35 | */ 36 | public function newQuery() 37 | { 38 | return $this->realModel->newQuery(); 39 | } 40 | 41 | /** 42 | * Combined with the code in SerializesAndRestoresWrappedModelIdentifiers this allows serializing our special wrapped model 43 | * With only a minimal number of classes overrides (this method is called in Laravel's collection which would be trickier to override) 44 | * @return mixed 45 | */ 46 | public function getQueueableId() 47 | { 48 | return $this->realModel->getQueueableId(); 49 | } 50 | 51 | public static function bootSearchable() 52 | { 53 | // Override original to remove scope (we call it on the real model), 54 | // observer (we use events and we are not saving the wrapper model anyway) 55 | // and collection macros (we do it in the service provider) 56 | } 57 | 58 | public function registerSearchableMacros() 59 | { 60 | throw new \Exception('Flarum implementation does not use Searchable::registerSearchableMacros'); 61 | } 62 | 63 | public function queueMakeSearchable($models) 64 | { 65 | throw new \Exception('Flarum implementation does not use Searchable::queueMakeSearchable'); 66 | } 67 | 68 | public function queueRemoveFromSearch($models) 69 | { 70 | throw new \Exception('Flarum implementation does not use Searchable::queueRemoveFromSearch'); 71 | } 72 | 73 | public function shouldBeSearchable(): bool 74 | { 75 | $callbacks = resolve('scout.searchable'); 76 | 77 | foreach (array_reverse(array_merge([get_class($this->realModel)], class_parents($this->realModel))) as $class) { 78 | if (Arr::exists($callbacks, $class)) { 79 | foreach ($callbacks[$class] as $callback) { 80 | $returnValue = $callback($this->realModel); 81 | 82 | if (is_bool($returnValue)) { 83 | return $returnValue; 84 | } 85 | } 86 | } 87 | } 88 | 89 | return true; 90 | } 91 | 92 | public function searchIndexShouldBeUpdated(): bool 93 | { 94 | return true; 95 | } 96 | 97 | public static function search($query = '', $callback = null) 98 | { 99 | throw new \Exception('Static functions not available in Scout for Flarum'); 100 | } 101 | 102 | public static function makeAllSearchable($chunk = null) 103 | { 104 | throw new \Exception('Static functions not available in Scout for Flarum. Use ScoutStatic::makeAllSearchable'); 105 | } 106 | 107 | public static function removeAllFromSearch() 108 | { 109 | throw new \Exception('Static functions not available in Scout for Flarum. Use ScoutStatic::removeAllFromSearch'); 110 | } 111 | 112 | public function queryScoutModelsByIds(Builder $builder, array $ids) 113 | { 114 | $query = $this->realModel->newQuery(); 115 | 116 | if ($builder->queryCallback) { 117 | call_user_func($builder->queryCallback, $query); 118 | } 119 | 120 | $whereIn = in_array($this->getKeyType(), ['int', 'integer']) ? 121 | 'whereIntegerInRaw' : 122 | 'whereIn'; 123 | 124 | return $query->{$whereIn}( 125 | $this->getScoutKeyName(), $ids 126 | ); 127 | } 128 | 129 | public static function enableSearchSyncing() 130 | { 131 | throw new \Exception('Static functions not available in Scout for Flarum'); 132 | } 133 | 134 | public static function disableSearchSyncing() 135 | { 136 | throw new \Exception('Static functions not available in Scout for Flarum'); 137 | } 138 | 139 | public static function withoutSyncingToSearch($callback) 140 | { 141 | throw new \Exception('Static functions not available in Scout for Flarum'); 142 | } 143 | 144 | public function searchableAs(): string 145 | { 146 | /** 147 | * @var SettingsRepositoryInterface $settings 148 | */ 149 | $settings = resolve(SettingsRepositoryInterface::class); 150 | 151 | return $settings->get('clarkwinkelmann-scout.prefix') . $this->realModel->getTable(); 152 | } 153 | 154 | public function toSearchableArray(): array 155 | { 156 | $callbacks = resolve('scout.attributes'); 157 | 158 | $attributes = []; 159 | 160 | foreach (array_reverse(array_merge([get_class($this->realModel)], class_parents($this->realModel))) as $class) { 161 | if (Arr::exists($callbacks, $class)) { 162 | foreach ($callbacks[$class] as $callback) { 163 | $attributes = array_merge( 164 | $attributes, 165 | $callback($this->realModel, $attributes) 166 | ); 167 | } 168 | } 169 | } 170 | 171 | return $attributes; 172 | } 173 | 174 | public function syncWithSearchUsing() 175 | { 176 | // TODO Flarum settings 177 | return config('scout.queue.connection') ?: config('queue.default'); 178 | } 179 | 180 | public function syncWithSearchUsingQueue() 181 | { 182 | // TODO Flarum settings 183 | return config('scout.queue.queue'); 184 | } 185 | 186 | public function pushSoftDeleteMetadata() 187 | { 188 | throw new \Exception('Native Laravel soft delete meta not implemented in Scout for Flarum'); 189 | } 190 | 191 | public function getScoutKey() 192 | { 193 | return $this->realModel->getKey(); 194 | } 195 | 196 | public function getScoutKeyName() 197 | { 198 | return $this->realModel->getQualifiedKeyName(); 199 | } 200 | 201 | protected static function usesSoftDelete() 202 | { 203 | throw new \Exception('Native Laravel soft delete meta not implemented in Scout for Flarum'); 204 | } 205 | 206 | /** 207 | * Replaces the ModelObserver's callback, to be called by event listeners in Flarum instead 208 | */ 209 | public function scoutObserverSaved() 210 | { 211 | if (!$this->searchIndexShouldBeUpdated()) { 212 | return; 213 | } 214 | 215 | if (!$this->shouldBeSearchable()) { 216 | if ($this->wasSearchableBeforeUpdate()) { 217 | $this->unsearchable(); 218 | } 219 | 220 | return; 221 | } 222 | 223 | $this->searchable(); 224 | } 225 | 226 | /** 227 | * Replaces the ModelObserver's callback, to be called by event listeners in Flarum instead 228 | */ 229 | public function scoutObserverDeleted() 230 | { 231 | if (!$this->wasSearchableBeforeDelete()) { 232 | return; 233 | } 234 | 235 | $this->unsearchable(); 236 | } 237 | } 238 | -------------------------------------------------------------------------------- /src/ScoutServiceProvider.php: -------------------------------------------------------------------------------- 1 | container->singleton(MeiliSearch::class, function () { 29 | /** 30 | * @var SettingsRepositoryInterface $settings 31 | */ 32 | $settings = $this->container->make(SettingsRepositoryInterface::class); 33 | 34 | return new MeiliSearch( 35 | $settings->get('clarkwinkelmann-scout.meilisearchHost') ?: '127.0.0.1:7700', 36 | $settings->get('clarkwinkelmann-scout.meilisearchKey') 37 | ); 38 | }); 39 | } 40 | 41 | $this->container->singleton(EngineManager::class, function ($app) { 42 | return new FlarumEngineManager($app); 43 | }); 44 | 45 | Scout::makeSearchableUsing(MakeSearchableDisable::class); 46 | Scout::removeFromSearchUsing(MakeSearchableDisable::class); 47 | 48 | $this->container->singleton('scout.searchable', function () { 49 | return []; 50 | }); 51 | 52 | $this->container->singleton('scout.attributes', function () { 53 | return []; 54 | }); 55 | 56 | // It's better to inject some javascript directly rather than write a javascript module. Benefits: 57 | // - No additional bundle size if the feature is not used. 58 | // - No need to wait for app.forum to be ready. 59 | // - No Webpack overhead code. 60 | // We could also skip the initializer entirely but this will produce better errors if something goes wrong. 61 | // Only downside of this approach is that the cache must be cleared when the setting is changed. 62 | $this->container->resolving('flarum.assets.forum', function (Assets $assets) { 63 | /** 64 | * @var $settings SettingsRepositoryInterface 65 | */ 66 | $settings = $this->container->make(SettingsRepositoryInterface::class); 67 | 68 | $length = (int)$settings->get('clarkwinkelmann-scout.queryMinLength'); 69 | 70 | if ($length > 0) { 71 | $assets->js(function (SourceCollector $sources) use ($length) { 72 | $sources->addString(function () use ($length) { 73 | return "app.initializers.add('scout-min-length',function(){flarum.core.compat['components/Search'].MIN_SEARCH_LEN=$length});"; 74 | }); 75 | }); 76 | } 77 | }); 78 | } 79 | 80 | public function boot() 81 | { 82 | Collection::macro('searchable', function () { 83 | /** 84 | * @var Collection $this 85 | */ 86 | if ($this->isEmpty()) { 87 | return; 88 | } 89 | 90 | $wrappedCollection = $this->map(function ($model) { 91 | if ($model instanceof ScoutModelWrapper) { 92 | return $model; 93 | } 94 | 95 | return new ScoutModelWrapper($model); 96 | }); 97 | 98 | $first = $wrappedCollection->first(); 99 | 100 | $settings = resolve(SettingsRepositoryInterface::class); 101 | 102 | if (!$settings->get('clarkwinkelmann-scout.queue')) { 103 | return $first->searchableUsing()->update($wrappedCollection); 104 | } 105 | 106 | // Queue and connection choice has been removed compared to original Scout code 107 | // could be re-introduced later if we implement them in the Flarum version 108 | resolve(Dispatcher::class)->dispatch(new MakeSearchable($wrappedCollection)); 109 | }); 110 | 111 | Collection::macro('unsearchable', function () { 112 | /** 113 | * @var Collection $this 114 | */ 115 | if ($this->isEmpty()) { 116 | return; 117 | } 118 | 119 | $wrappedCollection = $this->map(function ($model) { 120 | if ($model instanceof ScoutModelWrapper) { 121 | return $model; 122 | } 123 | 124 | return new ScoutModelWrapper($model); 125 | }); 126 | 127 | $first = $wrappedCollection->first(); 128 | 129 | $settings = resolve(SettingsRepositoryInterface::class); 130 | 131 | if (!$settings->get('clarkwinkelmann-scout.queue')) { 132 | return $first->searchableUsing()->delete($wrappedCollection); 133 | } 134 | 135 | // Queue and connection choice has been removed compared to original Scout code 136 | resolve(Dispatcher::class)->dispatch(new RemoveFromSearch($wrappedCollection)); 137 | }); 138 | 139 | // Override the GambitManager binding set by Flarum's SearchServiceProvider 140 | $fullTextGambits = $this->container->make('flarum.simple_search.fulltext_gambits'); 141 | 142 | foreach ($fullTextGambits as $searcher => $fullTextGambitClass) { 143 | $this->container 144 | ->when($searcher) 145 | ->needs(GambitManager::class) 146 | ->give(function () use ($searcher, $fullTextGambitClass) { 147 | $gambitManager = new ImprovedGambitManager($this->container->make($fullTextGambitClass)); 148 | foreach (Arr::get($this->container->make('flarum.simple_search.gambits'), $searcher, []) as $gambit) { 149 | $gambitManager->add($this->container->make($gambit)); 150 | } 151 | 152 | return $gambitManager; 153 | }); 154 | } 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /src/ScoutStatic.php: -------------------------------------------------------------------------------- 1 | [ 23 | 'title', 24 | ], 25 | Post::class => [ 26 | 'content', 27 | ], 28 | ]; 29 | 30 | protected static function useQueue(): bool 31 | { 32 | $settings = resolve(SettingsRepositoryInterface::class); 33 | return (bool)$settings->get('clarkwinkelmann-scout.queue'); 34 | } 35 | 36 | /** 37 | * Replacement for Searchable::makeAllSearchable 38 | * @param string $class 39 | * @param null $chunk 40 | */ 41 | public static function makeAllSearchable(string $class, $chunk = null) 42 | { 43 | $self = new ScoutModelWrapper(new $class); 44 | 45 | $self->newQuery() 46 | ->when(true, function ($query) use ($self) { 47 | // We would need to change the visibility of this method to work here 48 | // Since we know we are not using it, we will comment it out for now 49 | //$self->makeAllSearchableUsing($query); 50 | }) 51 | ->orderBy($self->getKeyName()) 52 | ->searchable($chunk); 53 | } 54 | 55 | /** 56 | * Replacement for Searchable::removeAllFromSearch 57 | * @param string $class 58 | */ 59 | public static function removeAllFromSearch(string $class) 60 | { 61 | $self = new ScoutModelWrapper(new $class); 62 | 63 | $self->searchableUsing()->flush($self); 64 | } 65 | 66 | /** 67 | * Shortcut to obtain a Builder instance with the wrapper already set 68 | * @param string $class 69 | * @param string $query 70 | * @param callable? $callback 71 | * @return Builder 72 | */ 73 | public static function makeBuilder(string $class, string $query, $callback = null): Builder 74 | { 75 | $wrapped = new ScoutModelWrapper(new $class); 76 | 77 | $isMeilisearch = $wrapped->searchableUsing() instanceof MeiliSearchEngine; 78 | 79 | if ($isMeilisearch && is_null($callback) && class_exists(Highlighter::class)) { 80 | $callback = function ($meilisearch, $query, $searchParams) use ($class) { 81 | $attributes = Arr::get(self::$attributesToHighlight, $class) ?? []; 82 | 83 | $results = $meilisearch->rawSearch($query, $searchParams + [ 84 | 'attributesToHighlight' => $attributes, 85 | 'showMatchesPosition' => true, 86 | ]); 87 | 88 | foreach ($results['hits'] as $hit) { 89 | foreach ($attributes as $attribute) { 90 | $positions = Arr::get($hit, '_matchesPosition.' . $attribute); 91 | 92 | if (is_array($positions)) { 93 | foreach ($positions as $position) { 94 | // Meilisearch start index is in bytes while the length is in characters 95 | // This requires a mix of str and mb_str methods to extract characters in the right places 96 | $textStartingAtPosition = substr($hit[$attribute], $position['start']); 97 | $after = mb_substr($textStartingAtPosition, $position['length'], 1); 98 | 99 | // 4 bytes back should be enough to find a valid UTF8 character at the end 100 | $backtrackFromStartToFindFullCharacter = min($position['start'], 4); 101 | 102 | Highlighter::addHighlightRule( 103 | mb_substr($textStartingAtPosition, 0, $position['length']), 104 | $position['start'] === 0 ? null : mb_substr(substr($hit[$attribute], $position['start'] - $backtrackFromStartToFindFullCharacter, $backtrackFromStartToFindFullCharacter), -1), 105 | $after === '' ? null : $after 106 | ); 107 | } 108 | } 109 | } 110 | } 111 | 112 | return $results; 113 | }; 114 | } 115 | 116 | $builder = resolve(Builder::class, [ 117 | 'model' => $wrapped, 118 | 'query' => $query, 119 | 'callback' => $callback, 120 | ]); 121 | 122 | $settings = resolve(SettingsRepositoryInterface::class); 123 | $limit = (int)$settings->get('clarkwinkelmann-scout.limit'); 124 | 125 | // This becomes the new default for every usage of the Builder class 126 | // Developers can still customize it after getting the instance 127 | if ($limit > 0) { 128 | $builder->take($limit); 129 | } else if ($isMeilisearch) { 130 | // Meilisearch default limit of 20 is extremely low 131 | // If you have a large number of models that aren't visible to guests 132 | // you might end up with not a single result after the visibility scope is applied 133 | // This value is only applied if the user didn't customize the setting above 134 | // This value was not chosen for any particular reason. I expect it to change in the future based on feedback 135 | $builder->take(200); 136 | } 137 | 138 | return $builder; 139 | } 140 | } 141 | -------------------------------------------------------------------------------- /src/Search/DiscussionGambit.php: -------------------------------------------------------------------------------- 1 | keys()->all(); 19 | 20 | $postBuilder = ScoutStatic::makeBuilder(Post::class, $bit); 21 | 22 | $postIds = $postBuilder->keys()->all(); 23 | $postIdsCount = count($postIds); 24 | 25 | // We could replace the "where field" with "where false" everywhere when there are no IDs, but it's easier to 26 | // keep a FIELD() statement and just hard-code some values to prevent SQL errors 27 | // we know nothing will be returned anyway, so it doesn't really matter what impact it has on the query 28 | $postIdsSql = $postIdsCount > 0 ? str_repeat(', ?', count($postIds)) : ', 0'; 29 | 30 | $query = $search->getQuery(); 31 | $grammar = $query->getGrammar(); 32 | 33 | $allMatchingPostsQuery = Post::whereVisibleTo($search->getActor()) 34 | ->select('posts.discussion_id') 35 | ->selectRaw('FIELD(id' . $postIdsSql . ') as priority', $postIds) 36 | ->where('posts.type', 'comment') 37 | ->whereIn('id', $postIds); 38 | 39 | // Using wrap() instead of wrapTable() in join subquery to skip table prefixes 40 | // Using raw() in the join table name to use the same prefixless name 41 | $bestMatchingPostQuery = Post::query() 42 | ->select('posts.discussion_id') 43 | ->selectRaw('min(matching_posts.priority) as min_priority') 44 | ->join( 45 | new Expression('(' . $allMatchingPostsQuery->toSql() . ') ' . $grammar->wrap('matching_posts')), 46 | $query->raw('matching_posts.discussion_id'), 47 | '=', 48 | 'posts.discussion_id' 49 | ) 50 | ->groupBy('posts.discussion_id') 51 | ->addBinding($allMatchingPostsQuery->getBindings(), 'join'); 52 | 53 | // Code based on Flarum\Discussion\Search\Gambit\FulltextGambit 54 | $subquery = Post::whereVisibleTo($search->getActor()) 55 | ->select('posts.discussion_id') 56 | ->selectRaw('id as most_relevant_post_id') 57 | ->join( 58 | new Expression('(' . $bestMatchingPostQuery->toSql() . ') ' . $grammar->wrap('best_matching_posts')), 59 | $query->raw('best_matching_posts.discussion_id'), 60 | '=', 61 | 'posts.discussion_id' 62 | ) 63 | ->whereIn('id', $postIds) 64 | ->whereRaw('FIELD(id' . $postIdsSql . ') = best_matching_posts.min_priority', $postIds) 65 | ->addBinding($bestMatchingPostQuery->getBindings(), 'join'); 66 | 67 | $query 68 | ->where(function (\Illuminate\Database\Query\Builder $query) use ($discussionIds) { 69 | $query 70 | ->whereNotNull('most_relevant_post_id') 71 | ->orWhereIn('id', $discussionIds); 72 | }) 73 | ->selectRaw('COALESCE(posts_ft.most_relevant_post_id, ' . $grammar->wrapTable('discussions') . '.first_post_id) as most_relevant_post_id') 74 | ->leftJoin( 75 | new Expression('(' . $subquery->toSql() . ') ' . $grammar->wrap('posts_ft')), 76 | $query->raw('posts_ft.discussion_id'), 77 | '=', 78 | 'discussions.id' 79 | ) 80 | ->groupBy('discussions.id') 81 | ->addBinding($subquery->getBindings(), 'join'); 82 | 83 | $search->setDefaultSort(function ($query) use ($postIdsSql, $postIds) { 84 | $query->orderByRaw('FIELD(id' . $postIdsSql . ')', $postIds); 85 | }); 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/Search/ImprovedGambitManager.php: -------------------------------------------------------------------------------- 1 | keys(); 17 | 18 | $search->getQuery()->whereIn('id', $ids); 19 | 20 | $search->setDefaultSort(function ($query) use ($ids) { 21 | if (!count($ids)) { 22 | return; 23 | } 24 | 25 | $query->orderByRaw('FIELD(id' . str_repeat(', ?', count($ids)) . ')', $ids); 26 | }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/helpers.php: -------------------------------------------------------------------------------- 1 |