From a1832954708c05bd3b6448b084daf09d12219b59 Mon Sep 17 00:00:00 2001 From: Mati Horovitz Date: Mon, 27 Jun 2022 19:30:06 +0300 Subject: [PATCH 001/130] Internal: ESLint fixes --- .../editor/document/elements/commands/paste.js | 5 +++-- .../document/elements/commands/select-all.js | 2 +- .../base/command-history-internal-base.js | 4 ++++ .../editor/document/repeater/commands/select.js | 12 ++++++++---- assets/dev/js/editor/elements/manager.js | 2 +- .../editor/elements/models/base-element-model.js | 7 ++++++- assets/dev/js/editor/elements/models/column.js | 6 +++++- assets/dev/js/editor/elements/models/section.js | 6 +++++- .../editor/elements/types/base/element-base.js | 15 +++++++++++---- assets/dev/js/editor/elements/views/base.js | 16 ++++++++++------ .../js/editor/utils/jquery-serialize-object.js | 1 + assets/dev/js/editor/views/base-container.js | 9 +++++++-- 12 files changed, 62 insertions(+), 23 deletions(-) diff --git a/assets/dev/js/editor/document/elements/commands/paste.js b/assets/dev/js/editor/document/elements/commands/paste.js index 2561ee1d234..3c635288aa3 100644 --- a/assets/dev/js/editor/document/elements/commands/paste.js +++ b/assets/dev/js/editor/document/elements/commands/paste.js @@ -100,11 +100,11 @@ export class Paste extends $e.modules.editor.document.CommandHistoryBase { } break; - default: + default: { // In case it widget: let target; - // If you trying to paste widget on section, then paste should be at the first column. + // On trying to paste widget on section, the paste should be at the first column. if ( 'section' === targetContainer.model.get( 'elType' ) ) { target = [ targetContainer.view.children.findByIndex( 0 ).getContainer() ]; } else { @@ -125,6 +125,7 @@ export class Paste extends $e.modules.editor.document.CommandHistoryBase { } result.push( this.pasteTo( target, [ model ] ) ); + } } } ); } ); diff --git a/assets/dev/js/editor/document/elements/commands/select-all.js b/assets/dev/js/editor/document/elements/commands/select-all.js index a4da653aecf..26a2ea83a78 100644 --- a/assets/dev/js/editor/document/elements/commands/select-all.js +++ b/assets/dev/js/editor/document/elements/commands/select-all.js @@ -1,5 +1,5 @@ export class SelectAll extends $e.modules.CommandBase { - apply( args ) { + apply() { elementor.selection.add( this.flattenContainersList( // The selection mechanism keeps selected elements in a single-dimension object. Therefore, In order to diff --git a/assets/dev/js/editor/document/history/commands/base/command-history-internal-base.js b/assets/dev/js/editor/document/history/commands/base/command-history-internal-base.js index b088fda3c93..0e636b91a90 100644 --- a/assets/dev/js/editor/document/history/commands/base/command-history-internal-base.js +++ b/assets/dev/js/editor/document/history/commands/base/command-history-internal-base.js @@ -1,3 +1,7 @@ +/** + * @typedef {import ('elementor/modules/history/assets/js/module')} HistoryManager + */ + export default class CommandHistoryInternalBase extends $e.modules.editor.CommandContainerInternalBase { initialize( args ) { super.initialize( args ); diff --git a/assets/dev/js/editor/document/repeater/commands/select.js b/assets/dev/js/editor/document/repeater/commands/select.js index 8f4abfde8c1..0393af239cb 100644 --- a/assets/dev/js/editor/document/repeater/commands/select.js +++ b/assets/dev/js/editor/document/repeater/commands/select.js @@ -1,3 +1,7 @@ +/** + * @typedef {import('elementor/assets/dev/js/editor/container/container')} Container + */ + /** * Command used to select current working repeater item. */ @@ -35,6 +39,7 @@ export class Select extends $e.modules.editor.document.CommandHistoryBase { return { container, type: 'selected', + // Translators: %s is the current item index. subTitle: wp.i18n.sprintf( __( 'Item #%d', 'elementor' ), index ), restore: this.constructor.restore, data: { @@ -45,10 +50,9 @@ export class Select extends $e.modules.editor.document.CommandHistoryBase { } /** - * @inheritDoc - * - * @param {Container} container - * @param {number} index + * @param {{}} args + * @param {Container} args.container + * @param {number} args.index */ apply( { container, index } ) { const editSettings = container.model.get( 'editSettings' ); diff --git a/assets/dev/js/editor/elements/manager.js b/assets/dev/js/editor/elements/manager.js index ded0aca83da..4e3bb56fdf7 100644 --- a/assets/dev/js/editor/elements/manager.js +++ b/assets/dev/js/editor/elements/manager.js @@ -19,7 +19,7 @@ export default class ElementsManager { * * @param {string} type * - * @return {ElementBase} + * @return {ElementBase} Element type class. */ getElementTypeClass( type ) { let typeClass = this.elementTypes[ type ]; diff --git a/assets/dev/js/editor/elements/models/base-element-model.js b/assets/dev/js/editor/elements/models/base-element-model.js index 54486146c24..117fd58d18a 100644 --- a/assets/dev/js/editor/elements/models/base-element-model.js +++ b/assets/dev/js/editor/elements/models/base-element-model.js @@ -1,7 +1,12 @@ +/** + * @typedef {import('elementor/assets/lib/backbone/backbone.marionette')} Backbone + */ + /** * The class purpose is to share the common methods and properties between all available models. */ export default class BaseElementModel extends Backbone.Model { + // eslint-disable-next-line jsdoc/require-returns-check /** * Function isValidChild(). * @@ -10,7 +15,7 @@ export default class BaseElementModel extends Backbone.Model { * * @param {Backbone.Model} childModel * - * @return {boolean} + * @return {boolean} Whether the child model is valid or not. */ isValidChild( childModel ) { // eslint-disable-line no-unused-vars elementorModules.ForceMethodImplementation( { attributes: this.attributes } ); diff --git a/assets/dev/js/editor/elements/models/column.js b/assets/dev/js/editor/elements/models/column.js index 5a474146654..a43dea39217 100644 --- a/assets/dev/js/editor/elements/models/column.js +++ b/assets/dev/js/editor/elements/models/column.js @@ -1,10 +1,14 @@ import Element from './element'; +/** + * @typedef {import('../../../editor/elements/models/base-element-model')} BaseModel + */ + export default class Column extends Element { /** * Allow only widget, container and inner-section. * - * @param childModel + * @param {BaseModel} childModel */ isValidChild( childModel ) { const childElType = childModel.get( 'elType' ); diff --git a/assets/dev/js/editor/elements/models/section.js b/assets/dev/js/editor/elements/models/section.js index 42ee1cdc9ba..efe6f3e0a29 100644 --- a/assets/dev/js/editor/elements/models/section.js +++ b/assets/dev/js/editor/elements/models/section.js @@ -1,10 +1,14 @@ import ElementModel from './element'; +/** + * @typedef {import('../../../editor/elements/models/base-element-model')} BaseModel + */ + export default class Section extends ElementModel { /** * Allow only column. * - * @param childModel + * @param {BaseModel} childModel */ isValidChild( childModel ) { return 'column' === childModel.get( 'elType' ); diff --git a/assets/dev/js/editor/elements/types/base/element-base.js b/assets/dev/js/editor/elements/types/base/element-base.js index 27c3f31b0c0..4416977a54c 100644 --- a/assets/dev/js/editor/elements/types/base/element-base.js +++ b/assets/dev/js/editor/elements/types/base/element-base.js @@ -1,27 +1,34 @@ +/* eslint-disable jsdoc/require-returns-check */ + +/** + * @typedef {import('elementor/assets/lib/backbone/backbone.marionette')} Marionette + * @typedef {import('../../../elements/models/base-element-model')} BaseModel + */ + export default class ElementBase { /** - * @return {string} + * @return {string} Element Type. */ getType() { elementorModules.ForceMethodImplementation(); } /** - * @return {typeof Marionette.View} + * @return {Marionette.View} Element Marionette View. */ getView() { elementorModules.ForceMethodImplementation(); } /** - * @return {typeof React.Component} + * @return {React.Component} React Component. */ getEmptyView() { elementorModules.ForceMethodImplementation(); } /** - * @return {typeof BaseModel} + * @return {BaseModel} Element Model. */ getModel() { elementorModules.ForceMethodImplementation(); diff --git a/assets/dev/js/editor/elements/views/base.js b/assets/dev/js/editor/elements/views/base.js index e1b18e6dbe4..154c9f1085e 100644 --- a/assets/dev/js/editor/elements/views/base.js +++ b/assets/dev/js/editor/elements/views/base.js @@ -8,8 +8,8 @@ var ControlsCSSParser = require( 'elementor-editor-utils/controls-css-parser' ), /** * @typedef {{}} DataBinding - * @property {DOMStringMap} dataset - * @property {HTMLElement} el + * @property {DOMStringMap} dataset The dataset of the element. + * @property {HTMLElement} el The element. */ /** @@ -215,9 +215,13 @@ BaseElementView = BaseContainer.extend( { { name: 'delete', icon: 'eicon-trash', - title: () => elementor.selection.isMultiple() - ? sprintf( __( 'Delete %d items', 'elementor' ), elementor.selection.getElements().length ) - : __( 'Delete', 'elementor' ), + title: () => { + if ( elementor.selection.isMultiple() ) { + // Translators: %d: Elements count. + return sprintf( __( 'Delete %d items', 'elementor' ), elementor.selection.getElements().length ); + } + return __( 'Delete', 'elementor' ); + }, shortcut: '⌦', callback: () => $e.run( 'document/elements/delete', { containers: elementor.selection.getElements( this.getContainer() ) } ), }, @@ -666,7 +670,7 @@ BaseElementView = BaseContainer.extend( { return; } - $dataBinding.filter( ( index, current ) => { + $dataBinding.forEach( ( index, current ) => { // To support nested data-binding bypass nested data-binding that are not part of the current. if ( jQuery( current ).closest( '.elementor-element' ).data( 'id' ) === id ) { if ( current.dataset.bindingType ) { diff --git a/assets/dev/js/editor/utils/jquery-serialize-object.js b/assets/dev/js/editor/utils/jquery-serialize-object.js index e49a969be30..f1616b47626 100644 --- a/assets/dev/js/editor/utils/jquery-serialize-object.js +++ b/assets/dev/js/editor/utils/jquery-serialize-object.js @@ -1,3 +1,4 @@ +/* eslint-disable */ /* * jQuery Serialize Object v1.0.1 */ diff --git a/assets/dev/js/editor/views/base-container.js b/assets/dev/js/editor/views/base-container.js index c9e4392f853..7a96f0c566a 100644 --- a/assets/dev/js/editor/views/base-container.js +++ b/assets/dev/js/editor/views/base-container.js @@ -1,4 +1,6 @@ + /** + * @typedef {import('elementor/assets/lib/backbone/backbone.marionette')} Marionette * @name BaseContainer * @augments {Marionette.CompositeView} */ @@ -233,8 +235,7 @@ module.exports = Marionette.CompositeView.extend( { } ); /** - * @inheritDoc - * @source https://marionettejs.com/docs/v2.4.5/marionette.collectionview.html#collectionviews-buildchildview + * Source: https://marionettejs.com/docs/v2.4.5/marionette.collectionview.html#collectionviews-buildchildview * * Since Elementor created custom container(bridge) between view, model, settings, children, parent and so on, * the container requires the parent view for proper work, but in 'marionettejs', the parent view is not available @@ -242,6 +243,10 @@ module.exports = Marionette.CompositeView.extend( { * set the parent view as a property `_parent` of the child view. * Anyways later, the `_parent` property is set by: 'marionettejs' to same view. */ + +/** + * @inheritDoc + */ Marionette.CollectionView.prototype.buildChildView = function( child, ChildViewClass, childViewOptions ) { const options = _.extend( { model: child }, childViewOptions ), childView = new ChildViewClass( options ); From 46b3caa5a3f17cd0483639cfc3c0c401bccd2c92 Mon Sep 17 00:00:00 2001 From: Mati Horovitz Date: Tue, 28 Jun 2022 13:57:03 +0300 Subject: [PATCH 002/130] Internal: ESLint fixes --- .../dev/js/editor/utils/container-helper.js | 7 ++-- .../dev/js/editor/utils/control-conditions.js | 6 +-- assets/dev/js/editor/utils/heartbeat.js | 5 +-- assets/dev/js/editor/utils/helpers.js | 13 ++++--- .../dev/js/editor/utils/jquery-html5-dnd.js | 4 +- assets/dev/js/editor/utils/schemes.js | 1 + .../dev/js/frontend/handlers/base-tabs-v2.js | 1 + .../js/frontend/utils/lightbox/lightbox.js | 37 ++++++++++--------- .../assets/js/components/apply-kit-dialog.js | 1 + .../js/components/filter-indication-text.js | 4 +- .../assets/js/components/item-header.js | 1 + .../js/components/taxonomies-filter-list.js | 2 +- 12 files changed, 45 insertions(+), 37 deletions(-) diff --git a/assets/dev/js/editor/utils/container-helper.js b/assets/dev/js/editor/utils/container-helper.js index 52a10c7c5ed..247050f33ae 100644 --- a/assets/dev/js/editor/utils/container-helper.js +++ b/assets/dev/js/editor/utils/container-helper.js @@ -171,7 +171,7 @@ export class ContainerHelper { break; // Exceptional preset. - case 'c100-c50-50': + case 'c100-c50-50': { settings = { flex_direction: ContainerHelper.DIRECTION_ROW, flex_wrap: 'wrap', @@ -211,12 +211,13 @@ export class ContainerHelper { ContainerHelper.createContainers( 2, {}, rightContainer, { edit: false } ); break; - + } // Containers by preset. - default: + default: { const sizes = preset.split( '-' ); newContainer = ContainerHelper.createContainerFromSizes( sizes, target, options ); + } } $e.internal( 'document/history/end-log', { id: historyId } ); diff --git a/assets/dev/js/editor/utils/control-conditions.js b/assets/dev/js/editor/utils/control-conditions.js index 80ab698412a..8f4003b080c 100644 --- a/assets/dev/js/editor/utils/control-conditions.js +++ b/assets/dev/js/editor/utils/control-conditions.js @@ -108,9 +108,9 @@ export default class ControlConditions extends Conditions { * * @since 3.7.0 * - * @param {Array<*>>} conditions A control's array of conditions to be tested - * @param {{}} comparisonObject The widget's settings object (setting keys and values) - * @param {{}} controls An object containing a widget's control models + * @param {Array<*>} conditions A control's array of conditions to be tested + * @param {{}} comparisonObject The widget's settings object (setting keys and values) + * @param {{}} controls An object containing a widget's control models * @return {boolean} id all conditions passes./ */ check( conditions, comparisonObject, controls ) { diff --git a/assets/dev/js/editor/utils/heartbeat.js b/assets/dev/js/editor/utils/heartbeat.js index cca49f2ac8c..c0ee132399d 100644 --- a/assets/dev/js/editor/utils/heartbeat.js +++ b/assets/dev/js/editor/utils/heartbeat.js @@ -50,9 +50,8 @@ export default class Heartbeat { showLockMessage( lockedUser ) { const modal = this.getModal(); - modal - /* Translators: %s: Locked user name. */ - .setMessage( sprintf( __( '%s has taken over and is currently editing. Do you want to take over this page editing?', 'elementor' ), lockedUser ) ) + // Translators: %s is locked username. + modal.setMessage( sprintf( __( '%s has taken over and is currently editing. Do you want to take over this page editing?', 'elementor' ), lockedUser ) ) .show(); } diff --git a/assets/dev/js/editor/utils/helpers.js b/assets/dev/js/editor/utils/helpers.js index 3f41313cf52..0e20924879c 100644 --- a/assets/dev/js/editor/utils/helpers.js +++ b/assets/dev/js/editor/utils/helpers.js @@ -96,7 +96,7 @@ module.exports = { return; } - if ( this._inlineSvg.hasOwnProperty( value.id ) ) { + if ( Object.prototype.hasOwnProperty.call( this._inlineSvg, value.id ) ) { return this._inlineSvg[ value.id ]; } @@ -254,7 +254,7 @@ module.exports = { let fontUrl; switch ( fontType ) { - case 'googlefonts' : + case 'googlefonts': fontUrl = 'https://fonts.googleapis.com/css?family=' + font + ':100,100italic,200,200italic,300,300italic,400,400italic,500,500italic,600,600italic,700,700italic,800,800italic,900,900italic'; if ( subsets[ elementor.config.locale ] ) { @@ -263,10 +263,11 @@ module.exports = { break; - case 'earlyaccess' : - const fontLowerString = font.replace( /\s+/g, '' ).toLowerCase(); - fontUrl = 'https://fonts.googleapis.com/earlyaccess/' + fontLowerString + '.css'; - break; + case 'earlyaccess': { + const fontLowerString = font.replace( /\s+/g, '' ).toLowerCase(); + fontUrl = 'https://fonts.googleapis.com/earlyaccess/' + fontLowerString + '.css'; + break; + } } if ( ! _.isEmpty( fontUrl ) ) { diff --git a/assets/dev/js/editor/utils/jquery-html5-dnd.js b/assets/dev/js/editor/utils/jquery-html5-dnd.js index bed899b5c29..e7be3f9e5f1 100644 --- a/assets/dev/js/editor/utils/jquery-html5-dnd.js +++ b/assets/dev/js/editor/utils/jquery-html5-dnd.js @@ -249,8 +249,8 @@ return false; // Stops the forEach from extra loops } } ); - } catch ( e ) { - } + // eslint-disable-next-line no-empty + } catch ( e ) {} } ); if ( ! isGroupMatch ) { diff --git a/assets/dev/js/editor/utils/schemes.js b/assets/dev/js/editor/utils/schemes.js index 9e8bb1bb484..57b57deae72 100644 --- a/assets/dev/js/editor/utils/schemes.js +++ b/assets/dev/js/editor/utils/schemes.js @@ -154,6 +154,7 @@ Schemes = function() { this.removeSchemeItem = function( schemeName, itemKey ) { const items = schemes[ schemeName ].items; + // eslint-disable-next-line no-constant-condition while ( true ) { itemKey++; diff --git a/assets/dev/js/frontend/handlers/base-tabs-v2.js b/assets/dev/js/frontend/handlers/base-tabs-v2.js index 8787228baa0..1c68b64a004 100644 --- a/assets/dev/js/frontend/handlers/base-tabs-v2.js +++ b/assets/dev/js/frontend/handlers/base-tabs-v2.js @@ -60,6 +60,7 @@ export default class BaseTabsV2 extends elementorModules.frontend.handlers.Base handleKeyboardNavigation( event ) { const tab = event.currentTarget, $tabList = jQuery( tab.closest( this.getSettings( 'selectors' ).tablist ) ), + // eslint-disable-next-line @wordpress/no-unused-vars-before-return $tabs = $tabList.find( this.getSettings( 'selectors' ).tabTitle ), isVertical = 'vertical' === $tabList.attr( 'aria-orientation' ); diff --git a/assets/dev/js/frontend/utils/lightbox/lightbox.js b/assets/dev/js/frontend/utils/lightbox/lightbox.js index 5e0249a431d..47c6c7d7087 100644 --- a/assets/dev/js/frontend/utils/lightbox/lightbox.js +++ b/assets/dev/js/frontend/utils/lightbox/lightbox.js @@ -173,24 +173,25 @@ module.exports = elementorModules.ViewModule.extend( { self.setVideoContent( options ); break; - case 'image': - const slides = [ { - image: options.url, - index: 0, - title: options.title, - description: options.description, - hash: options.hash, - } ]; - - options.slideshow = { - slides, - swiper: { - loop: false, - pagination: false, - }, - }; - self.setSlideshowContent( options.slideshow ); - break; + case 'image': { + const slides = [ { + image: options.url, + index: 0, + title: options.title, + description: options.description, + hash: options.hash, + } ]; + + options.slideshow = { + slides, + swiper: { + loop: false, + pagination: false, + }, + }; + self.setSlideshowContent( options.slideshow ); + break; + } case 'slideshow': self.setSlideshowContent( options.slideshow ); break; diff --git a/core/app/modules/kit-library/assets/js/components/apply-kit-dialog.js b/core/app/modules/kit-library/assets/js/components/apply-kit-dialog.js index 72b5cf39116..adbe712c947 100644 --- a/core/app/modules/kit-library/assets/js/components/apply-kit-dialog.js +++ b/core/app/modules/kit-library/assets/js/components/apply-kit-dialog.js @@ -19,6 +19,7 @@ export default function ApplyKitDialog( props ) { return ( { __( 'You can use everything in this kit, or Customize to only include some items.', 'elementor' ) } diff --git a/core/app/modules/kit-library/assets/js/components/filter-indication-text.js b/core/app/modules/kit-library/assets/js/components/filter-indication-text.js index a06207e76e1..ef1f8dc40c7 100644 --- a/core/app/modules/kit-library/assets/js/components/filter-indication-text.js +++ b/core/app/modules/kit-library/assets/js/components/filter-indication-text.js @@ -11,7 +11,9 @@ export default function FilterIndicationText( props ) { return ( - { sprintf( _n( 'Showing %s result for', 'Showing %s results for', props.resultCount, 'elementor' ), ! props.resultCount ? __( 'no', 'elementor' ) : props.resultCount ) } + { + // Translators: %s is the number of kits in the results + sprintf( _n( 'Showing %s result for', 'Showing %s results for', props.resultCount, 'elementor' ), ! props.resultCount ? __( 'no', 'elementor' ) : props.resultCount ) } { ' ' } { props.queryParams.search && `"${ props.queryParams.search }"` } { ' ' } diff --git a/core/app/modules/kit-library/assets/js/components/item-header.js b/core/app/modules/kit-library/assets/js/components/item-header.js index 91591737e21..e71fbf15193 100644 --- a/core/app/modules/kit-library/assets/js/components/item-header.js +++ b/core/app/modules/kit-library/assets/js/components/item-header.js @@ -41,6 +41,7 @@ function useKitCallToActionButton( model, { apply, isApplyLoading, onConnect } ) if ( type === TYPE_PROMOTION && subscriptionPlan ) { return { id: 'promotion', + // Translators: %s is the subscription plan name. text: __( 'Go %s', 'elementor' ).replace( '%s', subscriptionPlan.label ), hideText: false, variant: 'contained', diff --git a/core/app/modules/kit-library/assets/js/components/taxonomies-filter-list.js b/core/app/modules/kit-library/assets/js/components/taxonomies-filter-list.js index 896685ef8e4..d7fdb6278b1 100644 --- a/core/app/modules/kit-library/assets/js/components/taxonomies-filter-list.js +++ b/core/app/modules/kit-library/assets/js/components/taxonomies-filter-list.js @@ -35,7 +35,7 @@ const TaxonomiesFilterList = ( props ) => { Date: Tue, 28 Jun 2022 19:17:36 +0300 Subject: [PATCH 003/130] Internal: ESLint fixes --- .eslintignore | 1 + .eslintrc.js | 1 + .../dev/js/frontend/tools/stretch-element.js | 1 + .../js/api/modules/command-callback-base.js | 25 ------------------- .../dev/js/editor/document/elements/helper.js | 6 ++--- .../assets/js/extras/hash-commands.spec.js | 1 + .../screenshotter/scripts/on-before-ready.js | 2 +- 7 files changed, 8 insertions(+), 29 deletions(-) delete mode 100644 core/common/assets/js/api/modules/command-callback-base.js diff --git a/.eslintignore b/.eslintignore index c5ad8d6bdbb..b2bbe71a5b1 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,3 +4,4 @@ assets/js/*.js **/node_modules/** **/vendor/** build/** +tests/qunit/setup/tinymce.js diff --git a/.eslintrc.js b/.eslintrc.js index e794701aab1..7188079ca47 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -88,6 +88,7 @@ module.exports = { 'react/react-in-jsx-scope': 'off', 'babel/semi': 1, 'jsdoc/check-tag-names': [ 'error', { definedTags: [ 'jest-environment' ] } ], + 'jsdoc/require-returns-description': 'off', // We prefer self-explanatory method names 'import/no-unresolved': [ 2, { ignore: [ 'elementor', 'modules', '@wordpress/i18n', 'e-utils', 'e-styles' ] } ], 'import/no-extraneous-dependencies': 'off', '@wordpress/i18n-ellipsis': 'off', // We don't use the ellipsis char because everything is already translated with regular '...' diff --git a/assets/dev/js/frontend/tools/stretch-element.js b/assets/dev/js/frontend/tools/stretch-element.js index 8461f03ed38..922cc2101c7 100644 --- a/assets/dev/js/frontend/tools/stretch-element.js +++ b/assets/dev/js/frontend/tools/stretch-element.js @@ -21,6 +21,7 @@ module.exports = elementorModules.ViewModule.extend( { try { $container = jQuery( containerSelector ); + // eslint-disable-next-line no-empty } catch ( e ) {} if ( ! $container || ! $container.length ) { diff --git a/core/common/assets/js/api/modules/command-callback-base.js b/core/common/assets/js/api/modules/command-callback-base.js deleted file mode 100644 index 20399f2e510..00000000000 --- a/core/common/assets/js/api/modules/command-callback-base.js +++ /dev/null @@ -1,25 +0,0 @@ -import CommandBase from './command-base'; - -/** - * To support pure callbacks in the API(commands.js), to ensure they have registered with the proper context. - */ -export default class CommandCallbackBase extends CommandBase { - static getInstanceType() { - return 'CommandCallbackBase'; - } - - /** - * Get original callback of the command. - * - * Support pure callbacks ( Non command-base ). - * - * @return {(function())} - */ - static getCallback() { - return this.registerConfig.callback; - } - - apply( args = {} ) { - return this.constructor.getCallback()( args ); - } -} diff --git a/tests/qunit/tests/assets/dev/js/editor/document/elements/helper.js b/tests/qunit/tests/assets/dev/js/editor/document/elements/helper.js index 62cdd71c2f9..62ced3cbe34 100644 --- a/tests/qunit/tests/assets/dev/js/editor/document/elements/helper.js +++ b/tests/qunit/tests/assets/dev/js/editor/document/elements/helper.js @@ -38,9 +38,9 @@ } /** - * @param eContainer - * @param settings - * @return {Container} + * @param {Container} eContainer + * @param {{}} settings + * @return {Container} new button wrapped in a container. */ static createWrappedButton( eContainer = null, settings = {} ) { if ( ! eContainer ) { diff --git a/tests/qunit/tests/modules/web-cli/assets/js/extras/hash-commands.spec.js b/tests/qunit/tests/modules/web-cli/assets/js/extras/hash-commands.spec.js index 24de2d52fca..9270778dc9d 100644 --- a/tests/qunit/tests/modules/web-cli/assets/js/extras/hash-commands.spec.js +++ b/tests/qunit/tests/modules/web-cli/assets/js/extras/hash-commands.spec.js @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ import Component from './mock/component.spec'; QUnit.module( 'File: modules/web-cli/assets/js/extras/hash-commands.js', ( hooks ) => { diff --git a/tests/screenshotter/scripts/on-before-ready.js b/tests/screenshotter/scripts/on-before-ready.js index 3d413dd1789..f88bd213071 100644 --- a/tests/screenshotter/scripts/on-before-ready.js +++ b/tests/screenshotter/scripts/on-before-ready.js @@ -7,7 +7,7 @@ module.exports = async function( page ) { if ( ! fs.existsSync( pathname ) ) { const __dirname = path.resolve(); // Remove leading directory markers, and remove ending /file-name.extension if exists - pathname.replace( /^\.*\/|\/?[^\/]+\.[a-z]+|\/$/g, '' ); + pathname.replace( /^\.*\/|\/?[^/]+\.[a-z]+|\/$/g, '' ); fs.mkdir( path.resolve( __dirname, pathname ), { recursive: true }, ( e ) => { if ( e ) { // eslint-disable-next-line no-console From e3064d6aac31200afeeb7549792ff87dd1e93843 Mon Sep 17 00:00:00 2001 From: Mati Horovitz Date: Tue, 28 Jun 2022 19:37:09 +0300 Subject: [PATCH 004/130] Internal: ESLint fixes --- assets/dev/js/editor/controls/base-data.js | 2 +- assets/dev/js/editor/controls/repeater-row.js | 2 +- assets/dev/js/editor/elements/models/element.js | 2 +- assets/dev/js/editor/views/controls-stack.js | 2 +- assets/dev/js/modules/imports/utils/masonry.js | 2 +- assets/dev/js/modules/imports/view-module.js | 2 +- core/kits/assets/js/panel.js | 2 +- modules/dev-tools/assets/js/deprecation.js | 8 +++----- modules/history/assets/js/panel-page.js | 2 +- modules/landing-pages/assets/js/admin/landing-pages.js | 4 ++-- modules/shapes/assets/js/frontend/handlers/text-path.js | 2 +- modules/web-cli/assets/js/core/data.js | 1 + modules/web-cli/assets/js/core/data/cache.js | 2 +- modules/web-cli/assets/js/core/states/ui-state-base.js | 2 +- modules/web-cli/assets/js/extras/hash-commands.js | 7 ------- 15 files changed, 17 insertions(+), 25 deletions(-) diff --git a/assets/dev/js/editor/controls/base-data.js b/assets/dev/js/editor/controls/base-data.js index 0a0dddfe5ac..36c1cf679e9 100644 --- a/assets/dev/js/editor/controls/base-data.js +++ b/assets/dev/js/editor/controls/base-data.js @@ -505,4 +505,4 @@ ControlBaseDataView = ControlBaseView.extend( { }, } ); -module.exports = ControlBaseDataView; +export default ControlBaseDataView; diff --git a/assets/dev/js/editor/controls/repeater-row.js b/assets/dev/js/editor/controls/repeater-row.js index 1b888b5d88c..3be043f7cf1 100644 --- a/assets/dev/js/editor/controls/repeater-row.js +++ b/assets/dev/js/editor/controls/repeater-row.js @@ -1,6 +1,6 @@ import ControlsStack from 'elementor-views/controls-stack'; -module.exports = Marionette.CompositeView.extend( { +export default Marionette.CompositeView.extend( { template: Marionette.TemplateCache.get( '#tmpl-elementor-repeater-row' ), className: 'elementor-repeater-fields', diff --git a/assets/dev/js/editor/elements/models/element.js b/assets/dev/js/editor/elements/models/element.js index 44f47c9cef7..ef362757178 100644 --- a/assets/dev/js/editor/elements/models/element.js +++ b/assets/dev/js/editor/elements/models/element.js @@ -263,4 +263,4 @@ ElementModel = BaseElementModel.extend( { ElementModel.prototype.sync = ElementModel.prototype.fetch = ElementModel.prototype.save = _.noop; -module.exports = ElementModel; +export default ElementModel; diff --git a/assets/dev/js/editor/views/controls-stack.js b/assets/dev/js/editor/views/controls-stack.js index 80f137b41c3..2d1aa4163dd 100644 --- a/assets/dev/js/editor/views/controls-stack.js +++ b/assets/dev/js/editor/views/controls-stack.js @@ -237,4 +237,4 @@ ControlsStack = Marionette.CompositeView.extend( { }, } ); -module.exports = ControlsStack; +export default ControlsStack; diff --git a/assets/dev/js/modules/imports/utils/masonry.js b/assets/dev/js/modules/imports/utils/masonry.js index 596647f946c..c6f28794c6e 100644 --- a/assets/dev/js/modules/imports/utils/masonry.js +++ b/assets/dev/js/modules/imports/utils/masonry.js @@ -1,6 +1,6 @@ import ViewModule from '../view-module'; -module.exports = ViewModule.extend( { +export default ViewModule.extend( { getDefaultSettings() { return { diff --git a/assets/dev/js/modules/imports/view-module.js b/assets/dev/js/modules/imports/view-module.js index 7fc1255a933..e984035625f 100644 --- a/assets/dev/js/modules/imports/view-module.js +++ b/assets/dev/js/modules/imports/view-module.js @@ -1,6 +1,6 @@ import Module from './module'; -module.exports = Module.extend( { +export default Module.extend( { elements: null, getDefaultElements() { diff --git a/core/kits/assets/js/panel.js b/core/kits/assets/js/panel.js index d334669d7aa..6801135bf3d 100644 --- a/core/kits/assets/js/panel.js +++ b/core/kits/assets/js/panel.js @@ -1,6 +1,6 @@ import PanelContent from './panel-content'; -module.exports = Marionette.LayoutView.extend( { +export default Marionette.LayoutView.extend( { id: 'elementor-kit-panel', template: '#tmpl-elementor-kit-panel', diff --git a/modules/dev-tools/assets/js/deprecation.js b/modules/dev-tools/assets/js/deprecation.js index 418d0aa5575..568de2036ae 100644 --- a/modules/dev-tools/assets/js/deprecation.js +++ b/modules/dev-tools/assets/js/deprecation.js @@ -1,9 +1,7 @@ /** - * @typedef {Object} Version - * @property {number} major1 - * @property {number} major2 - * @property {number} minor - * @property {string} build + * @param {string} name + * @param {string} version + * @param {string} replacement */ const softDeprecated = ( name, version, replacement ) => { diff --git a/modules/history/assets/js/panel-page.js b/modules/history/assets/js/panel-page.js index 75f1e15037e..ad6e8d5d385 100644 --- a/modules/history/assets/js/panel-page.js +++ b/modules/history/assets/js/panel-page.js @@ -4,7 +4,7 @@ import TabRevisionsLoadingView from './revisions/panel/loading'; import TabRevisionsView from './revisions/panel/tab'; import TabRevisionsEmptyView from './revisions/panel/empty'; -module.exports = Marionette.LayoutView.extend( { +export default Marionette.LayoutView.extend( { template: '#tmpl-elementor-panel-history-page', regions: { diff --git a/modules/landing-pages/assets/js/admin/landing-pages.js b/modules/landing-pages/assets/js/admin/landing-pages.js index 64f3ccd76e8..64f921c8d64 100644 --- a/modules/landing-pages/assets/js/admin/landing-pages.js +++ b/modules/landing-pages/assets/js/admin/landing-pages.js @@ -5,8 +5,8 @@ export default class LandingPagesHandler extends AdminMenuHandler { const pageName = 'e-landing-page', adminMenuSelectors = { // The escaping is done because jQuery requires it for selectors. - landingPagesTablePage: 'a[href=\"edit.php?post_type=' + pageName + '\"]', - landingPagesAddNewPage: 'a[href=\"edit.php?post_type=elementor_library&page=' + pageName + '\"]', + landingPagesTablePage: 'a[href="edit.php?post_type=' + pageName + '"]', + landingPagesAddNewPage: 'a[href="edit.php?post_type=elementor_library&page=' + pageName + '"]', }; return { diff --git a/modules/shapes/assets/js/frontend/handlers/text-path.js b/modules/shapes/assets/js/frontend/handlers/text-path.js index f7c9c380ae7..c2a390bf49b 100644 --- a/modules/shapes/assets/js/frontend/handlers/text-path.js +++ b/modules/shapes/assets/js/frontend/handlers/text-path.js @@ -166,7 +166,7 @@ export default class TextPathHandler extends elementorModules.frontend.handlers. url, is_external: isExternal, nofollow, - } = this.getElementSettings()?.link; + } = this.getElementSettings().link; const target = isExternal ? '_blank' : '', rel = nofollow ? 'nofollow' : ''; diff --git a/modules/web-cli/assets/js/core/data.js b/modules/web-cli/assets/js/core/data.js index 75f65a9dcf3..78b24a11a5e 100644 --- a/modules/web-cli/assets/js/core/data.js +++ b/modules/web-cli/assets/js/core/data.js @@ -383,6 +383,7 @@ export default class Data extends Commands { } const params = this.prepareHeaders( requestData ); + // eslint-disable-next-line no-async-promise-executor return new Promise( async ( resolve, reject ) => { // This function is async because: // it needs to wait for the results, to cache them before it resolve's the promise. diff --git a/modules/web-cli/assets/js/core/data/cache.js b/modules/web-cli/assets/js/core/data/cache.js index 3d0aad1ffa4..3e84a5870a1 100644 --- a/modules/web-cli/assets/js/core/data/cache.js +++ b/modules/web-cli/assets/js/core/data/cache.js @@ -41,7 +41,7 @@ export default class Cache { // If data comes from cache, add 'cache = hit' to requestData. requestData.cache = 'hit'; - return new Promise( async ( resolve ) => { + return new Promise( ( resolve ) => { resolve( data ); } ); } diff --git a/modules/web-cli/assets/js/core/states/ui-state-base.js b/modules/web-cli/assets/js/core/states/ui-state-base.js index 05c3140de16..3ffba1c546f 100644 --- a/modules/web-cli/assets/js/core/states/ui-state-base.js +++ b/modules/web-cli/assets/js/core/states/ui-state-base.js @@ -28,7 +28,7 @@ export default class UiStateBase { * @return {void} */ set( newValue ) { - if ( newValue && ! this.options.hasOwnProperty( newValue ) ) { + if ( newValue && ! Object.prototype.hasOwnProperty.call( this.options, newValue ) ) { throw `Option '${ newValue }' for state '${ this.id }' is invalid.`; } diff --git a/modules/web-cli/assets/js/extras/hash-commands.js b/modules/web-cli/assets/js/extras/hash-commands.js index b51c2c9c75f..2ea0aca71ed 100644 --- a/modules/web-cli/assets/js/extras/hash-commands.js +++ b/modules/web-cli/assets/js/extras/hash-commands.js @@ -1,12 +1,5 @@ import Console from 'elementor-api/utils/console'; -/** - * @typedef HashCommand - * @property {string} method, - * @property {string} command - * @property {Object} args - */ - export default class HashCommands { /** * Cannot be static since it uses callback(s) that are available only after '$e' is initialized. From 8799938097e1970867214bd9ab337ee7844485f2 Mon Sep 17 00:00:00 2001 From: Mati Horovitz Date: Tue, 28 Jun 2022 19:47:09 +0300 Subject: [PATCH 005/130] Internal: ESLint fixes --- modules/dev-tools/assets/js/deprecation.js | 8 ++++++++ modules/web-cli/assets/js/modules/component-base.js | 8 ++++---- modules/web-cli/assets/js/utils/deprecation.js | 7 +++++++ .../document/hooks/ui/settings/set-direction-mode.test.js | 2 +- .../unit/assets/dev/js/editor/elements/mock/manager.js | 4 ++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/modules/dev-tools/assets/js/deprecation.js b/modules/dev-tools/assets/js/deprecation.js index 568de2036ae..ef7f82c2705 100644 --- a/modules/dev-tools/assets/js/deprecation.js +++ b/modules/dev-tools/assets/js/deprecation.js @@ -1,3 +1,11 @@ +/** + * @typedef {Object} Version + * @property {number} major1 The first number + * @property {number} major2 The second number + * @property {number} minor The third number + * @property {string} build The fourth number + */ + /** * @param {string} name * @param {string} version diff --git a/modules/web-cli/assets/js/modules/component-base.js b/modules/web-cli/assets/js/modules/component-base.js index f8d2e3d0dc4..90c7cab6670 100644 --- a/modules/web-cli/assets/js/modules/component-base.js +++ b/modules/web-cli/assets/js/modules/component-base.js @@ -174,9 +174,9 @@ export default class ComponentBase extends Module { } /** - * @param {string} command - * @param {(function()|typeof CommandInfra)} context - * @param {'default'|'internal'|'data'} commandsType + * @param {string} command + * @param {(()=>{}|CommandInfra)} context + * @param {'default'|'internal'|'data'} commandsType */ registerCommand( command, context, commandsType = 'default' ) { let commandsManager; @@ -412,7 +412,7 @@ export default class ComponentBase extends Module { } /** - * @param {Object.} commandsFromImport + * @param {{}} commandsFromImport * @return {{}} imported commands */ importCommands( commandsFromImport ) { diff --git a/modules/web-cli/assets/js/utils/deprecation.js b/modules/web-cli/assets/js/utils/deprecation.js index e3c2144fe57..a6617fe7cf5 100644 --- a/modules/web-cli/assets/js/utils/deprecation.js +++ b/modules/web-cli/assets/js/utils/deprecation.js @@ -1,6 +1,13 @@ import Console from 'elementor-api/utils/console'; // Copied from `modules/dev-tools/assets/js/deprecation.js` +/** + * @typedef {Object} Version + * @property {number} major1 The first number + * @property {number} major2 The second number + * @property {number} minor The third number + * @property {string} build The fourth number + */ const softDeprecated = ( name, version, replacement ) => { if ( elementorWebCliConfig.isDebug ) { diff --git a/tests/jest/unit/assets/dev/js/editor/document/hooks/ui/settings/set-direction-mode.test.js b/tests/jest/unit/assets/dev/js/editor/document/hooks/ui/settings/set-direction-mode.test.js index 99c95c16031..7c83221f0ac 100644 --- a/tests/jest/unit/assets/dev/js/editor/document/hooks/ui/settings/set-direction-mode.test.js +++ b/tests/jest/unit/assets/dev/js/editor/document/hooks/ui/settings/set-direction-mode.test.js @@ -99,7 +99,7 @@ describe( 'set-direction-mode--document/elements/settings', () => { }, } ); - const parent = createContainer( { + createContainer( { renderer: { view: { getCurrentUiStates: () => ( { diff --git a/tests/jest/unit/assets/dev/js/editor/elements/mock/manager.js b/tests/jest/unit/assets/dev/js/editor/elements/mock/manager.js index 6438fa52c98..e8a661a44b0 100644 --- a/tests/jest/unit/assets/dev/js/editor/elements/mock/manager.js +++ b/tests/jest/unit/assets/dev/js/editor/elements/mock/manager.js @@ -1,3 +1,7 @@ +/** + * @typedef {import('elementor/assets/dev/js/editor/elements/manager')} ElementsManager + */ + /** * @return {Promise} */ From 21b9de23a76d264847ccef2f0b757ca2e0895b9b Mon Sep 17 00:00:00 2001 From: Mati Horovitz Date: Tue, 28 Jun 2022 19:51:57 +0300 Subject: [PATCH 006/130] Internal: ESLint fixes --- modules/web-cli/assets/js/modules/component-base.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/web-cli/assets/js/modules/component-base.js b/modules/web-cli/assets/js/modules/component-base.js index 90c7cab6670..0541edcbe08 100644 --- a/modules/web-cli/assets/js/modules/component-base.js +++ b/modules/web-cli/assets/js/modules/component-base.js @@ -1,14 +1,13 @@ import CommandCallbackBase from 'elementor-api/modules/command-callback-base'; import { createSlice } from '@reduxjs/toolkit'; -import Module from 'elementor-assets-js/modules/imports/module.js'; +import Module from 'elementor/assets/dev/js/modules/imports/module.js'; import ForceMethodImplementation from '../utils/force-method-implementation'; import Deprecation from 'elementor-api/utils/deprecation'; /** + * @typedef {import('./command-infra')} CommandInfra * @typedef {import('./hook-base')} HookBase - */ -/** * @typedef {import('../core/states/ui-state-base')} UiStateBase */ From d91634c910868d2732bb6c55ec9ec4ee9155f6e5 Mon Sep 17 00:00:00 2001 From: Mati Horovitz Date: Tue, 28 Jun 2022 20:14:10 +0300 Subject: [PATCH 007/130] Internal: ESLint fixes - Revert failure fixes and a merge conflict --- assets/dev/js/editor/controls/base-data.js | 2 +- assets/dev/js/editor/controls/repeater-row.js | 2 +- assets/dev/js/editor/document/elements/commands/settings.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/assets/dev/js/editor/controls/base-data.js b/assets/dev/js/editor/controls/base-data.js index 36c1cf679e9..0a0dddfe5ac 100644 --- a/assets/dev/js/editor/controls/base-data.js +++ b/assets/dev/js/editor/controls/base-data.js @@ -505,4 +505,4 @@ ControlBaseDataView = ControlBaseView.extend( { }, } ); -export default ControlBaseDataView; +module.exports = ControlBaseDataView; diff --git a/assets/dev/js/editor/controls/repeater-row.js b/assets/dev/js/editor/controls/repeater-row.js index 3be043f7cf1..1b888b5d88c 100644 --- a/assets/dev/js/editor/controls/repeater-row.js +++ b/assets/dev/js/editor/controls/repeater-row.js @@ -1,6 +1,6 @@ import ControlsStack from 'elementor-views/controls-stack'; -export default Marionette.CompositeView.extend( { +module.exports = Marionette.CompositeView.extend( { template: Marionette.TemplateCache.get( '#tmpl-elementor-repeater-row' ), className: 'elementor-repeater-fields', diff --git a/assets/dev/js/editor/document/elements/commands/settings.js b/assets/dev/js/editor/document/elements/commands/settings.js index 53d3f7d1549..92b7e799458 100644 --- a/assets/dev/js/editor/document/elements/commands/settings.js +++ b/assets/dev/js/editor/document/elements/commands/settings.js @@ -1,7 +1,7 @@ /** * @typedef {import('../../../container/container')} Container */ - export class Settings extends $e.modules.CommandBase { + export class Settings extends $e.modules.editor.document.CommandHistoryBase { /** * Function getSubTitle(). * From 96e990ec9119c933a46c990611304beb2852b80d Mon Sep 17 00:00:00 2001 From: Mati Horovitz Date: Tue, 28 Jun 2022 20:18:13 +0300 Subject: [PATCH 008/130] Internal: ESLint fixes - Revert failure fixes --- assets/dev/js/editor/elements/models/element.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/dev/js/editor/elements/models/element.js b/assets/dev/js/editor/elements/models/element.js index ef362757178..44f47c9cef7 100644 --- a/assets/dev/js/editor/elements/models/element.js +++ b/assets/dev/js/editor/elements/models/element.js @@ -263,4 +263,4 @@ ElementModel = BaseElementModel.extend( { ElementModel.prototype.sync = ElementModel.prototype.fetch = ElementModel.prototype.save = _.noop; -export default ElementModel; +module.exports = ElementModel; From 5a2cecdb1b7b07e365188ab3a4bf295c1865bbe0 Mon Sep 17 00:00:00 2001 From: Mati Horovitz Date: Tue, 28 Jun 2022 20:33:01 +0300 Subject: [PATCH 009/130] Internal: ESLint fixes - Revert a merge conflict --- assets/dev/js/editor/document/elements/commands/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/dev/js/editor/document/elements/commands/settings.js b/assets/dev/js/editor/document/elements/commands/settings.js index 92b7e799458..f2e4c45a6a6 100644 --- a/assets/dev/js/editor/document/elements/commands/settings.js +++ b/assets/dev/js/editor/document/elements/commands/settings.js @@ -1,7 +1,7 @@ /** * @typedef {import('../../../container/container')} Container */ - export class Settings extends $e.modules.editor.document.CommandHistoryBase { +export class Settings extends $e.modules.editor.document.CommandHistoryDebounceBase { /** * Function getSubTitle(). * From f4ed27254442e6ac8e379474ffd5c87ec652e9aa Mon Sep 17 00:00:00 2001 From: Mark Tyrin <104833451+mark-elementor@users.noreply.github.com> Date: Wed, 6 Jul 2022 10:56:01 +0300 Subject: [PATCH 010/130] Internal: ESLint - Fixes (#19094) --- assets/dev/js/editor/elements/views/behaviors/context-menu.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/dev/js/editor/elements/views/behaviors/context-menu.js b/assets/dev/js/editor/elements/views/behaviors/context-menu.js index 3124ca62872..16b1097688a 100644 --- a/assets/dev/js/editor/elements/views/behaviors/context-menu.js +++ b/assets/dev/js/editor/elements/views/behaviors/context-menu.js @@ -1,4 +1,4 @@ -import AddSectionBase from 'elementor-views/add-section/base'; +import AddSectionBase from 'elementor-views/add-section/base'; var ContextMenu = require( 'elementor-editor-utils/context-menu' ); From 8c944f76922ec4db645b0b76bb3f08e9ebb89bdd Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Sun, 10 Jul 2022 12:38:56 +0300 Subject: [PATCH 011/130] Tweak: Custom links in menu items should be relative to the site address in Kit import [ED-6947] (#18668) * Tweak: Menu items with custom links should imported relative to the site address when importing a Kit [ED-6937] * CR fixex * Fixes --- core/app/modules/import-export/import.php | 37 +++- core/utils/import-export/url.php | 64 ++++++ .../mock/fresh-wordpress-database.xml | 0 .../mock/nav_menu_item.xml | 0 .../utils/{ => import-export}/mock/page.xml | 0 .../utils/{ => import-export}/mock/post.xml | 0 .../core/utils/import-export/test-url.php | 192 ++++++++++++++++++ .../{ => import-export}/test-wp-exporter.php | 2 +- .../{ => import-export}/test-wp-import.php | 2 +- 9 files changed, 286 insertions(+), 11 deletions(-) create mode 100644 core/utils/import-export/url.php rename tests/phpunit/elementor/core/utils/{ => import-export}/mock/fresh-wordpress-database.xml (100%) rename tests/phpunit/elementor/core/utils/{ => import-export}/mock/nav_menu_item.xml (100%) rename tests/phpunit/elementor/core/utils/{ => import-export}/mock/page.xml (100%) rename tests/phpunit/elementor/core/utils/{ => import-export}/mock/post.xml (100%) create mode 100644 tests/phpunit/elementor/core/utils/import-export/test-url.php rename tests/phpunit/elementor/core/utils/{ => import-export}/test-wp-exporter.php (98%) rename tests/phpunit/elementor/core/utils/{ => import-export}/test-wp-import.php (96%) diff --git a/core/app/modules/import-export/import.php b/core/app/modules/import-export/import.php index 6f6c0fd820e..0acf95e1da8 100644 --- a/core/app/modules/import-export/import.php +++ b/core/app/modules/import-export/import.php @@ -5,6 +5,7 @@ use Elementor\Core\App\Modules\ImportExport\Compatibility\Envato; use Elementor\Core\App\Modules\ImportExport\Compatibility\Kit_Library; use Elementor\Core\App\Modules\ImportExport\Directories\Root; +use Elementor\Core\Utils\ImportExport\Url; use Elementor\Plugin; use Elementor\Utils; @@ -37,10 +38,11 @@ final public function run() { remove_filter( 'elementor/document/save/data', [ $this, 'prevent_saving_elements_on_post_creation' ], 10 ); $map_old_new_post_ids = $this->map_old_new_post_ids( $imported_posts ); + $original_site = ! empty( $manifest_data['site'] ) ? $manifest_data['site'] : null; $this->save_elements_of_imported_posts( $map_old_new_post_ids ); - $this->update_object_id_of_imported_menu_items( $map_old_new_post_ids ); + $this->update_object_id_of_imported_menu_items( $map_old_new_post_ids, $original_site ); return $imported_posts; } @@ -94,23 +96,40 @@ private function save_elements_of_imported_posts( $map_old_new_post_ids ) { } } - private function update_object_id_of_imported_menu_items( $map_old_new_post_ids ) { + /** + * Update the imported manu items + * + * @param $map_old_new_post_ids Array of the old post's IDs vs the new post's IDs + * @param $original_site The base URL of the site that the kit was exported from. + * @return void + */ + private function update_object_id_of_imported_menu_items( $map_old_new_post_ids, $original_site ) { foreach ( $map_old_new_post_ids as $new_post_id ) { if ( 'nav_menu_item' !== get_post_type( $new_post_id ) ) { continue; } $post_meta = get_post_meta( $new_post_id ); + $menu_item_object_id = (int) $post_meta['_menu_item_object_id'][0]; - // Skip items that not related to posts. - if ( 'post_type' !== $post_meta['_menu_item_type'][0] ) { - continue; - } + switch ( $post_meta['_menu_item_type'][0] ) { + case 'post_type': + $update_meta = update_post_meta( $new_post_id, '_menu_item_object_id', $map_old_new_post_ids[ $menu_item_object_id ] ); + + if ( ! $update_meta ) { + wp_delete_post( $new_post_id ); + } + break; + + case 'custom': + $url = $post_meta['_menu_item_url'][0]; - $update_meta = update_post_meta( $new_post_id, '_menu_item_object_id', $map_old_new_post_ids[ $post_meta['_menu_item_object_id'][0] ] ); + $migrated_url = Url::migrate( $url, $original_site ); - if ( ! $update_meta ) { - wp_delete_post( $new_post_id ); + if ( $migrated_url !== $url ) { + update_post_meta( $new_post_id, '_menu_item_url', $migrated_url ); + } + break; } } } diff --git a/core/utils/import-export/url.php b/core/utils/import-export/url.php new file mode 100644 index 00000000000..eb221dd471b --- /dev/null +++ b/core/utils/import-export/url.php @@ -0,0 +1,64 @@ +ID ); + } + + if ( empty( $permalink ) ) { + return $full_url; + } + + if ( ! empty( $parsed_url['query'] ) ) { + parse_str( $parsed_url['query'], $parsed_query ); + + // Clean WP permalinks query args to prevent collision with the new permalink. + unset( $parsed_query['p'] ); + unset( $parsed_query['page_id'] ); + + $permalink = add_query_arg( $parsed_query, $permalink ); + } + + if ( ! empty( $parsed_url['fragment'] ) ) { + $permalink .= '#' . $parsed_url['fragment']; + } + + return wp_make_link_relative( $permalink ); + } +} diff --git a/tests/phpunit/elementor/core/utils/mock/fresh-wordpress-database.xml b/tests/phpunit/elementor/core/utils/import-export/mock/fresh-wordpress-database.xml similarity index 100% rename from tests/phpunit/elementor/core/utils/mock/fresh-wordpress-database.xml rename to tests/phpunit/elementor/core/utils/import-export/mock/fresh-wordpress-database.xml diff --git a/tests/phpunit/elementor/core/utils/mock/nav_menu_item.xml b/tests/phpunit/elementor/core/utils/import-export/mock/nav_menu_item.xml similarity index 100% rename from tests/phpunit/elementor/core/utils/mock/nav_menu_item.xml rename to tests/phpunit/elementor/core/utils/import-export/mock/nav_menu_item.xml diff --git a/tests/phpunit/elementor/core/utils/mock/page.xml b/tests/phpunit/elementor/core/utils/import-export/mock/page.xml similarity index 100% rename from tests/phpunit/elementor/core/utils/mock/page.xml rename to tests/phpunit/elementor/core/utils/import-export/mock/page.xml diff --git a/tests/phpunit/elementor/core/utils/mock/post.xml b/tests/phpunit/elementor/core/utils/import-export/mock/post.xml similarity index 100% rename from tests/phpunit/elementor/core/utils/mock/post.xml rename to tests/phpunit/elementor/core/utils/import-export/mock/post.xml diff --git a/tests/phpunit/elementor/core/utils/import-export/test-url.php b/tests/phpunit/elementor/core/utils/import-export/test-url.php new file mode 100644 index 00000000000..53eddfd0b3b --- /dev/null +++ b/tests/phpunit/elementor/core/utils/import-export/test-url.php @@ -0,0 +1,192 @@ +wp_rewrite = $wp_rewrite; + $this->page = $this->factory()->post->create_and_get( [ 'post_type' => 'page' ] ); + } + + public function tearDown() + { + parent::tearDown(); + + $this->wp_rewrite->set_permalink_structure( static::PERMALINK_STRUCTURE_PLAIN ); + } + + /** + * Plain permalink structure + */ + + public function test_migrate__plain_to_post_name_permalink() { + // Arrange + $this->wp_rewrite->set_permalink_structure( static::PERMALINK_STRUCTURE_PLAIN ); + + $base_url = 'https://test.local'; + $url = $base_url . '/' . $this->page->post_name; + + // Act + $modified_url = Url::migrate( $url, $base_url ); + + // Assert + $this->assertEquals( '/?page_id=' . $this->page->ID, $modified_url ); + } + + public function test_migrate__plain_to_post_name_permalink_with_query_args_and_anchor() { + // Arrange + $this->wp_rewrite->set_permalink_structure( static::PERMALINK_STRUCTURE_PLAIN ); + + $base_url = 'https://test.local'; + $query_args= 'a=aa&b=bb'; + $query_args_that_should_be_removed = '&p=12&page_id=13'; + + $url = $base_url . '/' . $this->page->post_name .'?' . $query_args . $query_args_that_should_be_removed . '#anchor'; + + // Act + $modified_url = Url::migrate( $url, $base_url ); + + // Assert + $this->assertEquals( '/?page_id=' . $this->page->ID . '&' . $query_args . '#anchor', $modified_url ); + } + + /** + * Post name permalink structure + */ + + public function test_migrate__post_name_to_post_name_permalink() { + // Arrange + $this->wp_rewrite->set_permalink_structure( static::PERMALINK_STRUCTURE_POST_NAME ); + + $base_url = 'https://test.local'; + $url = $base_url . '/' . $this->page->post_name; + + // Act + $modified_url = Url::migrate( $url, $base_url ); + + // Assert + $this->assertEquals( '/' . $this->page->post_name . '/', $modified_url ); + } + + public function test_migrate__post_name_to_post_name_permalink_with_different_base_url() { + // Arrange + $this->wp_rewrite->set_permalink_structure( static::PERMALINK_STRUCTURE_POST_NAME ); + + $base_url = 'https://test.local'; + $url = 'test.local/' . $this->page->post_name; + + // Act + $modified_url = Url::migrate( $url, $base_url ); + + // Assert + $this->assertEquals( $url, $modified_url ); + } + + public function test_migrate__post_name_permalink_with_query_args_and_anchor() { + // Arrange + $this->wp_rewrite->set_permalink_structure( static::PERMALINK_STRUCTURE_POST_NAME ); + + $base_url = 'https://test.local'; + $query_args= 'a=aa&b=bb'; + + $url = $base_url . '/' . $this->page->post_name .'?' . $query_args . '#anchor'; + + // Act + $modified_url = Url::migrate( $url, $base_url ); + + // Assert + $this->assertEquals( '/' . $this->page->post_name . '/?' . $query_args . '#anchor', $modified_url ); + } + + /** + * General tests regardless the permalink structure + */ + + public function test_migrate__plain_permalink_will_do_noting() { + // Arrange + $base_url = 'https://test.local'; + $query_args = '&a=aa&b=bb'; + + $url = $base_url . '/?p=' . $this->page->ID . $query_args; + + // Act + $modified_url = Url::migrate( $url, $base_url ); + + // Assert + $this->assertEquals( $url, $modified_url ); + } + + public function test_migrate__full_dynamic_url() { + // Arrange + $url = 'https://www.test.local'; + + // Act + $modified_url = Url::migrate( $url ); + + // Assert + $this->assertEquals( $url, $modified_url ); + } + + public function test_migrate__dynamic_url() { + // Arrange + $url = 'test.local'; + + // Act + $modified_url = Url::migrate( $url ); + + // Assert + $this->assertEquals( $url, $modified_url ); + } + + public function test_migrate__dynamic_url_with_path() { + // Arrange + $base_url = 'https://test.local/'; + $url = $base_url .$this->page->post_name; + + // Act + $modified_url = Url::migrate( $url ); + + // Assert + $this->assertEquals( $url, $modified_url ); + } + + public function test_migrate__url_without_actual_reference() { + // Arrange + $url = 'https://www.test.local/not-refer-to-any-post/'; + $base_url = 'https://www.test.local'; + + // Act + $modified_url = Url::migrate( $url, $base_url ); + + // Assert + $this->assertEquals( $url, $modified_url ); + } + + public function test_migrate__relative_url_without_actual_reference() { + // Arrange + $url = '/not-refer-to-any-post/'; + + // Act + $modified_url = Url::migrate( $url ); + + // Assert + $this->assertEquals( $url, $modified_url ); + } +} diff --git a/tests/phpunit/elementor/core/utils/test-wp-exporter.php b/tests/phpunit/elementor/core/utils/import-export/test-wp-exporter.php similarity index 98% rename from tests/phpunit/elementor/core/utils/test-wp-exporter.php rename to tests/phpunit/elementor/core/utils/import-export/test-wp-exporter.php index 54d3f2d917e..46bd96c3791 100644 --- a/tests/phpunit/elementor/core/utils/test-wp-exporter.php +++ b/tests/phpunit/elementor/core/utils/import-export/test-wp-exporter.php @@ -1,5 +1,5 @@ Date: Mon, 11 Jul 2022 12:05:00 +0300 Subject: [PATCH 012/130] Internal: Testing Finder using PHPUnit [ED-6095] (#17334) * Internal: Testing Finder using PHPUnit [ED-6095] * Changes Co-authored-by: yossi-elementor <87371461+yossi-elementor@users.noreply.github.com> --- .../modules/finder/mock/mock-category.php | 35 +++++++++ .../finder/test-categories-manager.php | 77 +++++++++++++++++++ .../common/modules/finder/test-module.php | 36 +++++++++ 3 files changed, 148 insertions(+) create mode 100644 tests/phpunit/elementor/core/common/modules/finder/mock/mock-category.php create mode 100644 tests/phpunit/elementor/core/common/modules/finder/test-categories-manager.php create mode 100644 tests/phpunit/elementor/core/common/modules/finder/test-module.php diff --git a/tests/phpunit/elementor/core/common/modules/finder/mock/mock-category.php b/tests/phpunit/elementor/core/common/modules/finder/mock/mock-category.php new file mode 100644 index 00000000000..cac20efdf86 --- /dev/null +++ b/tests/phpunit/elementor/core/common/modules/finder/mock/mock-category.php @@ -0,0 +1,35 @@ + 'mock-icon', + 'title' => 'mock-title', + 'description' => 'mock-description', + 'url' => 'mock-url', + 'actions' => [ + [ + 'name' => 'mock-action-name', + 'url' => 'mock-action-url', + 'icon' => 'mock-action-icon', + ], + ], + ] ]; + } +} diff --git a/tests/phpunit/elementor/core/common/modules/finder/test-categories-manager.php b/tests/phpunit/elementor/core/common/modules/finder/test-categories-manager.php new file mode 100644 index 00000000000..8d404da38cb --- /dev/null +++ b/tests/phpunit/elementor/core/common/modules/finder/test-categories-manager.php @@ -0,0 +1,77 @@ +get_categories(); + + // Act + $categories_manager->register( $mock ); + + // Assert + $new_categories = $categories_manager->get_categories(); + + $this->assertEquals( $old_categories + [ 'mock' => $mock ], $new_categories ); + } + + /** + * Test registration backward compatibility. + * Registration of new category with category id. + */ + public function test_register__with_passing_category_id() { + // Arrange + $mock = new Mock_Category(); + + $categories_manager = new Categories_Manager(); + $old_categories = $categories_manager->get_categories(); + + // Act + $categories_manager->register( $mock, 'mock_id' ); + + // Assert + $new_categories = $categories_manager->get_categories(); + + $this->assertEquals( $old_categories + [ 'mock_id' => $mock ], $new_categories ); + } + + /** + * Test if the register hook is running as expected. + */ + public function test_register__hook() { + // Arrange + $categories_manager = new Categories_Manager(); + + $mock = $this->getMockBuilder( static::class ) + ->setMethods( [ 'on_finder_category_register' ] ) + ->getMock(); + + // Assert + $mock->expects( $this->once() ) + ->method( 'on_finder_category_register' ) + ->with( + $this->isInstanceOf( Categories_Manager::class ) + ); + + // Act + add_action( 'elementor/finder/register', [ $mock, 'on_finder_category_register' ] ); + + // Trigger the hook. + $categories_manager->get_categories(); + } +} diff --git a/tests/phpunit/elementor/core/common/modules/finder/test-module.php b/tests/phpunit/elementor/core/common/modules/finder/test-module.php new file mode 100644 index 00000000000..6ad44bf7671 --- /dev/null +++ b/tests/phpunit/elementor/core/common/modules/finder/test-module.php @@ -0,0 +1,36 @@ +register( $mock ); + } ); + + $module = new Finder_Module(); + + // Act + $category_items = $module->ajax_get_category_items( [ 'category' => 'mock' ] ); + + // Assert + $mock_items = $mock->get_category_items(); + + $this->assertEquals( $category_items, $mock_items ); + } +} From 2c1feb9bb168a5e1edc38742b10f165b433ef8b6 Mon Sep 17 00:00:00 2001 From: yossi-elementor <87371461+yossi-elementor@users.noreply.github.com> Date: Mon, 11 Jul 2022 15:51:34 +0300 Subject: [PATCH 013/130] Tweak: UTM missing on the import-export error message [ED-6317] (#19127) Replace error link of import export manifest error Co-authored-by: Guy Cohen --- .../js/shared/process-failed-dialog/process-failed-dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/app/modules/import-export/assets/js/shared/process-failed-dialog/process-failed-dialog.js b/core/app/modules/import-export/assets/js/shared/process-failed-dialog/process-failed-dialog.js index 890b833c7a2..f846b9a0177 100644 --- a/core/app/modules/import-export/assets/js/shared/process-failed-dialog/process-failed-dialog.js +++ b/core/app/modules/import-export/assets/js/shared/process-failed-dialog/process-failed-dialog.js @@ -40,7 +40,7 @@ export default function ProcessFailedDialog( { errorType, onApprove, onDismiss, if ( isTryAgainAction ) { onApprove(); } else { - window.open( 'https://elementor.com/help/how-to-fix-common-errors-with-import-export/', '_blank' ); + window.open( 'http://go.elementor.com/app-import-download-failed', '_blank' ); } }, handleOnDismiss = () => { From 0369f47b1bf4c1f81b263850d65d2ac8cf4538a6 Mon Sep 17 00:00:00 2001 From: Mark Tyrin <104833451+mark-elementor@users.noreply.github.com> Date: Wed, 13 Jul 2022 10:12:43 +0300 Subject: [PATCH 014/130] Tweak: Notes was added to the right click context menu [ED-7411] (#19026) * Tweak: Notes was added to the right click context menu [ED-7411] --- .grunt-config/webpack.js | 1 + .../editor/regions/panel/pages/menu/menu.js | 1 + core/modules-manager.php | 1 + modules/notes/assets/js/editor/module.js | 45 +++++++++++++++++ modules/notes/assets/js/index.js | 3 ++ modules/notes/module.php | 49 +++++++++++++++++++ 6 files changed, 100 insertions(+) create mode 100644 modules/notes/assets/js/editor/module.js create mode 100644 modules/notes/assets/js/index.js create mode 100644 modules/notes/module.php diff --git a/.grunt-config/webpack.js b/.grunt-config/webpack.js index 629245e90c9..06a11921550 100644 --- a/.grunt-config/webpack.js +++ b/.grunt-config/webpack.js @@ -105,6 +105,7 @@ const entry = { 'qunit-tests': path.resolve( __dirname, '../tests/qunit/main.js' ), 'admin-top-bar': path.resolve( __dirname, '../modules/admin-top-bar/assets/js/admin.js' ), 'container-converter': path.resolve( __dirname, '../modules/container-converter/assets/js/editor/module.js' ), + 'notes': path.resolve( __dirname, '../modules/notes/assets/js/index.js' ), 'web-cli': path.resolve( __dirname, '../modules/web-cli/assets/js/index.js' ), }; diff --git a/assets/dev/js/editor/regions/panel/pages/menu/menu.js b/assets/dev/js/editor/regions/panel/pages/menu/menu.js index 96e9d1809eb..e3402f2aa6b 100644 --- a/assets/dev/js/editor/regions/panel/pages/menu/menu.js +++ b/assets/dev/js/editor/regions/panel/pages/menu/menu.js @@ -67,6 +67,7 @@ PanelMenu.addAdminMenu = () => { ], }, { at: 0 } ); + // TODO: Move to the Notes module PanelMenu.addItem( { name: 'notes', icon: 'eicon-commenting-o', diff --git a/core/modules-manager.php b/core/modules-manager.php index 330dea11f3b..bc1e75c23ee 100644 --- a/core/modules-manager.php +++ b/core/modules-manager.php @@ -96,6 +96,7 @@ public function get_modules_names() { 'admin-top-bar', 'container-converter', 'web-cli', + 'notes', ]; } diff --git a/modules/notes/assets/js/editor/module.js b/modules/notes/assets/js/editor/module.js new file mode 100644 index 00000000000..06cef306446 --- /dev/null +++ b/modules/notes/assets/js/editor/module.js @@ -0,0 +1,45 @@ +export default class NotesModule extends elementorModules.editor.utils.Module { + onInit() { + this.contextMenuNotesGroup(); + } + + contextMenuNotesGroup() { + const elTypes = [ 'widget', 'section', 'column', 'container' ]; + + elTypes.forEach( ( type ) => { + elementor.hooks.addFilter( `elements/${ type }/contextMenuGroups`, this.contextMenuAddGroup ); + } ); + } + + /** + * Append the 'Notes' context menu group + * + * @since 3.8.0 + * + * @param {Array} groups + * @return {Array} The updated groups. + */ + contextMenuAddGroup( groups ) { + const deleteGroup = _.findWhere( groups, { name: 'delete' } ); + let deleteGroupIndex = groups.indexOf( deleteGroup ); + + if ( -1 === deleteGroupIndex ) { + deleteGroupIndex = groups.length; + } + + groups.splice( deleteGroupIndex, 0, { + name: 'notes', + actions: [ + { + name: 'open_notes', + title: __( 'Notes', 'elementor' ), + shortcut: '', + isEnabled: () => false, + callback: () => {}, + }, + ], + } ); + + return groups; + } +} diff --git a/modules/notes/assets/js/index.js b/modules/notes/assets/js/index.js new file mode 100644 index 00000000000..b70b0eecf03 --- /dev/null +++ b/modules/notes/assets/js/index.js @@ -0,0 +1,3 @@ +import NotesModule from './editor/module'; + +new NotesModule(); diff --git a/modules/notes/module.php b/modules/notes/module.php new file mode 100644 index 00000000000..eb054b6dafa --- /dev/null +++ b/modules/notes/module.php @@ -0,0 +1,49 @@ +get_js_assets_url( 'notes' ), + [ 'elementor-editor' ], + ELEMENTOR_VERSION, + true + ); + } + + /** + * @return bool + */ + public static function is_active() { + return ! Utils::has_pro(); + } + + /** + * Initialize the Notes module. + * + * @return void + */ + public function __construct() { + parent::__construct(); + + add_action( 'elementor/editor/after_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); + } +} From f4fdc35cb7ce8efcdb35382f1a1ecaa88905f566 Mon Sep 17 00:00:00 2001 From: Mark Tyrin <104833451+mark-elementor@users.noreply.github.com> Date: Sun, 17 Jul 2022 13:29:07 +0300 Subject: [PATCH 015/130] Internal: Notes menu item in Settings moved to the Notes module [ED-7649] (#19138) --- .grunt-config/webpack.js | 2 +- .../editor/regions/panel/pages/menu/menu.js | 32 ------------------- modules/notes/assets/js/e-component.js | 30 +++++++++++++++++ modules/notes/assets/js/hooks/index.js | 1 + .../state-ready/notes-add-panel-menu-item.js | 29 +++++++++++++++++ modules/notes/assets/js/index.js | 3 -- .../context-menu/notes-context-menu.js} | 4 ++- modules/notes/assets/js/modules/index.js | 1 + modules/notes/assets/js/notes.js | 3 ++ modules/notes/module.php | 2 +- 10 files changed, 69 insertions(+), 38 deletions(-) create mode 100644 modules/notes/assets/js/e-component.js create mode 100644 modules/notes/assets/js/hooks/index.js create mode 100644 modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js delete mode 100644 modules/notes/assets/js/index.js rename modules/notes/assets/js/{editor/module.js => modules/context-menu/notes-context-menu.js} (89%) create mode 100644 modules/notes/assets/js/modules/index.js create mode 100644 modules/notes/assets/js/notes.js diff --git a/.grunt-config/webpack.js b/.grunt-config/webpack.js index 57a2ca38ac8..3235df7115c 100644 --- a/.grunt-config/webpack.js +++ b/.grunt-config/webpack.js @@ -107,7 +107,7 @@ const entry = { 'qunit-tests': path.resolve( __dirname, '../tests/qunit/main.js' ), 'admin-top-bar': path.resolve( __dirname, '../modules/admin-top-bar/assets/js/admin.js' ), 'container-converter': path.resolve( __dirname, '../modules/container-converter/assets/js/editor/module.js' ), - 'notes': path.resolve( __dirname, '../modules/notes/assets/js/index.js' ), + 'notes': path.resolve( __dirname, '../modules/notes/assets/js/notes.js' ), 'web-cli': path.resolve( __dirname, '../modules/web-cli/assets/js/index.js' ), }; diff --git a/assets/dev/js/editor/regions/panel/pages/menu/menu.js b/assets/dev/js/editor/regions/panel/pages/menu/menu.js index 9d137088e77..e2d533c5437 100644 --- a/assets/dev/js/editor/regions/panel/pages/menu/menu.js +++ b/assets/dev/js/editor/regions/panel/pages/menu/menu.js @@ -67,38 +67,6 @@ PanelMenu.addAdminMenu = () => { ], }, { at: 0 } ); - // TODO: Move to the Notes module - PanelMenu.addItem( { - name: 'notes', - icon: 'eicon-commenting-o', - title: __( 'Notes', 'elementor' ), - callback() { - const hasProAndNotConnected = elementor.helpers.hasProAndNotConnected(), - dialogOptions = { - title: __( 'Notes', 'elementor' ), - content: __( - 'With Notes, teamwork gets even better. Stay in sync with comments, feedback & more on your website.', - 'elementor', - ), - targetElement: this.$el, - position: { - blockStart: '-3', - inlineStart: '+10', - }, - actionButton: { - url: hasProAndNotConnected - ? elementorProEditorConfig.urls.connect - : 'https://go.elementor.com/go-pro-notes/', - text: hasProAndNotConnected - ? __( 'Connect & Activate', 'elementor' ) - : __( 'See it in Action', 'elementor' ), - }, - }; - - elementor.promotion.showDialog( dialogOptions ); - }, - }, 'navigate_from_page', 'view-page' ); - PanelMenu.addItem( { name: 'finder', icon: 'eicon-search', diff --git a/modules/notes/assets/js/e-component.js b/modules/notes/assets/js/e-component.js new file mode 100644 index 00000000000..59578f6b359 --- /dev/null +++ b/modules/notes/assets/js/e-component.js @@ -0,0 +1,30 @@ +import * as modules from './modules/'; +import * as hooks from './hooks/'; + +export default class EComponent extends $e.modules.ComponentBase { + constructor( args ) { + super( args ); + + this.loadModules(); + } + + /** + * @return {string} The namespace of the component + */ + getNamespace() { + return 'notes'; + } + + /** + * @return {*} All the hooks + */ + defaultHooks() { + return this.importHooks( hooks ); + } + + loadModules() { + for ( const key in modules ) { + new modules[ key ]; + } + } +} diff --git a/modules/notes/assets/js/hooks/index.js b/modules/notes/assets/js/hooks/index.js new file mode 100644 index 00000000000..bfa6de8ecd8 --- /dev/null +++ b/modules/notes/assets/js/hooks/index.js @@ -0,0 +1 @@ +export { NotesAddPanelMenuItem } from './ui/panel/state-ready/notes-add-panel-menu-item'; diff --git a/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js b/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js new file mode 100644 index 00000000000..6602ebbc01f --- /dev/null +++ b/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js @@ -0,0 +1,29 @@ +export class NotesAddPanelMenuItem extends $e.modules.hookUI.After { + getCommand() { + return 'panel/state-ready'; + } + + getId() { + return 'notes-add-panel-menu-item'; + } + + apply() { + elementor.modules.layouts.panel.pages.menu.Menu.addItem( { + name: 'notes', + icon: 'eicon-commenting-o', + title: __( 'Notes', 'elementor' ), + callback() { + elementor.promotion.showDialog( { + headerMessage: __( 'Notes', 'elementor' ), + message: __( 'With Notes, teamwork gets even better. Stay in sync with comments, feedback & more on your website.', 'elementor' ), + top: '-3', + inlineStart: '+10', + element: this.$el, + actionURL: 'https://go.elementor.com/go-pro-notes/', + } ); + }, + }, 'navigate_from_page', 'finder' ); + } +} + +export default NotesAddPanelMenuItem; diff --git a/modules/notes/assets/js/index.js b/modules/notes/assets/js/index.js deleted file mode 100644 index b70b0eecf03..00000000000 --- a/modules/notes/assets/js/index.js +++ /dev/null @@ -1,3 +0,0 @@ -import NotesModule from './editor/module'; - -new NotesModule(); diff --git a/modules/notes/assets/js/editor/module.js b/modules/notes/assets/js/modules/context-menu/notes-context-menu.js similarity index 89% rename from modules/notes/assets/js/editor/module.js rename to modules/notes/assets/js/modules/context-menu/notes-context-menu.js index 06cef306446..3f114e203bb 100644 --- a/modules/notes/assets/js/editor/module.js +++ b/modules/notes/assets/js/modules/context-menu/notes-context-menu.js @@ -1,4 +1,4 @@ -export default class NotesModule extends elementorModules.editor.utils.Module { +export class NotesContextMenu extends elementorModules.editor.utils.Module { onInit() { this.contextMenuNotesGroup(); } @@ -43,3 +43,5 @@ export default class NotesModule extends elementorModules.editor.utils.Module { return groups; } } + +export default NotesContextMenu; diff --git a/modules/notes/assets/js/modules/index.js b/modules/notes/assets/js/modules/index.js new file mode 100644 index 00000000000..f6dd59ecb6d --- /dev/null +++ b/modules/notes/assets/js/modules/index.js @@ -0,0 +1 @@ +export { NotesContextMenu } from './context-menu/notes-context-menu'; diff --git a/modules/notes/assets/js/notes.js b/modules/notes/assets/js/notes.js new file mode 100644 index 00000000000..364d9158ed8 --- /dev/null +++ b/modules/notes/assets/js/notes.js @@ -0,0 +1,3 @@ +import NotesComponent from './e-component'; + +window.top.$e.components.register( new NotesComponent() ); diff --git a/modules/notes/module.php b/modules/notes/module.php index eb054b6dafa..e8cad82f338 100644 --- a/modules/notes/module.php +++ b/modules/notes/module.php @@ -21,7 +21,7 @@ public function get_name() { */ public function enqueue_scripts() { wp_enqueue_script( - 'notes', + 'elementor-notes', $this->get_js_assets_url( 'notes' ), [ 'elementor-editor' ], ELEMENTOR_VERSION, From d492ac4adabe941e0645b63bb7eff101177dc229 Mon Sep 17 00:00:00 2001 From: Mark Tyrin <104833451+mark-elementor@users.noreply.github.com> Date: Sun, 17 Jul 2022 14:43:13 +0300 Subject: [PATCH 016/130] Fix: Kit Library, default direction for Featured sorting to ASC, hide button [ED-7281] (#18760) --- .../assets/js/components/sort-select.js | 41 ++++++++++++------- .../kit-library/assets/js/hooks/use-kits.js | 2 +- .../assets/js/pages/index/index.js | 25 +++++++++-- 3 files changed, 49 insertions(+), 19 deletions(-) diff --git a/core/app/modules/kit-library/assets/js/components/sort-select.js b/core/app/modules/kit-library/assets/js/components/sort-select.js index 43f5b48397c..7c7b7de1cf7 100644 --- a/core/app/modules/kit-library/assets/js/components/sort-select.js +++ b/core/app/modules/kit-library/assets/js/components/sort-select.js @@ -1,8 +1,19 @@ import { Select, Button } from '@elementor/app-ui'; +import { useState, useEffect } from 'react'; import './sort-select.scss'; export default function SortSelect( props ) { + const getSelectedOptionDetails = ( value ) => { + return props.options.find( ( option ) => option.value === value ); + }; + + const [ selectedSortBy, setSelectedSortBy ] = useState( getSelectedOptionDetails( props.value.by ) ); + + useEffect( () => { + props.onChange( { by: selectedSortBy.value, direction: selectedSortBy.defaultOrder ?? props.value.direction } ); + }, [ selectedSortBy ] ); + return (
@@ -11,24 +22,26 @@ export default function SortSelect( props ) { value={ props.value.by } onChange={ ( e ) => { const value = e.target.value; - - props.onChange( { by: value, direction: props.value.direction } ); + setSelectedSortBy( getSelectedOptionDetails( value ) ); } } className="eps-sort-select__select" />
-
); } diff --git a/core/app/modules/kit-library/assets/js/hooks/use-kits.js b/core/app/modules/kit-library/assets/js/hooks/use-kits.js index 07ae2a4b556..a35a981c837 100644 --- a/core/app/modules/kit-library/assets/js/hooks/use-kits.js +++ b/core/app/modules/kit-library/assets/js/hooks/use-kits.js @@ -21,7 +21,7 @@ export const defaultQueryParams = { }; }, {} ), order: { - direction: 'desc', + direction: 'asc', by: 'featuredIndex', }, referrer: null, diff --git a/core/app/modules/kit-library/assets/js/pages/index/index.js b/core/app/modules/kit-library/assets/js/pages/index/index.js index cebe6e79863..42c4e071ff5 100644 --- a/core/app/modules/kit-library/assets/js/pages/index/index.js +++ b/core/app/modules/kit-library/assets/js/pages/index/index.js @@ -206,10 +206,27 @@ export default function Index( props ) { > setQueryParams( ( prev ) => ( { ...prev, order } ) ) } From ec45dac97c6539eb6adf5ade30e0d603f06860ca Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Sun, 17 Jul 2022 16:06:44 +0300 Subject: [PATCH 017/130] Fix: Insert library button is clickable while inserting a template [ED-7008] (#18741) --- assets/dev/js/admin/admin.js | 13 +++++++++---- .../template-library/behaviors/insert-template.js | 2 ++ assets/dev/scss/editor/_templates-modal.scss | 8 ++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/assets/dev/js/admin/admin.js b/assets/dev/js/admin/admin.js index 90f8f9e731d..4d500e1d75e 100644 --- a/assets/dev/js/admin/admin.js +++ b/assets/dev/js/admin/admin.js @@ -382,9 +382,11 @@ import FilesUploadHandler from '../editor/utils/files-upload-handler'; } const self = this, + $importForm = self.elements.$importForm, $importButton = self.elements.$importButton, $importArea = self.elements.$importArea, - $importNowButton = self.elements.$importNowButton; + $importNowButton = self.elements.$importNowButton, + $importFormFileInput = self.elements.$importFormFileInput; self.elements.$formAnchor = $( '.wp-header-end' ); @@ -396,12 +398,15 @@ import FilesUploadHandler from '../editor/utils/files-upload-handler'; $( '#elementor-import-template-area' ).toggle(); } ); - $importNowButton.on( 'click', ( event ) => { - if ( self.elements.$importFormFileInput[ 0 ].files.length && ! elementorCommon.config.filesUpload.unfilteredFiles ) { + $importForm.on( 'submit', ( event ) => { + $importNowButton[ 0 ].disabled = true; + $importNowButton[ 0 ].value = __( 'Importing...', 'elementor' ); + + if ( $importFormFileInput[ 0 ].files.length && ! elementorCommon.config.filesUpload.unfilteredFiles ) { event.preventDefault(); const enableUnfilteredFilesModal = FilesUploadHandler.getUnfilteredFilesNotEnabledImportTemplateDialog( () => { - self.elements.$importForm.trigger( 'submit' ); + $importForm.trigger( 'submit' ); } ); enableUnfilteredFilesModal.show(); diff --git a/assets/dev/js/editor/components/template-library/behaviors/insert-template.js b/assets/dev/js/editor/components/template-library/behaviors/insert-template.js index fe43a433270..e424c11ee84 100644 --- a/assets/dev/js/editor/components/template-library/behaviors/insert-template.js +++ b/assets/dev/js/editor/components/template-library/behaviors/insert-template.js @@ -14,6 +14,8 @@ InsertTemplateHandler = Marionette.Behavior.extend( { model: this.view.model, }; + this.ui.insertButton.addClass( 'elementor-disabled' ); + if ( 'remote' === args.model.get( 'source' ) && ! elementor.config.library_connect.is_connected ) { $e.route( 'library/connect', args ); return; diff --git a/assets/dev/scss/editor/_templates-modal.scss b/assets/dev/scss/editor/_templates-modal.scss index ee5eb91aa3a..df3f6a772cf 100644 --- a/assets/dev/scss/editor/_templates-modal.scss +++ b/assets/dev/scss/editor/_templates-modal.scss @@ -59,6 +59,14 @@ $remote-templates-items-space: 30px; .elementor-template-library-template-insert { color: #fff; background-color: $editor-success; + + &.elementor-disabled { + cursor: default; + pointer-events: none; + color: $editor-light; + background-color: $editor-darker; + transition: 0.3s; + } } .elementor-go-pro { From d2ebe13c9e21422b3a7bce4b5f47e7639c2982ca Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Wed, 20 Jul 2022 12:58:07 +0300 Subject: [PATCH 018/130] Tweak: Increased Notes discoverability in the editor [ED-7726] (#19191) --- .grunt-config/sass.js | 7 +++++++ assets/dev/scss/editor/panel/_menu.scss | 18 +++++++++++------- .../state-ready/notes-add-panel-menu-item.js | 2 +- modules/notes/assets/scss/editor.scss | 9 +++++++++ modules/notes/module.php | 15 +++++++++++++++ 5 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 modules/notes/assets/scss/editor.scss diff --git a/.grunt-config/sass.js b/.grunt-config/sass.js index a9503233df8..0b97f3e9964 100644 --- a/.grunt-config/sass.js +++ b/.grunt-config/sass.js @@ -21,6 +21,13 @@ const sass = { dest: 'assets/css/modules/container-converter', ext: '.css', }, + { + expand: true, + cwd: 'modules/notes/assets/scss', + src: 'editor.scss', + dest: 'assets/css/modules/notes', + ext: '.css', + }, ] } }; diff --git a/assets/dev/scss/editor/panel/_menu.scss b/assets/dev/scss/editor/panel/_menu.scss index 89327ecf5f2..492a6952c2c 100644 --- a/assets/dev/scss/editor/panel/_menu.scss +++ b/assets/dev/scss/editor/panel/_menu.scss @@ -23,7 +23,9 @@ } &-item { - display: table; + display: flex; + align-items: center; + padding: 10px; width: 100%; height: 40px; cursor: pointer; @@ -34,14 +36,10 @@ background-color: rgba( 255, 255, 255, .8 ); } - > * { - display: table-cell; - vertical-align: middle; - } - &-icon { text-align: center; - width: 50px; + width: 30px; + margin-inline-end: 10px; color: $editor-light; font-size: 19px; @@ -51,8 +49,14 @@ } &-title { + display: flex; + flex-grow: 1; font-weight: 500; + &-badge { + margin-inline-start: auto; + } + > span { color: $editor-success; } diff --git a/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js b/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js index 6602ebbc01f..0e12979c32f 100644 --- a/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js +++ b/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js @@ -11,7 +11,7 @@ export class NotesAddPanelMenuItem extends $e.modules.hookUI.After { elementor.modules.layouts.panel.pages.menu.Menu.addItem( { name: 'notes', icon: 'eicon-commenting-o', - title: __( 'Notes', 'elementor' ), + title: __( 'Notes', 'elementor' ) + '', callback() { elementor.promotion.showDialog( { headerMessage: __( 'Notes', 'elementor' ), diff --git a/modules/notes/assets/scss/editor.scss b/modules/notes/assets/scss/editor.scss new file mode 100644 index 00000000000..146892fcdfe --- /dev/null +++ b/modules/notes/assets/scss/editor.scss @@ -0,0 +1,9 @@ +@import "assets/dev/scss/helpers/variables.scss"; + +.elementor-panel-menu-item-notes { + + .elementor-panel-menu-item-title-badge { + font-size: 16px; + color: $brand-color-dark-pink; + } +} diff --git a/modules/notes/module.php b/modules/notes/module.php index e8cad82f338..a315fce2e36 100644 --- a/modules/notes/module.php +++ b/modules/notes/module.php @@ -29,6 +29,20 @@ public function enqueue_scripts() { ); } + /** + * Enqueue the module styles. + * + * @return void + */ + public function enqueue_styles() { + wp_enqueue_style( + 'elementor-notes', + $this->get_css_assets_url( 'modules/notes/editor' ), + [ 'elementor-editor' ], + ELEMENTOR_VERSION + ); + } + /** * @return bool */ @@ -45,5 +59,6 @@ public function __construct() { parent::__construct(); add_action( 'elementor/editor/after_enqueue_scripts', [ $this, 'enqueue_scripts' ] ); + add_action( 'elementor/editor/after_enqueue_styles', [ $this, 'enqueue_styles' ] ); } } From 9b9b4a27be32ffb1e0fc82074d7e5e54568b8f07 Mon Sep 17 00:00:00 2001 From: Davids Seveloff <94905340+davseve@users.noreply.github.com> Date: Wed, 20 Jul 2022 14:03:35 +0300 Subject: [PATCH 019/130] Fix: Go pro link is too wide in export kit tool [ED-7575] (#19200) --- .../import-export/assets/js/shared/kit-content/kit-content.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/app/modules/import-export/assets/js/shared/kit-content/kit-content.js b/core/app/modules/import-export/assets/js/shared/kit-content/kit-content.js index 12797c88901..53e5de68e8a 100644 --- a/core/app/modules/import-export/assets/js/shared/kit-content/kit-content.js +++ b/core/app/modules/import-export/assets/js/shared/kit-content/kit-content.js @@ -57,7 +57,7 @@ export default function KitContent( { contentData, hasPro } ) { { data.title } - + { data.description || getTemplateFeatures( data.features, index ) } From 553b272bff15decc4480560d3bd9334678ec7dfd Mon Sep 17 00:00:00 2001 From: udidol <36724484+udidol@users.noreply.github.com> Date: Thu, 21 Jul 2022 15:47:50 +0300 Subject: [PATCH 020/130] Tweak: Convert "Template Kits" to "Website Kits" phrasing throughout the plugin [ED-7673] (#19219) --- .../components/kit-info-modal/kit-info-modal.js | 2 +- .../assets/js/pages/export/export-kit/export-kit.js | 2 +- .../js/pages/export/export-plugins/export-plugins.js | 2 +- .../import-content-display/import-content-display.js | 4 ++-- .../assets/js/pages/import/import-kit/import-kit.js | 2 +- .../js/pages/import/import-resolver/import-resolver.js | 2 +- .../assets/js/shared/info-modal/export-info-modal.js | 10 +++++----- .../assets/js/shared/info-modal/import-info-modal.js | 8 ++++---- core/app/modules/import-export/module.php | 10 +++++----- .../assets/js/components/envato-promotion.js | 2 +- .../kit-library/assets/js/pages/index/index-header.js | 4 ++-- .../modules/kit-library/assets/js/pages/index/index.js | 4 ++-- core/experiments/manager.php | 4 ++-- core/files/file-types/zip.php | 2 +- 14 files changed, 29 insertions(+), 29 deletions(-) diff --git a/core/app/modules/import-export/assets/js/pages/export/export-kit/components/kit-information/components/kit-info-modal/kit-info-modal.js b/core/app/modules/import-export/assets/js/pages/export/export-kit/components/kit-information/components/kit-info-modal/kit-info-modal.js index cddb22b5e6a..4946863b56d 100644 --- a/core/app/modules/import-export/assets/js/pages/export/export-kit/components/kit-information/components/kit-info-modal/kit-info-modal.js +++ b/core/app/modules/import-export/assets/js/pages/export/export-kit/components/kit-information/components/kit-info-modal/kit-info-modal.js @@ -4,7 +4,7 @@ import Text from 'elementor-app/ui/atoms/text'; export default function KitInfoModal( props ) { return ( - + { __( 'What is kit information?', 'elementor' ) } diff --git a/core/app/modules/import-export/assets/js/pages/export/export-kit/export-kit.js b/core/app/modules/import-export/assets/js/pages/export/export-kit/export-kit.js index d2449cab1a5..54ea60dc6c1 100644 --- a/core/app/modules/import-export/assets/js/pages/export/export-kit/export-kit.js +++ b/core/app/modules/import-export/assets/js/pages/export/export-kit/export-kit.js @@ -44,7 +44,7 @@ export default function ExportKit() {
diff --git a/core/app/modules/import-export/assets/js/pages/export/export-plugins/export-plugins.js b/core/app/modules/import-export/assets/js/pages/export/export-plugins/export-plugins.js index 2b55275d684..e103d7dd51f 100644 --- a/core/app/modules/import-export/assets/js/pages/export/export-plugins/export-plugins.js +++ b/core/app/modules/import-export/assets/js/pages/export/export-plugins/export-plugins.js @@ -47,7 +47,7 @@ export default function ExportPlugins() { }>
diff --git a/core/app/modules/import-export/assets/js/pages/import/import-content/components/import-content-display/import-content-display.js b/core/app/modules/import-export/assets/js/pages/import/import-content/components/import-content-display/import-content-display.js index e5817bcede0..577ed141932 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-content/components/import-content-display/import-content-display.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-content/components/import-content-display/import-content-display.js @@ -29,7 +29,7 @@ export default function ImportContentDisplay( { if ( ! kitData.length && hasPlugins ) { return ( - { __( 'The Template Kit you’re using contains plugins for functionality, but no content or pages, etc.', 'elementor' ) } + { __( 'The Website Kit you’re using contains plugins for functionality, but no content or pages, etc.', 'elementor' ) } ); } @@ -37,7 +37,7 @@ export default function ImportContentDisplay( { if ( ! kitData.length ) { return ( - { __( 'You can’t use this Template Kit because it doesn’t contain any content, pages, etc. Try again with a different file.', 'elementor' ) } { __( 'Go Back', 'elementor' ) } + { __( 'You can’t use this Website Kit because it doesn’t contain any content, pages, etc. Try again with a different file.', 'elementor' ) } { __( 'Go Back', 'elementor' ) } ); } diff --git a/core/app/modules/import-export/assets/js/pages/import/import-kit/import-kit.js b/core/app/modules/import-export/assets/js/pages/import/import-kit/import-kit.js index 4f0798db8a1..7a83f021d2a 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-kit/import-kit.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-kit/import-kit.js @@ -80,7 +80,7 @@ export default function ImportKit() { }
{ __( 'Parts of this kit overlap with your site’s templates, design and settings. The items you leave checked on this list will replace your current design.', 'elementor' ) } { getLearnMoreLink() } diff --git a/core/app/modules/import-export/assets/js/shared/info-modal/export-info-modal.js b/core/app/modules/import-export/assets/js/shared/info-modal/export-info-modal.js index 39c15c766e6..ac3f885b0cc 100644 --- a/core/app/modules/import-export/assets/js/shared/info-modal/export-info-modal.js +++ b/core/app/modules/import-export/assets/js/shared/info-modal/export-info-modal.js @@ -3,14 +3,14 @@ import InfoModal from './info-modal'; export default function ExportInfoModal( props ) { return ( - + - { __( 'What’s a Template Kit?', 'elementor' ) } + { __( 'What’s a Website Kit?', 'elementor' ) } <> - { __( 'A Template Kit is a .zip file that contains all the parts of a complete site. It’s an easy way to get a site up and running quickly.', 'elementor' ) } + { __( 'A Website Kit is a .zip file that contains all the parts of a complete site. It’s an easy way to get a site up and running quickly.', 'elementor' ) }

- { __( ' Learn more about Template Kits', 'elementor' ) } + { __( ' Learn more about Website Kits', 'elementor' ) }
@@ -19,7 +19,7 @@ export default function ExportInfoModal( props ) { { __( 'How does exporting work?', 'elementor' ) } <> - { __( 'To turn your site into a Template Kit, select the templates, content, settings and plugins you want to include. Once it’s ready, you’ll get a .zip file that you can import to other sites.', 'elementor' ) } + { __( 'To turn your site into a Website Kit, select the templates, content, settings and plugins you want to include. Once it’s ready, you’ll get a .zip file that you can import to other sites.', 'elementor' ) }

{ __( 'Learn More', 'elementor' ) } diff --git a/core/app/modules/import-export/assets/js/shared/info-modal/import-info-modal.js b/core/app/modules/import-export/assets/js/shared/info-modal/import-info-modal.js index e209e19fff7..b046b7a5f04 100644 --- a/core/app/modules/import-export/assets/js/shared/info-modal/import-info-modal.js +++ b/core/app/modules/import-export/assets/js/shared/info-modal/import-info-modal.js @@ -3,14 +3,14 @@ import InfoModal from './info-modal'; export default function ImportInfoModal( props ) { return ( - + - { __( 'What’s a Template Kit?', 'elementor' ) } + { __( 'What’s a Website Kit?', 'elementor' ) } <> - { __( 'A Template Kit is a .zip file that contains all the parts of a complete site. It’s an easy way to get a site up and running quickly.', 'elementor' ) } + { __( 'A Website Kit is a .zip file that contains all the parts of a complete site. It’s an easy way to get a site up and running quickly.', 'elementor' ) }

- { __( ' Learn more about Template Kits', 'elementor' ) } + { __( ' Learn more about Website Kits', 'elementor' ) }
diff --git a/core/app/modules/import-export/module.php b/core/app/modules/import-export/module.php index 5835b9a7487..c73e9f644b6 100644 --- a/core/app/modules/import-export/module.php +++ b/core/app/modules/import-export/module.php @@ -291,14 +291,14 @@ private function render_import_export_tab_content() { $intro_text = sprintf( /* translators: 1: New line break, 2: Learn More link. */ - __( 'Design sites faster with a template kit that contains some or all components of a complete site, like templates, content & site settings.%1$sYou can import a kit and apply it to your site, or export the elements from this site to be used anywhere else. %2$s', 'elementor' ), + __( 'Design sites faster with a Website kit that contains some or all components of a complete site, like templates, content & site settings.%1$sYou can import a kit and apply it to your site, or export the elements from this site to be used anywhere else. %2$s', 'elementor' ), '
', $intro_text_link ); $content_data = [ 'export' => [ - 'title' => esc_html__( 'Export a Template Kit', 'elementor' ), + 'title' => esc_html__( 'Export a Website Kit', 'elementor' ), 'button' => [ 'url' => Plugin::$instance->app->get_base_url() . '#/export', 'text' => esc_html__( 'Start Export', 'elementor' ), @@ -310,7 +310,7 @@ private function render_import_export_tab_content() { ], ], 'import' => [ - 'title' => esc_html__( 'Import a Template Kit', 'elementor' ), + 'title' => esc_html__( 'Import a Website Kit', 'elementor' ), 'button' => [ 'url' => Plugin::$instance->app->get_base_url() . '#/import', 'text' => esc_html__( 'Start Import', 'elementor' ), @@ -326,7 +326,7 @@ private function render_import_export_tab_content() { $home_page_editor_url = $this->get_elementor_editor_home_page_url(); $editor_page_link = $home_page_editor_url ? $home_page_editor_url : $this->get_recently_edited_elementor_editor_page_url(); - $info_text = esc_html__( 'Even after you import and apply a Template Kit, you can undo it by restoring a previous version of your site.', 'elementor' ) . '
'; + $info_text = esc_html__( 'Even after you import and apply a Website Kit, you can undo it by restoring a previous version of your site.', 'elementor' ) . '
'; $info_text .= sprintf( '%2$s', $editor_page_link . '#e:run:panel/global/open&e:route:panel/history/revisions', esc_html__( 'Open Site Settings > History > Revisions.', 'elementor' ) ); ?> @@ -434,7 +434,7 @@ public function register_settings_tab( Tools $tools ) { 'label' => esc_html__( 'Import / Export Kit', 'elementor' ), 'sections' => [ 'intro' => [ - 'label' => esc_html__( 'Template Kits', 'elementor' ), + 'label' => esc_html__( 'Website Kits', 'elementor' ), 'callback' => function() { $this->render_import_export_tab_content(); }, diff --git a/core/app/modules/kit-library/assets/js/components/envato-promotion.js b/core/app/modules/kit-library/assets/js/components/envato-promotion.js index 2f14259c703..78ef37d0e12 100644 --- a/core/app/modules/kit-library/assets/js/components/envato-promotion.js +++ b/core/app/modules/kit-library/assets/js/components/envato-promotion.js @@ -12,7 +12,7 @@ export default function EnvatoPromotion() { url="https://go.elementor.com/app-envato-kits/" target="_blank" rel="noreferrer" - text={ __( 'Check out Elementor Template Kits on ThemeForest', 'elementor' ) } + text={ __( 'Check out Elementor Website Kits on ThemeForest', 'elementor' ) } /> ); diff --git a/core/app/modules/kit-library/assets/js/pages/index/index-header.js b/core/app/modules/kit-library/assets/js/pages/index/index-header.js index 3462dd16838..6756f7ed348 100644 --- a/core/app/modules/kit-library/assets/js/pages/index/index-header.js +++ b/core/app/modules/kit-library/assets/js/pages/index/index-header.js @@ -47,8 +47,8 @@ export default function IndexHeader( props ) {
- { __( 'What\'s a kit?', 'elementor' ) } - { __( 'A Template Kit is full, ready-made design that you can apply to your site. It includes all the pages, parts, settings and content that you\'d expect in a fully functional website.', 'elementor' ) } + { __( 'What\'s a Website Kit?', 'elementor' ) } + { __( 'A Website Kit is full, ready-made design that you can apply to your site. It includes all the pages, parts, settings and content that you\'d expect in a fully functional website.', 'elementor' ) }
{ __( 'What\'s going on in the Kit Library?', 'elementor' ) } diff --git a/core/app/modules/kit-library/assets/js/pages/index/index.js b/core/app/modules/kit-library/assets/js/pages/index/index.js index 42c4e071ff5..b1635901d8c 100644 --- a/core/app/modules/kit-library/assets/js/pages/index/index.js +++ b/core/app/modules/kit-library/assets/js/pages/index/index.js @@ -62,7 +62,7 @@ function useMenuItems( path ) { return [ { - label: __( 'All Template Kits', 'elementor' ), + label: __( 'All Website Kits', 'elementor' ), icon: 'eicon-filter', isActive: ! page, url: '/kit-library', @@ -189,7 +189,7 @@ export default function Index( props ) { setQueryParams( ( prev ) => ( { ...prev, search: value } ) ) } /> diff --git a/core/experiments/manager.php b/core/experiments/manager.php index 8bd6b0c174e..1044478a21f 100644 --- a/core/experiments/manager.php +++ b/core/experiments/manager.php @@ -310,8 +310,8 @@ private function add_default_features() { $this->add_feature( [ 'name' => 'e_import_export', - 'title' => esc_html__( 'Import Export Template Kit', 'elementor' ), - 'description' => esc_html__( 'Design sites faster with a template kit that contains some or all components of a complete site, like templates, content & site settings.', 'elementor' ) + 'title' => esc_html__( 'Import Export Website Kit', 'elementor' ), + 'description' => esc_html__( 'Design sites faster with a Website Kit that contains some or all components of a complete site, like templates, content & site settings.', 'elementor' ) . '
' . esc_html__( 'You can import a kit and apply it to your site, or export the elements from this site to be used anywhere else.', 'elementor' ), 'release_status' => self::RELEASE_STATUS_STABLE, diff --git a/core/files/file-types/zip.php b/core/files/file-types/zip.php index 80a2da8a647..1c668d155e4 100644 --- a/core/files/file-types/zip.php +++ b/core/files/file-types/zip.php @@ -160,7 +160,7 @@ private function find_temp_files( $temp_path ) { $possible_file_names = array_diff( scandir( $temp_path ), [ '.', '..' ] ); - // Find nested files in the unzipped path. This happens for example when the user imports a Template Kit. + // Find nested files in the unzipped path. This happens for example when the user imports a Website Kit. foreach ( $possible_file_names as $possible_file_name ) { $full_possible_file_name = $temp_path . $possible_file_name; if ( is_dir( $full_possible_file_name ) ) { From 3a8b14a8767c2e73654b7757fdac9f3937a9d7f0 Mon Sep 17 00:00:00 2001 From: Hein van Vlastuin <94352322+hein-obox@users.noreply.github.com> Date: Sun, 24 Jul 2022 15:43:52 +0200 Subject: [PATCH 021/130] Fix: Divider widget is not working as expected [ED-7722] (#19224) --- assets/dev/scss/frontend/widgets/divider.scss | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/assets/dev/scss/frontend/widgets/divider.scss b/assets/dev/scss/frontend/widgets/divider.scss index e8463e83e6c..35ce6e5cd89 100644 --- a/assets/dev/scss/frontend/widgets/divider.scss +++ b/assets/dev/scss/frontend/widgets/divider.scss @@ -136,3 +136,12 @@ .rtl .elementor-widget-divider .elementor-divider__text { direction: rtl; } + +.e-container { + + & > .elementor-widget-divider { + // Fix - Divider widget has undefined width and height issues inside the flex container (ED-7722). + width: var( --container-widget-width, 100% ); + flex-grow: 1; + } +} From 5be9c843f353557ded275f04c4ba27a11b8b6c9a Mon Sep 17 00:00:00 2001 From: Hein van Vlastuin <94352322+hein-obox@users.noreply.github.com> Date: Mon, 25 Jul 2022 14:15:36 +0200 Subject: [PATCH 022/130] Fix: Align-self set to stretch is not working as expected in Container (#17052) [ED-7359] (#19222) --- assets/dev/scss/frontend/_container.scss | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/assets/dev/scss/frontend/_container.scss b/assets/dev/scss/frontend/_container.scss index 31c436184c9..e8f343e4e6a 100644 --- a/assets/dev/scss/frontend/_container.scss +++ b/assets/dev/scss/frontend/_container.scss @@ -188,6 +188,14 @@ } } + & > .elementor-widget { + + & > .elementor-widget-container { + // Fix align-self:stretch (ED-7359) + height: 100%; + } + } + // Inner Container handle. // TODO: Find a better solution. & > &, .elementor-widget & { From d7f2639b0a438059153ce8fcd65a20201b774677 Mon Sep 17 00:00:00 2001 From: Mark Tyrin <104833451+mark-elementor@users.noreply.github.com> Date: Wed, 3 Aug 2022 10:16:27 +0300 Subject: [PATCH 023/130] Fix: Notes - Promotion dialog not opening in Panel menu [ED-7744] (#19192) --- .../state-ready/notes-add-panel-menu-item.js | 23 ++++++++++++++----- 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js b/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js index 0e12979c32f..20eaea84109 100644 --- a/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js +++ b/modules/notes/assets/js/hooks/ui/panel/state-ready/notes-add-panel-menu-item.js @@ -13,13 +13,24 @@ export class NotesAddPanelMenuItem extends $e.modules.hookUI.After { icon: 'eicon-commenting-o', title: __( 'Notes', 'elementor' ) + '', callback() { + const hasProAndNotConnected = elementor.helpers.hasProAndNotConnected(); + elementor.promotion.showDialog( { - headerMessage: __( 'Notes', 'elementor' ), - message: __( 'With Notes, teamwork gets even better. Stay in sync with comments, feedback & more on your website.', 'elementor' ), - top: '-3', - inlineStart: '+10', - element: this.$el, - actionURL: 'https://go.elementor.com/go-pro-notes/', + title: __( 'Notes', 'elementor' ), + content: __( 'With Notes, teamwork gets even better. Stay in sync with comments, feedback & more on your website.', 'elementor' ), + position: { + blockStart: '-3', + inlineStart: '+10', + }, + targetElement: this.$el, + actionButton: { + url: hasProAndNotConnected + ? elementorProEditorConfig.urls.connect + : 'https://go.elementor.com/go-pro-notes/', + text: hasProAndNotConnected + ? __( 'Connect & Activate', 'elementor' ) + : __( 'See it in Action', 'elementor' ), + }, } ); }, }, 'navigate_from_page', 'finder' ); From 2167918fbf0e72880fedc9cc21ec5a656ae6e837 Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Wed, 3 Aug 2022 13:25:21 +0300 Subject: [PATCH 024/130] Internal: Fix linter warning in experiments manager [ED-7877] (#19339) --- core/experiments/manager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/experiments/manager.php b/core/experiments/manager.php index 7b1b793ce5c..3eac820a77e 100644 --- a/core/experiments/manager.php +++ b/core/experiments/manager.php @@ -319,7 +319,7 @@ private function add_default_features() { $this->add_feature( [ 'name' => 'e_import_export', 'title' => esc_html__( 'Import Export Website Kit', 'elementor' ), - 'tag' => esc_html__( 'Feature', 'elementor' ), + 'tag' => esc_html__( 'Feature', 'elementor' ), 'description' => esc_html__( 'Design sites faster with a Website Kit that contains some or all components of a complete site, like templates, content & site settings.', 'elementor' ) . '
' . esc_html__( 'You can import a kit and apply it to your site, or export the elements from this site to be used anywhere else.', 'elementor' ), From 911d58b98b981b919d593e17f30e34f8056d555b Mon Sep 17 00:00:00 2001 From: Mark Tyrin <104833451+mark-elementor@users.noreply.github.com> Date: Thu, 4 Aug 2022 10:39:21 +0300 Subject: [PATCH 025/130] Fix: Align notices to RTL sites [ED-4809] (#19337) --- assets/dev/scss/admin/_notice.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assets/dev/scss/admin/_notice.scss b/assets/dev/scss/admin/_notice.scss index bbfa2efe14e..be12b56b067 100644 --- a/assets/dev/scss/admin/_notice.scss +++ b/assets/dev/scss/admin/_notice.scss @@ -102,7 +102,7 @@ display: block; position: absolute; top: 0; - right: 1px; + inset-inline-end: 1px; border: none; margin: 0; padding: 9px; From 69a4778f589653670bf4cc7964c4d47b37af0ac1 Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Mon, 8 Aug 2022 11:27:52 +0300 Subject: [PATCH 026/130] Fix: Export kit doesn't work in a Multisite Network [ED-7696] (#19146) --- core/app/modules/import-export/assets/js/hooks/use-plugins.js | 1 + .../export-plugins-selection/export-plugins-selection.js | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/app/modules/import-export/assets/js/hooks/use-plugins.js b/core/app/modules/import-export/assets/js/hooks/use-plugins.js index 52094461185..53adcf4754d 100644 --- a/core/app/modules/import-export/assets/js/hooks/use-plugins.js +++ b/core/app/modules/import-export/assets/js/hooks/use-plugins.js @@ -8,6 +8,7 @@ export const PLUGINS_RESPONSE_MAP = Object.freeze( { export const PLUGIN_STATUS_MAP = Object.freeze( { ACTIVE: 'active', + MULTISITE_ACTIVE: 'network-active', INACTIVE: 'inactive', NOT_INSTALLED: 'Not Installed', } ); diff --git a/core/app/modules/import-export/assets/js/pages/export/export-plugins/components/export-plugins-selection/export-plugins-selection.js b/core/app/modules/import-export/assets/js/pages/export/export-plugins/components/export-plugins-selection/export-plugins-selection.js index ee34301d7ad..d4b5527fb5e 100644 --- a/core/app/modules/import-export/assets/js/pages/export/export-plugins/components/export-plugins-selection/export-plugins-selection.js +++ b/core/app/modules/import-export/assets/js/pages/export/export-plugins/components/export-plugins-selection/export-plugins-selection.js @@ -12,7 +12,7 @@ const layout = [ 3, 1 ], function ExportPluginsSelection( { onSelect } ) { const { response } = usePlugins(), { pluginsData } = usePluginsData( response.data ), - activePlugins = pluginsData.filter( ( { status } ) => PLUGIN_STATUS_MAP.ACTIVE === status ), + activePlugins = pluginsData.filter( ( { status } ) => PLUGIN_STATUS_MAP.ACTIVE === status || PLUGIN_STATUS_MAP.MULTISITE_ACTIVE === status ), getInitialSelected = () => { // Elementor Core will always be the first plugin on the list. const initialSelected = [ 0 ]; From 73bdaa45d804a3cd64a1025906763939d95ef0b1 Mon Sep 17 00:00:00 2001 From: Davids Seveloff <94905340+davseve@users.noreply.github.com> Date: Mon, 8 Aug 2022 14:44:14 +0300 Subject: [PATCH 027/130] Tweak: Add to the GoPro link URL from the Kit Library more UTM parameters [ED-7745] (#19336) --- .../assets/js/components/item-header.js | 18 +++++++++++++++++- core/common/modules/connect/module.php | 4 ++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/app/modules/kit-library/assets/js/components/item-header.js b/core/app/modules/kit-library/assets/js/components/item-header.js index e71fbf15193..badcd834ab1 100644 --- a/core/app/modules/kit-library/assets/js/components/item-header.js +++ b/core/app/modules/kit-library/assets/js/components/item-header.js @@ -39,6 +39,22 @@ function useKitCallToActionButton( model, { apply, isApplyLoading, onConnect } ) } if ( type === TYPE_PROMOTION && subscriptionPlan ) { + const getButtonURL = () => { + let url = subscriptionPlan.promotion_url; + + if ( model.title ) { + // Remove special characters, replace spaces with '-' and convert url kit name to lowercase. + const cleanTitle = model.title.replace( /\s/g, '-' ).replace( /[^\w-]/g, '' ).toLowerCase(); + url += `&utm_term=${ cleanTitle }`; + } + + if ( model.id ) { + url += `&utm_content=${ model.id }`; + } + + return url; + }; + return { id: 'promotion', // Translators: %s is the subscription plan name. @@ -47,7 +63,7 @@ function useKitCallToActionButton( model, { apply, isApplyLoading, onConnect } ) variant: 'contained', color: 'cta', size: 'sm', - url: subscriptionPlan.promotion_url, + url: getButtonURL(), target: '_blank', includeHeaderBtnClass: false, }; diff --git a/core/common/modules/connect/module.php b/core/common/modules/connect/module.php index 2a566329640..e636a2b7020 100644 --- a/core/common/modules/connect/module.php +++ b/core/common/modules/connect/module.php @@ -199,12 +199,12 @@ public function get_subscription_plans( $context = '' ) { ], static::ACCESS_LEVEL_PRO => [ 'label' => 'Pro', - 'promotion_url' => "https://elementor.com/pro/?utm_source={$context}&utm_medium=wp-dash&utm_campaign=gopro", + 'promotion_url' => 'https://elementor.com/pro/?utm_source=' . $context . '&utm_medium=wp-dash&utm_campaign=gopro', 'color' => '#92003B', ], static::ACCESS_LEVEL_EXPERT => [ 'label' => 'Expert', - 'promotion_url' => "https://elementor.com/pro/?utm_source={$context}&utm_medium=wp-dash&utm_campaign=goexpert", + 'promotion_url' => 'https://elementor.com/pro/?utm_source=' . $context . '&utm_medium=wp-dash&utm_campaign=goexpert', 'color' => '#010051', ], ]; From 70ec779275fa07f53e6da2470d02a13f3ca90996 Mon Sep 17 00:00:00 2001 From: Davids Seveloff <94905340+davseve@users.noreply.github.com> Date: Sun, 14 Aug 2022 15:22:01 +0300 Subject: [PATCH 028/130] Internal: Handle merging conflict between develop and 3.8 [ED-7961] (#19466) --- assets/dev/js/editor/controls/number.js | 13 ++- .../js/event-track/apps-event-tracking.js | 34 +++++++ core/app/assets/js/layout/header.js | 1 + core/app/assets/js/layout/page.js | 3 +- core/app/assets/js/molecules/upload-file.js | 4 + core/app/assets/js/organisms/drop-zone.js | 2 + .../js/organisms/unfiltered-files-dialog.js | 18 +++- core/app/assets/js/ui/atoms/select.js | 3 +- core/app/assets/js/ui/modal/modal.js | 9 ++ .../app/assets/js/ui/molecules/inline-link.js | 2 + .../shared-context/shared-context-provider.js | 1 + .../shared-context/shared-context-reducer.js | 2 + .../import-complete-footer.js | 28 +++++- .../import/import-complete/import-complete.js | 26 +++++- .../import-content-footer.js | 10 +- .../import/import-content/import-content.js | 21 ++++- .../js/pages/import/import-kit/import-kit.js | 46 ++++++++- .../import-plugins-activation.js | 3 + .../import-plugins-footer.js | 11 ++- .../import/import-plugins/import-plugins.js | 22 ++++- .../import/import-process/import-process.js | 36 ++++++- .../conflict-checkbox/conflict-checkbox.js | 5 +- .../components/conflict/conflict.js | 38 ++++++-- .../import/import-resolver/import-resolver.js | 30 +++++- .../js/shared/info-modal/import-info-modal.js | 24 ++++- .../assets/js/shared/info-modal/info-modal.js | 6 ++ .../kit-content-checkbox.js | 1 + .../js/shared/kit-content/kit-content.js | 28 +++++- .../components/site-area/site-area.js | 14 ++- .../process-failed-dialog.js | 16 +++- .../assets/js/templates/layout.js | 49 +++++++++- .../import-export/directories/post-type.php | 4 + .../assets/js/components/collapse.js | 9 +- .../assets/js/components/envato-promotion.js | 21 ++++- .../assets/js/components/error-screen.js | 16 +++- .../assets/js/components/favorites-actions.js | 30 +++++- .../js/components/filter-indication-text.js | 21 ++++- .../assets/js/components/item-header.js | 36 ++++++- .../assets/js/components/kit-list-item.js | 26 +++++- .../assets/js/components/kit-list.js | 9 +- .../components/layout/header-back-button.js | 27 +++++- .../assets/js/components/layout/header.js | 25 ++++- .../assets/js/components/sort-select.js | 11 +++ .../js/components/taxonomies-filter-list.js | 31 ++++++- .../assets/js/components/taxonomies-filter.js | 23 ++++- .../kit-library/assets/js/e-component.js | 75 +++++++++++++++ .../kit-library/assets/js/kit-library.js | 3 + .../modules/kit-library/assets/js/module.js | 2 + .../assets/js/pages/index/index-header.js | 43 ++++++++- .../assets/js/pages/index/index-sidebar.js | 12 +++ .../assets/js/pages/index/index.js | 32 ++++++- .../overview/overview-content-group-item.js | 21 +++++ .../pages/overview/overview-content-group.js | 3 +- .../js/pages/overview/overview-sidebar.js | 32 ++++++- .../pages/overview/overview-taxonomy-badge.js | 8 +- .../assets/js/pages/overview/overview.js | 19 +++- .../assets/js/pages/preview/preview.js | 42 ++++++++- core/breakpoints/manager.php | 8 +- core/files/css/base.php | 5 +- elementor.php | 4 +- modules/dev-tools/deprecation.php | 2 +- readme.txt | 89 +++++++++++++++++- .../elementor/core/files/css/test-base.php | 93 +++++++++++++++++++ 63 files changed, 1183 insertions(+), 105 deletions(-) create mode 100644 core/app/assets/js/event-track/apps-event-tracking.js create mode 100644 core/app/modules/kit-library/assets/js/e-component.js create mode 100644 core/app/modules/kit-library/assets/js/kit-library.js create mode 100644 tests/phpunit/elementor/core/files/css/test-base.php diff --git a/assets/dev/js/editor/controls/number.js b/assets/dev/js/editor/controls/number.js index bce6a100d66..a03e2a789fe 100644 --- a/assets/dev/js/editor/controls/number.js +++ b/assets/dev/js/editor/controls/number.js @@ -5,11 +5,14 @@ var ControlBaseDataView = require( 'elementor-controls/base-data' ), ControlNumberItemView = ControlBaseDataView.extend( { - behaviors: { - Scrubbing: { - behaviorClass: Scrubbing, - scrubSettings: { intentTime: 800 }, - }, + behaviors() { + return { + ...ControlBaseDataView.prototype.behaviors.apply( this ), + Scrubbing: { + behaviorClass: Scrubbing, + scrubSettings: { intentTime: 800 }, + }, + }; }, registerValidators() { diff --git a/core/app/assets/js/event-track/apps-event-tracking.js b/core/app/assets/js/event-track/apps-event-tracking.js new file mode 100644 index 00000000000..dae79db2a0b --- /dev/null +++ b/core/app/assets/js/event-track/apps-event-tracking.js @@ -0,0 +1,34 @@ +export const appsEventTrackingDispatch = ( command, eventParams ) => { + // Add existing eventParams key value pair to the data/details object. + const objectCreator = ( array, obj ) => { + for ( const key of array ) { + if ( eventParams.hasOwnProperty( key ) && eventParams[ key ] !== null ) { + obj[ key ] = eventParams[ key ]; + } + } + return obj; + }; + + const dataKeys = []; + const detailsKeys = [ 'layout', 'site_part', 'error', 'document_name', 'document_type', 'view_type_clicked', 'tag', 'sort_direction', 'sort_type', 'action', 'grid_location', 'kit_name', 'page_source', 'element_position', 'element', 'event_type', 'modal_type', 'method', 'status', 'step', 'item', 'category', 'element_location', 'search_term', 'section', 'site_area' ]; + const data = {}; + const details = {}; + + const init = () => { + objectCreator( detailsKeys, details ); + objectCreator( dataKeys, data ); + + const commandSplit = command.split( '/' ); + data.placement = commandSplit[ 0 ]; + data.event = commandSplit[ 1 ]; + + // If 'details' is not empty, add the details object to the data object. + if ( Object.keys( details ).length ) { + data.details = details; + } + }; + + init(); + + $e.run( command, data ); +}; diff --git a/core/app/assets/js/layout/header.js b/core/app/assets/js/layout/header.js index f38570ab37c..3ff9b7a3e0f 100644 --- a/core/app/assets/js/layout/header.js +++ b/core/app/assets/js/layout/header.js @@ -31,6 +31,7 @@ Header.propTypes = { title: PropTypes.string, titleRedirectRoute: PropTypes.string, buttons: PropTypes.arrayOf( PropTypes.object ), + onClose: PropTypes.func, }; Header.defaultProps = { diff --git a/core/app/assets/js/layout/page.js b/core/app/assets/js/layout/page.js index 5b87e15e3c0..e246b37b76c 100644 --- a/core/app/assets/js/layout/page.js +++ b/core/app/assets/js/layout/page.js @@ -28,7 +28,7 @@ export default function Page( props ) { return (
-
+
props.onClose?.() } />
{ AppSidebar() } @@ -49,6 +49,7 @@ Page.propTypes = { sidebar: PropTypes.object, content: PropTypes.object.isRequired, footer: PropTypes.object, + onClose: PropTypes.func, }; Page.defaultProps = { diff --git a/core/app/assets/js/molecules/upload-file.js b/core/app/assets/js/molecules/upload-file.js index 2d009b59585..5c9c8cedcfd 100644 --- a/core/app/assets/js/molecules/upload-file.js +++ b/core/app/assets/js/molecules/upload-file.js @@ -46,6 +46,9 @@ export default function UploadFile( props ) { hideText={ props.isLoading } icon={ props.isLoading ? 'eicon-loading eicon-animation-spin' : '' } onClick={ () => { + if ( props.onFileChoose ) { + props.onFileChoose(); + } if ( ! props.isLoading ) { if ( props.onButtonClick ) { props.onButtonClick(); @@ -94,6 +97,7 @@ UploadFile.propTypes = { variant: PropTypes.string, color: PropTypes.string, onButtonClick: PropTypes.func, + onFileChoose: PropTypes.func, }; UploadFile.defaultProps = { diff --git a/core/app/assets/js/organisms/drop-zone.js b/core/app/assets/js/organisms/drop-zone.js index 65cc87a7c8f..cd3a7c0edc0 100644 --- a/core/app/assets/js/organisms/drop-zone.js +++ b/core/app/assets/js/organisms/drop-zone.js @@ -50,6 +50,7 @@ export default function DropZone( props ) { filetypes={ props.filetypes } variant={ props.buttonVariant } color={ props.buttonColor } + onFileChoose={ props.onFileChoose } /> } { props.description && { props.description } } @@ -78,6 +79,7 @@ DropZone.propTypes = { onError: PropTypes.func, description: PropTypes.string, onButtonClick: PropTypes.func, + onFileChoose: PropTypes.func, }; DropZone.defaultProps = { diff --git a/core/app/assets/js/organisms/unfiltered-files-dialog.js b/core/app/assets/js/organisms/unfiltered-files-dialog.js index 8cc34f1ac79..0dffbf92bf9 100644 --- a/core/app/assets/js/organisms/unfiltered-files-dialog.js +++ b/core/app/assets/js/organisms/unfiltered-files-dialog.js @@ -5,7 +5,7 @@ import Dialog from 'elementor-app/ui/dialog/dialog'; import useAjax from 'elementor-app/hooks/use-ajax'; export default function UnfilteredFilesDialog( props ) { - const { show, setShow, onReady, onCancel, onDismiss } = props, + const { show, setShow, onReady, onCancel, onDismiss, onLoad, onEnable, onClose } = props, { ajaxState, setAjax } = useAjax(), [ enableUnfilteredFiles, setEnableUnfilteredFiles ] = useState( false ), [ isEnableError, setIsEnableError ] = useState( false ); @@ -25,6 +25,9 @@ export default function UnfilteredFilesDialog( props ) { } ), }, } ); + if ( onEnable ) { + onEnable(); + } } }, [ enableUnfilteredFiles ] ); @@ -41,6 +44,12 @@ export default function UnfilteredFilesDialog( props ) { } }, [ ajaxState ] ); + useEffect( () => { + if ( show && onLoad ) { + onLoad(); + } + }, [ show ] ); + if ( ! show ) { return null; } @@ -67,7 +76,7 @@ export default function UnfilteredFilesDialog( props ) { approveButtonOnClick={ () => setEnableUnfilteredFiles( true ) } dismissButtonText={ __( 'Skip', 'elementor' ) } dismissButtonOnClick={ onDismiss || onReady } - onClose={ onDismiss || onReady } + onClose={ onClose || onDismiss || onReady } /> } @@ -82,8 +91,13 @@ UnfilteredFilesDialog.propTypes = { onDismiss: PropTypes.func, confirmModalText: PropTypes.string.isRequired, errorModalText: PropTypes.string.isRequired, + onLoad: PropTypes.func, + onEnable: PropTypes.func, + onClose: PropTypes.func, }; UnfilteredFilesDialog.defaultProps = { show: false, + onReady: () => {}, + onCancel: () => {}, }; diff --git a/core/app/assets/js/ui/atoms/select.js b/core/app/assets/js/ui/atoms/select.js index 8c94a5a8e0f..460a229436b 100644 --- a/core/app/assets/js/ui/atoms/select.js +++ b/core/app/assets/js/ui/atoms/select.js @@ -1,6 +1,6 @@ export default function Select( props ) { return ( - props.onClick?.() }> { props.options.map( ( option ) => option.children ? @@ -24,6 +24,7 @@ Select.propTypes = { elRef: PropTypes.object, multiple: PropTypes.bool, value: PropTypes.oneOfType( [ PropTypes.array, PropTypes.string ] ), + onClick: PropTypes.func, }; Select.defaultProps = { className: '', diff --git a/core/app/assets/js/ui/modal/modal.js b/core/app/assets/js/ui/modal/modal.js index 6028725e55d..3472d707485 100644 --- a/core/app/assets/js/ui/modal/modal.js +++ b/core/app/assets/js/ui/modal/modal.js @@ -62,6 +62,8 @@ ModalProvider.propTypes = { icon: PropTypes.string, show: PropTypes.bool, setShow: PropTypes.func, + onOpen: PropTypes.func, + onClose: PropTypes.func, }; ModalProvider.defaultProps = { @@ -85,11 +87,16 @@ export const Modal = ( props ) => { } props.hideModal(); + + if ( props.onClose ) { + props.onClose( e ); + } }; useEffect( () => { if ( props.show ) { document.addEventListener( 'mousedown', closeModal, false ); + props.onOpen?.(); } return () => document.removeEventListener( 'mousedown', closeModal, false ); @@ -132,6 +139,8 @@ Modal.propTypes = { hideModal: PropTypes.func, showModal: PropTypes.func, closeModal: PropTypes.func, + onOpen: PropTypes.func, + onClose: PropTypes.func, }; Modal.defaultProps = { diff --git a/core/app/assets/js/ui/molecules/inline-link.js b/core/app/assets/js/ui/molecules/inline-link.js index e7b431255e1..f59f35488e7 100644 --- a/core/app/assets/js/ui/molecules/inline-link.js +++ b/core/app/assets/js/ui/molecules/inline-link.js @@ -34,6 +34,7 @@ export default function InlineLink( props ) { target={ props.target } rel={ props.rel } className={ className } + onClick={ props.onClick } > { props.children } @@ -61,6 +62,7 @@ InlineLink.propTypes = { color: PropTypes.oneOf( [ 'primary', 'secondary', 'cta', 'link', 'disabled' ] ), underline: PropTypes.oneOf( [ 'none', 'hover', 'always' ] ), italic: PropTypes.bool, + onClick: PropTypes.func, }; InlineLink.defaultProps = { diff --git a/core/app/modules/import-export/assets/js/context/shared-context/shared-context-provider.js b/core/app/modules/import-export/assets/js/context/shared-context/shared-context-provider.js index 15b84226b50..277b65e9e7d 100644 --- a/core/app/modules/import-export/assets/js/context/shared-context/shared-context-provider.js +++ b/core/app/modules/import-export/assets/js/context/shared-context/shared-context-provider.js @@ -12,6 +12,7 @@ export default function SharedContextProvider( props ) { referrer: null, customPostTypes: [], selectedCustomPostTypes: [], + currentPage: null, }, [ data, dispatch ] = useReducer( reducer, initialState ); diff --git a/core/app/modules/import-export/assets/js/context/shared-context/shared-context-reducer.js b/core/app/modules/import-export/assets/js/context/shared-context/shared-context-reducer.js index 6ae9587ef24..a78f0c37c10 100644 --- a/core/app/modules/import-export/assets/js/context/shared-context/shared-context-reducer.js +++ b/core/app/modules/import-export/assets/js/context/shared-context/shared-context-reducer.js @@ -14,6 +14,8 @@ export const reducer = ( state, { type, payload } ) => { return { ...state, customPostTypes: payload }; case 'SET_SELECTED_CPT': return { ...state, selectedCustomPostTypes: payload }; + case 'SET_CURRENT_PAGE_NAME': + return { ...state, currentPage: payload }; default: return state; } diff --git a/core/app/modules/import-export/assets/js/pages/import/import-complete/components/import-complete-footer/import-complete-footer.js b/core/app/modules/import-export/assets/js/pages/import/import-complete/components/import-complete-footer/import-complete-footer.js index 0de16cc44cb..5077cdc962e 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-complete/components/import-complete-footer/import-complete-footer.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-complete/components/import-complete-footer/import-complete-footer.js @@ -1,9 +1,22 @@ import ActionsFooter from '../../../../../shared/actions-footer/actions-footer'; import Button from 'elementor-app/ui/molecules/button'; import useAction from 'elementor-app/hooks/use-action'; +import { appsEventTrackingDispatch } from 'elementor-app/event-track/apps-event-tracking'; -export default function ImportCompleteFooter( { seeItLiveUrl } ) { - const action = useAction(); +export default function ImportCompleteFooter( { seeItLiveUrl, referrer } ) { + const action = useAction(), + eventTracking = ( command, eventType = 'click' ) => { + if ( 'kit-library' === referrer ) { + appsEventTrackingDispatch( + command, + { + page_source: 'kit is live', + element_location: 'app_wizard_footer', + event_type: eventType, + }, + ); + } + }; return ( @@ -12,7 +25,10 @@ export default function ImportCompleteFooter( { seeItLiveUrl } ) {
); diff --git a/core/app/modules/import-export/assets/js/pages/import/import-plugins-activation/import-plugins-activation.js b/core/app/modules/import-export/assets/js/pages/import/import-plugins-activation/import-plugins-activation.js index a709c2646ea..156a524ece4 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-plugins-activation/import-plugins-activation.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-plugins-activation/import-plugins-activation.js @@ -2,6 +2,7 @@ import { useContext, useEffect } from 'react'; import { useNavigate } from '@reach/router'; import { ImportContext } from '../../../context/import-context/import-context-provider'; +import { SharedContext } from '../../../context/shared-context/shared-context-provider'; import Layout from '../../../templates/layout'; import FileProcess from '../../../shared/file-process/file-process'; @@ -16,6 +17,7 @@ import useInstallPlugins from './hooks/use-install-plugins'; export default function ImportPluginsActivation() { const importContext = useContext( ImportContext ), + sharedContext = useContext( SharedContext ), navigate = useNavigate(), { bulk, ready, isDone } = useInstallPlugins( { plugins: importContext.data.plugins } ); @@ -31,6 +33,7 @@ export default function ImportPluginsActivation() { if ( isDone ) { importContext.dispatch( { type: 'SET_IMPORTED_PLUGINS', payload: ready } ); importContext.dispatch( { type: 'SET_PLUGINS_STATE', payload: 'success' } ); + sharedContext.dispatch( { type: 'SET_CURRENT_PAGE_NAME', payload: ImportPluginsActivation.name } ); } }, [ isDone ] ); diff --git a/core/app/modules/import-export/assets/js/pages/import/import-plugins/components/import-plugins-footer/import-plugins-footer.js b/core/app/modules/import-export/assets/js/pages/import/import-plugins/components/import-plugins-footer/import-plugins-footer.js index 71bfb94f7fd..893ebea2308 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-plugins/components/import-plugins-footer/import-plugins-footer.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-plugins/components/import-plugins-footer/import-plugins-footer.js @@ -7,7 +7,7 @@ import Button from 'elementor-app/ui/molecules/button'; import useImportActions from '../../../hooks/use-import-actions'; -export default function ImportPluginsFooter() { +export default function ImportPluginsFooter( props ) { const importContext = useContext( ImportContext ), { navigateToMainScreen } = useImportActions(); @@ -19,6 +19,7 @@ export default function ImportPluginsFooter() { onClick={ () => { importContext.dispatch( { type: 'SET_FILE', payload: null } ); + props.onPreviousClick?.(); navigateToMainScreen(); } } /> @@ -28,7 +29,15 @@ export default function ImportPluginsFooter() { text={ __( 'Next', 'elementor' ) } color="primary" url="/import/content" + onClick={ () => { + props.onNextClick?.(); + } } /> ); } + +ImportPluginsFooter.propTypes = { + onPreviousClick: PropTypes.func, + onNextClick: PropTypes.func, +}; diff --git a/core/app/modules/import-export/assets/js/pages/import/import-plugins/import-plugins.js b/core/app/modules/import-export/assets/js/pages/import/import-plugins/import-plugins.js index 58bbecd53d7..0347cf0cc48 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-plugins/import-plugins.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-plugins/import-plugins.js @@ -2,6 +2,7 @@ import React, { useEffect, useContext } from 'react'; import { useNavigate } from '@reach/router'; import { ImportContext } from '../../../context/import-context/import-context-provider'; +import { SharedContext } from '../../../context/shared-context/shared-context-provider'; import Layout from '../../../templates/layout'; import PageHeader from '../../../ui/page-header/page-header'; @@ -18,17 +19,20 @@ import InlineLink from 'elementor-app/ui/molecules/inline-link'; import usePlugins, { PLUGIN_STATUS_MAP } from '../../../hooks/use-plugins'; import usePluginsData from '../../../hooks/use-plugins-data'; import useImportPluginsData from './hooks/use-import-plugins-data'; +import { appsEventTrackingDispatch } from 'elementor-app/event-track/apps-event-tracking'; import './import-plugins.scss'; export default function ImportPlugins() { const importContext = useContext( ImportContext ), + sharedContext = useContext( SharedContext ), navigate = useNavigate(), kitPlugins = importContext.data.uploadedData?.manifest?.plugins || [], { response, pluginsActions } = usePlugins(), { pluginsData } = usePluginsData( response.data ), { importPluginsData } = useImportPluginsData( kitPlugins, pluginsData ), { missing, existing, minVersionMissing, proData } = importPluginsData || {}, + { referrer, currentPage } = sharedContext.data || {}, handleRequiredPlugins = () => { if ( missing.length ) { // Saving globally the plugins data that the kit requires in order to work properly. @@ -45,6 +49,18 @@ export default function ImportPlugins() { if ( proData && ! elementorAppConfig.hasPro ) { importContext.dispatch( { type: 'SET_IS_PRO_INSTALLED_DURING_PROCESS', payload: true } ); } + }, + eventTracking = ( command ) => { + if ( 'kit-library' === referrer ) { + appsEventTrackingDispatch( + command, + { + page_source: 'import', + step: currentPage, + event_type: 'click', + }, + ); + } }; // On load. @@ -52,6 +68,7 @@ export default function ImportPlugins() { if ( ! kitPlugins.length ) { navigate( 'import/content' ); } + sharedContext.dispatch( { type: 'SET_CURRENT_PAGE_NAME', payload: ImportPlugins.name } ); }, [] ); // On plugins data ready. @@ -66,7 +83,10 @@ export default function ImportPlugins() { }, [ importPluginsData ] ); return ( - }> + eventTracking( 'kit-library/go-back' ) } + onNextClick={ () => eventTracking( 'kit-library/approve-selection' ) } + /> } >
{ ! importPluginsData && } diff --git a/core/app/modules/import-export/assets/js/pages/import/import-process/import-process.js b/core/app/modules/import-export/assets/js/pages/import/import-process/import-process.js index af131b068be..70f0071072d 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-process/import-process.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-process/import-process.js @@ -7,6 +7,7 @@ import { ImportContext } from '../../../context/import-context/import-context-pr import Layout from '../../../templates/layout'; import FileProcess from '../../../shared/file-process/file-process'; import UnfilteredFilesDialog from 'elementor-app/organisms/unfiltered-files-dialog'; +import { appsEventTrackingDispatch } from 'elementor-app/event-track/apps-event-tracking'; import useQueryParams from 'elementor-app/hooks/use-query-params'; import useKit from '../../../hooks/use-kit'; @@ -24,7 +25,7 @@ export default function ImportProcess() { missing = useImportKitLibraryApplyAllPlugins( plugins ), { kitState, kitActions, KIT_STATUS_MAP } = useKit(), { referrer, file_url: fileURL, action_type: actionType, nonce } = useQueryParams().getAll(), - { includes, selectedCustomPostTypes } = sharedContext.data || {}, + { includes, selectedCustomPostTypes, currentPage } = sharedContext.data || {}, { file, uploadedData, importedData, overrideConditions, isResolvedData } = importContext.data || {}, isKitHasSvgAssets = useMemo( () => includes.some( ( item ) => [ 'templates', 'content' ].includes( item ) ), [ includes ] ), { navigateToMainScreen } = useImportActions(), @@ -57,6 +58,23 @@ export default function ImportProcess() { importContext.dispatch( { type: 'SET_FILE', payload: null } ); navigateToMainScreen(); + }, + onReady = () => { + setShowUnfilteredFilesDialog( false ); + setStartImport( true ); + }, + eventTracking = ( command, eventType = 'click' ) => { + if ( 'kit-library' === sharedContext.data.referrer ) { + appsEventTrackingDispatch( + command, + { + page_source: 'import', + step: currentPage, + modal_type: 'unfiltered_file', + event_type: eventType, + }, + ); + } }; // On load. @@ -79,6 +97,7 @@ export default function ImportProcess() { } else { navigate( 'import' ); } + sharedContext.dispatch( { type: 'SET_CURRENT_PAGE_NAME', payload: ImportProcess.name } ); }, [] ); // Starting the import process. @@ -164,14 +183,21 @@ export default function ImportProcess() { setShow={ setShowUnfilteredFilesDialog } confirmModalText={ __( 'This allows Elementor to scan your SVGs for malicious content. Otherwise, you can skip any SVGs in this import.', 'elementor' ) } errorModalText={ __( 'Nothing to worry about, just continue without importing SVGs or go back and start the import again.', 'elementor' ) } - onReady={ () => { - setShowUnfilteredFilesDialog( false ); - setStartImport( true ); - } } + onReady={ () => onReady() } onCancel={ () => { setShowUnfilteredFilesDialog( false ); onCancelProcess(); } } + onLoad={ () => eventTracking( 'kit-library/modal-load', 'load' ) } + onClose={ () => { + eventTracking( 'kit-library/close' ); + onReady(); + } } + onDismiss={ () => { + onReady(); + eventTracking( 'kit-library/skip' ); + } } + onEnable={ () => eventTracking( 'kit-library/enable' ) } />
diff --git a/core/app/modules/import-export/assets/js/pages/import/import-resolver/components/conflict/components/conflict-checkbox/conflict-checkbox.js b/core/app/modules/import-export/assets/js/pages/import/import-resolver/components/conflict/components/conflict-checkbox/conflict-checkbox.js index 6f38766a025..48b275aa787 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-resolver/components/conflict/components/conflict-checkbox/conflict-checkbox.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-resolver/components/conflict/components/conflict-checkbox/conflict-checkbox.js @@ -10,7 +10,9 @@ export default function ConflictCheckbox( props ) { updateOverrideCondition = ( event ) => { const isChecked = event.target.checked, actionType = isChecked ? 'ADD_OVERRIDE_CONDITION' : 'REMOVE_OVERRIDE_CONDITION'; - + if ( props.onCheck ) { + props.onCheck( isChecked ); + } importContext.dispatch( { type: actionType, payload: props.id } ); }; @@ -32,6 +34,7 @@ export default function ConflictCheckbox( props ) { ConflictCheckbox.propTypes = { className: PropTypes.string, id: PropTypes.number.isRequired, + onCheck: PropTypes.func, }; ConflictCheckbox.defaultProps = { diff --git a/core/app/modules/import-export/assets/js/pages/import/import-resolver/components/conflict/conflict.js b/core/app/modules/import-export/assets/js/pages/import/import-resolver/components/conflict/conflict.js index ee72bba7972..858edfca521 100644 --- a/core/app/modules/import-export/assets/js/pages/import/import-resolver/components/conflict/conflict.js +++ b/core/app/modules/import-export/assets/js/pages/import/import-resolver/components/conflict/conflict.js @@ -1,23 +1,27 @@ import { useContext } from 'react'; import { ImportContext } from '../../../../../context/import-context/import-context-provider'; +import { SharedContext } from '../../../../../context/shared-context/shared-context-provider'; import ConflictCheckbox from './components/conflict-checkbox/conflict-checkbox'; import Heading from 'elementor-app/ui/atoms/heading'; import Text from 'elementor-app/ui/atoms/text'; import Grid from 'elementor-app/ui/grid/grid'; import Button from 'elementor-app/ui/molecules/button'; +import { appsEventTrackingDispatch } from 'elementor-app/event-track/apps-event-tracking'; export default function Conflict( props ) { const importContext = useContext( ImportContext ), + sharedContext = useContext( SharedContext ), manifest = importContext.data.uploadedData?.manifest, + { currentPage } = sharedContext.data, getConflictTitle = ( id ) => { const templateType = manifest.templates[ id ].doc_type, summaryTitle = elementorAppConfig[ 'import-export' ].summaryTitles.templates?.[ templateType ]; return summaryTitle?.single || templateType; }, - getEditTemplateButton = ( editUrl ) => ( + getEditTemplateButton = ( editUrl, title ) => ( @@ -23,6 +29,7 @@ Collapse.propTypes = { onChange: PropTypes.func, className: PropTypes.string, title: PropTypes.node, + onClick: PropTypes.func, children: PropTypes.oneOfType( [ PropTypes.node, PropTypes.arrayOf( PropTypes.node ), diff --git a/core/app/modules/kit-library/assets/js/components/envato-promotion.js b/core/app/modules/kit-library/assets/js/components/envato-promotion.js index 78ef37d0e12..783ce24a2d3 100644 --- a/core/app/modules/kit-library/assets/js/components/envato-promotion.js +++ b/core/app/modules/kit-library/assets/js/components/envato-promotion.js @@ -1,8 +1,21 @@ import { Text, Button } from '@elementor/app-ui'; +import { appsEventTrackingDispatch } from 'elementor-app/event-track/apps-event-tracking'; import './envato-promotion.scss'; -export default function EnvatoPromotion() { +export default function EnvatoPromotion( props ) { + const eventTracking = ( command, eventType = 'click' ) => { + appsEventTrackingDispatch( + command, + { + page_source: 'home page', + element_position: 'library_bottom_promotion', + category: props.category && ( '/favorites' === props.category ? 'favorites' : 'all kits' ), + event_type: eventType, + }, + ); + }; + return ( { __( 'Looking for more Kits?', 'elementor' ) } { ' ' } @@ -12,8 +25,12 @@ export default function EnvatoPromotion() { url="https://go.elementor.com/app-envato-kits/" target="_blank" rel="noreferrer" - text={ __( 'Check out Elementor Website Kits on ThemeForest', 'elementor' ) } + text={ __( 'Check out Elementor Template Kits on ThemeForest', 'elementor' ) } + onClick={ () => eventTracking( 'kit-library/check-kits-on-theme-forest' ) } /> ); } + EnvatoPromotion.propTypes = { + category: PropTypes.string, + }; diff --git a/core/app/modules/kit-library/assets/js/components/error-screen.js b/core/app/modules/kit-library/assets/js/components/error-screen.js index 046e36bd48a..44309a5b2db 100644 --- a/core/app/modules/kit-library/assets/js/components/error-screen.js +++ b/core/app/modules/kit-library/assets/js/components/error-screen.js @@ -1,10 +1,23 @@ /* eslint-disable jsx-a11y/alt-text */ import { Heading, Text, Grid, Button } from '@elementor/app-ui'; +import { appsEventTrackingDispatch } from 'elementor-app/event-track/apps-event-tracking'; import './error-screen.scss'; export default function ErrorScreen( props ) { + const onClick = () => { + appsEventTrackingDispatch( + 'kit-library/go-back-to-view-kits', + { + page_source: 'home page', + element_position: 'empty state', + category: props.button.category && ( '/favorites' === props.button.category ? 'favorites' : 'all' ), + }, + ); + props.button.action(); + }; return ( + @@ -36,5 +49,6 @@ ErrorScreen.propTypes = { action: PropTypes.func, url: PropTypes.string, target: PropTypes.string, + category: PropTypes.string, } ), }; diff --git a/core/app/modules/kit-library/assets/js/components/favorites-actions.js b/core/app/modules/kit-library/assets/js/components/favorites-actions.js index 5838bf9db73..05e2ff834ad 100644 --- a/core/app/modules/kit-library/assets/js/components/favorites-actions.js +++ b/core/app/modules/kit-library/assets/js/components/favorites-actions.js @@ -1,5 +1,6 @@ import { useKitFavoritesMutations } from '../hooks/use-kit-favorites-mutations'; import { Button } from '@elementor/app-ui'; +import { appsEventTrackingDispatch } from 'elementor-app/event-track/apps-event-tracking'; import './favorites-actions.scss'; @@ -7,6 +8,19 @@ export default function FavoritesActions( props ) { const { addToFavorites, removeFromFavorites, isLoading } = useKitFavoritesMutations(); const loadingClasses = isLoading ? 'e-kit-library__kit-favorite-actions--loading' : ''; + const eventTracking = ( kitName, source, action, gridLocation = null, searchTerm = null ) => { + appsEventTrackingDispatch( + 'kit-library/favorite-icon', + { + grid_location: gridLocation, + search_term: searchTerm, + kit_name: kitName, + page_source: source && ( '/' === source ? 'home page' : 'overview' ), + element_location: source && 'overview' === source ? 'app_sidebar' : null, + action, + }, + ); + }; return ( props.isFavorite @@ -15,14 +29,22 @@ export default function FavoritesActions( props ) { hideText={ true } icon="eicon-heart" className={ `e-kit-library__kit-favorite-actions e-kit-library__kit-favorite-actions--active ${ loadingClasses }` } - onClick={ () => ! isLoading && removeFromFavorites.mutate( props.id ) } + onClick={ () => { + // eslint-disable-next-line no-unused-expressions + ! isLoading && removeFromFavorites.mutate( props.id ); + eventTracking( props?.name, props?.source, 'uncheck' ); + } } /> : + diff --git a/package-lock.json b/package-lock.json index 9417dba608d..eb7e9663053 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16294 +1,8 @@ { "name": "elementor", - "version": "3.6.8", - "lockfileVersion": 2, + "version": "3.7.1", + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "elementor", - "version": "3.6.7", - "dependencies": { - "@reduxjs/toolkit": "^1.8.3", - "@testing-library/jest-dom": "^5.16.4", - "acorn": "^8.7.1", - "core-js": "^3.23.4", - "grunt-cli": "^1.4.3", - "jest": "^28.1.2", - "mime": "^3.0.0", - "prop-types": "^15.8.1", - "reach-router-hash-history": "0.0.3", - "react-redux": "^7.2.6", - "write": "^2.0.0" - }, - "devDependencies": { - "@babel/core": "~7.18.6", - "@babel/eslint-parser": "^7.18.2", - "@babel/plugin-transform-modules-commonjs": "~7.18.6", - "@babel/plugin-transform-react-jsx": "~7.18.6", - "@babel/plugin-transform-runtime": "~7.18.6", - "@babel/preset-env": "~7.18.6", - "@babel/runtime-corejs3": "~7.18.6", - "@elementor/eslint-plugin-editor": "^0.4.0", - "@playwright/test": "1.21.1", - "@reach/router": "^1.3.3", - "@wordpress/babel-plugin-import-jsx-pragma": "~3.2.0", - "@wordpress/babel-preset-default": "^3.0.2", - "@wordpress/eslint-plugin": "^12.6.0", - "autoprefixer": "~8.5.0", - "babel-jest": "^28.1.2", - "babel-loader": "8.2.5", - "chalk": "^4.1.0", - "cssnano": "4.1.11", - "eslint": "^8.19.0", - "eslint-plugin-babel": "^5.3.1", - "eslint-plugin-jsx-a11y": "^6.6.0", - "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-react": "^7.30.1", - "eslint-webpack-plugin": "^3.2.0", - "grunt": "^1.5.3", - "grunt-banner": "~0.6.0", - "grunt-bumpup": "~0.6.3", - "grunt-checktextdomain": "~1.0.1", - "grunt-contrib-clean": "~2.0.1", - "grunt-contrib-copy": "~1.0.0", - "grunt-contrib-qunit": "^6.2.0", - "grunt-contrib-sass": "~2.0.0", - "grunt-contrib-watch": "^1.1.0", - "grunt-karma": "4.0.2", - "grunt-postcss": "~0.9.0", - "grunt-release": "0.14.0", - "grunt-sass": "^3.1.0", - "grunt-shell": "~4.0.0", - "grunt-text-replace": "~0.4.0", - "grunt-webpack": "^5.0.0", - "grunt-wp-readme-to-markdown-with-extra": "~2.2.0", - "karma": "6.4.0", - "karma-chrome-launcher": "3.1.1", - "karma-coverage": "2.2.0", - "karma-coverage-istanbul-reporter": "3.0.3", - "karma-fail-fast-reporter": "1.0.5", - "karma-fixture": "0.2.6", - "karma-html2js-preprocessor": "1.1.0", - "karma-qunit": "4.1.2", - "karma-remap-coverage": "0.1.5", - "load-grunt-tasks": "^5.1.0", - "mini-css-extract-plugin": "^2.6.1", - "path": "^0.12.7", - "prettier": "^2.7.1", - "qunit": "2.19.1", - "react-query": "^3.39.1", - "sass": "^1.53.0", - "styled-components": "^5.3.5", - "terser-webpack-plugin": "^5.3.3", - "webpack": "^5.73.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.6.tgz", - "integrity": "sha512-cQbWBpxcbbs/IUredIPkHiAGULLV8iwgNRMFzvbhEXISp4f3rUUXE5+TIw6KwUWUR3DwyI6gmBRnmAtYaWehwQ==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helpers": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.18.2.tgz", - "integrity": "sha512-oFQYkE8SuH14+uR51JVAmdqwKYXGRjEXx7s+WiagVjqQ+HPE+nnwyF2qlVG8evUsUHmPcA+6YXMEDbIhEyQc5A==", - "dev": true, - "dependencies": { - "eslint-scope": "^5.1.1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": ">=7.11.0", - "eslint": "^7.5.0 || ^8.0.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.18.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.7.tgz", - "integrity": "sha512-shck+7VLlY72a2w9c3zYWuE1pwOKEiQHV7GTUbSnhyl5eu3i04t30tBY82ZRWrDfo3gkakCFtevExnxbkf2a3A==", - "dependencies": { - "@babel/types": "^7.18.7", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.6.tgz", - "integrity": "sha512-KT10c1oWEpmrIRYnthbzHgoOf6B+Xd6a5yhdbNtdhtG7aO1or5HViuf1TQR36xY/QprXA5nvxO6nAjhJ4y38jw==", - "dev": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.6.tgz", - "integrity": "sha512-vFjbfhNCzqdeAtZflUFrG5YIFqGTqsctrtkZ1D/NB0mDW9TwW3GmmUepYY4G9wCET5rY5ugz4OGTcLd614IzQg==", - "dependencies": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.6.tgz", - "integrity": "sha512-YfDzdnoxHGV8CzqHGyCbFvXg5QESPFkXlHtvdCkesLjjVMT2Adxe4FGUR5ChIb3DxSaXO12iIOCWoXdsUVwnqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.18.6.tgz", - "integrity": "sha512-7LcpH1wnQLGrI+4v+nPp+zUvIkF9x0ddv1Hkdue10tg3gmRnLy97DXh4STiOf1qeIInyD69Qv5kKSZzKD8B/7A==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", - "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.13.0", - "@babel/helper-module-imports": "^7.12.13", - "@babel/helper-plugin-utils": "^7.13.0", - "@babel/traverse": "^7.13.0", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.6.tgz", - "integrity": "sha512-8n6gSfn2baOY+qlp+VSzsosjCVGFqWKmDF0cCWOybh52Dw3SEyoWR1KrhMJASjLwIEkkAufZ0xvr+SxLHSpy2Q==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.6.tgz", - "integrity": "sha512-0mWMxV1aC97dhjCah5U5Ua7668r5ZmSC2DLfH2EZnf9c3/dHZKiFa5pRLMH5tjSl471tY6496ZWk/kjNONBxhw==", - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.6.tgz", - "integrity": "sha512-CeHxqwwipekotzPDUuJOfIMtcIHBuc7WAzLmTYWctVigqS5RktNMQ5bEwQSuGewzYnCtTWa3BARXeiLxDTv+Ng==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.8.tgz", - "integrity": "sha512-che3jvZwIcZxrwh63VfnFTUzcAM9v/lznYkkRxIBGMPt1SudOKHAEec0SIRCfiuIzTcF7VGj/CaTT6gY4eWxvA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@babel/types": "^7.18.8" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.6.tgz", - "integrity": "sha512-gvZnm1YAAxh13eJdkb9EWHBnF3eAub3XTLCZEehHT2kWxiKVRL64+ae5Y6Ivne0mVHmMYKT+xWgZO+gQhuLUBg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.6.tgz", - "integrity": "sha512-z5wbmV55TveUPZlCLZvxWHtrjuJd+8inFhk7DG0WW87/oJuGDcjDiu7HIvGcpf5464L6xKCg3vNkmlVVz9hwyQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-wrap-function": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.6.tgz", - "integrity": "sha512-fTf7zoXnUGl9gF25fXCWE26t7Tvtyn6H4hkLSYhATwJvw2uYxd3aoXplMSe0g9XbwK7bmxNes7+FGO0rB/xC0g==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-member-expression-to-functions": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", - "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.18.6.tgz", - "integrity": "sha512-4KoLhwGS9vGethZpAhYnMejWkX64wsnHPDwvOsKWU6Fg4+AlK2Jz3TyjQLMEPvz+1zemi/WBdkYxCD0bAfIkiw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.18.6.tgz", - "integrity": "sha512-I5/LZfozwMNbwr/b1vhhuYD+J/mU+gfGAj5td7l5Rv9WYmH6i3Om69WGKNmlIpsVW/mF6O5bvTKbvDQZVgjqOw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.6.tgz", - "integrity": "sha512-vzSiiqbQOghPngUYt/zWGvK3LAsPhz55vc9XNN0xAl2gV4ieShI2OQli5duxWHD+72PZPTKAcfcZDE1Cwc5zsQ==", - "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.8.tgz", - "integrity": "sha512-RSKRfYX20dyH+elbJK2uqAkVyucL+xXzhqlMD5/ZXx+dAAwpyB7HsvnHe/ZUGOF+xLr5Wx9/JoXVTj6BQE2/oA==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.6.tgz", - "integrity": "sha512-Udgu8ZRgrBrttVz6A0EVL0SJ1z+RLbIeqsu632SA1hf0awEppD6TvdznoH+orIF8wtFFAV/Enmw9Y+9oV8TQcw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.6.tgz", - "integrity": "sha512-WAz4R9bvozx4qwf74M+sfqPMKfSqwM0phxPTR6iJIi8robgzXwkEgmeJG1gEKhm6sDqT/U9aV3lfcqybIpev8w==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.6.tgz", - "integrity": "sha512-zr/QcUlUo7GPo6+X1wC98NJADqmy5QTFWWhqeQWiki4XHafJtLl/YMGkmRB2szDD2IYJCCdBTd4ElwhId9T7Xw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.6.tgz", - "integrity": "sha512-zMo66azZth/0tVd7gmkxOkOjs2rpHyhpcFo565PUP37hSp6hSd9uUKIfTDFMz58BwqgQKhJ9YxtM5XddjXVn+Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.18.6.tgz", - "integrity": "sha512-9yuM6wr4rIsKa1wlUAbZEazkCrgw2sMPEXCr4Rnwetu7cEW1NydkCWytLuYletbf8vFxdJxFhwEZqMpOx2eZyw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.6.tgz", - "integrity": "sha512-PatI6elL5eMzoypFAiYDpYQyMtXTn+iMhuxxQt5mAXD4fEmKorpSI3PHd+i3JXBJN3xyA6MvJv7at23HffFHwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.18.6.tgz", - "integrity": "sha512-/DU3RXad9+bZwrgWJQKbr39gYbJpLJHezqEzRzi/BHRlJ9zsQb4CK2CA/5apllXNomwA1qHwzvHl+AdEmC5krQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", - "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.18.6.tgz", - "integrity": "sha512-pRqwb91C42vs1ahSAWJkxOxU1RHWDn16XAa6ggQ72wjLlWyYeAcLvTtE0aM8ph3KNydy9CQF2nLYcjq1WysgxQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.18.8.tgz", - "integrity": "sha512-RySDoXdF6hgHSHuAW4aLGyVQdmvEX/iJtjVre52k0pxRq4hzqze+rAVP++NmNv596brBpYmaiKgTZby7ziBnVg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.6.tgz", - "integrity": "sha512-9repI4BhNrR0KenoR9vm3/cIc1tSBIo+u1WVjKCAynahj25O8zfbiE6JtAtHPGQSs4yZ+bA8mRasRP+qc+2R5A==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.18.6.tgz", - "integrity": "sha512-tgy3u6lRp17ilY8r1kP4i2+HDUwxlVqq3RTc943eAWSzGgpU1qhiKpqZ5CMyHReIYPHdo3Kg8v8edKtDqSVEyQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.6.tgz", - "integrity": "sha512-NJU26U/208+sxYszf82nmGYqVF9QN8py2HFTblPT9hbawi8+1C5a9JubODLTGFuT0qlkqVinmkwOD13s0sZktg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.6.tgz", - "integrity": "sha512-kJha/Gbs5RjzIu0CxZwf5e3aTTSlhZnHMT8zPWnJMjNpLOUgqevg+PN5oMH68nMCXnfiMo4Bhgxqj59KHTlAnA==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.6.tgz", - "integrity": "sha512-x3HEw0cJZVDoENXOp20HlypIHfl0zMIhMVZEBVTfmqbObIpsMxMbmU5nOEO8R7LYT+z5RORKPlTI5Hj4OsO9/Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.18.6.tgz", - "integrity": "sha512-Pra5aXsmTsOnjM3IajS8rTaLCy++nGM4v3YR4esk5PCsyg9z8NA5oQLwxzMUtDBd8F+UmVza3VxoAaWCbzH1rg==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.18.6.tgz", - "integrity": "sha512-Qfv2ZOWikpvmedXQJDSbxNqy7Xr/j2Y8/KfijM0iJyKkBTmWuvCA1yeH1yDM7NJhBW/2aXxeucLj6i80/LAJ/Q==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-simple-access": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.18.6.tgz", - "integrity": "sha512-UbPYpXxLjTw6w6yXX2BYNxF3p6QY225wcTkfQCy3OMnSlS/C3xGtwUjEzGkldb/sy6PWLiCQ3NbYfjWUTI3t4g==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-identifier": "^7.18.6", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.18.6.tgz", - "integrity": "sha512-UmEOGF8XgaIqD74bC8g7iV3RYj8lMf0Bw7NJzvnS9qQhM4mg+1WHKotUIdjxgD2RGrgFLZZPCFPFj3P/kVDYhg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.18.8.tgz", - "integrity": "sha512-ivfbE3X2Ss+Fj8nnXvKJS6sjRG4gzwPMsP+taZC+ZzEGjAYlvENixmt1sZ5Ca6tWls+BlKSGKPJ6OOXvXCbkFg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.18.6.tgz", - "integrity": "sha512-Mz7xMPxoy9kPS/JScj6fJs03TZ/fZ1dJPlMjRAgTaxaS0fUBk8FV/A2rRgfPsVCZqALNwMexD+0Uaf5zlcKPpw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.6.tgz", - "integrity": "sha512-8uRHk9ZmRSnWqUgyae249EJZ94b0yAGLBIqzZzl+0iEdbno55Pmlt/32JZsHwXD9k/uZj18Aqqk35wBX4CBTXA==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.18.6.tgz", - "integrity": "sha512-ayT53rT/ENF8WWexIRg9AiV9h0aIteyWn5ptfZTZQrjk/+f3WdrJGCY4c9wcgl2+MKkKPhzbYp97FTsquZpDCw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.6.tgz", - "integrity": "sha512-UuqlRrQmT2SWRvahW46cGSany0uTlcj8NYOS5sRGYi8FxPYPoLd5DDmMd32ZXEj2Jq+06uGVQKHxa/hJx2EzKw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.6.tgz", - "integrity": "sha512-7m71iS/QhsPk85xSjFPovHPcH3H9qeyzsujhTc+vcdnsXavoWYJ74zx0lP5RhpC5+iDnVLO+PPMHzC11qels1g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz", - "integrity": "sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-typescript": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.6.tgz", - "integrity": "sha512-XNRwQUXYMP7VLuy54cr/KS/WeL3AZeORhrmeZ7iewgu+X2eBqmpaLI/hzqr9ZxCeUoq0ASK4GUzSM0BDhZkLFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.6.tgz", - "integrity": "sha512-WrthhuIIYKrEFAwttYzgRNQ5hULGmwTj+D6l7Zdfsv5M7IWV/OZbUfbeL++Qrzx1nVJwWROIFhCHRYQV4xbPNw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.18.6", - "@babel/helper-compilation-targets": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-async-generator-functions": "^7.18.6", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.6", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.6", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.18.6", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.6", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.18.6", - "@babel/plugin-transform-classes": "^7.18.6", - "@babel/plugin-transform-computed-properties": "^7.18.6", - "@babel/plugin-transform-destructuring": "^7.18.6", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.6", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.6", - "@babel/plugin-transform-function-name": "^7.18.6", - "@babel/plugin-transform-literals": "^7.18.6", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.18.6", - "@babel/plugin-transform-modules-commonjs": "^7.18.6", - "@babel/plugin-transform-modules-systemjs": "^7.18.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.18.6", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.18.6", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.6", - "@babel/plugin-transform-typeof-symbol": "^7.18.6", - "@babel/plugin-transform-unicode-escapes": "^7.18.6", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.18.6", - "babel-plugin-polyfill-corejs2": "^0.3.1", - "babel-plugin-polyfill-corejs3": "^0.5.2", - "babel-plugin-polyfill-regenerator": "^0.3.1", - "core-js-compat": "^3.22.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.16.7.tgz", - "integrity": "sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-validator-option": "^7.16.7", - "@babel/plugin-transform-typescript": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.6.tgz", - "integrity": "sha512-t9wi7/AW6XtKahAe20Yw0/mMljKq0B1r2fPdvaAdV/KPDZewFXdaaa6K7lxmZBZ8FBNpCiAT6iHPmd6QO9bKfQ==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.18.6.tgz", - "integrity": "sha512-cOu5wH2JFBgMjje+a+fz2JNIWU4GzYpl05oSob3UDvBEh6EuIn+TXFHMmBbhSb+k/4HMzgKCQfEEDArAWNF9Cw==", - "dev": true, - "dependencies": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.8.tgz", - "integrity": "sha512-UNg/AcSySJYR/+mIcJQDCv00T+AqRO7j/ZEJLzpaYtgM48rMg5MnkJgyNqkzo88+p4tfRvZJCEiwwfG6h4jkRg==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/helper-environment-visitor": "^7.18.6", - "@babel/helper-function-name": "^7.18.6", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.8", - "@babel/types": "^7.18.8", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.8.tgz", - "integrity": "sha512-qwpdsmraq0aJ3osLJRApsc2ouSJCdnMeZwB0DhbtHAtRpZNZCdlbRnHIgcRKzdE1g0iOGg644fzjOBcdOz9cPw==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@elementor/eslint-plugin-editor": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@elementor/eslint-plugin-editor/-/eslint-plugin-editor-0.4.0.tgz", - "integrity": "sha512-csHRHGpN1ph4UelPhWkxZnbeCV+qgTsHX8VWqPQgjYqRVROlcFpMtHqIPki7MScGE2WvNKcFC+L/hxcKx9pWTQ==", - "dev": true, - "peerDependencies": { - "eslint": ">=5.4.0", - "eslint-plugin-react": ">=7.11.0" - } - }, - "node_modules/@emotion/is-prop-valid": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.1.3.tgz", - "integrity": "sha512-RFg04p6C+1uO19uG8N+vqanzKqiM9eeV1LDOG3bmkYmuOj7NbKNlFC/4EZq5gnwAIlcC/jOT24f8Td0iax2SXA==", - "dev": true, - "dependencies": { - "@emotion/memoize": "^0.7.4" - } - }, - "node_modules/@emotion/memoize": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.5.tgz", - "integrity": "sha512-igX9a37DR2ZPGYtV6suZ6whr8pTFtyHL3K/oLUotxpSVO2ASaprmAe2Dkq7tBo7CRY7MMDrAa9nuQP9/YG8FxQ==", - "dev": true - }, - "node_modules/@emotion/stylis": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", - "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", - "dev": true - }, - "node_modules/@emotion/unitless": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", - "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", - "dev": true - }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.20.1.tgz", - "integrity": "sha512-oeJK41dcdqkvdZy/HctKklJNkt/jh+av3PZARrZEl+fs/8HaHeeYoAvEwOV0u5I6bArTF17JEsTZMY359e/nfQ==", - "dev": true, - "dependencies": { - "comment-parser": "1.3.0", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~2.2.3" - }, - "engines": { - "node": "^12 || ^14 || ^16 || ^17" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.2", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.1.tgz", - "integrity": "sha512-0RiUocPVFEm3WRMOStIHbRWllG6iW6E3/gUPnf4lkrVFyXIIDeCe+vlKeYyFOMhB2EPE6FLFCNADSOOQMaqvyA==", - "dependencies": { - "@jest/types": "^28.1.1", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^28.1.1", - "jest-util": "^28.1.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/console/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/core": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-28.1.2.tgz", - "integrity": "sha512-Xo4E+Sb/nZODMGOPt2G3cMmCBqL4/W2Ijwr7/mrXlq4jdJwcFQ/9KrrJZT2adQRk2otVBXXOz1GRQ4Z5iOgvRQ==", - "dependencies": { - "@jest/console": "^28.1.1", - "@jest/reporters": "^28.1.2", - "@jest/test-result": "^28.1.1", - "@jest/transform": "^28.1.2", - "@jest/types": "^28.1.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^28.0.2", - "jest-config": "^28.1.2", - "jest-haste-map": "^28.1.1", - "jest-message-util": "^28.1.1", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.1", - "jest-resolve-dependencies": "^28.1.2", - "jest-runner": "^28.1.2", - "jest-runtime": "^28.1.2", - "jest-snapshot": "^28.1.2", - "jest-util": "^28.1.1", - "jest-validate": "^28.1.1", - "jest-watcher": "^28.1.1", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "rimraf": "^3.0.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/core/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.2.tgz", - "integrity": "sha512-I0CR1RUMmOzd0tRpz10oUfaChBWs+/Hrvn5xYhMEF/ZqrDaaeHwS8yDBqEWCrEnkH2g+WE/6g90oBv3nKpcm8Q==", - "dependencies": { - "@jest/fake-timers": "^28.1.2", - "@jest/types": "^28.1.1", - "@types/node": "*", - "jest-mock": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-28.1.2.tgz", - "integrity": "sha512-HBzyZBeFBiOelNbBKN0pilWbbrGvwDUwAqMC46NVJmWm8AVkuE58NbG1s7DR4cxFt4U5cVLxofAoHxgvC5MyOw==", - "dependencies": { - "expect": "^28.1.1", - "jest-snapshot": "^28.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-28.1.1.tgz", - "integrity": "sha512-n/ghlvdhCdMI/hTcnn4qV57kQuV9OTsZzH1TTCVARANKhl6hXJqLKUkwX69ftMGpsbpt96SsDD8n8LD2d9+FRw==", - "dependencies": { - "jest-get-type": "^28.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect-utils/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect/node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect/node_modules/expect": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz", - "integrity": "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==", - "dependencies": { - "@jest/expect-utils": "^28.1.1", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.1", - "jest-message-util": "^28.1.1", - "jest-util": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-diff": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", - "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-matcher-utils": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", - "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/expect/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.2.tgz", - "integrity": "sha512-xSYEI7Y0D5FbZN2LsCUj/EKRR1zfQYmGuAUVh6xTqhx7V5JhjgMcK5Pa0iR6WIk0GXiHDe0Ke4A+yERKE9saqg==", - "dependencies": { - "@jest/types": "^28.1.1", - "@sinonjs/fake-timers": "^9.1.2", - "@types/node": "*", - "jest-message-util": "^28.1.1", - "jest-mock": "^28.1.1", - "jest-util": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/fake-timers/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-28.1.2.tgz", - "integrity": "sha512-cz0lkJVDOtDaYhvT3Fv2U1B6FtBnV+OpEyJCzTHM1fdoTsU4QNLAt/H4RkiwEUU+dL4g/MFsoTuHeT2pvbo4Hg==", - "dependencies": { - "@jest/environment": "^28.1.2", - "@jest/expect": "^28.1.2", - "@jest/types": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-28.1.2.tgz", - "integrity": "sha512-/whGLhiwAqeCTmQEouSigUZJPVl7sW8V26EiboImL+UyXznnr1a03/YZ2BX8OlFw0n+Zlwu+EZAITZtaeRTxyA==", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^28.1.1", - "@jest/test-result": "^28.1.1", - "@jest/transform": "^28.1.2", - "@jest/types": "^28.1.1", - "@jridgewell/trace-mapping": "^0.3.13", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^28.1.1", - "jest-util": "^28.1.1", - "jest-worker": "^28.1.1", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "terminal-link": "^2.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/reporters/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.0.2.tgz", - "integrity": "sha512-YVDJZjd4izeTDkij00vHHAymNXQ6WWsdChFRK86qck6Jpr3DCL5W3Is3vslviRlP+bLuMYRLbdp98amMvqudhA==", - "dependencies": { - "@sinclair/typebox": "^0.23.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-28.1.2.tgz", - "integrity": "sha512-cV8Lx3BeStJb8ipPHnqVw/IM2VCMWO3crWZzYodSIkxXnRcXJipCdx1JCK0K5MsJJouZQTH73mzf4vgxRaH9ww==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.13", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.1.tgz", - "integrity": "sha512-hPmkugBktqL6rRzwWAtp1JtYT4VHwv8OQ+9lE5Gymj6dHzubI/oJHMUpPOt8NrdVWSrz9S7bHjJUmv2ggFoUNQ==", - "dependencies": { - "@jest/console": "^28.1.1", - "@jest/types": "^28.1.1", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-28.1.1.tgz", - "integrity": "sha512-nuL+dNSVMcWB7OOtgb0EGH5AjO4UBCt68SLP08rwmC+iRhyuJWS9MtZ/MpipxFwKAlHFftbMsydXqWre8B0+XA==", - "dependencies": { - "@jest/test-result": "^28.1.1", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-28.1.2.tgz", - "integrity": "sha512-3o+lKF6iweLeJFHBlMJysdaPbpoMmtbHEFsjzSv37HIq/wWt5ijTeO2Yf7MO5yyczCopD507cNwNLeX8Y/CuIg==", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^28.1.1", - "@jridgewell/trace-mapping": "^0.3.13", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^1.4.0", - "fast-json-stable-stringify": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.1", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.1", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jest/types": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.1.tgz", - "integrity": "sha512-vRXVqSg1VhDnB8bWcmvLzmg0Bt9CRKVgHPXqYwvWMX3TvAjeO+nRuK6+VdTKCtWOvYlmkF/HqNAL/z+N3B53Kw==", - "dependencies": { - "@jest/schemas": "^28.0.2", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@playwright/test": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.21.1.tgz", - "integrity": "sha512-XkkTXl5gvEm4fciqeHvY5IuSS/OfQef0MO6RpBNmtm6EuYSdtUvP/sDVuWRKsDqyVdB3WSA0az7iSw79f2//JQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "7.16.7", - "@babel/core": "7.16.12", - "@babel/helper-plugin-utils": "7.16.7", - "@babel/plugin-proposal-class-properties": "7.16.7", - "@babel/plugin-proposal-dynamic-import": "7.16.7", - "@babel/plugin-proposal-export-namespace-from": "7.16.7", - "@babel/plugin-proposal-logical-assignment-operators": "7.16.7", - "@babel/plugin-proposal-nullish-coalescing-operator": "7.16.7", - "@babel/plugin-proposal-numeric-separator": "7.16.7", - "@babel/plugin-proposal-optional-chaining": "7.16.7", - "@babel/plugin-proposal-private-methods": "7.16.11", - "@babel/plugin-proposal-private-property-in-object": "7.16.7", - "@babel/plugin-syntax-async-generators": "7.8.4", - "@babel/plugin-syntax-json-strings": "7.8.3", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "7.8.3", - "@babel/plugin-transform-modules-commonjs": "7.16.8", - "@babel/preset-typescript": "7.16.7", - "colors": "1.4.0", - "commander": "8.3.0", - "debug": "4.3.3", - "expect": "27.2.5", - "jest-matcher-utils": "27.2.5", - "json5": "2.2.1", - "mime": "3.0.0", - "minimatch": "3.0.4", - "ms": "2.1.3", - "open": "8.4.0", - "pirates": "4.0.4", - "playwright-core": "1.21.1", - "rimraf": "3.0.2", - "source-map-support": "0.4.18", - "stack-utils": "2.0.5", - "yazl": "2.5.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@playwright/test/node_modules/@babel/code-frame": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", - "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/core": { - "version": "7.16.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.16.12.tgz", - "integrity": "sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.16.8", - "@babel/helper-compilation-targets": "^7.16.7", - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helpers": "^7.16.7", - "@babel/parser": "^7.16.12", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.16.10", - "@babel/types": "^7.16.8", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@playwright/test/node_modules/@babel/helper-plugin-utils": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", - "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", - "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz", - "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz", - "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz", - "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz", - "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz", - "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz", - "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.16.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz", - "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.16.10", - "@babel/helper-plugin-utils": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz", - "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.7", - "@babel/helper-create-class-features-plugin": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.16.8.tgz", - "integrity": "sha512-oflKPvsLT2+uKQopesJt3ApiaIS2HW+hzHFcwRNtyDGieAeC/dIHZX8buJQ2J2X1rxGPy4eRcUijm3qcSPjYcA==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.16.7", - "@babel/helper-plugin-utils": "^7.16.7", - "@babel/helper-simple-access": "^7.16.7", - "babel-plugin-dynamic-import-node": "^2.3.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@playwright/test/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@playwright/test/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@playwright/test/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@reach/router": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.3.4.tgz", - "integrity": "sha512-+mtn9wjlB9NN2CNnnC/BRYtwdKBfSyyasPYraNAyvaV1occr/5NnB4CVzjEZipNHwYebQwcndGUmpFzxAUoqSA==", - "dev": true, - "dependencies": { - "create-react-context": "0.3.0", - "invariant": "^2.2.3", - "prop-types": "^15.6.1", - "react-lifecycles-compat": "^3.0.4" - }, - "peerDependencies": { - "react": "15.x || 16.x || 16.4.0-alpha.0911da3", - "react-dom": "15.x || 16.x || 16.4.0-alpha.0911da3" - } - }, - "node_modules/@reduxjs/toolkit": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.8.3.tgz", - "integrity": "sha512-lU/LDIfORmjBbyDLaqFN2JB9YmAT1BElET9y0ZszwhSBa5Ef3t6o5CrHupw5J1iOXwd+o92QfQZ8OJpwXvsssg==", - "dependencies": { - "immer": "^9.0.7", - "redux": "^4.1.2", - "redux-thunk": "^2.4.1", - "reselect": "^4.1.5" - }, - "peerDependencies": { - "react": "^16.9.0 || ^17.0.0 || ^18", - "react-redux": "^7.2.1 || ^8.0.2" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-redux": { - "optional": true - } - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.23.5", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.23.5.tgz", - "integrity": "sha512-AFBVi/iT4g20DHoujvMH1aEDn8fGJh4xsRGCP6d8RpLPMqsNPvW01Jcn0QysXTsg++/xj25NmJsGyH9xug/wKg==" - }, - "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", - "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", - "dependencies": { - "@sinonjs/commons": "^1.7.0" - } - }, - "node_modules/@testing-library/jest-dom": { - "version": "5.16.4", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz", - "integrity": "sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA==", - "dependencies": { - "@babel/runtime": "^7.9.2", - "@types/testing-library__jest-dom": "^5.9.1", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.5.6", - "lodash": "^4.17.15", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=8", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@types/babel__core": { - "version": "7.1.19", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", - "integrity": "sha512-WEOTgRsbYkvA/KCsDwVEGkd7WAr1e3g31VHQ8zy5gul/V1qKullU/BU5I68X5v7V3GnB9eotmom4v5a5gjxorw==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.17.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.17.1.tgz", - "integrity": "sha512-kVzjari1s2YVi77D3w1yuvohV2idweYXMCDzqBiVNN63TcDWrIlTVOYpqVrvbbyOE/IyzBoTKF0fdnLPEORFxA==", - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/component-emitter": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", - "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", - "dev": true - }, - "node_modules/@types/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", - "dev": true - }, - "node_modules/@types/cors": { - "version": "2.8.12", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", - "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", - "dev": true - }, - "node_modules/@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "0.0.52", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.52.tgz", - "integrity": "sha512-BZWrtCU0bMVAIliIV+HJO1f1PR41M7NKjfxrFJwwhKI1KwhwOxYw1SXg9ao+CIMt774nFuGiG6eU+udtbEI9oQ==", - "dev": true - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz", - "integrity": "sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/hoist-non-react-statics": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz", - "integrity": "sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==", - "dependencies": { - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "28.1.4", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-28.1.4.tgz", - "integrity": "sha512-telv6G5N7zRJiLcI3Rs3o+ipZ28EnE+7EvF0pSrt2pZOMnAVI/f+6/LucDxOvcBcTeTL3JMF744BbVQAVBUQRA==", - "dependencies": { - "jest-matcher-utils": "^28.0.0", - "pretty-format": "^28.0.0" - } - }, - "node_modules/@types/jest/node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@types/jest/node_modules/jest-diff": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", - "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@types/jest/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@types/jest/node_modules/jest-matcher-utils": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", - "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.0.3.tgz", - "integrity": "sha512-HzNRZtp4eepNitP+BD6k2L6DROIDG4Q0fm4x+dwfsr6LGmROENnok75VGw40628xf+iR24WeMFcHuuBDUAzzsQ==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", - "integrity": "sha512-ymZk3LEC/fsut+/Q5qejp6R9O1rMxz3XaRHDV6kX8MrGAhOSPqVARbDi+EZvInBpw+BnCX3TD240byVkOfQsHg==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.0.15", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.15.tgz", - "integrity": "sha512-iz3BtLuIYH1uWdsv6wXYdhozhqj20oD4/Hk2DNXIn1kFsmp9x8d9QB6FnPhfkbhd2PgEONt9Q1x/ebkwjfFLow==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "17.0.17", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.17.tgz", - "integrity": "sha512-VjnqEmqGnasQKV0CWLevqMTXBYG9GbwuE6x3VetERLh0cq2LTptFE73MrQi2S7GkKXCf2GgwItB/melLnxfnsg==", - "dev": true, - "dependencies": { - "@types/react": "^17" - } - }, - "node_modules/@types/react-dom/node_modules/@types/react": { - "version": "17.0.47", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.47.tgz", - "integrity": "sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-redux": { - "version": "7.1.24", - "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.24.tgz", - "integrity": "sha512-7FkurKcS1k0FHZEtdbbgN8Oc6b+stGSfZYjQGicofJ0j4U0qIn/jaSvnP2pLwZKiai3/17xqqxkkrxTgN8UNbQ==", - "dependencies": { - "@types/hoist-non-react-statics": "^3.3.0", - "@types/react": "*", - "hoist-non-react-statics": "^3.3.0", - "redux": "^4.0.0" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==" - }, - "node_modules/@types/testing-library__jest-dom": { - "version": "5.14.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.5.tgz", - "integrity": "sha512-SBwbxYoyPIvxHbeHxTZX2Pe/74F/tX2/D3mMvzabdeJ25bBojfW0TyB8BHrbq/9zaaKICJZjLP+8r6AeZMFCuQ==", - "dependencies": { - "@types/jest": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.10", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", - "integrity": "sha512-gmEaFwpj/7f/ROdtIlci1R1VYU1J4j95m8T+Tj3iBgiBFKg1foE/PSl93bBd5T9LDXNPo8UlNN6W0qwD8O5OaA==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@types/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", - "dev": true, - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.30.5.tgz", - "integrity": "sha512-lftkqRoBvc28VFXEoRgyZuztyVUQ04JvUnATSPtIRFAccbXTWL6DEtXGYMcbg998kXw1NLUJm7rTQ9eUt+q6Ig==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/type-utils": "5.30.5", - "@typescript-eslint/utils": "5.30.5", - "debug": "^4.3.4", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.2.0", - "regexpp": "^3.2.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.30.5.tgz", - "integrity": "sha512-lsOedOkwAHWiJyvQsv9DtvWnANWecf28eO/L1EPNxLIBRoB7UCDa0uZF61IikZHYubGnDLLHDQ/6KFWl4Nrnjg==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.30.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.30.5.tgz", - "integrity": "sha512-zj251pcPXI8GO9NDKWWmygP6+UjwWmrdf9qMW/L/uQJBM/0XbU2inxe5io/234y/RCvwpKEYjZ6c1YrXERkK4Q==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/typescript-estree": "5.30.5", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.30.5.tgz", - "integrity": "sha512-NJ6F+YHHFT/30isRe2UTmIGGAiXKckCyMnIV58cE3JkHmaD6e5zyEYm5hBDv0Wbin+IC0T1FWJpD3YqHUG/Ydg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/visitor-keys": "5.30.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.30.5.tgz", - "integrity": "sha512-k9+ejlv1GgwN1nN7XjVtyCgE0BTzhzT1YsQF0rv4Vfj2U9xnslBgMYYvcEYAFVdvhuEscELJsB7lDkN7WusErw==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "5.30.5", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.30.5.tgz", - "integrity": "sha512-kZ80w/M2AvsbRvOr3PjaNh6qEW1LFqs2pLdo2s5R38B2HYXG8Z0PP48/4+j1QHJFL3ssHIbJ4odPRS8PlHrFfw==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.30.5.tgz", - "integrity": "sha512-qGTc7QZC801kbYjAr4AgdOfnokpwStqyhSbiQvqGBLixniAKyH+ib2qXIVo4P9NgGzwyfD9I0nlJN7D91E1VpQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/visitor-keys": "5.30.5", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.30.5.tgz", - "integrity": "sha512-o4SSUH9IkuA7AYIfAvatldovurqTAHrfzPApOZvdUq01hHojZojCFXx06D/aFpKCgWbMPRdJBWAC3sWp3itwTA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.30.5", - "@typescript-eslint/types": "5.30.5", - "@typescript-eslint/typescript-estree": "5.30.5", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.30.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.30.5.tgz", - "integrity": "sha512-D+xtGo9HUMELzWIUqcQc0p2PO4NyvTrgIOK/VnSH083+8sq0tiLozNRKuLarwHYGRuA6TVBQSuuLwJUDWd3aaA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.30.5", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dev": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dev": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dev": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "dev": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@wordpress/babel-plugin-import-jsx-pragma": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-3.2.0.tgz", - "integrity": "sha512-XK3Sdpi9MWoy5qPHnRroY/ypX0VtT5yI5809u5As1P/3k4vlXNw8USH4lJ+rkurAOVqqN5mFlf2XAL9AkpfXyg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "@babel/core": "^7.12.9" - } - }, - "node_modules/@wordpress/babel-preset-default": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-3.0.2.tgz", - "integrity": "sha512-bsa4piS4GU02isj2XJNUgSEC7MpzdYNy9wOFySrp8G6IHAvwrlwcPEXJf5EuwE8ZqTMmFAzPyKOHFEAx/j+J1A==", - "dev": true, - "dependencies": { - "@babel/core": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.0.0", - "@babel/plugin-proposal-object-rest-spread": "^7.0.0", - "@babel/plugin-transform-react-jsx": "^7.0.0", - "@babel/plugin-transform-runtime": "^7.0.0", - "@babel/preset-env": "^7.0.0", - "@babel/runtime": "^7.0.0", - "@wordpress/browserslist-config": "^2.2.3", - "babel-core": "^7.0.0-bridge.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@wordpress/browserslist-config": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-2.7.0.tgz", - "integrity": "sha512-pB45JlfmHuEigNFZ1X+CTgIsOT3/TTb9iZxw1DHXge/7ytY8FNhtcNwTfF9IgnS6/xaFRZBqzw4DyH4sP1Lyxg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@wordpress/element": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-4.10.0.tgz", - "integrity": "sha512-Ddi5nwd8/zPDITo2PCm30ffKxvbOEpW8krXzffnTace7TaqGzz7QuX6yOVdm6xXx3KZH/AADYPzCwthJKbKGEg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.0", - "@types/react": "^17.0.37", - "@types/react-dom": "^17.0.11", - "@wordpress/escape-html": "^2.12.0", - "lodash": "^4.17.21", - "react": "^17.0.2", - "react-dom": "^17.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/element/node_modules/@types/react": { - "version": "17.0.47", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.47.tgz", - "integrity": "sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@wordpress/element/node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@wordpress/element/node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/@wordpress/element/node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/@wordpress/escape-html": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-2.12.0.tgz", - "integrity": "sha512-kuLtqEOHSIu53+HwHjCiz8THXhnhqFwsfFgr4gkZmv4n4NxLmGsMV2kMMZlRjWbTUSP0YN7Dix4uHx8JWlIRGg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.16.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/eslint-plugin": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/@wordpress/eslint-plugin/-/eslint-plugin-12.6.0.tgz", - "integrity": "sha512-IjurbGSUF7oJcrd40+cIOJ3mC21cFq/XMPcjGLvCq9MloUyGzm6O3o1SQk5xdc14RVeYDc5CLviYg5PsjlW29A==", - "dev": true, - "dependencies": { - "@babel/eslint-parser": "^7.16.0", - "@typescript-eslint/eslint-plugin": "^5.3.0", - "@typescript-eslint/parser": "^5.3.0", - "@wordpress/babel-preset-default": "^6.14.0", - "@wordpress/prettier-config": "^1.4.0", - "cosmiconfig": "^7.0.0", - "eslint-config-prettier": "^8.3.0", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-jest": "^25.2.3", - "eslint-plugin-jsdoc": "^37.0.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-prettier": "^3.3.0", - "eslint-plugin-react": "^7.27.0", - "eslint-plugin-react-hooks": "^4.3.0", - "globals": "^13.12.0", - "requireindex": "^1.2.0" - }, - "engines": { - "node": ">=12", - "npm": ">=6.9" - }, - "peerDependencies": { - "@babel/core": ">=7", - "eslint": ">=8", - "prettier": ">=2", - "typescript": ">=4" - }, - "peerDependenciesMeta": { - "prettier": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@wordpress/eslint-plugin/node_modules/@wordpress/babel-preset-default": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-6.14.0.tgz", - "integrity": "sha512-IajgAjeR2F5qhs8+eHIGmGi6QNcD1yi//9+z2xLpM0IIyGUPl8M5U+4EX+2xvGU3ooL6/duXz6m7KmiNr3it4Q==", - "dev": true, - "dependencies": { - "@babel/core": "^7.16.0", - "@babel/plugin-transform-react-jsx": "^7.16.0", - "@babel/plugin-transform-runtime": "^7.16.0", - "@babel/preset-env": "^7.16.0", - "@babel/preset-typescript": "^7.16.0", - "@babel/runtime": "^7.16.0", - "@wordpress/babel-plugin-import-jsx-pragma": "^3.2.0", - "@wordpress/browserslist-config": "^4.1.2", - "@wordpress/element": "^4.10.0", - "@wordpress/warning": "^2.12.0", - "browserslist": "^4.17.6", - "core-js": "^3.19.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/eslint-plugin/node_modules/@wordpress/browserslist-config": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-4.1.2.tgz", - "integrity": "sha512-UH0Ifmm4tEjVPOtiqH6yxDvk2EKtqSAhnyhyfSIb0wUnEoGsWTjREZjzuhgjt/I2nTqfg+0gUSzL5D0yQH6wDQ==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@wordpress/eslint-plugin/node_modules/globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wordpress/eslint-plugin/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@wordpress/prettier-config": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-1.4.0.tgz", - "integrity": "sha512-uvrgUAhRnOvIysXjcXH9VDsrKLqH9r3BfdGoy+WFLSHFnTfdMhW7bdDQXl4F4UIUuefUwGi+ZvT/rChg9zoBkQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "prettier": ">=2" - } - }, - "node_modules/@wordpress/warning": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-2.12.0.tgz", - "integrity": "sha512-Xus/47T/F5yNjyuJEwBR8A1YSBppS1A8G+zD0Gt5Rn8x/4PAe1b2il8eoW8YIdHAFVM0PpZuWRhmN4f1y8mG7w==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/add-filename-increment": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/add-filename-increment/-/add-filename-increment-1.0.0.tgz", - "integrity": "sha512-pFV8VZX8jxuVMIycKvGZkWF/ihnUubu9lbQVnOnZWp7noVxbKQTNj7zG2y9fXdPcuZ6lAN3Drr517HaivGCjdQ==", - "dependencies": { - "strip-filename-increment": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/alphanum-sort": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", - "dev": true - }, - "node_modules/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", - "dev": true, - "engines": { - "node": ">=0.4.2" - } - }, - "node_modules/ansi-cyan": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-red": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/arr-diff": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "array-slice": "^0.2.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-diff/node_modules/array-slice": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", - "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.0.tgz", - "integrity": "sha512-PZC9/8TKAIxcWKdyeb77EzULHPrIX/tIZebLJUQOMR1OwYosT8yggdfWScfTBCDj5utONvOuPQQumYsU2ULbkg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.4.tgz", - "integrity": "sha512-WnM+AjG/DvLRLo4DDl+r+SvCzYtD2Jd9oeBYMcEaI7t3fFrHY9M53/wdLcTvmZNQ70IU6Htj0emFkZ5TS+lrdw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.2", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", - "dev": true - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autoprefixer": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.5.2.tgz", - "integrity": "sha512-X3BmI+0YBTGaqw0cR9FCPTyTAAPRpijzIUPkysRumGmJC6r8vhix1RjzLNjX01Kbb/iSezjZ9OR3G92pa31+WQ==", - "dev": true, - "dependencies": { - "browserslist": "^3.2.8", - "caniuse-lite": "^1.0.30000846", - "normalize-range": "^0.1.2", - "num2fraction": "^1.2.2", - "postcss": "^6.0.22", - "postcss-value-parser": "^3.2.3" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - } - }, - "node_modules/autoprefixer/node_modules/browserslist": { - "version": "3.2.8", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", - "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", - "dev": true, - "dependencies": { - "caniuse-lite": "^1.0.30000844", - "electron-to-chromium": "^1.3.47" - }, - "bin": { - "browserslist": "cli.js" - } - }, - "node_modules/axe-core": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.2.tgz", - "integrity": "sha512-LVAaGp/wkkgYJcjmHsoKx4juT1aQvJyPcW09MLCjVTh3V2cc6PnyempiLMNH5iMdfIX/zdbjUx2KDjMLCTdPeA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-jest": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-28.1.2.tgz", - "integrity": "sha512-pfmoo6sh4L/+5/G2OOfQrGJgvH7fTa1oChnuYH2G/6gA+JwDvO8PELwvwnofKBMNrQsam0Wy/Rw+QSrBNewq2Q==", - "dependencies": { - "@jest/transform": "^28.1.2", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^28.1.1", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-loader": { - "version": "8.2.5", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", - "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", - "dev": true, - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-28.1.1.tgz", - "integrity": "sha512-NovGCy5Hn25uMJSAU8FaHqzs13cFoOI4lhIujiepssjCKRsAo3TA734RDWSGxuFTsUJXerYOqQQodlxgmtqbzw==", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", - "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.13.11", - "@babel/helper-define-polyfill-provider": "^0.3.1", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", - "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1", - "core-js-compat": "^3.21.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", - "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-styled-components": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-2.0.7.tgz", - "integrity": "sha512-i7YhvPgVqRKfoQ66toiZ06jPNA3p6ierpfUuEWxNF+fV27Uv5gxBkf8KZLHUCc1nFA9j6+80pYoIpqCeyW3/bA==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.16.0", - "@babel/helper-module-imports": "^7.16.0", - "babel-plugin-syntax-jsx": "^6.18.0", - "lodash": "^4.17.11", - "picomatch": "^2.3.0" - }, - "peerDependencies": { - "styled-components": ">= 2" - } - }, - "node_modules/babel-plugin-syntax-jsx": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", - "dev": true - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-28.1.1.tgz", - "integrity": "sha512-FCq9Oud0ReTeWtcneYf/48981aTfXYuB9gbU4rBNNJVBSQ6ssv7E6v/qvbBxtOWwZFXjLZwpg+W3q7J6vhH25g==", - "dependencies": { - "babel-plugin-jest-hoist": "^28.1.1", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/base64id": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", - "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", - "dev": true, - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/bl/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bl/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/body": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==", - "dev": true, - "dependencies": { - "continuable-cache": "^0.3.1", - "error": "^7.0.0", - "raw-body": "~1.1.0", - "safe-json-parse": "~1.0.1" - } - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/body/node_modules/bytes": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", - "integrity": "sha512-/x68VkHLeTl3/Ll8IvxdwzhrT+IyKc52e/oyHhA2RwqPqswSnjVbSddfPRwAsJtbilMAPSRWwAlpxdYsSWOTKQ==", - "dev": true - }, - "node_modules/body/node_modules/raw-body": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", - "integrity": "sha512-WmJJU2e9Y6M5UzTOkHaM7xJGAPQD8PNzx3bAd2+uhZAim6wDk6dAZxPVYLF67XhbR4hmKGh33Lpmh4XWrCH5Mg==", - "dev": true, - "dependencies": { - "bytes": "1", - "string_decoder": "0.10" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/broadcast-channel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/broadcast-channel/-/broadcast-channel-3.7.0.tgz", - "integrity": "sha512-cIAKJXAxGJceNZGTZSBzMxzyOn72cVgPnKx4dc6LRjQgbaJUQqhy5rzL3zbMxkMWsGKkv2hSFkPRMEXfoMZ2Mg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.7.2", - "detect-node": "^2.1.0", - "js-sha3": "0.8.0", - "microseconds": "0.2.0", - "nano-time": "1.0.0", - "oblivious-set": "1.0.0", - "rimraf": "3.0.2", - "unload": "2.2.0" - } - }, - "node_modules/browserslist": { - "version": "4.21.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", - "integrity": "sha512-Nq8MFCSrnJXSc88yliwlzQe3qNe3VntIjhsArW9IJOEPSHNx23FalwApUVbzAWABLhYJJ7y8AynWI/XM8OdfjQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001359", - "electron-to-chromium": "^1.4.172", - "node-releases": "^2.0.5", - "update-browserslist-db": "^1.0.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", - "dev": true, - "dependencies": { - "callsites": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-callsite/node_modules/callsites": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", - "dev": true, - "dependencies": { - "caller-callsite": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", - "dev": true - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001364", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001364.tgz", - "integrity": "sha512-9O0xzV3wVyX0SlegIQ6knz+okhBB5pE0PC40MNdwcipjwpxoUEHL24uJ+gG42cgklPjfO5ZjZPme9FTSN3QT2Q==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", - "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==" - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dev": true, - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==" - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/colors": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", - "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/comment-parser": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.0.tgz", - "integrity": "sha512-hRpmWIKgzd81vn0ydoWoyPoALEOnF4wt8yKD35Ib1D6XC2siLiYaiqfGkYrunuKdsXGwpBpHU3+9r+RVw2NZfA==", - "dev": true, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/connect": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", - "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/continuable-cache": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookiejar": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.6.tgz", - "integrity": "sha512-X9IsySmsr1heROBZCpyEYhqJyU7CXNJoVxIlQ5bBb7DskYUx0mQ+g2f7yPYajceZeGJWHQbIfGB6j0hywV/ARQ==", - "dev": true - }, - "node_modules/core-js": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.23.4.tgz", - "integrity": "sha512-vjsKqRc1RyAJC3Ye2kYqgfdThb3zYnx9CrqoCcjMOENMtQPC7ZViBvlDxwYU/2z2NI/IPuiXw5mT4hWhddqjzQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.23.4.tgz", - "integrity": "sha512-RkSRPe+JYEoflcsuxJWaiMPhnZoFS51FcIxm53k4KzhISCBTmaGlto9dTIrYuk0hnJc3G6pKufAKepHnBq6B6Q==", - "dev": true, - "dependencies": { - "browserslist": "^4.21.1", - "semver": "7.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/core-js-pure": { - "version": "3.23.4", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.23.4.tgz", - "integrity": "sha512-lizxkcgj3XDmi7TUBFe+bQ1vNpD5E4t76BrBWI3HdUxdw/Mq1VF4CkiHzIKyieECKtcODK2asJttoofEeUKICQ==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/create-react-context": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/create-react-context/-/create-react-context-0.3.0.tgz", - "integrity": "sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==", - "dev": true, - "dependencies": { - "gud": "^1.0.0", - "warning": "^4.0.3" - }, - "peerDependencies": { - "prop-types": "^15.0.0", - "react": "^0.14.0 || ^15.0.0 || ^16.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", - "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", - "dependencies": { - "inherits": "^2.0.4", - "source-map": "^0.6.1", - "source-map-resolve": "^0.6.0" - } - }, - "node_modules/css-color-keywords": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/css-color-names": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/css-declaration-sorter": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", - "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.1", - "timsort": "^0.3.0" - }, - "engines": { - "node": ">4" - } - }, - "node_modules/css-declaration-sorter/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/css-declaration-sorter/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true - }, - "node_modules/css-to-react-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.0.0.tgz", - "integrity": "sha512-Ro1yETZA813eoyUp2GDBhG2j+YggidUmzO1/v9eYBKR2EHVEniE2MI/NqpTQ954BMpTPZFsGNPm46qFB9dpaPQ==", - "dev": true, - "dependencies": { - "camelize": "^1.0.0", - "css-color-keywords": "^1.0.0", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/css-to-react-native/node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css.escape": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", - "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", - "dev": true, - "dependencies": { - "cosmiconfig": "^5.0.0", - "cssnano-preset-default": "^4.0.8", - "is-resolvable": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", - "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", - "dev": true, - "dependencies": { - "css-declaration-sorter": "^4.0.1", - "cssnano-util-raw-cache": "^4.0.1", - "postcss": "^7.0.0", - "postcss-calc": "^7.0.1", - "postcss-colormin": "^4.0.3", - "postcss-convert-values": "^4.0.1", - "postcss-discard-comments": "^4.0.2", - "postcss-discard-duplicates": "^4.0.2", - "postcss-discard-empty": "^4.0.1", - "postcss-discard-overridden": "^4.0.1", - "postcss-merge-longhand": "^4.0.11", - "postcss-merge-rules": "^4.0.3", - "postcss-minify-font-values": "^4.0.2", - "postcss-minify-gradients": "^4.0.2", - "postcss-minify-params": "^4.0.2", - "postcss-minify-selectors": "^4.0.2", - "postcss-normalize-charset": "^4.0.1", - "postcss-normalize-display-values": "^4.0.2", - "postcss-normalize-positions": "^4.0.2", - "postcss-normalize-repeat-style": "^4.0.2", - "postcss-normalize-string": "^4.0.2", - "postcss-normalize-timing-functions": "^4.0.2", - "postcss-normalize-unicode": "^4.0.1", - "postcss-normalize-url": "^4.0.1", - "postcss-normalize-whitespace": "^4.0.2", - "postcss-ordered-values": "^4.1.2", - "postcss-reduce-initial": "^4.0.3", - "postcss-reduce-transforms": "^4.0.2", - "postcss-svgo": "^4.0.3", - "postcss-unique-selectors": "^4.0.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-preset-default/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/cssnano-preset-default/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/cssnano-util-get-arguments": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-get-match": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", - "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano-util-raw-cache/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/cssnano-util-raw-cache/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/cssnano-util-same-parent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", - "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/cssnano/node_modules/cosmiconfig": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", - "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", - "dev": true, - "dependencies": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.13.1", - "parse-json": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano/node_modules/import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", - "dev": true, - "dependencies": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano/node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/cssnano/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/cssnano/node_modules/resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dev": true, - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", - "integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==" - }, - "node_modules/custom-event": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", - "dev": true - }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true - }, - "node_modules/dargs": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-6.1.0.tgz", - "integrity": "sha512-5dVBvpBLBnPwSsYXqfybFyehMmC/EenKEcf23AhCTgTf48JFBbmJKqoZBsERDnjL0FyiVTYWdFsRfTLHxLyKdQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/date-format": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", - "integrity": "sha512-VS20KRyorrbMCQmpdl2hg5KaOUsda1RbnsJg461FfrcyCUg+pkd0b40BSW4niQyTheww4DBXQnS7HwSrKkipLw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" - }, - "node_modules/deep-for-each": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/deep-for-each/-/deep-for-each-3.0.0.tgz", - "integrity": "sha512-pPN+0f8jlnNP+z90qqOdxGghJU5XM6oBDhvAR+qdQzjCg5pk/7VPPvKK1GqoXEFkHza6ZS+Otzzvmr0g3VUaKw==", - "dev": true, - "dependencies": { - "lodash.isplainobject": "^4.0.6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "dev": true, - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "dev": true - }, - "node_modules/devtools-protocol": { - "version": "0.0.869402", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.869402.tgz", - "integrity": "sha512-VvlVYY+VDJe639yHs5PHISzdWTLL3Aw8rO4cvUtwvoxFd6FHbE4OpHHcde52M6096uYYazAmd4l0o5VuFRO2WA==", - "dev": true - }, - "node_modules/di": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", - "dev": true - }, - "node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz", - "integrity": "sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-accessibility-api": { - "version": "0.5.14", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz", - "integrity": "sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg==" - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", - "dev": true, - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dev": true, - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true - }, - "node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dev": true, - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "dev": true - }, - "node_modules/electron-to-chromium": { - "version": "1.4.185", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.185.tgz", - "integrity": "sha512-9kV/isoOGpKkBt04yYNaSWIBn3187Q5VZRtoReq8oz5NY/A4XmU6cAoqgQlDp7kKJCZMRjWZ8nsQyxfpFHvfyw==" - }, - "node_modules/emittery": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", - "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", - "dev": true, - "dependencies": { - "@types/cookie": "^0.4.1", - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.4.1", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.0.3", - "ws": "~8.2.3" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz", - "integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io/node_modules/ws": { - "version": "8.2.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", - "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", - "dev": true - }, - "node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "dev": true, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", - "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", - "dev": true, - "dependencies": { - "string-template": "~0.2.1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "regexp.prototype.flags": "^1.4.3", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "dev": true - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", - "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/escodegen": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", - "integrity": "sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A==", - "dev": true, - "dependencies": { - "esprima": "^2.7.1", - "estraverse": "^1.9.1", - "esutils": "^2.0.2", - "optionator": "^0.8.1" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=0.12.0" - }, - "optionalDependencies": { - "source-map": "~0.2.0" - } - }, - "node_modules/escodegen/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", - "integrity": "sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/escodegen/node_modules/levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/optionator": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", - "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, - "dependencies": { - "deep-is": "~0.1.3", - "fast-levenshtein": "~2.0.6", - "levn": "~0.3.0", - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2", - "word-wrap": "~1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/prelude-ls": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", - "integrity": "sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA==", - "dev": true, - "optional": true, - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen/node_modules/type-check": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, - "dependencies": { - "prelude-ls": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/eslint": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.19.0.tgz", - "integrity": "sha512-SXOPj3x9VKvPe81TjjUJCYlV4oJjQw68Uek+AM0X4p+33dj2HY5bpTZOgnQHcG2eAm1mtCU9uNMnJi7exU/kYw==", - "dev": true, - "dependencies": { - "@eslint/eslintrc": "^1.3.0", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.2", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.15.0", - "ignore": "^5.2.0", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "resolve": "^1.20.0" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-plugin-babel": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.3.1.tgz", - "integrity": "sha512-VsQEr6NH3dj664+EyxJwO4FCYm/00JhYb3Sk3ft8o+fpKuIfQ9TaW6uVUfvwMXHcf/lsnRIoyFPsLMyiWCSL/g==", - "dev": true, - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": ">=4.0.0" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.26.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", - "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.3", - "has": "^1.0.3", - "is-core-module": "^2.8.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.values": "^1.1.5", - "resolve": "^1.22.0", - "tsconfig-paths": "^3.14.1" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/eslint-plugin-jest": { - "version": "25.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-25.7.0.tgz", - "integrity": "sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/experimental-utils": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^4.0.0 || ^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "37.9.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-37.9.7.tgz", - "integrity": "sha512-8alON8yYcStY94o0HycU2zkLKQdcS+qhhOUNQpfONHHwvI99afbmfpYuPqf6PbLz5pLZldG3Te5I0RbAiTN42g==", - "dev": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.20.1", - "comment-parser": "1.3.0", - "debug": "^4.3.3", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "regextras": "^0.8.0", - "semver": "^7.3.5", - "spdx-expression-parse": "^3.0.1" - }, - "engines": { - "node": "^12 || ^14 || ^16 || ^17" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.0.tgz", - "integrity": "sha512-kTeLuIzpNhXL2CwLlc8AHI0aFRwWHcg483yepO9VQiHzM9bZwJdzTkzBszbuPrbgGmq2rlX/FaT2fJQsjUSHsw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.18.3", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.2", - "axobject-query": "^2.2.0", - "damerau-levenshtein": "^1.0.8", - "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.1", - "language-tags": "^1.0.5", - "minimatch": "^3.1.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=4.0" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-no-jquery": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", - "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", - "dev": true, - "peerDependencies": { - "eslint": ">=2.3.0" - } - }, - "node_modules/eslint-plugin-prettier": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.1.tgz", - "integrity": "sha512-htg25EUYUeIhKHXjOinK4BgCcDwtLHjqaxCDsMy5nbnUMkKFvIhMVCp+5GFUXQ4Nr8lBsPqtGAqBenbpFqAA2g==", - "dev": true, - "dependencies": { - "prettier-linter-helpers": "^1.0.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "eslint": ">=5.0.0", - "prettier": ">=1.13.0" - }, - "peerDependenciesMeta": { - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.30.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.30.1.tgz", - "integrity": "sha512-NbEvI9jtqO46yJA3wcRF9Mo0lF9T/jhdHqhCHXiXtD+Zcb98812wvokjWpU7Q4QH5edo6dmqrukxVvWWXHlsUg==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "array.prototype.flatmap": "^1.3.0", - "doctrine": "^2.1.0", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.5", - "object.fromentries": "^2.0.5", - "object.hasown": "^1.1.1", - "object.values": "^1.1.5", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.3", - "semver": "^6.3.0", - "string.prototype.matchall": "^4.0.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", - "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.4.tgz", - "integrity": "sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", - "dev": true, - "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "webpack": "^5.0.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.16.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.16.0.tgz", - "integrity": "sha512-A1lrQfpNF+McdPOnnFqY3kSN0AFTy485bTi1bkLk4mVPODIUEcSfhHgRqA+QdXPksrSTTztYXx37NFV+GpGk3Q==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/espree": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz", - "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==", - "dev": true, - "dependencies": { - "acorn": "^8.7.1", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", - "dev": true - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expect": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/expect/-/expect-27.2.5.tgz", - "integrity": "sha512-ZrO0w7bo8BgGoP/bLz+HDCI+0Hfei9jUSZs5yI/Wyn9VkG9w8oJ7rHRgYj+MA7yqqFa0IwHA3flJzZtYugShJA==", - "dev": true, - "dependencies": { - "@jest/types": "^27.2.5", - "ansi-styles": "^5.0.0", - "jest-get-type": "^27.0.6", - "jest-matcher-utils": "^27.2.5", - "jest-message-util": "^27.2.5", - "jest-regex-util": "^27.0.6" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/expect/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/expect/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/expect/node_modules/jest-regex-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", - "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", - "dev": true, - "dependencies": { - "kind-of": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/kind-of": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extract-zip": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", - "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-diff": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", - "dev": true, - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.1.tgz", - "integrity": "sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg==", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-sync-cmp": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha512-z8Nrwhi6wzxNMIbxlrTzuUW6KWuKkogZ/7OdDVq+0+kxn77KUH1nipx8iU6suqkHqc4y6n7a9A8IpmxY/pTjWg==", - "dev": true, - "dependencies": { - "glob": "~5.0.0" - }, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/findup-sync/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.6.tgz", - "integrity": "sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ==", - "dev": true - }, - "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/form-data": { - "version": "1.0.0-rc3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc3.tgz", - "integrity": "sha512-Z5JWXWsFDI8x73Rt/Dc7SK/EvKBzudhqIVBtEhcAhtoevCTqO3YJmctGBLzT0Ggg39xFcefkXt00t1TYLz6D0w==", - "dev": true, - "dependencies": { - "async": "^1.4.0", - "combined-stream": "^1.0.5", - "mime-types": "^2.1.3" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/form-data/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "node_modules/formidable": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz", - "integrity": "sha512-95MFT5qipMvUiesmuvGP1BI4hh5XWCzyTapiNJ/k8JBQda7rPy7UCWYItz2uZEdTgGNy1eInjzlL9Wx1O9fedg==", - "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "dependencies": { - "globule": "^1.0.0" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getobject": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-1.0.2.tgz", - "integrity": "sha512-2zblDBaFcb3rB4rF77XVnuINOE2h2k/OnqXAiy0IrTxUfV1iFp3la33oAQVY9pCpWU268WFYVt2t71hlMuLsOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalyzer": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", - "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", - "dev": true - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globrex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", - "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", - "dev": true - }, - "node_modules/globule": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", - "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", - "dev": true, - "dependencies": { - "glob": "~7.1.1", - "lodash": "^4.17.21", - "minimatch": "~3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/grunt": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.5.3.tgz", - "integrity": "sha512-mKwmo4X2d8/4c/BmcOETHek675uOqw0RuA/zy12jaspWqvTp4+ZeQF1W+OTpcbncnaBsfbQJ6l0l4j+Sn/GmaQ==", - "dev": true, - "dependencies": { - "dateformat": "~3.0.3", - "eventemitter2": "~0.4.13", - "exit": "~0.1.2", - "findup-sync": "~0.3.0", - "glob": "~7.1.6", - "grunt-cli": "~1.4.3", - "grunt-known-options": "~2.0.0", - "grunt-legacy-log": "~3.0.0", - "grunt-legacy-util": "~2.0.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.14.0", - "minimatch": "~3.0.4", - "mkdirp": "~1.0.4", - "nopt": "~3.0.6", - "rimraf": "~3.0.2" - }, - "bin": { - "grunt": "bin/grunt" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-banner": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/grunt-banner/-/grunt-banner-0.6.0.tgz", - "integrity": "sha512-50H/Wxydlf+ifve5Jzcz9oB4jr6oCGEPyfhEDUsl2NEMX80cWUJqVMXSHBr2n9Rb3nd+rRSKeQzqNxWrqoyQ1A==", - "dev": true, - "dependencies": { - "chalk": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "grunt": ">=0.4.0" - } - }, - "node_modules/grunt-banner/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-banner/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-banner/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-banner/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-banner/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-banner/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-bumpup": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/grunt-bumpup/-/grunt-bumpup-0.6.3.tgz", - "integrity": "sha512-WRIqlm0HrwfwaPbJMpOphKKsqdIjEH8emCKQKbx6/BD6H4PyYggGCV3c+RaqydC9BuJ3DsXYcpi77yhDdkGwlg==", - "dev": true, - "dependencies": { - "moment": "^2.8.3", - "semver": "^4.0.3" - }, - "engines": { - "node": ">=0.8.0" - }, - "peerDependencies": { - "grunt": ">=0.4.0" - } - }, - "node_modules/grunt-bumpup/node_modules/semver": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/grunt-checktextdomain": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/grunt-checktextdomain/-/grunt-checktextdomain-1.0.1.tgz", - "integrity": "sha512-WX6EMOnvrhj8MDqmWJAlZRpM1rE/Mmqy9DCYYeWB1pFV+JotP6pNx2uO58+uHFOEFTcoridr4ECJ6aqGnLmgJw==", - "dev": true, - "dependencies": { - "chalk": "~0.2.1", - "text-table": "~0.2.0" - }, - "engines": { - "node": ">= 0.8.0" - }, - "peerDependencies": { - "grunt": ">=0.4.1" - } - }, - "node_modules/grunt-checktextdomain/node_modules/ansi-styles": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz", - "integrity": "sha512-YyQBeLj0juxUC9uUXRpQ1ZAzPT1dnsn5vVeJLHYFq4Ct1p0rymUSyvckKCXCH9I0bh3jWDIETA5nXIaZVKlDyA==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-checktextdomain/node_modules/chalk": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz", - "integrity": "sha512-nmVapomwGksziCuynboy7I+dtW4ytIdqXPlrfY/ySx8l8EqFRGHyA04q6NMNpOri8XliGUGwXyfScVl48zFHbw==", - "dev": true, - "dependencies": { - "ansi-styles": "~0.2.0", - "has-color": "~0.1.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-cli": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.4.3.tgz", - "integrity": "sha512-9Dtx/AhVeB4LYzsViCjUQkd0Kw0McN2gYpdmGYKtE2a5Yt7v1Q+HYZVWhqXc/kGnxlMtqKDxSwotiGeFmkrCoQ==", - "dependencies": { - "grunt-known-options": "~2.0.0", - "interpret": "~1.1.0", - "liftup": "~3.0.1", - "nopt": "~4.0.1", - "v8flags": "~3.2.0" - }, - "bin": { - "grunt": "bin/grunt" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-cli/node_modules/nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", - "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/grunt-contrib-clean": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-2.0.1.tgz", - "integrity": "sha512-uRvnXfhiZt8akb/ZRDHJpQQtkkVkqc/opWO4Po/9ehC2hPxgptB9S6JHDC/Nxswo4CJSM0iFPT/Iym3cEMWzKA==", - "dev": true, - "dependencies": { - "async": "^3.2.3", - "rimraf": "^2.6.2" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "grunt": ">=0.4.5" - } - }, - "node_modules/grunt-contrib-clean/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/grunt-contrib-copy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "integrity": "sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA==", - "dev": true, - "dependencies": { - "chalk": "^1.1.1", - "file-sync-cmp": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-copy/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-contrib-qunit": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-6.2.0.tgz", - "integrity": "sha512-M48jMvwutP2yv+xxxsuSsKOmyy1mXvakswCUJqyPe6OYa4mKvGKjY4c3Ujw+1HnhXnmJQIqIWiQ8U5yLW+sfiA==", - "dev": true, - "dependencies": { - "eventemitter2": "^6.4.2", - "p-each-series": "^2.1.0", - "puppeteer": "^9.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/grunt-contrib-qunit/node_modules/eventemitter2": { - "version": "6.4.6", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.6.tgz", - "integrity": "sha512-OHqo4wbHX5VbvlbB6o6eDwhYmiTjrpWACjF8Pmof/GTD6rdBNdZFNck3xlhqOiQFGCOoq3uzHvA0cQpFHIGVAQ==", - "dev": true - }, - "node_modules/grunt-contrib-sass": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-sass/-/grunt-contrib-sass-2.0.0.tgz", - "integrity": "sha512-RxZ3dlZZTX4YBPu2zMu84NPYgJ2AYAlIdEqlBaixNVyLNbgvJBGUr5Gi0ec6IiOQbt/I/z7uZVN9HsRxgznIRw==", - "dev": true, - "dependencies": { - "async": "^2.6.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "dargs": "^6.0.0", - "which": "^1.3.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-contrib-sass/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-contrib-sass/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/grunt-contrib-sass/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-contrib-sass/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/grunt-contrib-sass/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/grunt-contrib-sass/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/grunt-contrib-sass/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-contrib-sass/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-contrib-sass/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-contrib-sass/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/grunt-contrib-sass/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-sass/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-sass/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-contrib-sass/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/grunt-contrib-watch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-1.1.0.tgz", - "integrity": "sha512-yGweN+0DW5yM+oo58fRu/XIRrPcn3r4tQx+nL7eMRwjpvk+rQY6R8o94BPK0i2UhTg9FN21hS+m8vR8v9vXfeg==", - "dev": true, - "dependencies": { - "async": "^2.6.0", - "gaze": "^1.1.0", - "lodash": "^4.17.10", - "tiny-lr": "^1.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-contrib-watch/node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/grunt-karma": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/grunt-karma/-/grunt-karma-4.0.2.tgz", - "integrity": "sha512-4+iBBkXZjHHMDAG5kpHCdDUqlSEBJ6sqouLMRf0p+QB8wGMs300DtaCQphHqd7pM3gpXoGVT3yRRsT7KOZpJMA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.10" - }, - "peerDependencies": { - "grunt": ">=0.4.x", - "karma": "^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/grunt-known-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-2.0.0.tgz", - "integrity": "sha512-GD7cTz0I4SAede1/+pAbmJRG44zFLPipVtdL9o3vqx9IEyb7b4/Y3s7r6ofI3CchR5GvYJ+8buCSioDv5dQLiA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/grunt-legacy-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-3.0.0.tgz", - "integrity": "sha512-GHZQzZmhyq0u3hr7aHW4qUH0xDzwp2YXldLPZTCjlOeGscAOWWPftZG3XioW8MasGp+OBRIu39LFx14SLjXRcA==", - "dev": true, - "dependencies": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.19" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/grunt-legacy-log-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.1.0.tgz", - "integrity": "sha512-lwquaPXJtKQk0rUM1IQAop5noEpwFqOXasVoedLeNzaibf/OPWjKYvvdqnEHNmU+0T0CaReAXIbGo747ZD+Aaw==", - "dev": true, - "dependencies": { - "chalk": "~4.1.0", - "lodash": "~4.17.19" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-legacy-log/node_modules/colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", - "dev": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/grunt-legacy-util": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-2.0.1.tgz", - "integrity": "sha512-2bQiD4fzXqX8rhNdXkAywCadeqiPiay0oQny77wA2F3WF4grPJXCvAcyoWUJV+po/b15glGkxuSiQCK299UC2w==", - "dev": true, - "dependencies": { - "async": "~3.2.0", - "exit": "~0.1.2", - "getobject": "~1.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.21", - "underscore.string": "~3.3.5", - "which": "~2.0.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/grunt-postcss": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/grunt-postcss/-/grunt-postcss-0.9.0.tgz", - "integrity": "sha512-lglLcVaoOIqH0sFv7RqwUKkEFGQwnlqyAKbatxZderwZGV1nDyKHN7gZS9LUiTx1t5GOvRBx0BEalHMyVwFAIA==", - "dev": true, - "dependencies": { - "chalk": "^2.1.0", - "diff": "^3.0.0", - "postcss": "^6.0.11" - }, - "engines": { - "node": ">= 0.12.0" - }, - "peerDependencies": { - "grunt": ">=0.4.5" - } - }, - "node_modules/grunt-postcss/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-postcss/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-postcss/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/grunt-postcss/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/grunt-postcss/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/grunt-postcss/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-postcss/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/grunt-release": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/grunt-release/-/grunt-release-0.14.0.tgz", - "integrity": "sha512-1dvZr1op1KGzCba50o/J0Ymdqjn89ppLPQe500pwksrYs8OpJtj3ZIr5rfKY7eQC2oJo+wSCsimece/6nUpnLA==", - "dev": true, - "dependencies": { - "q": "^1.4.1", - "semver": "^5.1.0", - "shelljs": "^0.7.0", - "superagent": "^1.8.3" - }, - "engines": { - "node": ">=0.10" - }, - "peerDependencies": { - "grunt": ">=1.0.1" - } - }, - "node_modules/grunt-release/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/grunt-sass": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.1.0.tgz", - "integrity": "sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A==", - "dev": true, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "grunt": ">=1" - } - }, - "node_modules/grunt-shell": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/grunt-shell/-/grunt-shell-4.0.0.tgz", - "integrity": "sha512-dHFy8VZDfWGYLTeNvIHze4PKXGvIlDWuN0UE7hUZstTQeiEyv1VmW1MaDYQ3X5tE3bCi3bEia1gGKH8z/f1czQ==", - "dev": true, - "dependencies": { - "chalk": "^3.0.0", - "npm-run-path": "^2.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - }, - "peerDependencies": { - "grunt": ">=1" - } - }, - "node_modules/grunt-shell/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/grunt-text-replace": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz", - "integrity": "sha512-A4dFGpOaD/TQpeOlDK/zP962X1qG7KcOqPiSXOWOIeAKMzzpoDJYZ8Sz56iazI5+kTqeTa+IaEEl5c4sk+QN+Q==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/grunt-webpack": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/grunt-webpack/-/grunt-webpack-5.0.0.tgz", - "integrity": "sha512-C7emzVIGJhZ5V5ZYjylr9sDD9PE9Dh/55NaSzP2P2dhif+m/1gHbjDZQ7PDzguyuzwBz4Qc8voQHR06FSp4CKg==", - "dev": true, - "dependencies": { - "deep-for-each": "^3.0.0", - "lodash": "^4.17.19" - }, - "engines": { - "node": ">=12.13.0" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/grunt-wp-readme-to-markdown-with-extra": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/grunt-wp-readme-to-markdown-with-extra/-/grunt-wp-readme-to-markdown-with-extra-2.2.0.tgz", - "integrity": "sha512-82c6H9UbcSjUrDa3Ld2hIV0C1vqEhB5Toof8370uvgOwfOSV/6PJrmC/XTzky1t5lfwct1XfF2LRvB8v2ff26w==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - }, - "peerDependencies": { - "grunt": ">=0.4.0" - } - }, - "node_modules/gud": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gud/-/gud-1.0.0.tgz", - "integrity": "sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==", - "dev": true - }, - "node_modules/handlebars": { - "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.0", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" - }, - "engines": { - "node": ">=0.4.7" - }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-ansi/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-color": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hex-color-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", - "dev": true - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hoist-non-react-statics/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/hsl-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", - "dev": true - }, - "node_modules/hsla-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", - "dev": true - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "dev": true - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dev": true, - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "9.0.15", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.15.tgz", - "integrity": "sha512-2eB/sswms9AEUSkOm4SbV5Y7Vmt/bKRwByd52jfLkW4OLYeaTP3EEiJ9agqU0O/tq6Dk62Zfj+TJSqfm1rLVGQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/immutable": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", - "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", - "dev": true - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==" - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ip": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", - "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", - "dev": true - }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-absolute-url": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-color-stop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", - "dev": true, - "dependencies": { - "css-color-names": "^0.0.4", - "hex-color-regex": "^1.1.0", - "hsl-regex": "^1.0.0", - "hsla-regex": "^1.0.0", - "rgb-regex": "^1.0.1", - "rgba-regex": "^1.0.0" - } - }, - "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "dev": true, - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", - "dev": true, - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", - "deprecated": "This module is no longer maintained, try this instead:\n npm i nyc\nVisit https://istanbul.js.org/integrations for other alternatives.", - "dev": true, - "dependencies": { - "abbrev": "1.0.x", - "async": "1.x", - "escodegen": "1.8.x", - "esprima": "2.7.x", - "glob": "^5.0.15", - "handlebars": "^4.0.1", - "js-yaml": "3.x", - "mkdirp": "0.5.x", - "nopt": "3.x", - "once": "1.x", - "resolve": "1.1.x", - "supports-color": "^3.1.0", - "which": "^1.1.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "istanbul": "lib/cli.js" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.0.tgz", - "integrity": "sha512-6Lthe1hqXHBNsqvgDzGO6l03XNeu3CrG4RqQ1KM9+l5+jNGpEJfIELx1NS3SEHmJQA8np/u+E4EPRKRiu6m19A==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz", - "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul/node_modules/abbrev": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", - "dev": true - }, - "node_modules/istanbul/node_modules/async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", - "dev": true - }, - "node_modules/istanbul/node_modules/esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul/node_modules/glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", - "dev": true, - "dependencies": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/istanbul/node_modules/has-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/istanbul/node_modules/resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", - "dev": true - }, - "node_modules/istanbul/node_modules/supports-color": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", - "dev": true, - "dependencies": { - "has-flag": "^1.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/istanbul/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/jest": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest/-/jest-28.1.2.tgz", - "integrity": "sha512-Tuf05DwLeCh2cfWCQbcz9UxldoDyiR1E9Igaei5khjonKncYdc6LDfynKCEWozK0oLE3GD+xKAo2u8x/0s6GOg==", - "dependencies": { - "@jest/core": "^28.1.2", - "@jest/types": "^28.1.1", - "import-local": "^3.0.2", - "jest-cli": "^28.1.2" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-28.0.2.tgz", - "integrity": "sha512-QX9u+5I2s54ZnGoMEjiM2WeBvJR2J7w/8ZUmH2um/WLAuGAYFQcsVXY9+1YL6k0H/AGUdH8pXUAv6erDqEsvIA==", - "dependencies": { - "execa": "^5.0.0", - "throat": "^6.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-28.1.2.tgz", - "integrity": "sha512-E2vdPIJG5/69EMpslFhaA46WkcrN74LI5V/cSJ59L7uS8UNoXbzTxmwhpi9XrIL3zqvMt5T0pl5k2l2u2GwBNQ==", - "dependencies": { - "@jest/environment": "^28.1.2", - "@jest/expect": "^28.1.2", - "@jest/test-result": "^28.1.1", - "@jest/types": "^28.1.1", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^28.1.1", - "jest-matcher-utils": "^28.1.1", - "jest-message-util": "^28.1.1", - "jest-runtime": "^28.1.2", - "jest-snapshot": "^28.1.2", - "jest-util": "^28.1.1", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3", - "throat": "^6.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus/node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-diff": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", - "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-matcher-utils": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", - "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-circus/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-cli": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-28.1.2.tgz", - "integrity": "sha512-l6eoi5Do/IJUXAFL9qRmDiFpBeEJAnjJb1dcd9i/VWfVWbp3mJhuH50dNtX67Ali4Ecvt4eBkWb4hXhPHkAZTw==", - "dependencies": { - "@jest/core": "^28.1.2", - "@jest/test-result": "^28.1.1", - "@jest/types": "^28.1.1", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^28.1.2", - "jest-util": "^28.1.1", - "jest-validate": "^28.1.1", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-28.1.2.tgz", - "integrity": "sha512-g6EfeRqddVbjPVBVY4JWpUY4IvQoFRIZcv4V36QkqzE0IGhEC/VkugFeBMAeUE7PRgC8KJF0yvJNDeQRbamEVA==", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^28.1.1", - "@jest/types": "^28.1.1", - "babel-jest": "^28.1.2", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^28.1.2", - "jest-environment-node": "^28.1.2", - "jest-get-type": "^28.0.2", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.1", - "jest-runner": "^28.1.2", - "jest-util": "^28.1.1", - "jest-validate": "^28.1.1", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-config/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-diff": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz", - "integrity": "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^27.5.1", - "jest-get-type": "^27.5.1", - "pretty-format": "^27.5.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/jest-docblock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-28.1.1.tgz", - "integrity": "sha512-3wayBVNiOYx0cwAbl9rwm5kKFP8yHH3d/fkEaL02NPTkDojPtheGB7HZSFY4wzX+DxyrvhXz0KSCVksmCknCuA==", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-each": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-28.1.1.tgz", - "integrity": "sha512-A042rqh17ZvEhRceDMi784ppoXR7MWGDEKTXEZXb4svt0eShMZvijGxzKsx+yIjeE8QYmHPrnHiTSQVhN4nqaw==", - "dependencies": { - "@jest/types": "^28.1.1", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "jest-util": "^28.1.1", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-each/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.2.tgz", - "integrity": "sha512-oYsZz9Qw27XKmOgTtnl0jW7VplJkN2oeof+SwAwKFQacq3CLlG9u4kTGuuLWfvu3J7bVutWlrbEQMOCL/jughw==", - "dependencies": { - "@jest/environment": "^28.1.2", - "@jest/fake-timers": "^28.1.2", - "@jest/types": "^28.1.1", - "@types/node": "*", - "jest-mock": "^28.1.1", - "jest-util": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz", - "integrity": "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==", - "dev": true, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-28.1.1.tgz", - "integrity": "sha512-ZrRSE2o3Ezh7sb1KmeLEZRZ4mgufbrMwolcFHNRSjKZhpLa8TdooXOOFlSwoUzlbVs1t0l7upVRW2K7RWGHzbQ==", - "dependencies": { - "@jest/types": "^28.1.1", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^28.0.2", - "jest-util": "^28.1.1", - "jest-worker": "^28.1.1", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-28.1.1.tgz", - "integrity": "sha512-4jvs8V8kLbAaotE+wFR7vfUGf603cwYtFf1/PYEsyX2BAjSzj8hQSVTP6OWzseTl0xL6dyHuKs2JAks7Pfubmw==", - "dependencies": { - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-leak-detector/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.2.5.tgz", - "integrity": "sha512-qNR/kh6bz0Dyv3m68Ck2g1fLW5KlSOUNcFQh87VXHZwWc/gY6XwnKofx76Qytz3x5LDWT09/2+yXndTkaG4aWg==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^27.2.5", - "jest-get-type": "^27.0.6", - "pretty-format": "^27.2.5" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-matcher-utils/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/jest-message-util": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", - "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^27.5.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^27.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/@jest/types": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", - "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^16.0.0", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/@types/yargs": { - "version": "16.0.4", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.4.tgz", - "integrity": "sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/jest-message-util/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", - "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" - } - }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true - }, - "node_modules/jest-mock": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.1.tgz", - "integrity": "sha512-bDCb0FjfsmKweAvE09dZT59IMkzgN0fYBH6t5S45NoJfd2DHkS3ySG2K+hucortryhO3fVuXdlxWcbtIuV/Skw==", - "dependencies": { - "@jest/types": "^28.1.1", - "@types/node": "*" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", - "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-28.1.1.tgz", - "integrity": "sha512-/d1UbyUkf9nvsgdBildLe6LAD4DalgkgZcKd0nZ8XUGPyA/7fsnaQIlKVnDiuUXv/IeZhPEDrRJubVSulxrShA==", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.1", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^28.1.1", - "jest-validate": "^28.1.1", - "resolve": "^1.20.0", - "resolve.exports": "^1.1.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-28.1.2.tgz", - "integrity": "sha512-OXw4vbOZuyRTBi3tapWBqdyodU+T33ww5cPZORuTWkg+Y8lmsxQlVu3MWtJh6NMlKRTHQetF96yGPv01Ye7Mbg==", - "dependencies": { - "jest-regex-util": "^28.0.2", - "jest-snapshot": "^28.1.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-28.1.2.tgz", - "integrity": "sha512-6/k3DlAsAEr5VcptCMdhtRhOoYClZQmxnVMZvZ/quvPGRpN7OBQYPIC32tWSgOnbgqLXNs5RAniC+nkdFZpD4A==", - "dependencies": { - "@jest/console": "^28.1.1", - "@jest/environment": "^28.1.2", - "@jest/test-result": "^28.1.1", - "@jest/transform": "^28.1.2", - "@jest/types": "^28.1.1", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "graceful-fs": "^4.2.9", - "jest-docblock": "^28.1.1", - "jest-environment-node": "^28.1.2", - "jest-haste-map": "^28.1.1", - "jest-leak-detector": "^28.1.1", - "jest-message-util": "^28.1.1", - "jest-resolve": "^28.1.1", - "jest-runtime": "^28.1.2", - "jest-util": "^28.1.1", - "jest-watcher": "^28.1.1", - "jest-worker": "^28.1.1", - "source-map-support": "0.5.13", - "throat": "^6.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-28.1.2.tgz", - "integrity": "sha512-i4w93OsWzLOeMXSi9epmakb2+3z0AchZtUQVF1hesBmcQQy4vtaql5YdVe9KexdJaVRyPDw8DoBR0j3lYsZVYw==", - "dependencies": { - "@jest/environment": "^28.1.2", - "@jest/fake-timers": "^28.1.2", - "@jest/globals": "^28.1.2", - "@jest/source-map": "^28.1.2", - "@jest/test-result": "^28.1.1", - "@jest/transform": "^28.1.2", - "@jest/types": "^28.1.1", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "execa": "^5.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^28.1.1", - "jest-message-util": "^28.1.1", - "jest-mock": "^28.1.1", - "jest-regex-util": "^28.0.2", - "jest-resolve": "^28.1.1", - "jest-snapshot": "^28.1.2", - "jest-util": "^28.1.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-runtime/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "28.1.2", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-28.1.2.tgz", - "integrity": "sha512-wzrieFttZYfLvrCVRJxX+jwML2YTArOUqFpCoSVy1QUapx+LlV9uLbV/mMEhYj4t7aMeE9aSQFHSvV/oNoDAMA==", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^28.1.1", - "@jest/transform": "^28.1.2", - "@jest/types": "^28.1.1", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^28.1.1", - "graceful-fs": "^4.2.9", - "jest-diff": "^28.1.1", - "jest-get-type": "^28.0.2", - "jest-haste-map": "^28.1.1", - "jest-matcher-utils": "^28.1.1", - "jest-message-util": "^28.1.1", - "jest-util": "^28.1.1", - "natural-compare": "^1.4.0", - "pretty-format": "^28.1.1", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/diff-sequences": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-28.1.1.tgz", - "integrity": "sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/expect": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/expect/-/expect-28.1.1.tgz", - "integrity": "sha512-/AANEwGL0tWBwzLNOvO0yUdy2D52jVdNXppOqswC49sxMN2cPWsGCQdzuIf9tj6hHoBQzNvx75JUYuQAckPo3w==", - "dependencies": { - "@jest/expect-utils": "^28.1.1", - "jest-get-type": "^28.0.2", - "jest-matcher-utils": "^28.1.1", - "jest-message-util": "^28.1.1", - "jest-util": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-diff": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-28.1.1.tgz", - "integrity": "sha512-/MUUxeR2fHbqHoMMiffe/Afm+U8U4olFRJ0hiVG2lZatPJcnGxx292ustVu7bULhjV65IYMxRdploAKLbcrsyg==", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-matcher-utils": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz", - "integrity": "sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw==", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^28.1.1", - "jest-get-type": "^28.0.2", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/jest-message-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.1.tgz", - "integrity": "sha512-xoDOOT66fLfmTRiqkoLIU7v42mal/SqwDKvfmfiWAdJMSJiU+ozgluO7KbvoAgiwIrrGZsV7viETjc8GNrA/IQ==", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^28.1.1", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^28.1.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.1.tgz", - "integrity": "sha512-FktOu7ca1DZSyhPAxgxB6hfh2+9zMoJ7aEQA759Z6p45NuO8mWcqujH+UdHlCm/V6JTWwDztM2ITCzU1ijJAfw==", - "dependencies": { - "@jest/types": "^28.1.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-validate": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-28.1.1.tgz", - "integrity": "sha512-Kpf6gcClqFCIZ4ti5++XemYJWUPCFUW+N2gknn+KgnDf549iLul3cBuKVe1YcWRlaF8tZV8eJCap0eECOEE3Ug==", - "dependencies": { - "@jest/types": "^28.1.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^28.0.2", - "leven": "^3.1.0", - "pretty-format": "^28.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-validate/node_modules/jest-get-type": { - "version": "28.0.2", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-28.0.2.tgz", - "integrity": "sha512-ioj2w9/DxSYHfOm5lJKCdcAmPJzQXmbM/Url3rhlghrPvT3tt+7a/+oXc9azkKmLvoiXjtV83bEWqi+vs5nlPA==", - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-watcher": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.1.tgz", - "integrity": "sha512-RQIpeZ8EIJMxbQrXpJQYIIlubBnB9imEHsxxE41f54ZwcqWLysL/A0ZcdMirf+XsMn3xfphVQVV4EW0/p7i7Ug==", - "dependencies": { - "@jest/test-result": "^28.1.1", - "@jest/types": "^28.1.1", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.10.2", - "jest-util": "^28.1.1", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-worker": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.1.tgz", - "integrity": "sha512-Au7slXB08C6h+xbJPp7VIb6U0XX5Kc9uel/WFc6/rcTzGiaVCBRngBExSYuXSLFPULPSYU3cJ3ybS988lNFQhQ==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jpeg-js": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.3.tgz", - "integrity": "sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==", - "dev": true - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-2.2.5.tgz", - "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.2.tgz", - "integrity": "sha512-4ZCADZHRkno244xlNnn4AOG6sRQ7iBZ5BbgZ4vW4y5IZw7cVUD1PPeblm1xx/nfmMxPdt/LHsXZW8z/j58+l9Q==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.5", - "object.assign": "^4.1.2" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/karma": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.0.tgz", - "integrity": "sha512-s8m7z0IF5g/bS5ONT7wsOavhW4i4aFkzD4u4wgzAQWT4HGUeWI3i21cK2Yz6jndMAeHETp5XuNsRoyGJZXVd4w==", - "dev": true, - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.4.1", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", - "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", - "dev": true, - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-chrome-launcher/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", - "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage-istanbul-reporter": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz", - "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^3.0.6", - "istanbul-reports": "^3.0.2", - "minimatch": "^3.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/mattlewis92" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/istanbul-lib-source-maps": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz", - "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^2.0.5", - "make-dir": "^2.1.0", - "rimraf": "^2.6.3", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/istanbul-lib-source-maps/node_modules/istanbul-lib-coverage": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", - "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/karma-coverage-istanbul-reporter/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/karma-fail-fast-reporter": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/karma-fail-fast-reporter/-/karma-fail-fast-reporter-1.0.5.tgz", - "integrity": "sha512-B0QzqOCpL1jl0stEvgjW8MI0xE1suQQxqF4EXjL2dF4HnRGz20Qcm2C3DWR6879dBYoV0yKcCqoZaOdEpmuntg==", - "dev": true, - "peerDependencies": { - "karma": ">=1.4.0" - } - }, - "node_modules/karma-fixture": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/karma-fixture/-/karma-fixture-0.2.6.tgz", - "integrity": "sha512-7jVtBtUclZ7r6BIn5YK3BQO6Xkgyo/v3K51BwXde9Fn884lHV0Gy+UhCzJxsioMh1jCRr0NO+Mkm6EsxdVxRKA==", - "dev": true - }, - "node_modules/karma-html2js-preprocessor": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/karma-html2js-preprocessor/-/karma-html2js-preprocessor-1.1.0.tgz", - "integrity": "sha512-SiaPXNxIQjzBnxbi0mOT24zCzjFWBGaxWM/DqnEhp4WbI5kNpiZ35Jb/h7etrob+wiDSuDkltCuxE/fMSayqeQ==", - "dev": true, - "peerDependencies": { - "karma": ">=0.9" - } - }, - "node_modules/karma-qunit": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/karma-qunit/-/karma-qunit-4.1.2.tgz", - "integrity": "sha512-taTPqBeHCOlkeKTSzQgIKzAUb79vw3rfbCph+xwwh63tyGjNtljwx91VArhIM9DzIIR3gB9G214wQg+oXI9ycw==", - "dev": true, - "peerDependencies": { - "karma": "^4.0.0 || ^5.0.0 || ^6.0.0", - "qunit": "^2.0.0" - } - }, - "node_modules/karma-remap-coverage": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/karma-remap-coverage/-/karma-remap-coverage-0.1.5.tgz", - "integrity": "sha512-FM5h8eHcHbMMR+2INBUxD+4+wUbkCnobfn5uWprkLyj6Xcm2MRFQOuAJn9h2H13nNso6rk+QoNpHd5xCevlPOw==", - "dev": true, - "dependencies": { - "remap-istanbul": "^0.10" - }, - "engines": { - "node": ">=4.2.0" - }, - "peerDependencies": { - "karma-coverage": ">=0.5.4" - } - }, - "node_modules/karma/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/karma/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true - }, - "node_modules/language-tags": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", - "dev": true, - "dependencies": { - "language-subtag-registry": "~0.3.2" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/liftup": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/liftup/-/liftup-3.0.1.tgz", - "integrity": "sha512-yRHaiQDizWSzoXk3APcA71eOI/UuhEkNN9DiW2Tt44mhYzX4joFoCZlxsSOF7RyeLlfqzFLQI1ngFq3ggMPhOw==", - "dependencies": { - "extend": "^3.0.2", - "findup-sync": "^4.0.0", - "fined": "^1.2.0", - "flagged-respawn": "^1.0.1", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.1", - "rechoir": "^0.7.0", - "resolve": "^1.19.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/liftup/node_modules/findup-sync": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz", - "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==", - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^4.0.2", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/livereload-js": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", - "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", - "dev": true - }, - "node_modules/load-grunt-tasks": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/load-grunt-tasks/-/load-grunt-tasks-5.1.0.tgz", - "integrity": "sha512-oNj0Jlka1TsfDe+9He0kcA1cRln+TMoTsEByW7ij6kyktNLxBKJtslCFEvFrLC2Dj0S19IWJh3fOCIjLby2Xrg==", - "dev": true, - "dependencies": { - "arrify": "^2.0.1", - "multimatch": "^4.0.0", - "pkg-up": "^3.1.0", - "resolve-pkg": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "grunt": ">=1" - } - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true, - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", - "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": true - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "dev": true - }, - "node_modules/log4js": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.6.0.tgz", - "integrity": "sha512-3v8R7fd45UB6THucSht6wN2/7AZEruQbXdjygPZcxt5TA/msO6si9CN5MefUuKXbYnJHTBnYcx4famwcyQd+sA==", - "dev": true, - "dependencies": { - "date-format": "^4.0.11", - "debug": "^4.3.4", - "flatted": "^3.2.5", - "rfdc": "^1.3.0", - "streamroller": "^3.1.1" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/match-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.1.tgz", - "integrity": "sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.12.5", - "remove-accents": "0.4.2" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/microseconds": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/microseconds/-/microseconds-0.2.0.tgz", - "integrity": "sha512-n7DHHMjR1avBbSpsTBj6fmMGh2AGrifVV4e+WYc3Q9lO+xnSZ3NyhcBND3vzzatt05LFhoKFRxrIyklmLlUtyA==", - "dev": true - }, - "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", - "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", - "dev": true, - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "dev": true, - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nano-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", - "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.16" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" - }, - "node_modules/node-watch": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/node-watch/-/node-watch-0.7.3.tgz", - "integrity": "sha512-3l4E8uMPY1HdMMryPRUAl+oIHtXtyiTlIiESNSVSNxcPfzAFzeTbXFQkZfAwBbo0B1qMSG8nUABx+Gd+YrbKrQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", - "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", - "dev": true, - "dependencies": { - "path-key": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dev": true, - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/num2fraction": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", - "dev": true - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.4.tgz", - "integrity": "sha512-sccv3L/pMModT6dJAYF3fzGMVcb38ysQ0tEE6ixv2yXJDtEIPph268OlAdJj5/qZMZDq2g/jqvwppt36uS/uQQ==", - "dev": true, - "dependencies": { - "array.prototype.reduce": "^1.0.4", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.hasown": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.1.tgz", - "integrity": "sha512-LYLe4tivNQzq4JdaWW6WO3HMZZJWzkkH8fnI6EebWl0VZth2wL2Lovm74ep2/gZzlaTdV62JZHEqHQ2yVn8Q/A==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/oblivious-set": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/oblivious-set/-/oblivious-set-1.0.0.tgz", - "integrity": "sha512-z+pI07qxo4c2CulUHCDf9lcqDlMSo72N/4rLUpRXf6fu+q8vjt8y0xS+Tlf8NTJDdTXHbdeO1n3MlbctwEoXZw==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "dev": true, - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "dev": true, - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "node_modules/p-each-series": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path": { - "version": "0.12.7", - "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", - "dev": true, - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.4.tgz", - "integrity": "sha512-ZIrVPH+A52Dw84R0L3/VS9Op04PuQ2SEoJL6bkshmiTic/HldyW9Tf7oH5mhJZBK7NmDx27vSMrYEXPXclpDKw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pixelmatch": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", - "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", - "dev": true, - "dependencies": { - "pngjs": "^4.0.1" - }, - "bin": { - "pixelmatch": "bin/pixelmatch" - } - }, - "node_modules/pixelmatch/node_modules/pngjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", - "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/playwright-core": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.21.1.tgz", - "integrity": "sha512-SbK5dEsai9ZUKlxcinqegorBq4GnftXd4/GfW+pLsdQIQWrLCM/JNh6YQ2Rf2enVykXCejtoXW8L5vJXBBVSJQ==", - "dev": true, - "dependencies": { - "colors": "1.4.0", - "commander": "8.3.0", - "debug": "4.3.3", - "extract-zip": "2.0.1", - "https-proxy-agent": "5.0.0", - "jpeg-js": "0.4.3", - "mime": "3.0.0", - "pixelmatch": "5.2.1", - "pngjs": "6.0.0", - "progress": "2.0.3", - "proper-lockfile": "4.1.2", - "proxy-from-env": "1.1.0", - "rimraf": "3.0.2", - "socks-proxy-agent": "6.1.1", - "stack-utils": "2.0.5", - "ws": "8.4.2", - "yauzl": "2.10.0", - "yazl": "2.5.1" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/playwright-core/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/playwright-core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/plugin-error": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", - "dev": true, - "dependencies": { - "ansi-cyan": "^0.1.1", - "ansi-red": "^0.1.1", - "arr-diff": "^1.0.1", - "arr-union": "^2.0.1", - "extend-shallow": "^1.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pngjs": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", - "dev": true, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/postcss-calc": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", - "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.27", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.0.2" - } - }, - "node_modules/postcss-calc/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-calc/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-calc/node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true - }, - "node_modules/postcss-colormin": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", - "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "color": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-colormin/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-colormin/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-convert-values": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", - "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-convert-values/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-convert-values/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-discard-comments": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", - "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-comments/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-discard-comments/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", - "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-duplicates/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-discard-duplicates/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-discard-empty": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", - "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-empty/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-discard-empty/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", - "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-discard-overridden/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-discard-overridden/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", - "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", - "dev": true, - "dependencies": { - "css-color-names": "0.0.4", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "stylehacks": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-longhand/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-merge-longhand/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-merge-rules": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", - "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "cssnano-util-same-parent": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0", - "vendors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-merge-rules/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-merge-rules/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", - "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-font-values/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-minify-font-values/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", - "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", - "dev": true, - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "is-color-stop": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-gradients/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-minify-gradients/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-minify-params": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", - "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.0", - "browserslist": "^4.0.0", - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-params/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-minify-params/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", - "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-minify-selectors/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-minify-selectors/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", - "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-charset/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-charset/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", - "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", - "dev": true, - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-display-values/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-display-values/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", - "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", - "dev": true, - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-positions/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-positions/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", - "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", - "dev": true, - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-repeat-style/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-repeat-style/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-string": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", - "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", - "dev": true, - "dependencies": { - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-string/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-string/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", - "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", - "dev": true, - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-timing-functions/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-timing-functions/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", - "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-unicode/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-unicode/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", - "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", - "dev": true, - "dependencies": { - "is-absolute-url": "^2.0.0", - "normalize-url": "^3.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-url/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-url/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", - "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-normalize-whitespace/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-normalize-whitespace/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-ordered-values": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", - "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", - "dev": true, - "dependencies": { - "cssnano-util-get-arguments": "^4.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-ordered-values/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-ordered-values/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", - "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-api": "^3.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-reduce-initial/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-reduce-initial/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", - "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", - "dev": true, - "dependencies": { - "cssnano-util-get-match": "^4.0.0", - "has": "^1.0.0", - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-reduce-transforms/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-reduce-transforms/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-svgo": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", - "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", - "dev": true, - "dependencies": { - "postcss": "^7.0.0", - "postcss-value-parser": "^3.0.0", - "svgo": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-svgo/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-svgo/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", - "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", - "dev": true, - "dependencies": { - "alphanum-sort": "^1.0.0", - "postcss": "^7.0.0", - "uniqs": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/postcss-unique-selectors/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/postcss-unique-selectors/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", - "dev": true - }, - "node_modules/postcss/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/postcss/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/postcss/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/postcss/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", - "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-linter-helpers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", - "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, - "dependencies": { - "fast-diff": "^1.1.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pretty-format": { - "version": "28.1.1", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.1.tgz", - "integrity": "sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw==", - "dependencies": { - "@jest/schemas": "^28.0.2", - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/proper-lockfile": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", - "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "retry": "^0.12.0", - "signal-exit": "^3.0.2" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/puppeteer": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-9.1.1.tgz", - "integrity": "sha512-W+nOulP2tYd/ZG99WuZC/I5ljjQQ7EUw/jQGcIb9eu8mDlZxNY2SgcJXTLG9h5gRvqA3uJOe4hZXYsd3EqioMw==", - "deprecated": "Version no longer supported. Upgrade to @latest", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "debug": "^4.1.0", - "devtools-protocol": "0.0.869402", - "extract-zip": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.1", - "pkg-dir": "^4.2.0", - "progress": "^2.0.1", - "proxy-from-env": "^1.1.0", - "rimraf": "^3.0.2", - "tar-fs": "^2.0.0", - "unbzip2-stream": "^1.3.3", - "ws": "^7.2.3" - }, - "engines": { - "node": ">=10.18.1" - } - }, - "node_modules/puppeteer/node_modules/ws": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", - "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "dev": true, - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qjobs": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", - "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", - "dev": true, - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/qunit": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.19.1.tgz", - "integrity": "sha512-gSGuw0vErE/rNjnlBW/JmE7NNubBlGrDPQvsug32ejYhcVFuZec9yoU0+C30+UgeCGwq6Ap89K65dMGo+kDGZQ==", - "dev": true, - "dependencies": { - "commander": "7.2.0", - "node-watch": "0.7.3", - "tiny-glob": "0.2.9" - }, - "bin": { - "qunit": "bin/qunit.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/qunit/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/reach-router-hash-history": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/reach-router-hash-history/-/reach-router-hash-history-0.0.3.tgz", - "integrity": "sha512-Vg6GIj25DhF15LqlZpdtWJl0uKiwC1pg8uGxEAow+lN2G5nIjwJxEJItGUhUG5MLJgxIu+lbIqoCsuHjSRG42g==" - }, - "node_modules/react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - }, - "peerDependencies": { - "react": "^16.14.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, - "node_modules/react-query": { - "version": "3.39.1", - "resolved": "https://registry.npmjs.org/react-query/-/react-query-3.39.1.tgz", - "integrity": "sha512-qYKT1bavdDiQZbngWZyPotlBVzcBjDYEJg5RQLBa++5Ix5jjfbEYJmHSZRZD+USVHUSvl/ey9Hu+QfF1QAK80A==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.5.5", - "broadcast-channel": "^3.4.1", - "match-sorter": "^6.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-redux": { - "version": "7.2.8", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.8.tgz", - "integrity": "sha512-6+uDjhs3PSIclqoCk0kd6iX74gzrGc3W5zcAjbrFgEdIjRSQObdIwfx80unTkVUYvbQ95Y8Av3OvFHq1w5EOUw==", - "dependencies": { - "@babel/runtime": "^7.15.4", - "@types/react-redux": "^7.1.20", - "hoist-non-react-statics": "^3.3.2", - "loose-envify": "^1.4.0", - "prop-types": "^15.7.2", - "react-is": "^17.0.2" - }, - "peerDependencies": { - "react": "^16.8.3 || ^17 || ^18" - }, - "peerDependenciesMeta": { - "react-dom": { - "optional": true - }, - "react-native": { - "optional": true - } - } - }, - "node_modules/react-redux/node_modules/react-is": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", - "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" - }, - "node_modules/readable-stream": { - "version": "1.0.27-1", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.27-1.tgz", - "integrity": "sha512-uQE31HGhpMrqZwtDjRliOs2aC3XBi+DdkhLs+Xa0dvVD5eDiZr3+k8rKVZcyTzxosgtMw7B/twQsK3P1KTZeVg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reduce-component": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz", - "integrity": "sha512-y0wyCcdQul3hI3xHfIs0vg/jSbboQc/YTOAqaxjFG7At+XSexduuOqBVL9SmOLSwa/ldkbzVzdwuk9s2EKTAZg==", - "dev": true - }, - "node_modules/redux": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/redux/-/redux-4.2.0.tgz", - "integrity": "sha512-oSBmcKKIuIR4ME29/AeNUnl5L+hvBq7OaJWzaptTQJAntaPvxIJqfnjbaEiCzzaIz+XmVILfqAM3Ob0aXLPfjA==", - "dependencies": { - "@babel/runtime": "^7.9.2" - } - }, - "node_modules/redux-thunk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", - "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", - "peerDependencies": { - "redux": "^4" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", - "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.0.tgz", - "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/regexpu-core": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.1.0.tgz", - "integrity": "sha512-bb6hk+xWd2PEOkj5It46A16zFMs2mv86Iwpdu94la4S3sJ7C973h2dHpYKwIBGaWSO7cIRJ+UX0IeMaWcO4qwA==", - "dev": true, - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.0.1", - "regjsgen": "^0.6.0", - "regjsparser": "^0.8.2", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regextras": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", - "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", - "dev": true, - "engines": { - "node": ">=0.1.14" - } - }, - "node_modules/regjsgen": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.6.0.tgz", - "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", - "dev": true - }, - "node_modules/regjsparser": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.8.4.tgz", - "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/remap-istanbul": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/remap-istanbul/-/remap-istanbul-0.10.1.tgz", - "integrity": "sha512-gsNQXs5kJLhErICSyYhzVZ++C8LBW8dgwr874Y2QvzAUS75zBlD/juZgXs39nbYJ09fZDlX2AVLVJAY2jbFJoQ==", - "dev": true, - "dependencies": { - "amdefine": "^1.0.0", - "istanbul": "0.4.5", - "minimatch": "^3.0.3", - "plugin-error": "^0.1.2", - "source-map": "^0.6.1", - "through2": "2.0.1" - }, - "bin": { - "remap-istanbul": "bin/remap-istanbul.js" - } - }, - "node_modules/remove-accents": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==", - "dev": true - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true, - "engines": { - "node": ">=0.10.5" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true - }, - "node_modules/reselect": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-4.1.6.tgz", - "integrity": "sha512-ZovIuXqto7elwnxyXbBtCPo9YFEr3uJqj2rRbcOOog1bmu2Ag85M4hixSwFWyaBMKXNgvPaJ9OSu9SkBPIeJHQ==" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg/-/resolve-pkg-2.0.0.tgz", - "integrity": "sha512-+1lzwXehGCXSeryaISr6WujZzowloigEofRB+dj75y9RRa/obVcYgbHJd53tdYw8pvZj8GojXaaENws8Ktw/hQ==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.0.tgz", - "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", - "engines": { - "node": ">=10" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true - }, - "node_modules/rgb-regex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", - "dev": true - }, - "node_modules/rgba-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safe-json-parse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==", - "dev": true - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/sass": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.53.0.tgz", - "integrity": "sha512-zb/oMirbKhUgRQ0/GFz8TSAwRq2IlR29vOUJZOx0l8sV+CkHUfHa4u5nqrG+1VceZp7Jfj59SVW9ogdhTvJDcQ==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true - }, - "node_modules/scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", - "dev": true, - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "dev": true - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha512-/YF5Uk8hcwi7ima04ppkbA4RaRMdPMBfwAvAf8sufYOxsJRtbdoBsT8vGvlb+799BrlGdYrd+oczIA2eN2JdWA==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "iojs": "*", - "node": ">=0.11.0" - } - }, - "node_modules/shelljs/node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "dev": true, - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.1.tgz", - "integrity": "sha512-0y9pnIso5a9i+lJmsCdtmTTgJFFSvNQKDnPQRz28mGNnxbmqYg2QPtJTLFxhymFZhAIn50eHAKzJeiNaKr+yUQ==", - "dev": true, - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "debug": "~4.3.2", - "engine.io": "~6.2.0", - "socket.io-adapter": "~2.4.0", - "socket.io-parser": "~4.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz", - "integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==", - "dev": true - }, - "node_modules/socket.io-parser": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.5.tgz", - "integrity": "sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==", - "dev": true, - "dependencies": { - "@types/component-emitter": "^1.2.10", - "component-emitter": "~1.3.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", - "dev": true, - "dependencies": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.1.1.tgz", - "integrity": "sha512-t8J0kG3csjA4g6FTbsMOWws+7R7vuRC8aQ/wy3/1OWmsgwA68zs/+cExQ0koSitUDXqhufF/YJr9wtNMZHw5Ew==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.1", - "socks": "^2.6.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/source-map-support": { - "version": "0.4.18", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", - "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", - "dev": true, - "dependencies": { - "source-map": "^0.5.6" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz", - "integrity": "sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA==", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.1.tgz", - "integrity": "sha512-iPhtd9unZ6zKdWgMeYGfSBuqCngyJy1B/GPi/lTpwGpa3bajuX30GjUVd0/Tn/Xhg0mr4DOSENozz9Y06qyonQ==", - "dev": true, - "dependencies": { - "date-format": "^4.0.10", - "debug": "^4.3.4", - "fs-extra": "^10.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-template": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", - "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1", - "get-intrinsic": "^1.1.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "regexp.prototype.flags": "^1.4.1", - "side-channel": "^1.0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz", - "integrity": "sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz", - "integrity": "sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.19.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-filename-increment": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-filename-increment/-/strip-filename-increment-2.0.1.tgz", - "integrity": "sha512-+v5xsiTTsdYqkPj7qz1zlngIsjZedhHDi3xp/9bMurV8kXe9DAr732gNVqtt4X8sI3hOqS3nlFfps5gyVcux6w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/styled-components": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-5.3.5.tgz", - "integrity": "sha512-ndETJ9RKaaL6q41B69WudeqLzOpY1A/ET/glXkNZ2T7dPjPqpPCXXQjDFYZWwNnE5co0wX+gTCqx9mfxTmSIPg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/traverse": "^7.4.5", - "@emotion/is-prop-valid": "^1.1.0", - "@emotion/stylis": "^0.8.4", - "@emotion/unitless": "^0.7.4", - "babel-plugin-styled-components": ">= 1.12.0", - "css-to-react-native": "^3.0.0", - "hoist-non-react-statics": "^3.0.0", - "shallowequal": "^1.1.0", - "supports-color": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/styled-components" - }, - "peerDependencies": { - "react": ">= 16.8.0", - "react-dom": ">= 16.8.0", - "react-is": ">= 16.8.0" - } - }, - "node_modules/styled-components/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/styled-components/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/stylehacks": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", - "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", - "dev": true, - "dependencies": { - "browserslist": "^4.0.0", - "postcss": "^7.0.0", - "postcss-selector-parser": "^3.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/stylehacks/node_modules/picocolors": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", - "dev": true - }, - "node_modules/stylehacks/node_modules/postcss": { - "version": "7.0.39", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", - "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", - "dev": true, - "dependencies": { - "picocolors": "^0.2.1", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - } - }, - "node_modules/stylehacks/node_modules/postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/superagent": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.8.5.tgz", - "integrity": "sha512-4h4R6fISQXvgjIqZ8DjONYy3y2XPxgZO0LgHsBI6tDAEhzJLpWuK+thM60SmUiERJOEJzmxlIGx/GP6+azky/A==", - "deprecated": "Please upgrade to v7.0.2+ of superagent. We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing. See the releases tab for more information at .", - "dev": true, - "dependencies": { - "component-emitter": "~1.2.0", - "cookiejar": "2.0.6", - "debug": "2", - "extend": "3.0.0", - "form-data": "1.0.0-rc3", - "formidable": "~1.0.14", - "methods": "~1.1.1", - "mime": "1.3.4", - "qs": "2.3.3", - "readable-stream": "1.0.27-1", - "reduce-component": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/superagent/node_modules/component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha512-jPatnhd33viNplKjqXKRkGU345p263OIWzDL2wH3LGIGp5Kojo+uXizHmOADRvhGFFTnJqX3jBAKP6vvmSDKcA==", - "dev": true - }, - "node_modules/superagent/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/superagent/node_modules/extend": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "integrity": "sha512-5mYyg57hpD+sFaJmgNL9BidQ5C7dmJE3U5vzlRWbuqG+8dytvYEoxvKs6Tj5cm3LpMsFvRt20qz1ckezmsOUgQ==", - "dev": true - }, - "node_modules/superagent/node_modules/mime": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha512-sAaYXszED5ALBt665F0wMQCUXpGuZsGdopoqcHPdL39ZYdi7uHoZlhrfZfhv8WzivhBzr/oXwaj+yiK5wY8MXQ==", - "dev": true, - "bin": { - "mime": "cli.js" - } - }, - "node_modules/superagent/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/superagent/node_modules/qs": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", - "integrity": "sha512-f5M0HQqZWkzU8GELTY8LyMrGkr3bPjKoFtTkwUEqJQbcljbeK8M7mliP9Ia2xoOI6oMerp+QPS7oYJtpGmWe/A==", - "dev": true - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dev": true, - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar-stream/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/tar-stream/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/tar-stream/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dependencies": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/terser": { - "version": "5.14.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", - "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz", - "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.7", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.7.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/throat": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.1.tgz", - "integrity": "sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", - "integrity": "sha512-/vp02SIbpmVHapNMjox4hDBzykPdAOmH5y3INcKaxGfpEPSCMqzdWXyGfqPYyxoBLo1JpxBrlh3Z9esv0vWUYw==", - "dev": true, - "dependencies": { - "readable-stream": "~2.0.0", - "xtend": "~4.0.0" - } - }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "~1.0.0", - "process-nextick-args": "~1.0.6", - "string_decoder": "~0.10.x", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/timsort": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", - "dev": true - }, - "node_modules/tiny-glob": { - "version": "0.2.9", - "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", - "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", - "dev": true, - "dependencies": { - "globalyzer": "0.1.0", - "globrex": "^0.1.2" - } - }, - "node_modules/tiny-lr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", - "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", - "dev": true, - "dependencies": { - "body": "^5.1.0", - "debug": "^3.1.0", - "faye-websocket": "~0.10.0", - "livereload-js": "^2.3.0", - "object-assign": "^4.1.0", - "qs": "^6.4.0" - } - }, - "node_modules/tiny-lr/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/tsconfig-paths": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", - "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", - "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.1", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" - } - }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dev": true, - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", - "integrity": "sha512-qLK/Xe9E2uzmYI3qLeOmI0tEOt+TBBQyUIAh4aAgU05FVYzeZrKUdkAZfBNVGRaHVgV0TDkdEngJSw/SyQchkQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/uglify-js": { - "version": "3.16.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.16.2.tgz", - "integrity": "sha512-AaQNokTNgExWrkEYA24BTNMSjyqEXPSfhqoS0AxmHkCJ4U+Dyy5AvbGV/sqxuxficEfGGoX3zWw9R7QpLFfEsg==", - "dev": true, - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/underscore.string": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.6.tgz", - "integrity": "sha512-VoC83HWXmCrF6rgkyxS9GHv8W9Q5nhMKho+OadDJGzL2oDYbYEppBaCMH6pFlwLeqj2QS+hhkw2kpXkSdD1JxQ==", - "dev": true, - "dependencies": { - "sprintf-js": "^1.1.1", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/underscore.string/node_modules/sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dev": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", - "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", - "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", - "dev": true - }, - "node_modules/uniqs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unload": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unload/-/unload-2.2.0.tgz", - "integrity": "sha512-B60uB5TNBLtN6/LsgAf3udH9saB5p7gqJwcFfbOEZ8BcBHnGwCf6G/TGiEqkRAxX7zAFIUtzdrXQSdL3Q/wqNA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.6.2", - "detect-node": "^2.0.4" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "dev": true - }, - "node_modules/update-browserslist-db": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.4.tgz", - "integrity": "sha512-jnmO2BEGUjsMOe/Fg9u0oczOe/ppIDZPebzccl1yDWGLFP16Pa1/RM5wEoKYPG2zstNcDuAStejyxsOuKINdGA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/util/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "dev": true - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, - "node_modules/v8-to-istanbul": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz", - "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vendors": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dev": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/webpack": { - "version": "5.73.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz", - "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.4.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.9.3", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.3.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dev": true, - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/write/-/write-2.0.0.tgz", - "integrity": "sha512-yam9TAqN8sAZokECAejo9HpT2j2s39OgK8i8yxadrFBVo+iSWLfnipRVFulfAw1d2dz5vSuGmlMHYRKG4fysOA==", - "dependencies": { - "add-filename-increment": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/write-file-atomic": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" - } - }, - "node_modules/ws": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", - "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", - "dev": true, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/yargs": { - "version": "17.5.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", - "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, - "node_modules/yazl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", - "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3" - } - } - }, "dependencies": { "@ampproject/remapping": { "version": "2.2.0", @@ -17530,8 +1244,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/@elementor/eslint-plugin-editor/-/eslint-plugin-editor-0.4.0.tgz", "integrity": "sha512-csHRHGpN1ph4UelPhWkxZnbeCV+qgTsHX8VWqPQgjYqRVROlcFpMtHqIPki7MScGE2WvNKcFC+L/hxcKx9pWTQ==", - "dev": true, - "requires": {} + "dev": true }, "@emotion/is-prop-valid": { "version": "1.1.3", @@ -18347,6 +2060,47 @@ "@sinonjs/commons": "^1.7.0" } }, + "@testing-library/dom": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.17.1.tgz", + "integrity": "sha512-KnH2MnJUzmFNPW6RIKfd+zf2Wue8mEKX0M3cpX6aKl5ZXrJM1/c/Pc8c2xDNYQCnJO48Sm5ITbMXgqTr3h4jxQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^4.2.0", + "aria-query": "^5.0.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.4.4", + "pretty-format": "^27.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + } + }, + "react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + } + } + }, "@testing-library/jest-dom": { "version": "5.16.4", "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz", @@ -18374,6 +2128,18 @@ } } }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true + }, + "@types/aria-query": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", + "integrity": "sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig==", + "dev": true + }, "@types/babel__core": { "version": "7.1.19", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.19.tgz", @@ -18536,6 +2302,17 @@ } } }, + "@types/jsdom": { + "version": "16.2.15", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.15.tgz", + "integrity": "sha512-nwF87yjBKuX/roqGYerZZM0Nv1pZDMAT5YhOHYeM/72Fic+VEqJh4nyoqoapzJnW3pUlfxPY5FhgsJtM+dRnQQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/parse5": "^6.0.3", + "@types/tough-cookie": "*" + } + }, "@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", @@ -18565,6 +2342,12 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/parse5": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.3.tgz", + "integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==", + "dev": true + }, "@types/prettier": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.6.3.tgz", @@ -18642,6 +2425,12 @@ "@types/jest": "*" } }, + "@types/tough-cookie": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz", + "integrity": "sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==", + "dev": true + }, "@types/yargs": { "version": "17.0.10", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.10.tgz", @@ -18949,8 +2738,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/@wordpress/babel-plugin-import-jsx-pragma/-/babel-plugin-import-jsx-pragma-3.2.0.tgz", "integrity": "sha512-XK3Sdpi9MWoy5qPHnRroY/ypX0VtT5yI5809u5As1P/3k4vlXNw8USH4lJ+rkurAOVqqN5mFlf2XAL9AkpfXyg==", - "dev": true, - "requires": {} + "dev": true }, "@wordpress/babel-preset-default": { "version": "3.0.2", @@ -19114,8 +2902,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-1.4.0.tgz", "integrity": "sha512-uvrgUAhRnOvIysXjcXH9VDsrKLqH9r3BfdGoy+WFLSHFnTfdMhW7bdDQXl4F4UIUuefUwGi+ZvT/rChg9zoBkQ==", - "dev": true, - "requires": {} + "dev": true }, "@wordpress/warning": { "version": "2.12.0", @@ -19135,6 +2922,12 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -19155,19 +2948,41 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" }, + "acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, "acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true, - "requires": {} + "dev": true }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true }, "add-filename-increment": { "version": "1.0.0", @@ -19231,25 +3046,24 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "requires": {} + "dev": true }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", "dev": true }, "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", "dev": true }, "ansi-cyan": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", - "integrity": "sha512-eCjan3AVo/SxZ0/MyIYRtkpxIu/H3xZN7URr1vXVrISxeyz8fUFz0FJziamK4sS8I+t35y4rHg1b2PklyBe/7A==", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", "dev": true, "requires": { "ansi-wrap": "0.1.0" @@ -19266,7 +3080,7 @@ "ansi-red": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", - "integrity": "sha512-ewaIr5y+9CUTGFwZfpECUbFlGcC0GCw1oqR9RI6h1gQCd9Aj2GxSckCnPsVJnmfMZbwFYE+leZGASgkWl06Jow==", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", "dev": true, "requires": { "ansi-wrap": "0.1.0" @@ -19288,7 +3102,7 @@ "ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", "dev": true }, "anymatch": { @@ -19316,7 +3130,7 @@ "arr-diff": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", - "integrity": "sha512-OQwDZUqYaQwyyhDJHThmzId8daf4/RFNLaeh3AevmSeZ5Y7ug4Ga/yKc6l6kTZOBW781rCj103ZuTh8GAsB3+Q==", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { "arr-flatten": "^1.0.1", @@ -19326,7 +3140,7 @@ "array-slice": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", - "integrity": "sha512-rlVfZW/1Ph2SNySXwR9QYkChp8EkOEiTMO5Vwx60usw04i4nWemkm9RXmQqgkQFaLHsqLuADvjp6IfgL9l2M8Q==", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", "dev": true } } @@ -19340,7 +3154,7 @@ "arr-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", - "integrity": "sha512-t5db90jq+qdgk8aFnxEkjqta0B/GHrM1pxzuuZz2zWsOXc5nKu3t+76s/PQBA8FTcM/ipspIH9jWG4OxCBc2eA==", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", "dev": true }, "array-differ": { @@ -19352,7 +3166,7 @@ "array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==" + "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=" }, "array-includes": { "version": "3.1.5", @@ -19424,7 +3238,7 @@ "ast-types-flow": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==", + "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", "dev": true }, "async": { @@ -19433,6 +3247,12 @@ "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", "dev": true }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", @@ -19480,8 +3300,7 @@ "version": "7.0.0-bridge.0", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "requires": {} + "dev": true }, "babel-jest": { "version": "28.1.2", @@ -19587,7 +3406,7 @@ "babel-plugin-syntax-jsx": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", - "integrity": "sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", "dev": true }, "babel-preset-current-node-syntax": { @@ -19695,7 +3514,7 @@ "body": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", - "integrity": "sha512-chUsBxGRtuElD6fmw1gHLpvnKdVLK302peeFa9ZqAEk8TyzZ3fygLyUEDDPTJvL9+Bor0dIwn6ePOsRM2y0zQQ==", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", "dev": true, "requires": { "continuable-cache": "^0.3.1", @@ -19762,7 +3581,7 @@ "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", "dev": true }, "brace-expansion": { @@ -19798,6 +3617,12 @@ "unload": "2.2.0" } }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, "browserslist": { "version": "4.21.1", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.1.tgz", @@ -19830,7 +3655,7 @@ "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, "buffer-from": { @@ -19857,7 +3682,7 @@ "caller-callsite": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { "callsites": "^2.0.0" @@ -19866,7 +3691,7 @@ "callsites": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", "dev": true } } @@ -19893,7 +3718,7 @@ "camelize": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha512-W2lPwkBkMZwFlPCXhIlYgxu+7gC/NUlCtdK652DAJ1JdgV0sTrvuPFshNPrFa1TY2JOkLhgdeEBplB4ezEa+xg==", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=", "dev": true }, "caniuse-api": { @@ -19989,7 +3814,7 @@ "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==" + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "coa": { "version": "2.0.2", @@ -20145,7 +3970,7 @@ "commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", "dev": true }, "component-emitter": { @@ -20157,7 +3982,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "connect": { "version": "3.7.0", @@ -20183,7 +4008,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true } } @@ -20197,7 +4022,7 @@ "continuable-cache": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", - "integrity": "sha512-TF30kpKhTH8AGCG3dut0rdd/19B7Z+qCnrMoBLpyQu/2drZdNrrpcjPEoJeSVsQM+8KmWG5O56oPDjSSUsuTyA==", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", "dev": true }, "convert-source-map": { @@ -20217,7 +4042,7 @@ "cookiejar": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.0.6.tgz", - "integrity": "sha512-X9IsySmsr1heROBZCpyEYhqJyU7CXNJoVxIlQ5bBb7DskYUx0mQ+g2f7yPYajceZeGJWHQbIfGB6j0hywV/ARQ==", + "integrity": "sha1-Cr81atANHFohnYjURRgEbdAmrP4=", "dev": true }, "core-js": { @@ -20311,13 +4136,13 @@ "css-color-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", - "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "integrity": "sha1-/qJhbcZ2spYmhrOvjb2+GAskTgU=", "dev": true }, "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", "dev": true }, "css-declaration-sorter": { @@ -20404,7 +4229,7 @@ "css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + "integrity": "sha1-QuJ9T6BK4y+TGktNQZH6nN3ul8s=" }, "cssesc": { "version": "3.0.0", @@ -20539,13 +4364,13 @@ "cssnano-util-get-arguments": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", - "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", "dev": true }, "cssnano-util-get-match": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", - "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", "dev": true }, "cssnano-util-raw-cache": { @@ -20608,6 +4433,29 @@ } } }, + "cssom": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", + "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", + "dev": true + }, + "cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dev": true, + "requires": { + "cssom": "~0.3.6" + }, + "dependencies": { + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + } + } + }, "csstype": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz", @@ -20616,7 +4464,7 @@ "custom-event": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", - "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, "damerau-levenshtein": { @@ -20631,6 +4479,44 @@ "integrity": "sha512-5dVBvpBLBnPwSsYXqfybFyehMmC/EenKEcf23AhCTgTf48JFBbmJKqoZBsERDnjL0FyiVTYWdFsRfTLHxLyKdQ==", "dev": true }, + "data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "requires": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "dependencies": { + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "date-format": { "version": "4.0.11", "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.11.tgz", @@ -20658,15 +4544,21 @@ } } }, + "decimal.js": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", + "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", + "dev": true + }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==" + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=" }, "deep-for-each": { "version": "3.0.0", @@ -20707,7 +4599,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, "depd": { @@ -20725,7 +4617,7 @@ "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==" + "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=" }, "detect-newline": { "version": "3.1.0", @@ -20747,7 +4639,7 @@ "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", - "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "integrity": "sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw=", "dev": true }, "diff": { @@ -20788,7 +4680,7 @@ "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", - "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "integrity": "sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs=", "dev": true, "requires": { "custom-event": "~1.0.0", @@ -20821,6 +4713,23 @@ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, + "domexception": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", + "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", + "dev": true, + "requires": { + "webidl-conversions": "^7.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + } + } + }, "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", @@ -20843,7 +4752,7 @@ "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", "dev": true }, "electron-to-chromium": { @@ -20871,7 +4780,7 @@ "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", "dev": true }, "end-of-stream": { @@ -20905,8 +4814,7 @@ "version": "8.2.3", "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz", "integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==", - "dev": true, - "requires": {} + "dev": true } } }, @@ -20929,7 +4837,7 @@ "ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", - "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, "entities": { @@ -21026,7 +4934,7 @@ "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", "dev": true }, "escape-string-regexp": { @@ -21215,8 +5123,7 @@ "version": "8.5.0", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", - "dev": true, - "requires": {} + "dev": true }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -21456,8 +5363,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", - "dev": true, - "requires": {} + "dev": true }, "eslint-plugin-prettier": { "version": "3.4.1", @@ -21525,8 +5431,7 @@ "version": "4.6.0", "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", - "dev": true, - "requires": {} + "dev": true }, "eslint-rule-composer": { "version": "0.3.0", @@ -21678,7 +5583,7 @@ "eventemitter2": { "version": "0.4.14", "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha512-K7J4xq5xAD5jHsGM5ReWXRTFa3JRGofHiMcVgQ8PRwgWxzjHpMWCIzsmyf60+mh8KLsqYPcjUMa0AC4hd6lPyQ==", + "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", "dev": true }, "eventemitter3": { @@ -21722,12 +5627,12 @@ "exit": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==" + "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=" }, "expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "requires": { "homedir-polyfill": "^1.0.1" } @@ -21790,7 +5695,7 @@ "extend-shallow": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", - "integrity": "sha512-L7AGmkO6jhDkEBBGWlLtftA80Xq8DipnrRPr0pyi7GQLXkaq9JYA4xF4z6qnadIC6euiTDKco0cGSU9muw+WTw==", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { "kind-of": "^1.1.0" @@ -21799,7 +5704,7 @@ "kind-of": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", - "integrity": "sha512-aUH6ElPnMGon2/YkxRIigV32MOpTVcoXQ1Oo8aYn40s+sJ3j+0gFZsT8HKDcxNy7Fi9zuquWtGaGAahOdv5p/g==", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", "dev": true } } @@ -21871,7 +5776,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, "fastq": { @@ -21886,7 +5791,7 @@ "faye-websocket": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha512-Xhj93RXbMSq8urNCUq4p9l0P6hnySJ/7YNRhYNug0bLOuii7pKO7xQFb5mx9xZXWCar88pLPb805PvUkwrLZpQ==", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", "dev": true, "requires": { "websocket-driver": ">=0.5.1" @@ -21903,7 +5808,7 @@ "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, "requires": { "pend": "~1.2.0" @@ -21921,7 +5826,7 @@ "file-sync-cmp": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/file-sync-cmp/-/file-sync-cmp-0.1.1.tgz", - "integrity": "sha512-0k45oWBokCqh2MOexeYKpyqmGKG+8mQ2Wd8iawx+uWd/weWJQAZ6SoPybagdCI4xFisag8iAR77WPm4h3pTfxA==", + "integrity": "sha1-peeo/7+kk7Q7kju9TKiaU7Y7YSs=", "dev": true }, "fill-range": { @@ -21959,7 +5864,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "on-finished": { @@ -22059,12 +5964,12 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "requires": { "for-in": "^1.0.1" } @@ -22091,7 +5996,7 @@ "formidable": { "version": "1.0.17", "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.0.17.tgz", - "integrity": "sha512-95MFT5qipMvUiesmuvGP1BI4hh5XWCzyTapiNJ/k8JBQda7rPy7UCWYItz2uZEdTgGNy1eInjzlL9Wx1O9fedg==", + "integrity": "sha1-71SRSQ+UM7cF+qdyScmQKa40hVk=", "dev": true }, "fs-constants": { @@ -22114,7 +6019,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", @@ -22142,7 +6047,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, "functions-have-names": { @@ -22248,7 +6153,7 @@ "global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "requires": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", @@ -22340,7 +6245,7 @@ "grunt-banner": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/grunt-banner/-/grunt-banner-0.6.0.tgz", - "integrity": "sha512-50H/Wxydlf+ifve5Jzcz9oB4jr6oCGEPyfhEDUsl2NEMX80cWUJqVMXSHBr2n9Rb3nd+rRSKeQzqNxWrqoyQ1A==", + "integrity": "sha1-P4eQIdEj+linuloLb7a+QStYhaw=", "dev": true, "requires": { "chalk": "^1.1.0" @@ -22355,13 +6260,13 @@ "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { "ansi-styles": "^2.2.1", @@ -22389,7 +6294,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } @@ -22397,7 +6302,7 @@ "grunt-bumpup": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/grunt-bumpup/-/grunt-bumpup-0.6.3.tgz", - "integrity": "sha512-WRIqlm0HrwfwaPbJMpOphKKsqdIjEH8emCKQKbx6/BD6H4PyYggGCV3c+RaqydC9BuJ3DsXYcpi77yhDdkGwlg==", + "integrity": "sha1-dU6Wu2pTN9C5VInl3EmWuvyLtBQ=", "dev": true, "requires": { "moment": "^2.8.3", @@ -22407,7 +6312,7 @@ "semver": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz", - "integrity": "sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ==", + "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=", "dev": true } } @@ -22415,7 +6320,7 @@ "grunt-checktextdomain": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/grunt-checktextdomain/-/grunt-checktextdomain-1.0.1.tgz", - "integrity": "sha512-WX6EMOnvrhj8MDqmWJAlZRpM1rE/Mmqy9DCYYeWB1pFV+JotP6pNx2uO58+uHFOEFTcoridr4ECJ6aqGnLmgJw==", + "integrity": "sha1-slTQHh3pEwBdTbHFMD2QI7mD4Zs=", "dev": true, "requires": { "chalk": "~0.2.1", @@ -22425,13 +6330,13 @@ "ansi-styles": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-0.2.0.tgz", - "integrity": "sha512-YyQBeLj0juxUC9uUXRpQ1ZAzPT1dnsn5vVeJLHYFq4Ct1p0rymUSyvckKCXCH9I0bh3jWDIETA5nXIaZVKlDyA==", + "integrity": "sha1-NZq0sV3NZLptdHNLcsNjYKmvLBk=", "dev": true }, "chalk": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.2.1.tgz", - "integrity": "sha512-nmVapomwGksziCuynboy7I+dtW4ytIdqXPlrfY/ySx8l8EqFRGHyA04q6NMNpOri8XliGUGwXyfScVl48zFHbw==", + "integrity": "sha1-dhPhV1FFshOGSD9/SFql/6jL0Qw=", "dev": true, "requires": { "ansi-styles": "~0.2.0", @@ -22487,7 +6392,7 @@ "grunt-contrib-copy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/grunt-contrib-copy/-/grunt-contrib-copy-1.0.0.tgz", - "integrity": "sha512-gFRFUB0ZbLcjKb67Magz1yOHGBkyU6uL29hiEW1tdQ9gQt72NuMKIy/kS6dsCbV0cZ0maNCb0s6y+uT1FKU7jA==", + "integrity": "sha1-cGDGWB6QS4qw0A8HbgqPbj58NXM=", "dev": true, "requires": { "chalk": "^1.1.1", @@ -22503,13 +6408,13 @@ "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { "ansi-styles": "^2.2.1", @@ -22537,7 +6442,7 @@ "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true } } @@ -22742,7 +6647,7 @@ "colors": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha512-ENwblkFQpqqia6b++zLD/KUWafYlVY/UNnAp7oz7LY7E924wmpye416wBOmvv/HMWzl8gL1kJlfvId/1Dg176w==", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", "dev": true } } @@ -22844,7 +6749,7 @@ "grunt-release": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/grunt-release/-/grunt-release-0.14.0.tgz", - "integrity": "sha512-1dvZr1op1KGzCba50o/J0Ymdqjn89ppLPQe500pwksrYs8OpJtj3ZIr5rfKY7eQC2oJo+wSCsimece/6nUpnLA==", + "integrity": "sha1-uNYAiJVhlm1g/9zAYGfrAVWX940=", "dev": true, "requires": { "q": "^1.4.1", @@ -22865,8 +6770,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/grunt-sass/-/grunt-sass-3.1.0.tgz", "integrity": "sha512-90s27H7FoCDcA8C8+R0GwC+ntYD3lG6S/jqcavWm3bn9RiJTmSfOvfbFa1PXx4NbBWuiGQMLfQTj/JvvqT5w6A==", - "dev": true, - "requires": {} + "dev": true }, "grunt-shell": { "version": "4.0.0", @@ -22894,7 +6798,7 @@ "grunt-text-replace": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/grunt-text-replace/-/grunt-text-replace-0.4.0.tgz", - "integrity": "sha512-A4dFGpOaD/TQpeOlDK/zP962X1qG7KcOqPiSXOWOIeAKMzzpoDJYZ8Sz56iazI5+kTqeTa+IaEEl5c4sk+QN+Q==", + "integrity": "sha1-252c5Z4v5J2id+nbwZXD4Rz7FsI=", "dev": true }, "grunt-webpack": { @@ -22910,9 +6814,8 @@ "grunt-wp-readme-to-markdown-with-extra": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/grunt-wp-readme-to-markdown-with-extra/-/grunt-wp-readme-to-markdown-with-extra-2.2.0.tgz", - "integrity": "sha512-82c6H9UbcSjUrDa3Ld2hIV0C1vqEhB5Toof8370uvgOwfOSV/6PJrmC/XTzky1t5lfwct1XfF2LRvB8v2ff26w==", - "dev": true, - "requires": {} + "integrity": "sha1-gsfl2hBO4JevoDh4jqZrcDcngtU=", + "dev": true }, "gud": { "version": "1.0.0", @@ -22944,7 +6847,7 @@ "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { "ansi-regex": "^2.0.0" @@ -22967,7 +6870,7 @@ "has-color": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", - "integrity": "sha512-kaNz5OTAYYmt646Hkqw50/qyxP2vFnTVu5AQ1Zmk22Kk5+4Qx6BpO8+u7IKsML5fOsFk0ZT0AcCJNYwcvaLBvw==", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", "dev": true }, "has-flag": { @@ -23031,21 +6934,30 @@ "hooker": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha512-t+UerCsQviSymAInD01Pw+Dn/usmz1sRO+3Zk1+lx8eg+WKpD2ulcwWqHHL0+aseRBr+3+vIhiG1K1JTwaIcTA==", + "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", "dev": true }, "hsl-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", "dev": true }, "hsla-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, + "html-encoding-sniffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", + "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "dev": true, + "requires": { + "whatwg-encoding": "^2.0.0" + } + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -23089,6 +7001,17 @@ "requires-port": "^1.0.0" } }, + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, "https-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", @@ -23166,7 +7089,7 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "indent-string": { "version": "4.0.0", @@ -23176,13 +7099,13 @@ "indexes-of": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "requires": { "once": "^1.3.0", "wrappy": "1" @@ -23212,7 +7135,7 @@ "interpret": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha512-CLM8SNMDu7C5psFCn6Wg/tgpj/bKAg7hc2gWqcuR9OD5Ft9PhBpIu8PLicPeis+xDd6YX2ncI8MCA64I9tftIA==" + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=" }, "invariant": { "version": "2.2.4", @@ -23241,13 +7164,13 @@ "is-absolute-url": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", - "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", "dev": true }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-bigint": { "version": "1.0.4", @@ -23286,7 +7209,7 @@ "is-color-stop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", - "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "requires": { "css-color-names": "^0.0.4", @@ -23317,7 +7240,7 @@ "is-directory": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, "is-docker": { @@ -23329,7 +7252,7 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "3.0.0", @@ -23383,6 +7306,12 @@ "isobject": "^3.0.1" } }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -23485,17 +7414,17 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "istanbul": { "version": "0.4.5", "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", - "integrity": "sha512-nMtdn4hvK0HjUlzr1DrKSUY8ychprt8dzHOgY2KXsIhHu5PuQQEOTM27gV9Xblyon7aUH/TSFIjRHEODF/FRPg==", + "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", "dev": true, "requires": { "abbrev": "1.0.x", @@ -23517,25 +7446,25 @@ "abbrev": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", - "integrity": "sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q==", + "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", "dev": true }, "async": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", "dev": true }, "esprima": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A==", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", "dev": true }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA==", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { "inflight": "^1.0.4", @@ -23548,7 +7477,7 @@ "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", - "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, "mkdirp": { @@ -23563,13 +7492,13 @@ "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg==", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", "dev": true }, "supports-color": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", - "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { "has-flag": "^1.0.0" @@ -23847,6 +7776,138 @@ } } }, + "jest-environment-jsdom": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-28.1.3.tgz", + "integrity": "sha512-HnlGUmZRdxfCByd3GM2F100DgQOajUBzEitjGqIREcb45kGjZvRrKUdlaF6escXBdcXNl0OBh+1ZrfeZT3GnAg==", + "dev": true, + "requires": { + "@jest/environment": "^28.1.3", + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/jsdom": "^16.2.4", + "@types/node": "*", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3", + "jsdom": "^19.0.0" + }, + "dependencies": { + "@jest/environment": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-28.1.3.tgz", + "integrity": "sha512-1bf40cMFTEkKyEf585R9Iz1WayDjHoHqvts0XFYEqyKM3cFWDpeMoqKKTAF9LSYQModPUlh8FKptoM2YcMWAXA==", + "dev": true, + "requires": { + "@jest/fake-timers": "^28.1.3", + "@jest/types": "^28.1.3", + "@types/node": "*", + "jest-mock": "^28.1.3" + } + }, + "@jest/fake-timers": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-28.1.3.tgz", + "integrity": "sha512-D/wOkL2POHv52h+ok5Oj/1gOG9HSywdoPtFsRCUmlCILXNn5eIWmcnd3DIiWlJnpGvQtmajqBP95Ei0EimxfLw==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@sinonjs/fake-timers": "^9.1.2", + "@types/node": "*", + "jest-message-util": "^28.1.3", + "jest-mock": "^28.1.3", + "jest-util": "^28.1.3" + } + }, + "@jest/schemas": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", + "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", + "dev": true, + "requires": { + "@sinclair/typebox": "^0.24.1" + } + }, + "@jest/types": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", + "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + } + }, + "@sinclair/typebox": { + "version": "0.24.28", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.28.tgz", + "integrity": "sha512-dgJd3HLOkLmz4Bw50eZx/zJwtBq65nms3N9VBYu5LTjJ883oBFkTyXRlCB/ZGGwqYpJJHA5zW2Ibhl5ngITfow==", + "dev": true + }, + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true + }, + "jest-message-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", + "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^28.1.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^28.1.3", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + } + }, + "jest-mock": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-28.1.3.tgz", + "integrity": "sha512-o3J2jr6dMMWYVH4Lh/NKmDXdosrsJgi4AviS8oXLujcjpCMBb1FMsblDnOXKZKfSiHLxYub1eS0IHuRXsio9eA==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*" + } + }, + "jest-util": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", + "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", + "dev": true, + "requires": { + "@jest/types": "^28.1.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + } + }, + "pretty-format": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", + "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", + "dev": true, + "requires": { + "@jest/schemas": "^28.1.3", + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + } + } + }, "jest-environment-node": { "version": "28.1.2", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-28.1.2.tgz", @@ -24014,8 +8075,7 @@ "jest-pnp-resolver": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz", - "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==", - "requires": {} + "integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==" }, "jest-regex-util": { "version": "28.0.2", @@ -24354,6 +8414,131 @@ "integrity": "sha512-2a6eRxSxp1BW040hFvaJxhsCMI9lT8QB8t14t+NY5tC5rckIR0U9cr2tjOeaFirmEOy6MHvmJnY7zTBHq431Lw==", "dev": true }, + "jsdom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-19.0.0.tgz", + "integrity": "sha512-RYAyjCbxy/vri/CfnjUWJQQtZ3LKlLnDqj+9XLNnJPgEGeirZs3hllKR20re8LUZ6o1b1X4Jat+Qd26zmP41+A==", + "dev": true, + "requires": { + "abab": "^2.0.5", + "acorn": "^8.5.0", + "acorn-globals": "^6.0.0", + "cssom": "^0.5.0", + "cssstyle": "^2.3.0", + "data-urls": "^3.0.1", + "decimal.js": "^10.3.1", + "domexception": "^4.0.0", + "escodegen": "^2.0.0", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^3.0.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^3.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^10.0.0", + "ws": "^8.2.3", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "dev": true + }, + "tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dev": true, + "requires": { + "punycode": "^2.1.1" + } + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "whatwg-url": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-10.0.0.tgz", + "integrity": "sha512-CLxxCmdUby142H5FZzn4D8ikO1cmypvXVQktsgosNy4a4BHrDHeciBBGZhb0bNoR5/MltoCatso+vFjjGx8t0w==", + "dev": true, + "requires": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + } + } + } + }, "jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -24379,7 +8564,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, "json5": { @@ -24575,29 +8760,26 @@ "karma-fail-fast-reporter": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/karma-fail-fast-reporter/-/karma-fail-fast-reporter-1.0.5.tgz", - "integrity": "sha512-B0QzqOCpL1jl0stEvgjW8MI0xE1suQQxqF4EXjL2dF4HnRGz20Qcm2C3DWR6879dBYoV0yKcCqoZaOdEpmuntg==", - "dev": true, - "requires": {} + "integrity": "sha1-9ScyP5jcXx6oEEfwCkuD7etgv3U=", + "dev": true }, "karma-fixture": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/karma-fixture/-/karma-fixture-0.2.6.tgz", - "integrity": "sha512-7jVtBtUclZ7r6BIn5YK3BQO6Xkgyo/v3K51BwXde9Fn884lHV0Gy+UhCzJxsioMh1jCRr0NO+Mkm6EsxdVxRKA==", + "integrity": "sha1-lxzqjCFtc/BwQ5ZMtz8Q4IMAGO8=", "dev": true }, "karma-html2js-preprocessor": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/karma-html2js-preprocessor/-/karma-html2js-preprocessor-1.1.0.tgz", - "integrity": "sha512-SiaPXNxIQjzBnxbi0mOT24zCzjFWBGaxWM/DqnEhp4WbI5kNpiZ35Jb/h7etrob+wiDSuDkltCuxE/fMSayqeQ==", - "dev": true, - "requires": {} + "integrity": "sha1-/Ant8Eu+K7bu6boZaPgmtziAIL0=", + "dev": true }, "karma-qunit": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/karma-qunit/-/karma-qunit-4.1.2.tgz", "integrity": "sha512-taTPqBeHCOlkeKTSzQgIKzAUb79vw3rfbCph+xwwh63tyGjNtljwx91VArhIM9DzIIR3gB9G214wQg+oXI9ycw==", - "dev": true, - "requires": {} + "dev": true }, "karma-remap-coverage": { "version": "0.1.5", @@ -24627,7 +8809,7 @@ "language-tags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz", - "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==", + "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=", "dev": true, "requires": { "language-subtag-registry": "~0.3.2" @@ -24732,19 +8914,19 @@ "lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", "dev": true }, "lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", "dev": true }, "lodash.merge": { @@ -24756,7 +8938,7 @@ "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", "dev": true }, "log4js": { @@ -24788,6 +8970,12 @@ "yallist": "^4.0.0" } }, + "lz-string": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz", + "integrity": "sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==", + "dev": true + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -24815,7 +9003,7 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "match-sorter": { "version": "6.3.1", @@ -24836,7 +9024,7 @@ "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, "merge-stream": { @@ -24853,7 +9041,7 @@ "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", "dev": true }, "micromatch": { @@ -25005,7 +9193,7 @@ "nano-time": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/nano-time/-/nano-time-1.0.0.tgz", - "integrity": "sha512-flnngywOoQ0lLQOTRNexn2gGSNuM9bKj9RZAWSzhQ+UJYaAFG9bac4DW9VHjUAzrOaIcajHybCTHe/bkvozQqA==", + "integrity": "sha1-sFVPaa2J4i0JB/ehKwmTpdlhN+8=", "dev": true, "requires": { "big-integer": "^1.6.16" @@ -25014,7 +9202,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "negotiator": { "version": "0.6.3", @@ -25046,7 +9234,7 @@ "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==" + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" }, "node-releases": { "version": "2.0.6", @@ -25076,7 +9264,7 @@ "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", "dev": true }, "normalize-url": { @@ -25114,13 +9302,19 @@ "num2fraction": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", - "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "nwsapi": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.1.tgz", + "integrity": "sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==", "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { "version": "1.12.2", @@ -25149,7 +9343,7 @@ "object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "requires": { "array-each": "^1.0.1", "array-slice": "^1.0.0", @@ -25204,7 +9398,7 @@ "object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "requires": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" @@ -25213,7 +9407,7 @@ "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "requires": { "isobject": "^3.0.1" } @@ -25247,7 +9441,7 @@ "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "requires": { "wrappy": "1" } @@ -25288,12 +9482,12 @@ "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==" + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "osenv": { "version": "0.1.5", @@ -25343,7 +9537,7 @@ "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "requires": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", @@ -25364,7 +9558,13 @@ "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==" + "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=" + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true }, "parseurl": { "version": "1.3.3", @@ -25375,7 +9575,7 @@ "path": { "version": "0.12.7", "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", - "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", "dev": true, "requires": { "process": "^0.11.1", @@ -25390,7 +9590,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "3.1.1", @@ -25405,7 +9605,7 @@ "path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "requires": { "path-root-regex": "^0.1.0" } @@ -25413,7 +9613,7 @@ "path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==" + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=" }, "path-type": { "version": "4.0.0", @@ -25424,7 +9624,7 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, "picocolors": { @@ -25564,7 +9764,7 @@ "plugin-error": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", - "integrity": "sha512-WzZHcm4+GO34sjFMxQMqZbsz3xiNEgonCskQ9v+IroMmYgk/tas8dG+Hr2D6IbRPybZ12oWpzE/w3cGJ6FJzOw==", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", "dev": true, "requires": { "ansi-cyan": "^0.1.1", @@ -26521,7 +10721,7 @@ "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, "process-nextick-args": { @@ -26579,6 +10779,12 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -26619,15 +10825,14 @@ "version": "7.5.8", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.8.tgz", "integrity": "sha512-ri1Id1WinAX5Jqn9HejiGb8crfRio0Qgu8+MtL36rlTA6RLsMdWt1Az/19A2Qij6uSHUMphEFaTKa4WG+UNHNw==", - "dev": true, - "requires": {} + "dev": true } } }, "q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, "qjobs": { @@ -26702,30 +10907,6 @@ "resolved": "https://registry.npmjs.org/reach-router-hash-history/-/reach-router-hash-history-0.0.3.tgz", "integrity": "sha512-Vg6GIj25DhF15LqlZpdtWJl0uKiwC1pg8uGxEAow+lN2G5nIjwJxEJItGUhUG5MLJgxIu+lbIqoCsuHjSRG42g==" }, - "react": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", - "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2" - } - }, - "react-dom": { - "version": "16.14.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", - "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", - "dev": true, - "peer": true, - "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", - "scheduler": "^0.19.1" - } - }, "react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -26809,7 +10990,7 @@ "reduce-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/reduce-component/-/reduce-component-1.0.1.tgz", - "integrity": "sha512-y0wyCcdQul3hI3xHfIs0vg/jSbboQc/YTOAqaxjFG7At+XSexduuOqBVL9SmOLSwa/ldkbzVzdwuk9s2EKTAZg==", + "integrity": "sha1-4Mk1QsV0UhvqE98PlIjtgqt3xdo=", "dev": true }, "redux": { @@ -26823,8 +11004,7 @@ "redux-thunk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", - "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", - "requires": {} + "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==" }, "regenerate": { "version": "1.4.2", @@ -26932,13 +11112,13 @@ "remove-accents": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==", + "integrity": "sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U=", "dev": true }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { "version": "2.0.2", @@ -26955,7 +11135,7 @@ "requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", "dev": true }, "reselect": { @@ -26984,7 +11164,7 @@ "resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "requires": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" @@ -27012,7 +11192,7 @@ "retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", "dev": true }, "reusify": { @@ -27030,13 +11210,13 @@ "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", "dev": true }, "rgba-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", "dev": true }, "rimraf": { @@ -27064,7 +11244,7 @@ "safe-json-parse": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", - "integrity": "sha512-o0JmTu17WGUaUOHa1l0FPGXKBfijbxK6qoHzlkihsDXxzBHvJcA7zgviKR92Xs841rX9pK16unfphLq0/KqX7A==", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", "dev": true }, "safer-buffer": { @@ -27090,15 +11270,13 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "scheduler": { - "version": "0.19.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", - "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, - "peer": true, "requires": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" + "xmlchars": "^2.2.0" } }, "schema-utils": { @@ -27192,7 +11370,7 @@ "simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, "requires": { "is-arrayish": "^0.3.1" @@ -27336,7 +11514,7 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "stable": { "version": "0.1.8", @@ -27376,12 +11554,6 @@ "fs-extra": "^10.1.0" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -27394,7 +11566,7 @@ "string-template": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", - "integrity": "sha512-Yptehjogou2xm4UJbxJ4CxgZx12HBfeystp0y3x7s4Dj32ltVVG1Gg8YhKjHZkHicuKpZX/ffilA8505VbUbpw==", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", "dev": true }, "string-width": { @@ -27452,6 +11624,12 @@ "es-abstract": "^1.19.5" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -27566,7 +11744,7 @@ "superagent": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/superagent/-/superagent-1.8.5.tgz", - "integrity": "sha512-4h4R6fISQXvgjIqZ8DjONYy3y2XPxgZO0LgHsBI6tDAEhzJLpWuK+thM60SmUiERJOEJzmxlIGx/GP6+azky/A==", + "integrity": "sha1-HA3cOvMOgOuE68BcshItqP6UC1U=", "dev": true, "requires": { "component-emitter": "~1.2.0", @@ -27600,25 +11778,25 @@ "extend": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.0.tgz", - "integrity": "sha512-5mYyg57hpD+sFaJmgNL9BidQ5C7dmJE3U5vzlRWbuqG+8dytvYEoxvKs6Tj5cm3LpMsFvRt20qz1ckezmsOUgQ==", + "integrity": "sha1-WkdDU7nzNT3dgXbf03uRyDpG8dQ=", "dev": true }, "mime": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", - "integrity": "sha512-sAaYXszED5ALBt665F0wMQCUXpGuZsGdopoqcHPdL39ZYdi7uHoZlhrfZfhv8WzivhBzr/oXwaj+yiK5wY8MXQ==", + "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=", "dev": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "qs": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/qs/-/qs-2.3.3.tgz", - "integrity": "sha512-f5M0HQqZWkzU8GELTY8LyMrGkr3bPjKoFtTkwUEqJQbcljbeK8M7mliP9Ia2xoOI6oMerp+QPS7oYJtpGmWe/A==", + "integrity": "sha1-6eha2+ddoLvkyOBHaghikPhjtAQ=", "dev": true } } @@ -27733,6 +11911,12 @@ } } }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -27890,7 +12074,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, "throat": { @@ -27901,13 +12085,13 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "through2": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz", - "integrity": "sha512-/vp02SIbpmVHapNMjox4hDBzykPdAOmH5y3INcKaxGfpEPSCMqzdWXyGfqPYyxoBLo1JpxBrlh3Z9esv0vWUYw==", + "integrity": "sha1-OE51MU1J8y3hLuu4E2uOtrXVnak=", "dev": true, "requires": { "readable-stream": "~2.0.0", @@ -27923,7 +12107,7 @@ "readable-stream": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", - "integrity": "sha512-TXcFfb63BQe1+ySzsHZI/5v1aJPCShfqvWJ64ayNImXMsN1Cd0YGk/wm8KB7/OeessgPc9QvS9Zou8QTkFzsLw==", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -27939,7 +12123,7 @@ "timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", "dev": true }, "tiny-glob": { @@ -27994,7 +12178,7 @@ "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" }, "to-regex-range": { "version": "5.0.1", @@ -28010,6 +12194,25 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, + "tough-cookie": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.0.0.tgz", + "integrity": "sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg==", + "dev": true, + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.1.2" + }, + "dependencies": { + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + } + } + }, "tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -28089,13 +12292,6 @@ "mime-types": "~2.1.24" } }, - "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", - "dev": true, - "peer": true - }, "ua-parser-js": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.31.tgz", @@ -28134,7 +12330,7 @@ "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==" + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=" }, "underscore.string": { "version": "3.3.6", @@ -28185,13 +12381,13 @@ "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "dev": true }, "universalify": { @@ -28213,13 +12409,13 @@ "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, "unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", "dev": true }, "update-browserslist-db": { @@ -28252,7 +12448,7 @@ "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } } @@ -28260,7 +12456,7 @@ "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "util.promisify": { @@ -28278,7 +12474,7 @@ "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, "v8-compile-cache": { @@ -28308,7 +12504,7 @@ "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", "dev": true }, "vendors": { @@ -28320,9 +12516,27 @@ "void-elements": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=", "dev": true }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-3.0.0.tgz", + "integrity": "sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==", + "dev": true, + "requires": { + "xml-name-validator": "^4.0.0" + } + }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -28430,6 +12644,32 @@ "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, + "whatwg-encoding": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", + "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "whatwg-mimetype": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", + "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "dev": true + }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -28470,7 +12710,7 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "wrap-ansi": { @@ -28486,7 +12726,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "2.0.0", @@ -28509,8 +12749,19 @@ "version": "8.4.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.4.2.tgz", "integrity": "sha512-Kbk4Nxyq7/ZWqr/tarI9yIt/+iNNFOjBXEWgTb4ydaNHBNGgvf2QHbS9fdfsndfjFlFwEd4Al+mw83YkaD10ZA==", - "dev": true, - "requires": {} + "dev": true + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true }, "xtend": { "version": "4.0.2", @@ -28556,7 +12807,7 @@ "yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, "requires": { "buffer-crc32": "~0.2.3", diff --git a/package.json b/package.json index 07f38d961cc..36414f23dc2 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { "name": "elementor", "slug": "elementor", - "version": "3.6.8", - "last_beta_version": "3.7.0-beta3", + "version": "3.7.1", + "last_beta_version": "3.7.0-beta4", "last_cloud_version": "3.7.0-cloud1", "prev_stable_version": "3.1.4", "author": "Elementor Team", @@ -33,6 +33,7 @@ "@elementor/eslint-plugin-editor": "^0.4.0", "@playwright/test": "1.21.1", "@reach/router": "^1.3.3", + "@testing-library/dom": "^8.17.1", "@wordpress/babel-plugin-import-jsx-pragma": "~3.2.0", "@wordpress/babel-preset-default": "^3.0.2", "@wordpress/eslint-plugin": "^12.6.0", @@ -64,6 +65,7 @@ "grunt-text-replace": "~0.4.0", "grunt-webpack": "^5.0.0", "grunt-wp-readme-to-markdown-with-extra": "~2.2.0", + "jest-environment-jsdom": "^28.1.3", "karma": "6.4.0", "karma-chrome-launcher": "3.1.1", "karma-coverage": "2.2.0", @@ -96,6 +98,5 @@ "reach-router-hash-history": "0.0.3", "react-redux": "^7.2.6", "write": "^2.0.0" - }, - "last_cloud_version": "3.7.0-cloud1" -} \ No newline at end of file + } +} diff --git a/tests/jest/jest.config.js b/tests/jest/jest.config.js index f52b35cbb1d..7e109ad2a4b 100644 --- a/tests/jest/jest.config.js +++ b/tests/jest/jest.config.js @@ -16,6 +16,7 @@ module.exports = { '^elementor/tests/jest/(.*)$': `${ paths.currentDir }/$1`, ...transformWebpackAliasIntoJestAlias( require( paths.webpackAlias ).resolve.alias ), }, + testEnvironment: 'jsdom', }; function transformWebpackAliasIntoJestAlias( webpackAlias ) { diff --git a/tests/jest/unit/assets/dev/js/admin/new-template/behaviors/lock-pro.test.js b/tests/jest/unit/assets/dev/js/admin/new-template/behaviors/lock-pro.test.js new file mode 100644 index 00000000000..05a61295996 --- /dev/null +++ b/tests/jest/unit/assets/dev/js/admin/new-template/behaviors/lock-pro.test.js @@ -0,0 +1,126 @@ +import { createEvent, fireEvent } from '@testing-library/dom'; +import LockPro from 'elementor-admin/new-template/behaviors/lock-pro'; + +describe( 'New Template - Lock Pro Behavior', () => { + let elements = {}; + + beforeEach( () => { + const lockOptions = { + is_locked: true, + button: { + url: 'http://test.local/activate?utm_source=%%utm_source%%&utm_medium=%%utm_medium%%', + text: 'Locked', + }, + badge: { + text: 'pro', + icon: 'eicon-lock', + }, + }; + + window.document.body.innerHTML = ` +
+ + + + + + + + + + + `; + + elements = { + form: document.querySelector( 'form' ), + submitButton: document.querySelector( `.submit` ), + lockButton: document.querySelector( `.lock-button` ), + templateType: document.querySelector( `.template-type` ), + lockBadge: document.querySelector( `.badge` ), + lockBadgeText: document.querySelector( `.badge-text` ), + lockBadgeIcon: document.querySelector( `.badge-icon` ), + }; + } ); + + it( 'Should lock the UI for locked template type', () => { + // Arrange. + const lockProBehavior = new LockPro( elements ); + lockProBehavior.bindEvents(); + + // Act. + fireEvent.change( elements.templateType, { target: { value: 'locked' } } ); + + // Assert. + expect( elements.submitButton.classList.contains( 'e-hidden' ) ).toBe( true ); + expect( elements.lockButton.classList.contains( 'e-hidden' ) ).toBe( false ); + expect( elements.lockButton.innerText ).toBe( 'Locked' ); + expect( elements.lockBadge.classList.contains( 'e-hidden' ) ).toBe( false ); + expect( elements.lockBadgeText.innerText ).toBe( 'pro' ); + expect( elements.lockBadgeIcon.classList.contains( 'eicon-lock' ) ).toBe( true ); + } ); + + it( 'Should unlock the UI for unlocked template type', () => { + // Arrange. + const lockProBehavior = new LockPro( elements ); + lockProBehavior.bindEvents(); + + // Act - Change twice since the unlocked state is the default. + fireEvent.change( elements.templateType, { target: { value: 'locked' } } ); + fireEvent.change( elements.templateType, { target: { value: 'unlocked' } } ); + + // Assert. + expect( elements.submitButton.classList.contains( 'e-hidden' ) ).toBe( false ); + expect( elements.submitButton.value ).toBe( 'Submit' ); + expect( elements.lockButton.classList.contains( 'e-hidden' ) ).toBe( true ); + expect( elements.lockBadge.classList.contains( 'e-hidden' ) ).toBe( true ); + } ); + + it( 'Should prevent form submission for locked template type', () => { + // Arrange. + const lockProBehavior = new LockPro( elements ); + lockProBehavior.bindEvents(); + + fireEvent.change( elements.templateType, { target: { value: 'locked' } } ); + + // Act. + const submitEvent = createEvent.submit( elements.form ); + + fireEvent( elements.form, submitEvent ); + + // Assert. + expect( submitEvent.defaultPrevented ).toBe( true ); + } ); + + it( 'Should allow form submission for unlocked template type', () => { + // Arrange. + const lockProBehavior = new LockPro( elements ); + lockProBehavior.bindEvents(); + + // Change twice since the unlocked state is the default. + fireEvent.change( elements.templateType, { target: { value: 'locked' } } ); + fireEvent.change( elements.templateType, { target: { value: 'unlocked' } } ); + + // Act. + const submitEvent = createEvent.submit( elements.form ); + + fireEvent( elements.form, submitEvent ); + + // Assert. + expect( submitEvent.defaultPrevented ).toBe( false ); + } ); + + it( 'Should replace lock link placeholders', () => { + // Arrange. + const lockProBehavior = new LockPro( elements ); + lockProBehavior.bindEvents(); + + // Act. + fireEvent.change( elements.templateType, { target: { value: 'locked' } } ); + + // Assert. + expect( elements.lockButton.href ).toBe( 'http://test.local/activate?utm_source=wp-add-new&utm_medium=wp-dash' ); + } ); +} ); From a496a0d487b1675d5f891e62c53ac969fabbf0d1 Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Mon, 15 Aug 2022 11:48:53 +0300 Subject: [PATCH 030/130] Tweak: Import/Export CLI and UI mechanisms were merged into a unified service [ED-7157] (#19044) --- .../import-export/assets/js/hooks/use-kit.js | 7 +- .../compatibility/base-adapter.php | 23 +- .../import-export/compatibility/envato.php | 39 +- .../compatibility/kit-library.php | 6 +- .../import-export/directories/base.php | 138 ----- .../import-export/directories/content.php | 32 -- .../directories/custom-post-type-title.php | 53 -- .../import-export/directories/plugins.php | 29 - .../import-export/directories/post-type.php | 153 ----- .../import-export/directories/root.php | 130 ----- .../import-export/directories/templates.php | 107 ---- .../import-export/directories/wp-content.php | 57 -- .../directories/wp-custom-post-type-title.php | 34 -- .../directories/wp-post-type.php | 56 -- core/app/modules/import-export/export.php | 70 --- core/app/modules/import-export/import.php | 150 ----- core/app/modules/import-export/iterator.php | 57 -- core/app/modules/import-export/module.php | 541 ++++++++++-------- .../import-export/processes/export.php | 304 ++++++++++ .../import-export/processes/import.php | 441 ++++++++++++++ .../import-export/processes/process-base.php | 58 ++ .../runners/elementor-content.php | 257 +++++++++ .../modules/import-export/runners/plugins.php | 89 +++ .../import-export/runners/runner-base.php | 51 ++ .../import-export/runners/site-settings.php | 87 +++ .../import-export/runners/taxonomies.php | 239 ++++++++ .../import-export/runners/templates.php | 126 ++++ .../import-export/runners/wp-content.php | 154 +++++ core/app/modules/import-export/utils.php | 81 +++ core/app/modules/import-export/wp-cli.php | 160 ++---- core/utils/import-export/wp-exporter.php | 80 +-- core/utils/import-export/wp-import.php | 228 +++----- core/utils/str.php | 11 + .../app/import-export/mock/envato-kit.zip | Bin 0 -> 2347 bytes .../mock/kit-library-manifest-only.zip | Bin 0 -> 646 bytes .../app/import-export/mock/sample-kit.zip | Bin 0 -> 11766 bytes .../core/app/import-export/test-export.php | 347 +++++++++++ .../core/app/import-export/test-import.php | 494 ++++++++++++++++ .../utils/import-export/test-wp-exporter.php | 59 +- .../utils/import-export/test-wp-import.php | 23 +- .../phpunit/elementor/core/utils/test-str.php | 10 + 41 files changed, 3257 insertions(+), 1724 deletions(-) delete mode 100644 core/app/modules/import-export/directories/base.php delete mode 100644 core/app/modules/import-export/directories/content.php delete mode 100644 core/app/modules/import-export/directories/custom-post-type-title.php delete mode 100644 core/app/modules/import-export/directories/plugins.php delete mode 100644 core/app/modules/import-export/directories/post-type.php delete mode 100644 core/app/modules/import-export/directories/root.php delete mode 100644 core/app/modules/import-export/directories/templates.php delete mode 100644 core/app/modules/import-export/directories/wp-content.php delete mode 100644 core/app/modules/import-export/directories/wp-custom-post-type-title.php delete mode 100644 core/app/modules/import-export/directories/wp-post-type.php delete mode 100644 core/app/modules/import-export/export.php delete mode 100644 core/app/modules/import-export/import.php delete mode 100644 core/app/modules/import-export/iterator.php create mode 100644 core/app/modules/import-export/processes/export.php create mode 100644 core/app/modules/import-export/processes/import.php create mode 100644 core/app/modules/import-export/processes/process-base.php create mode 100644 core/app/modules/import-export/runners/elementor-content.php create mode 100644 core/app/modules/import-export/runners/plugins.php create mode 100644 core/app/modules/import-export/runners/runner-base.php create mode 100644 core/app/modules/import-export/runners/site-settings.php create mode 100644 core/app/modules/import-export/runners/taxonomies.php create mode 100644 core/app/modules/import-export/runners/templates.php create mode 100644 core/app/modules/import-export/runners/wp-content.php create mode 100644 core/app/modules/import-export/utils.php create mode 100644 tests/phpunit/elementor/core/app/import-export/mock/envato-kit.zip create mode 100644 tests/phpunit/elementor/core/app/import-export/mock/kit-library-manifest-only.zip create mode 100644 tests/phpunit/elementor/core/app/import-export/mock/sample-kit.zip create mode 100644 tests/phpunit/elementor/core/app/import-export/test-export.php create mode 100644 tests/phpunit/elementor/core/app/import-export/test-import.php diff --git a/core/app/modules/import-export/assets/js/hooks/use-kit.js b/core/app/modules/import-export/assets/js/hooks/use-kit.js index c01a2da93bc..34acd6af3bd 100644 --- a/core/app/modules/import-export/assets/js/hooks/use-kit.js +++ b/core/app/modules/import-export/assets/js/hooks/use-kit.js @@ -9,6 +9,7 @@ const KIT_STATUS_MAP = Object.freeze( { EXPORTED: 'exported', ERROR: 'error', } ), + UPLOAD_KIT_KEY = 'elementor_upload_kit', IMPORT_KIT_KEY = 'elementor_import_kit', EXPORT_KIT_KEY = 'elementor_export_kit'; @@ -22,11 +23,8 @@ export default function useKit() { uploadKit = ( { file, kitLibraryNonce } ) => { setAjax( { data: { - action: IMPORT_KIT_KEY, + action: UPLOAD_KIT_KEY, e_import_file: file, - data: JSON.stringify( { - stage: 1, - } ), ...( kitLibraryNonce ? { e_kit_library_nonce: kitLibraryNonce } : {} ), }, } ); @@ -36,7 +34,6 @@ export default function useKit() { data: { action: IMPORT_KIT_KEY, data: { - stage: 2, session, include, overrideConditions, diff --git a/core/app/modules/import-export/compatibility/base-adapter.php b/core/app/modules/import-export/compatibility/base-adapter.php index e3db2ee31ac..135cb8599b9 100644 --- a/core/app/modules/import-export/compatibility/base-adapter.php +++ b/core/app/modules/import-export/compatibility/base-adapter.php @@ -9,23 +9,26 @@ exit; // Exit if accessed directly } -abstract class Base_Adapter extends Base_Object { - - protected $importer; - - public static function is_compatibility_needed( array $manifest_data, array $import_settings ) { +abstract class Base_Adapter { + + /** + * @param array $manifest_data + * @param array $meta + * @return false + */ + public static function is_compatibility_needed( array $manifest_data, array $meta ) { return false; } - public function get_manifest_data( array $manifest_data ) { + public function adapt_manifest( array $manifest_data ) { return $manifest_data; } - public function get_template_data( array $template_data, array $template_settings ) { - return $template_data; + public function adapt_site_settings( array $site_settings, array $manifest_data, $path ) { + return $site_settings; } - public function __construct( Import $importer ) { - $this->importer = $importer; + public function adapt_template( array $template_data, array $template_settings ) { + return $template_data; } } diff --git a/core/app/modules/import-export/compatibility/envato.php b/core/app/modules/import-export/compatibility/envato.php index a836ffc83ef..b68bbcb0451 100644 --- a/core/app/modules/import-export/compatibility/envato.php +++ b/core/app/modules/import-export/compatibility/envato.php @@ -2,6 +2,7 @@ namespace Elementor\Core\App\Modules\ImportExport\Compatibility; +use Elementor\Core\App\Modules\ImportExport\Utils as ImportExportUtils; use Elementor\Plugin; if ( ! defined( 'ABSPATH' ) ) { @@ -9,33 +10,27 @@ } class Envato extends Base_Adapter { - public static function is_compatibility_needed( array $manifest_data, array $import_settings ) { + public static function is_compatibility_needed( array $manifest_data, array $meta ) { return ! empty( $manifest_data['manifest_version'] ); } - public function get_manifest_data( array $manifest_data ) { + public function adapt_manifest( array $manifest_data ) { $templates = $manifest_data['templates']; $manifest_data['templates'] = []; foreach ( $templates as $template ) { - // Envato store their global kit styles as a 'global.json' template file, this needs to be converted to 'site-settings.json' file - if ( ! empty( $template['metadata']['template_type'] ) && 'global-styles' === $template['metadata']['template_type'] ) { - $global_file_data = $this->importer->read_json_file( str_replace( '.json', '', $template['source'] ) ); - - $site_settings = [ 'settings' => $global_file_data['page_settings'] ]; - - $site_settings_file_destination = $this->importer->get_archive_file_full_path( 'site-settings.json' ); - - file_put_contents( $site_settings_file_destination, wp_json_encode( $site_settings ) ); + // Envato store their global kit styles as a 'global.json' template file. + // We need to be able to know the path to this specifc 'global.json' since it functions as the site-settings.json + $is_global = ! empty( $template['metadata']['template_type'] ) && 'global-styles' === $template['metadata']['template_type']; + if ( $is_global ) { + // Adding the path of the 'global.json' template to the manifest which will be used in the future. + $manifest_data['path-to-envto-site-settings'] = $template['source']; // Getting the site-settings because Envato stores them in one of the posts. $kit = Plugin::$instance->kits_manager->get_active_kit(); - $kit_tabs = $kit->get_tabs(); - unset( $kit_tabs['settings-site-identity'] ); - $manifest_data['site-settings'] = array_keys( $kit_tabs ); continue; @@ -46,6 +41,7 @@ public function get_manifest_data( array $manifest_data ) { // Evanto uses for "name" instead of "title" $template['title'] = $template['name']; + // Envato specifying an exact path to the template rather than using its "ID" as an index. // This extracts the "file name" part out of our exact source list and we treat that as an ID. $file_name_without_extension = str_replace( '.json', '', basename( $template['source'] ) ); @@ -57,7 +53,20 @@ public function get_manifest_data( array $manifest_data ) { return $manifest_data; } - public function get_template_data( array $template_data, array $template_settings ) { + public function adapt_site_settings( array $site_settings, array $manifest_data, $path ) { + if ( empty( $manifest_data['path-to-envto-site-settings'] ) ) { + return $site_settings; + } + + $global_file_path = $path . $manifest_data['path-to-envto-site-settings']; + $global_file_data = ImportExportUtils::read_json_file( $global_file_path ); + + return [ + 'settings' => $global_file_data['page_settings'], + ]; + } + + public function adapt_template( array $template_data, array $template_settings ) { if ( ! empty( $template_data['metadata']['elementor_pro_conditions'] ) ) { foreach ( $template_data['metadata']['elementor_pro_conditions'] as $condition ) { list ( $type, $name, $sub_name, $sub_id ) = array_pad( explode( '/', $condition ), 4, '' ); diff --git a/core/app/modules/import-export/compatibility/kit-library.php b/core/app/modules/import-export/compatibility/kit-library.php index 5cdc12c70a1..b6987f48586 100644 --- a/core/app/modules/import-export/compatibility/kit-library.php +++ b/core/app/modules/import-export/compatibility/kit-library.php @@ -7,11 +7,11 @@ } class Kit_Library extends Base_Adapter { - public static function is_compatibility_needed( array $manifest_data, array $import_settings ) { - return ! empty( $import_settings['referrer'] ) && 'kit-library' === $import_settings['referrer']; + public static function is_compatibility_needed( array $manifest_data, array $meta ) { + return ! empty( $meta['referrer'] ) && 'kit-library' === $meta['referrer']; } - public function get_manifest_data( array $manifest_data ) { + public function adapt_manifest( array $manifest_data ) { if ( ! empty( $manifest_data['content']['page'] ) ) { foreach ( $manifest_data['content']['page'] as & $page ) { $page['thumbnail'] = false; diff --git a/core/app/modules/import-export/directories/base.php b/core/app/modules/import-export/directories/base.php deleted file mode 100644 index 8f9a8e15b8a..00000000000 --- a/core/app/modules/import-export/directories/base.php +++ /dev/null @@ -1,138 +0,0 @@ -iterator = $iterator; - - if ( $iterator instanceof Export ) { - $this->exporter = $iterator; - } else { - $this->importer = $iterator; - } - - $this->parent = $parent; - - $this->register_directories(); - } - - final public function get_path() { - $path = $this->get_name(); - - if ( $this->parent ) { - $parent_name = $this->parent->get_name(); - - if ( $parent_name ) { - $parent_name .= '/'; - } - - $path = $parent_name . $path; - } - - return $path; - } - - final public function run_export() { - $this->exporter->set_current_archive_path( $this->get_path() ); - - $manifest_data = $this->export(); - - foreach ( $this->sub_directories as $sub_directory ) { - $manifest_data[ $sub_directory->get_name() ] = $sub_directory->run_export(); - } - - return $manifest_data; - } - - final public function run_import( array $settings ) { - $this->importer->set_current_archive_path( $this->get_path() ); - - $meta_data = $this->import( $settings ); - - foreach ( $this->sub_directories as $sub_directory ) { - $sub_directory_name = $sub_directory->get_name(); - - if ( ! isset( $settings[ $sub_directory_name ] ) ) { - continue; - } - - $meta_data[ $sub_directory_name ] = $sub_directory->run_import( $settings[ $sub_directory_name ] ); - } - - return $meta_data; - } - - /** - * @return array - */ - protected function export() { - return []; - } - - /** - * @param array $import_settings - * @return array - */ - protected function import( array $import_settings ) { - return []; - } - - protected function get_default_sub_directories() { - return []; - } - - private function register_directories() { - $sub_directories = $this->get_default_sub_directories(); - $path = $this->get_path(); - - /** - * Kit sub directories. - * - * Filters sub directories when importing/exporting kits. - * - * The dynamic portion of the hook name, `$path`, refers to the directory path. - * - * @param array $sub_directories A list of sub directories. - * @param Elementor\Core\App\Modules\ImportExport\Directories\Base $this The base class instance. - */ - $sub_directories = apply_filters( "elementor/kit/import-export/directory/{$path}", $sub_directories, $this ); - - $this->sub_directories = $sub_directories; - } -} diff --git a/core/app/modules/import-export/directories/content.php b/core/app/modules/import-export/directories/content.php deleted file mode 100644 index e6819ef5241..00000000000 --- a/core/app/modules/import-export/directories/content.php +++ /dev/null @@ -1,32 +0,0 @@ -iterator, $this, $post_type ); - } - - return $sub_directories; - } -} diff --git a/core/app/modules/import-export/directories/custom-post-type-title.php b/core/app/modules/import-export/directories/custom-post-type-title.php deleted file mode 100644 index b2c56de8e4d..00000000000 --- a/core/app/modules/import-export/directories/custom-post-type-title.php +++ /dev/null @@ -1,53 +0,0 @@ -custom_post_types = $custom_post_types; - - parent::__construct( $iterator, $parent ); - } - - protected function get_name() { - return 'custom-post-type-title'; - } - - protected function get_default_sub_directories() { - - $post_types = get_post_types( [ - 'public' => true, - 'can_export' => true, - ] ); - - foreach ( $post_types as $post_type ) { - if ( ! in_array( $post_type, $this->custom_post_types ) ) { - unset( $post_types[ $post_type ] ); - } - } - - $sub_directories = []; - - foreach ( $post_types as $post_type ) { - $sub_directories[] = new WP_Custom_Post_Type_Title( $this->iterator, $this, $post_type ); - } - - return $sub_directories; - } -} diff --git a/core/app/modules/import-export/directories/plugins.php b/core/app/modules/import-export/directories/plugins.php deleted file mode 100644 index aed615de24c..00000000000 --- a/core/app/modules/import-export/directories/plugins.php +++ /dev/null @@ -1,29 +0,0 @@ -iterator->get_settings( 'plugins' ); - - return $included_plugins; - } - - protected function import( array $import_settings ) { - return null; - } - -} diff --git a/core/app/modules/import-export/directories/post-type.php b/core/app/modules/import-export/directories/post-type.php deleted file mode 100644 index 1231caa2b69..00000000000 --- a/core/app/modules/import-export/directories/post-type.php +++ /dev/null @@ -1,153 +0,0 @@ -post_type = $post_type; - - if ( 'page' === $post_type ) { - $this->init_page_on_front_data(); - } - } - - public function export() { - $query_args = [ - 'post_type' => $this->post_type, - 'post_status' => 'publish', - 'posts_per_page' => -1, - 'meta_query' => [ - [ - 'key' => '_elementor_edit_mode', - 'compare' => 'EXISTS', - ], - [ - 'key' => '_elementor_data', - 'compare' => 'EXISTS', - ], - [ - 'key' => '_elementor_data', - 'compare' => '!=', - 'value' => '[]', - ], - ], - ]; - - $query = new \WP_Query( $query_args ); - - $manifest_data = []; - - foreach ( $query->posts as $post ) { - $document = Plugin::$instance->documents->get( $post->ID ); - - $post_manifest_data = [ - 'title' => $post->post_title, - 'excerpt' => $post->post_excerpt, - 'doc_type' => $document->get_name(), - 'thumbnail' => get_the_post_thumbnail_url( $post ), - 'url' => get_permalink( $post ), - ]; - - if ( $post->ID === $this->page_on_front_id ) { - $post_manifest_data['show_on_front'] = true; - } - - $manifest_data[ $post->ID ] = $post_manifest_data; - - $this->exporter->add_json_file( $post->ID, $document->get_export_data() ); - } - - return $manifest_data; - } - - public function import_post( $id, array $post_settings ) { - $post_data = $this->importer->read_json_file( $id ); - - $post_attributes = [ - 'post_title' => $post_settings['title'], - 'post_type' => $this->post_type, - 'post_status' => 'publish', - ]; - - if ( ! empty( $post_settings['excerpt'] ) ) { - $post_attributes['post_excerpt'] = $post_settings['excerpt']; - } - - $new_document = Plugin::$instance->documents->create( - $post_settings['doc_type'], - $post_attributes - ); - - if ( is_wp_error( $new_document ) ) { - return $new_document; - } - - $post_data['import_settings'] = $post_settings; - - $new_document->import( $post_data ); - - $new_id = $new_document->get_main_id(); - - if ( ! empty( $post_settings['show_on_front'] ) ) { - update_option( 'page_on_front', $new_id ); - - if ( ! $this->show_page_on_front ) { - update_option( 'show_on_front', 'page' ); - } - } - - return $new_id; - } - - protected function get_name() { - return $this->post_type; - } - - protected function import( array $import_settings ) { - $result = [ - 'succeed' => [], - 'failed' => [], - ]; - - foreach ( $import_settings as $id => $post_settings ) { - try { - $import = $this->import_post( $id, $post_settings ); - - if ( is_wp_error( $import ) ) { - $result['failed'][ $id ] = $import->get_error_message(); - - continue; - } - - $result['succeed'][ $id ] = $import; - } catch ( \Error $error ) { - $result['failed'][ $id ] = $error->getMessage(); - } - } - - return $result; - } - - private function init_page_on_front_data() { - $this->show_page_on_front = 'page' === get_option( 'show_on_front' ); - - if ( $this->show_page_on_front && $this->exporter ) { - $this->page_on_front_id = (int) get_option( 'page_on_front' ); - } - } -} diff --git a/core/app/modules/import-export/directories/root.php b/core/app/modules/import-export/directories/root.php deleted file mode 100644 index 00d8f066fae..00000000000 --- a/core/app/modules/import-export/directories/root.php +++ /dev/null @@ -1,130 +0,0 @@ -kits_manager->get_active_kit(); - - $exporter_settings = $this->exporter->get_settings(); - - $include = $exporter_settings['include']; - - $include_site_settings = in_array( 'settings', $include, true ); - - if ( $include_site_settings ) { - $kit_data = $kit->get_export_data(); - - $excluded_kit_settings_keys = [ - 'site_name', - 'site_description', - 'site_logo', - 'site_favicon', - ]; - - foreach ( $excluded_kit_settings_keys as $setting_key ) { - unset( $kit_data['settings'][ $setting_key ] ); - } - - $this->exporter->add_json_file( 'site-settings', $kit_data ); - } - - $kit_post = $kit->get_post(); - - $manifest_data = [ - 'name' => sanitize_title( $exporter_settings['kitInfo']['title'] ), - 'title' => $exporter_settings['kitInfo']['title'], - 'description' => $exporter_settings['kitInfo']['description'], - 'author' => get_the_author_meta( 'display_name', $kit_post->post_author ), - 'version' => Module::FORMAT_VERSION, - 'elementor_version' => ELEMENTOR_VERSION, - 'created' => gmdate( 'Y-m-d H:i:s' ), - 'thumbnail' => get_the_post_thumbnail_url( $kit_post ), - 'site' => get_site_url(), - ]; - - if ( $include_site_settings ) { - $kit_tabs = $kit->get_tabs(); - - unset( $kit_tabs['settings-site-identity'] ); - - $manifest_data['site-settings'] = array_keys( $kit_tabs ); - } - - return $manifest_data; - } - - protected function import( array $import_settings ) { - $include = $this->importer->get_settings( 'include' ); - - if ( ! in_array( 'settings', $include, true ) ) { - return; - } - - $kit = Plugin::$instance->kits_manager->get_active_kit(); - - $old_settings = $kit->get_meta( PageManager::META_KEY ); - - if ( ! $old_settings ) { - $old_settings = []; - } - - $new_settings = $this->importer->read_json_file( 'site-settings' ); - - $new_settings = $new_settings['settings']; - - if ( ! empty( $old_settings['custom_colors'] ) ) { - $new_settings['custom_colors'] = array_merge( $old_settings['custom_colors'], $new_settings['custom_colors'] ); - } - - if ( ! empty( $old_settings['custom_typography'] ) ) { - $new_settings['custom_typography'] = array_merge( $old_settings['custom_typography'], $new_settings['custom_typography'] ); - } - - $new_settings = array_replace_recursive( $old_settings, $new_settings ); - - Plugin::$instance->kits_manager->create_new_kit( $import_settings['title'], $new_settings ); - } - - protected function get_default_sub_directories() { - $sub_directories = []; - - $include = $this->iterator->get_settings( 'include' ); - - if ( in_array( 'templates', $include, true ) ) { - $sub_directories[] = new Templates( $this->iterator, $this ); - } - - if ( in_array( 'content', $include, true ) ) { - - $custom_post_types = $this->iterator->get_settings( 'selectedCustomPostTypes' ); - - $sub_directories[] = new Content( $this->iterator, $this ); - - $sub_directories[] = new WP_Content( $this->iterator, $this, $custom_post_types ); - - if ( ! empty( $custom_post_types ) ) { - $sub_directories[] = new Custom_Post_Type_Title( $this->iterator, $this, $custom_post_types ); - } - } - - if ( in_array( 'plugins', $include, true ) ) { - $sub_directories[] = new Plugins( $this->iterator, $this ); - } - - return $sub_directories; - } -} diff --git a/core/app/modules/import-export/directories/templates.php b/core/app/modules/import-export/directories/templates.php deleted file mode 100644 index f5f768dcc41..00000000000 --- a/core/app/modules/import-export/directories/templates.php +++ /dev/null @@ -1,107 +0,0 @@ - Source_Local::CPT, - 'post_status' => 'publish', - 'posts_per_page' => -1, - 'meta_query' => [ - [ - 'key' => Document::TYPE_META_KEY, - 'value' => $template_types, - ], - ], - ]; - - $templates_query = new \WP_Query( $query_args ); - - $manifest_data = []; - - foreach ( $templates_query->posts as $template_post ) { - $template_id = $template_post->ID; - - $template_document = Plugin::$instance->documents->get( $template_id ); - - $template_export_data = $template_document->get_export_data(); - - $this->exporter->add_json_file( $template_id, $template_export_data ); - - $manifest_data[ $template_id ] = $template_document->get_export_summary(); - } - - return $manifest_data; - } - - protected function import( array $import_settings ) { - $result = [ - 'succeed' => [], - 'failed' => [], - ]; - - foreach ( $import_settings as $id => $template_settings ) { - try { - $import = $this->import_template( $id, $template_settings ); - - if ( is_wp_error( $import ) ) { - $result['failed'][ $id ] = $import->get_error_message(); - - continue; - } - - $result['succeed'][ $id ] = $import; - } catch ( \Error $error ) { - $result['failed'][ $id ] = $error->getMessage(); - } - } - - return $result; - } - - private function import_template( $id, array $template_settings ) { - $template_data = $this->importer->read_json_file( $id ); - - $doc_type = $template_settings['doc_type']; - - $new_document = Plugin::$instance->documents->create( - $doc_type, - [ - 'post_title' => $template_settings['title'], - 'post_type' => Source_Local::CPT, - 'post_status' => 'publish', - ] - ); - - if ( is_wp_error( $new_document ) ) { - return $new_document; - } - - $template_data['import_settings'] = $template_settings; - $template_data['id'] = $id; - - foreach ( $this->importer->get_adapters() as $adapter ) { - $template_data = $adapter->get_template_data( $template_data, $template_settings ); - } - - $new_document->import( $template_data ); - - return $new_document->get_main_id(); - } -} diff --git a/core/app/modules/import-export/directories/wp-content.php b/core/app/modules/import-export/directories/wp-content.php deleted file mode 100644 index 4c1c14e8683..00000000000 --- a/core/app/modules/import-export/directories/wp-content.php +++ /dev/null @@ -1,57 +0,0 @@ -custom_post_types = $custom_post_types; - - parent::__construct( $iterator, $parent ); - } - - protected function get_name() { - return 'wp-content'; - } - - protected function get_default_sub_directories() { - $post_types = get_post_types( [ - 'public' => true, - 'can_export' => true, - ] ); - - if ( null !== $this->custom_post_types ) { - foreach ( $post_types as $post_type ) { - if ( ! in_array( $post_type, $this->custom_post_types ) ) { - unset( $post_types[ $post_type ] ); - } - } - } - - $native_post_types = [ - 'page' => 'page', - 'post' => 'post', - 'nav_menu_item' => 'nav_menu_item', - ]; - - $post_types_to_export = array_merge( $native_post_types, $post_types ); - - $sub_directories = []; - - foreach ( $post_types_to_export as $post_type ) { - $sub_directories[] = new WP_Post_Type( $this->iterator, $this, $post_type ); - } - - return $sub_directories; - } -} diff --git a/core/app/modules/import-export/directories/wp-custom-post-type-title.php b/core/app/modules/import-export/directories/wp-custom-post-type-title.php deleted file mode 100644 index 7add3b804b5..00000000000 --- a/core/app/modules/import-export/directories/wp-custom-post-type-title.php +++ /dev/null @@ -1,34 +0,0 @@ -post_type = $post_type; - } - - public function export() { - - $post_type_object = get_post_type_object( $this->post_type ); - return [ - 'name' => $post_type_object->name, - 'label' => $post_type_object->label, - ]; - } - - protected function get_name() { - return $this->post_type; - } - -} diff --git a/core/app/modules/import-export/directories/wp-post-type.php b/core/app/modules/import-export/directories/wp-post-type.php deleted file mode 100644 index f652edc6dd2..00000000000 --- a/core/app/modules/import-export/directories/wp-post-type.php +++ /dev/null @@ -1,56 +0,0 @@ -post_type; - } - - public function __construct( Iterator $iterator, Base $parent, $post_type ) { - parent::__construct( $iterator, $parent ); - - $this->post_type = $post_type; - } - - public function export() { - $wp_exporter = new WP_Exporter( [ - 'content' => $this->post_type, - 'status' => 'publish', - 'limit' => 20, - 'meta_query' => [ - [ - 'key' => '_elementor_edit_mode', - 'compare' => 'NOT EXISTS', - ], - ], - 'include_post_featured_image_as_attachment' => true, // Will export 'featured_image' as attachment. - ] ); - - $export_result = $wp_exporter->run(); - - $this->exporter->add_file( $this->post_type . '.xml', $export_result['xml'] ); - - return $export_result['ids']; - } - - protected function import( array $import_settings ) { - $wp_importer = new WP_Import( $this->importer->get_archive_file_full_path( $this->post_type . '.xml' ), [ - 'fetch_attachments' => true, - ] ); - - $result = $wp_importer->run(); - - return $result['summary']['posts']; - } -} diff --git a/core/app/modules/import-export/export.php b/core/app/modules/import-export/export.php deleted file mode 100644 index ee3e72fa443..00000000000 --- a/core/app/modules/import-export/export.php +++ /dev/null @@ -1,70 +0,0 @@ -init_zip_archive(); - - $root_directory = new Root( $this ); - - $manifest_data = $root_directory->run_export(); - - /** - * Manifest data from exported kit. - * - * Filters the manifest data of any exported kit. - * - * @param array $manifest_data Manifest data. - * @param Export $this The export instance. - */ - $manifest_data = apply_filters( 'elementor/kit/export/manifest-data', $manifest_data, $this ); - - $this->set_current_archive_path( '' ); - - $this->add_json_file( 'manifest', $manifest_data ); - - $this->zip_archive->close(); - - return [ - 'manifest' => $manifest_data, - 'file_name' => $this->archive_file_name, - ]; - } - - public function add_json_file( $name, $content, $json_flags = null ) { - $this->add_file( $name . '.json', wp_json_encode( $content, $json_flags ) ); - } - - public function add_file( $file_name, $content ) { - $this->zip_archive->addFromString( $this->get_archive_file_path( $file_name ), $content ); - } - - private function init_zip_archive() { - $zip_archive = new \ZipArchive(); - - $this->temp_dir = Plugin::$instance->uploads_manager->create_unique_dir(); - - $this->archive_file_name = $this->temp_dir . 'kit.zip'; - - $zip_archive->open( $this->archive_file_name, \ZipArchive::CREATE | \ZipArchive::OVERWRITE ); - - $this->zip_archive = $zip_archive; - } -} diff --git a/core/app/modules/import-export/import.php b/core/app/modules/import-export/import.php deleted file mode 100644 index 0acf95e1da8..00000000000 --- a/core/app/modules/import-export/import.php +++ /dev/null @@ -1,150 +0,0 @@ -temp_dir = $this->get_settings( 'session' ); - - $manifest_data = $this->read_json_file( 'manifest' ); - - $manifest_data = $this->adapt_manifest_structure( $manifest_data ); - - $root_directory = new Root( $this ); - - add_filter( 'elementor/document/save/data', [ $this, 'prevent_saving_elements_on_post_creation' ], 10, 2 ); - - $imported_posts = $root_directory->run_import( $manifest_data ); - - remove_filter( 'elementor/document/save/data', [ $this, 'prevent_saving_elements_on_post_creation' ], 10 ); - - $map_old_new_post_ids = $this->map_old_new_post_ids( $imported_posts ); - $original_site = ! empty( $manifest_data['site'] ) ? $manifest_data['site'] : null; - - $this->save_elements_of_imported_posts( $map_old_new_post_ids ); - - $this->update_object_id_of_imported_menu_items( $map_old_new_post_ids, $original_site ); - - return $imported_posts; - } - - public function prevent_saving_elements_on_post_creation( $data, $document ) { - if ( isset( $data['elements'] ) ) { - $this->documents_elements[ $document->get_main_id() ] = $data['elements']; - - $data['elements'] = []; - } - - return $data; - } - - final public function read_json_file( $name ) { - $name = $this->get_archive_file_full_path( $name . '.json' ); - - return json_decode( Utils::file_get_contents( $name, true ), true ); - } - - final public function get_adapters() { - return $this->adapters; - } - - final public function adapt_manifest_structure( array $manifest_data ) { - $this->init_adapters( $manifest_data ); - - foreach ( $this->adapters as $adapter ) { - $manifest_data = $adapter->get_manifest_data( $manifest_data ); - } - - return $manifest_data; - } - - private function init_adapters( array $manifest_data ) { - /** @var Base_Adapter[] $adapter_types */ - $adapter_types = [ Envato::class, Kit_Library::class ]; - - foreach ( $adapter_types as $adapter_type ) { - if ( $adapter_type::is_compatibility_needed( $manifest_data, $this->get_settings() ) ) { - $this->adapters[] = new $adapter_type( $this ); - } - } - } - - private function save_elements_of_imported_posts( $map_old_new_post_ids ) { - foreach ( $this->documents_elements as $new_id => $document_elements ) { - $document = Plugin::$instance->documents->get( $new_id ); - $updated_elements = $document->on_import_replace_dynamic_content( $document_elements, $map_old_new_post_ids ); - $document->save( [ 'elements' => $updated_elements ] ); - } - } - - /** - * Update the imported manu items - * - * @param $map_old_new_post_ids Array of the old post's IDs vs the new post's IDs - * @param $original_site The base URL of the site that the kit was exported from. - * @return void - */ - private function update_object_id_of_imported_menu_items( $map_old_new_post_ids, $original_site ) { - foreach ( $map_old_new_post_ids as $new_post_id ) { - if ( 'nav_menu_item' !== get_post_type( $new_post_id ) ) { - continue; - } - - $post_meta = get_post_meta( $new_post_id ); - $menu_item_object_id = (int) $post_meta['_menu_item_object_id'][0]; - - switch ( $post_meta['_menu_item_type'][0] ) { - case 'post_type': - $update_meta = update_post_meta( $new_post_id, '_menu_item_object_id', $map_old_new_post_ids[ $menu_item_object_id ] ); - - if ( ! $update_meta ) { - wp_delete_post( $new_post_id ); - } - break; - - case 'custom': - $url = $post_meta['_menu_item_url'][0]; - - $migrated_url = Url::migrate( $url, $original_site ); - - if ( $migrated_url !== $url ) { - update_post_meta( $new_post_id, '_menu_item_url', $migrated_url ); - } - break; - } - } - } - - private function map_old_new_post_ids( $imported_posts ) { - $map_old_new_post_ids = []; - - foreach ( $imported_posts as $imported_post ) { - if ( isset( $imported_post['succeed'] ) ) { - $map_old_new_post_ids += $imported_post['succeed']; - } else { - $map_old_new_post_ids += $this->map_old_new_post_ids( $imported_post ); - } - } - - return $map_old_new_post_ids; - } -} diff --git a/core/app/modules/import-export/iterator.php b/core/app/modules/import-export/iterator.php deleted file mode 100644 index ec017a5dc53..00000000000 --- a/core/app/modules/import-export/iterator.php +++ /dev/null @@ -1,57 +0,0 @@ -get_current_archive_path() . $file_name; - } - - public function get_archive_file_full_path( $file_name ) { - return $this->temp_dir . $this->get_archive_file_path( $file_name ); - } - - public function get_current_archive_path() { - return $this->current_archive_path; - } - - public function set_current_archive_path( $path ) { - if ( $path ) { - $path .= '/'; - } - - $this->current_archive_path = $path; - } - - public function __construct( array $settings ) { - if ( ! class_exists( '\ZipArchive' ) ) { - throw new \Error( self::ZIP_ARCHIVE_MODULE_NOT_INSTALLED_KEY ); - } - - $server = new Server(); - - $server_write_permissions = $server->get_write_permissions(); - - if ( $server_write_permissions['warning'] ) { - throw new \Error( self::NO_WRITE_PERMISSIONS_KEY ); - } - - $this->set_settings( $settings ); - } -} diff --git a/core/app/modules/import-export/module.php b/core/app/modules/import-export/module.php index c73e9f644b6..9461e16069a 100644 --- a/core/app/modules/import-export/module.php +++ b/core/app/modules/import-export/module.php @@ -1,17 +1,15 @@ register_actions(); + + if ( ElementorUtils::is_wp_cli() ) { + \WP_CLI::add_command( 'elementor kit', WP_CLI::class ); + } + } + public function get_init_settings() { if ( ! Plugin::$instance->app->is_current() ) { return []; @@ -63,96 +77,200 @@ public function get_init_settings() { return $this->get_config_data(); } - public function get_summary_titles() { - $summary_titles = []; + /** + * Register the import/export tab in elementor tools. + */ + public function register_settings_tab( Tools $tools ) { + $tools->add_tab( 'import-export-kit', [ + 'label' => esc_html__( 'Import / Export Kit', 'elementor' ), + 'sections' => [ + 'intro' => [ + 'label' => esc_html__( 'Template Kits', 'elementor' ), + 'callback' => function() { + $this->render_import_export_tab_content(); + }, + 'fields' => [], + ], + ], + ] ); + } - $document_types = Plugin::$instance->documents->get_document_types(); + /** + * Render the import/export tab content. + */ + private function render_import_export_tab_content() { + $intro_text_link = sprintf( '
%s', esc_html__( 'Learn more', 'elementor' ) ); - foreach ( $document_types as $name => $document_type ) { - $summary_titles['templates'][ $name ] = [ - 'single' => $document_type::get_title(), - 'plural' => $document_type::get_plural_title(), - ]; - } + $intro_text = sprintf( + /* translators: 1: New line break, 2: Learn More link. */ + __( 'Design sites faster with a template kit that contains some or all components of a complete site, like templates, content & site settings.%1$sYou can import a kit and apply it to your site, or export the elements from this site to be used anywhere else. %2$s', 'elementor' ), + '
', + $intro_text_link + ); - $post_types = get_post_types_by_support( 'elementor' ); - $post_types[] = 'nav_menu_item'; + $content_data = [ + 'export' => [ + 'title' => esc_html__( 'Export a Template Kit', 'elementor' ), + 'button' => [ + 'url' => Plugin::$instance->app->get_base_url() . '#/export', + 'text' => esc_html__( 'Start Export', 'elementor' ), + ], + 'description' => esc_html__( 'Bundle your whole site - or just some of its elements - to be used for another website.', 'elementor' ), + 'link' => [ + 'url' => 'https://go.elementor.com/wp-dash-import-export-export-flow/', + 'text' => esc_html__( 'Learn More', 'elementor' ), + ], + ], + 'import' => [ + 'title' => esc_html__( 'Import a Template Kit', 'elementor' ), + 'button' => [ + 'url' => Plugin::$instance->app->get_base_url() . '#/import', + 'text' => esc_html__( 'Start Import', 'elementor' ), + ], + 'description' => esc_html__( 'Apply the design and settings of another site to this one.', 'elementor' ), + 'link' => [ + 'url' => 'https://go.elementor.com/wp-dash-import-export-import-flow/', + 'text' => esc_html__( 'Learn More', 'elementor' ), + ], + ], + ]; - foreach ( $post_types as $post_type ) { - if ( Source_Local::CPT === $post_type ) { - continue; - } + $home_page_editor_url = $this->get_elementor_editor_home_page_url(); + $editor_page_link = $home_page_editor_url ? $home_page_editor_url : $this->get_recently_edited_elementor_editor_page_url(); - $post_type_object = get_post_type_object( $post_type ); + $info_text = esc_html__( 'Even after you import and apply a Template Kit, you can undo it by restoring a previous version of your site.', 'elementor' ) . '
'; + $info_text .= sprintf( '%2$s', $editor_page_link . '#e:run:panel/global/open&e:route:panel/history/revisions', esc_html__( 'Open Site Settings > History > Revisions.', 'elementor' ) ); + ?> - $summary_titles['content'][ $post_type ] = [ - 'single' => $post_type_object->labels->singular_name, - 'plural' => $post_type_object->label, - ]; - } +
+

- $custom_post_types = $this->get_registered_cpt_names(); - if ( ! empty( $custom_post_types ) ) { - foreach ( $custom_post_types as $custom_post_type ) { +
+ +
+
+

+ + + +
+

+ +
+ +
- $custom_post_types_object = get_post_type_object( $custom_post_type ); - //cpt data appears in two arrays: - //1. content object: in order to show the export summary when completed in getLabel function - $summary_titles['content'][ $custom_post_type ] = [ - 'single' => $custom_post_types_object->labels->singular_name, - 'plural' => $custom_post_types_object->label, - ]; +

+
+ $custom_post_types_object->labels->singular_name, - 'plural' => $custom_post_types_object->label, - ]; - } - } + /** + * Upload a kit zip file and get the kit data. + * + * Assigning the Import process to the 'import' property, + * so it will be available to use in different places such as: WP_Cli, Pro, etc. + * + * @param string $file Path to the file. + * @param string $referrer Referrer of the file 'local' or 'kit-library'. + * @return array + * @throws \Exception + */ + public function upload_kit( $file, $referrer ) { + $this->import = new Import( $file, [ 'referrer' => $referrer ] ); - $active_kit = Plugin::$instance->kits_manager->get_active_kit(); + return [ + 'session' => $this->import->get_session_id(), + 'manifest' => $this->import->get_manifest(), + 'conflicts' => $this->import->get_settings_selected_override_conditions(), + ]; + } - foreach ( $active_kit->get_tabs() as $key => $tab ) { - $summary_titles['site-settings'][ $key ] = $tab->get_title(); - } + /** + * Import a kit by session_id. + * Upload and import a kit by kit zip file. + * + * Assigning the Import process to the 'import' property, + * so it will be available to use in different places such as: WP_Cli, Pro, etc. + * + * @param string $path Path to the file or session_id. + * @param array $settings Settings the import use to determine which content to import. + * (e.g: include, selected_plugins, selected_cpt, selected_override_conditions, etc.) + * @return array + * @throws \Exception + */ + public function import_kit( $path, $settings ) { + $this->import = new Import( $path, $settings ); + $this->import->register_default_runners(); - return $summary_titles; + return $this->import->run(); } /** - * Retrieve custom post type names. + * Export a kit. * - * @since 3.6.0 - * @access public + * Assigning the Export process to the 'export' property, + * so it will be available to use in different places such as: WP_Cli, Pro, etc. * - * @return array custom post type names. + * @param array $settings Settings the export use to determine which content to export. + * (e.g: include, kit_info, selected_plugins, selected_cpt, etc.) + * @return array + * @throws \Exception */ - public function get_registered_cpt_names() { + public function export_kit( $settings ) { + $this->export = new Export( $settings ); + $this->export->register_default_runners(); - $post_types = get_post_types( [ - 'public' => true, - 'can_export' => true, - ] ); + return $this->export->run(); + } - unset( - $post_types['attachment'], - $post_types['page'], - $post_types['post'], - $post_types[ Landing_Pages_Module::CPT ], - $post_types[ Source_Local::CPT ] - ); + /** + * Register appropriate actions. + */ + private function register_actions() { + add_action( 'admin_init', function() { + if ( wp_doing_ajax() && + isset( $_POST['action'] ) && + isset( $_POST['_nonce'] ) && + wp_verify_nonce( $_POST['_nonce'], Ajax::NONCE_KEY ) && + current_user_can( 'manage_options' ) + ) { + $this->maybe_handle_ajax(); + } + } ); - $custom_post_types = []; + $page_id = Tools::PAGE_ID; - foreach ( $post_types as $post_type ) { - array_push( $custom_post_types, $post_type ); - } + add_action( "elementor/admin/after_create_settings/{$page_id}", [ $this, 'register_settings_tab' ] ); + } - return $custom_post_types; + /** + * Assign each ajax action to a method. + */ + private function maybe_handle_ajax() { + // phpcs:ignore WordPress.Security.NonceVerification.Missing + switch ( $_POST['action'] ) { + case static::EXPORT_TRIGGER_KEY: + $this->handle_export_kit(); + break; + + case static::UPLOAD_TRIGGER_KEY: + $this->handle_upload_kit(); + break; + + case static::IMPORT_TRIGGER_KEY: + $this->handle_import_kit(); + break; + + default: + break; + } } - private function import_stage_1() { + /** + * Handle upload kit ajax request. + */ + private function handle_upload_kit() { // PHPCS - Already validated in caller function. if ( ! empty( $_POST['e_import_file'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing if ( @@ -179,178 +297,152 @@ private function import_stage_1() { } $file_name = Plugin::$instance->uploads_manager->create_temp_file( $remote_zip_request['body'], 'kit.zip' ); + $referrer = static::REFERRER_KIT_LIBRARY; } else { // PHPCS - Already validated in caller function. $file_name = $_FILES['e_import_file']['tmp_name']; // phpcs:ignore WordPress.Security.NonceVerification.Missing + $referrer = static::REFERRER_LOCAL; } - $extraction_result = Plugin::$instance->uploads_manager->extract_and_validate_zip( $file_name, [ 'json', 'xml' ] ); + $uploaded_kit = $this->upload_kit( $file_name, $referrer ); + $session_dir = $uploaded_kit['session']; + $manifest = $uploaded_kit['manifest']; + $conflicts = $uploaded_kit['conflicts']; if ( ! empty( $file_url ) ) { Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $file_name ) ); } - $session_dir = $extraction_result['extraction_directory']; - - $manifest_file_content = Utils::file_get_contents( $session_dir . 'manifest.json', true ); - - if ( ! $manifest_file_content ) { - throw new \Error( self::MANIFEST_ERROR_KEY ); - } - - $manifest_data = json_decode( $manifest_file_content, true ); - - // In case that the manifest content is not a valid JSON or empty. - if ( ! $manifest_data ) { - throw new \Error( self::MANIFEST_ERROR_KEY ); - } - - if ( isset( $manifest_data['plugins'] ) && ! current_user_can( 'install_plugins' ) ) { + if ( isset( $manifest['plugins'] ) && ! current_user_can( 'install_plugins' ) ) { throw new \Error( static::PERMISSIONS_ERROR_KEY ); } - $manifest_data = $this->import->adapt_manifest_structure( $manifest_data ); - $result = [ 'session' => $session_dir, - 'manifest' => $manifest_data, + 'manifest' => $manifest, ]; + if ( ! empty( $conflicts ) ) { + $result['conflicts'] = $conflicts; + } + + // For BC with our PRO plugin. $result = apply_filters( 'elementor/import/stage_1/result', $result ); - return $result; + wp_send_json_success( $result ); } - private function import_stage_2( $settings_directory ) { - set_time_limit( 0 ); - - $result = $this->import->run(); + /** + * Handle import kit ajax request. + */ + private function handle_import_kit() { + // PHPCS - Already validated in caller function + $settings = json_decode( stripslashes( $_POST['data'] ), true ); // phpcs:ignore WordPress.Security.NonceVerification.Missing + $tmp_folder_id = $settings['session']; - Plugin::$instance->uploads_manager->remove_file_or_dir( $settings_directory ); + $import = $this->import_kit( $tmp_folder_id, $settings ); - return $result; + wp_send_json_success( $import ); } - private function on_admin_init() { - if ( ! isset( $_POST['action'] ) || self::IMPORT_TRIGGER_KEY !== $_POST['action'] || ! wp_verify_nonce( $_POST['_nonce'], Ajax::NONCE_KEY ) ) { - return; - } - - $import_settings = json_decode( stripslashes( $_POST['data'] ), true ); + /** + * Handle export kit ajax request. + */ + private function handle_export_kit() { + // PHPCS - Already validated in caller function + $settings = json_decode( stripslashes( $_POST['data'] ), true ); // phpcs:ignore WordPress.Security.NonceVerification.Missing + $export = $this->export_kit( $settings ); - // Set the Request's state as an Elementor upload request, in order to support unfiltered file uploads. - Plugin::$instance->uploads_manager->set_elementor_upload_state( true ); + $file_name = $export['file_name']; + $file = ElementorUtils::file_get_contents( $file_name ); - try { - $this->import = new Import( $import_settings ); + if ( ! $file ) { + throw new \Error( esc_html__( 'Could not read the exported file', 'elementor' ) ); + } - if ( 1 === $import_settings['stage'] ) { - $result = $this->import_stage_1(); - } elseif ( 2 === $import_settings['stage'] ) { - $result = $this->import_stage_2( $import_settings['session'] ); + Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $file_name ) ); - // Adding the most updated data of the summaryTitles, in case that the data was changed during the process by new installed plugins. - $result['configData'] = $this->get_config_data(); - } + $result = [ + 'manifest' => $export['manifest'], + 'file' => base64_encode( $file ), + ]; - wp_send_json_success( $result ); - } catch ( \Error $error ) { - wp_send_json_error( $error->getMessage() ); - } + wp_send_json_success( $result ); } - private function on_init() { - if ( ! isset( $_POST['action'] ) || self::EXPORT_TRIGGER_KEY !== $_POST['action'] || ! wp_verify_nonce( $_POST['_nonce'], Ajax::NONCE_KEY ) ) { - return; - } + /** + * Get config data that will be exposed to the frontend. + */ + private function get_config_data() { + $export_nonce = wp_create_nonce( 'elementor_export' ); + $export_url = add_query_arg( [ '_nonce' => $export_nonce ], Plugin::$instance->app->get_base_url() ); - $export_settings = json_decode( stripslashes( $_POST['data'] ), true ); + return [ + 'exportURL' => $export_url, + 'summaryTitles' => $this->get_summary_titles(), + 'builtinWpPostTypes' => ImportExportUtils::get_builtin_wp_post_types(), + 'elementorPostTypes' => ImportExportUtils::get_elementor_post_types(), + 'isUnfilteredFilesEnabled' => Uploads_Manager::are_unfiltered_uploads_enabled(), + 'elementorHomePageUrl' => $this->get_elementor_home_page_url(), + 'recentlyEditedElementorPageUrl' => $this->get_recently_edited_elementor_page_url(), + ]; + } - try { - $this->export = new Export( self::merge_properties( [], $export_settings, [ 'include', 'kitInfo', 'plugins', 'selectedCustomPostTypes' ] ) ); + /** + * Get labels of Elementor document types, Elementor Post types, WordPress Post types and Custom Post types. + */ + private function get_summary_titles() { + $summary_titles = []; - $export_result = $this->export->run(); + $document_types = Plugin::$instance->documents->get_document_types(); - $file_name = $export_result['file_name']; + foreach ( $document_types as $name => $document_type ) { + $summary_titles['templates'][ $name ] = [ + 'single' => $document_type::get_title(), + 'plural' => $document_type::get_plural_title(), + ]; + } - $file = Utils::file_get_contents( $file_name ); + $elementor_post_types = ImportExportUtils::get_elementor_post_types(); + $wp_builtin_post_types = ImportExportUtils::get_builtin_wp_post_types(); + $post_types = array_merge( $elementor_post_types, $wp_builtin_post_types ); - Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $file_name ) ); + foreach ( $post_types as $post_type ) { + $post_type_object = get_post_type_object( $post_type ); - wp_send_json_success( [ - 'manifest' => $export_result['manifest'], - 'file' => base64_encode( $file ), - ] ); - } catch ( \Error $error ) { - wp_send_json_error( $error->getMessage() ); + $summary_titles['content'][ $post_type ] = [ + 'single' => $post_type_object->labels->singular_name, + 'plural' => $post_type_object->label, + ]; } - } - - private function render_import_export_tab_content() { - $intro_text_link = sprintf( '%s', esc_html__( 'Learn more', 'elementor' ) ); - $intro_text = sprintf( - /* translators: 1: New line break, 2: Learn More link. */ - __( 'Design sites faster with a Website kit that contains some or all components of a complete site, like templates, content & site settings.%1$sYou can import a kit and apply it to your site, or export the elements from this site to be used anywhere else. %2$s', 'elementor' ), - '
', - $intro_text_link - ); - - $content_data = [ - 'export' => [ - 'title' => esc_html__( 'Export a Website Kit', 'elementor' ), - 'button' => [ - 'url' => Plugin::$instance->app->get_base_url() . '#/export', - 'text' => esc_html__( 'Start Export', 'elementor' ), - ], - 'description' => esc_html__( 'Bundle your whole site - or just some of its elements - to be used for another website.', 'elementor' ), - 'link' => [ - 'url' => 'https://go.elementor.com/wp-dash-import-export-export-flow/', - 'text' => esc_html__( 'Learn More', 'elementor' ), - ], - ], - 'import' => [ - 'title' => esc_html__( 'Import a Website Kit', 'elementor' ), - 'button' => [ - 'url' => Plugin::$instance->app->get_base_url() . '#/import', - 'text' => esc_html__( 'Start Import', 'elementor' ), - ], - 'description' => esc_html__( 'Apply the design and settings of another site to this one.', 'elementor' ), - 'link' => [ - 'url' => 'https://go.elementor.com/wp-dash-import-export-import-flow/', - 'text' => esc_html__( 'Learn More', 'elementor' ), - ], - ], - ]; + $custom_post_types = ImportExportUtils::get_registered_cpt_names(); + if ( ! empty( $custom_post_types ) ) { + foreach ( $custom_post_types as $custom_post_type ) { - $home_page_editor_url = $this->get_elementor_editor_home_page_url(); - $editor_page_link = $home_page_editor_url ? $home_page_editor_url : $this->get_recently_edited_elementor_editor_page_url(); + $custom_post_types_object = get_post_type_object( $custom_post_type ); + // CPT data appears in two arrays: + // 1. content object: in order to show the export summary when completed in getLabel function + $summary_titles['content'][ $custom_post_type ] = [ + 'single' => $custom_post_types_object->labels->singular_name, + 'plural' => $custom_post_types_object->label, + ]; - $info_text = esc_html__( 'Even after you import and apply a Website Kit, you can undo it by restoring a previous version of your site.', 'elementor' ) . '
'; - $info_text .= sprintf( '%2$s', $editor_page_link . '#e:run:panel/global/open&e:route:panel/history/revisions', esc_html__( 'Open Site Settings > History > Revisions.', 'elementor' ) ); - ?> + // 2. customPostTypes object: in order to actually export the data + $summary_titles['content']['customPostTypes'][ $custom_post_type ] = [ + 'single' => $custom_post_types_object->labels->singular_name, + 'plural' => $custom_post_types_object->label, + ]; + } + } -
-

+ $active_kit = Plugin::$instance->kits_manager->get_active_kit(); -
- -
-
-

- - - -
-

- -
- -
+ foreach ( $active_kit->get_tabs() as $key => $tab ) { + $summary_titles['site-settings'][ $key ] = $tab->get_title(); + } -

-
- 1 ] ); + $query = ElementorUtils::get_recently_edited_posts_query( [ 'posts_per_page' => 1 ] ); if ( ! isset( $query->post ) ) { return ''; @@ -384,7 +476,7 @@ private function get_recently_edited_elementor_page_url() { } private function get_recently_edited_elementor_editor_page_url() { - $query = Utils::get_recently_edited_posts_query( [ 'posts_per_page' => 1 ] ); + $query = ElementorUtils::get_recently_edited_posts_query( [ 'posts_per_page' => 1 ] ); if ( ! isset( $query->post ) ) { return ''; @@ -414,51 +506,4 @@ private function get_elementor_editor_page_url( $page_id ) { return $document ? $document->get_edit_url() : ''; } - - private function get_config_data() { - $export_nonce = wp_create_nonce( 'elementor_export' ); - - $export_url = add_query_arg( [ '_nonce' => $export_nonce ], Plugin::$instance->app->get_base_url() ); - - return [ - 'exportURL' => $export_url, - 'summaryTitles' => $this->get_summary_titles(), - 'isUnfilteredFilesEnabled' => Uploads_Manager::are_unfiltered_uploads_enabled(), - 'elementorHomePageUrl' => $this->get_elementor_home_page_url(), - 'recentlyEditedElementorPageUrl' => $this->get_recently_edited_elementor_page_url(), - ]; - } - - public function register_settings_tab( Tools $tools ) { - $tools->add_tab( 'import-export-kit', [ - 'label' => esc_html__( 'Import / Export Kit', 'elementor' ), - 'sections' => [ - 'intro' => [ - 'label' => esc_html__( 'Website Kits', 'elementor' ), - 'callback' => function() { - $this->render_import_export_tab_content(); - }, - 'fields' => [], - ], - ], - ] ); - } - - public function __construct() { - add_action( 'init', function() { - $this->on_init(); - } ); - - add_action( 'admin_init', function() { - $this->on_admin_init(); - } ); - - $page_id = Tools::PAGE_ID; - - add_action( "elementor/admin/after_create_settings/{$page_id}", [ $this, 'register_settings_tab' ] ); - - if ( Utils::is_wp_cli() ) { - \WP_CLI::add_command( 'elementor kit', WP_CLI::class ); - } - } } diff --git a/core/app/modules/import-export/processes/export.php b/core/app/modules/import-export/processes/export.php new file mode 100644 index 00000000000..6c7c901fd78 --- /dev/null +++ b/core/app/modules/import-export/processes/export.php @@ -0,0 +1,304 @@ +settings_include = ! empty( $settings['include'] ) ? $settings['include'] : null; + $this->settings_kit_info = ! empty( $settings['kitInfo'] ) ? $settings['kitInfo'] : null; + $this->settings_selected_plugins = isset( $settings['plugins'] ) ? $settings['plugins'] : null; + $this->settings_selected_custom_post_types = isset( $settings['selectedCustomPostTypes'] ) ? $settings['selectedCustomPostTypes'] : null; + } + + /** + * Execute the export process. + * + * @return array The export data output. + * @throws \Exception + */ + public function run() { + if ( empty( $this->runners ) ) { + throw new \Exception( 'Please specify export runners.' ); + } + + $this->set_default_settings(); + + $this->init_zip_archive(); + $this->init_manifest_data(); + + $data = [ + 'include' => $this->settings_include, + 'selected_plugins' => $this->settings_selected_plugins, + 'selected_custom_post_types' => $this->settings_selected_custom_post_types, + ]; + + foreach ( $this->runners as $runner ) { + if ( $runner->should_export( $data ) ) { + $export_result = $runner->export( $data ); + $this->handle_export_result( $export_result ); + } + } + + $this->add_json_file( 'manifest', $this->manifest_data ); + + $zip_file_name = $this->zip->filename; + $this->zip->close(); + + return [ + 'manifest' => $this->manifest_data, + 'file_name' => $zip_file_name, + ]; + } + + /** + * Set default settings for the export. + */ + public function set_default_settings() { + if ( ! is_array( $this->get_settings_include() ) ) { + $this->settings_include( $this->get_default_settings_include() ); + } + + if ( ! is_array( $this->get_settings_kit_info() ) ) { + $this->settings_kit_info( $this->get_default_settings_kit_info() ); + } + + if ( ! is_array( $this->get_settings_selected_custom_post_types() ) && in_array( 'content', $this->settings_include, true ) ) { + $this->settings_selected_custom_post_types( $this->get_default_settings_custom_post_types() ); + } + + if ( ! is_array( $this->get_settings_selected_plugins() ) && in_array( 'plugins', $this->settings_include, true ) ) { + $this->settings_selected_plugins( $this->get_default_settings_selected_plugins() ); + } + } + + public function settings_include( $include ) { + $this->settings_include = $include; + } + + public function get_settings_include() { + return $this->settings_include; + } + + private function settings_kit_info( $kit_info ) { + $this->settings_kit_info = $kit_info; + } + + private function get_settings_kit_info() { + return $this->settings_kit_info; + } + + public function settings_selected_custom_post_types( $selected_custom_post_types ) { + $this->settings_selected_custom_post_types = $selected_custom_post_types; + } + + public function get_settings_selected_custom_post_types() { + return $this->settings_selected_custom_post_types; + } + + public function settings_selected_plugins( $plugins ) { + $this->settings_selected_plugins = $plugins; + } + + public function get_settings_selected_plugins() { + return $this->settings_selected_plugins; + } + + /** + * Get the default settings of which content types should be exported. + * + * @return array + */ + private function get_default_settings_include() { + return [ 'templates', 'content', 'settings', 'plugins' ]; + } + + /** + * Get the default settings of the kit info. + * + * @return array + */ + private function get_default_settings_kit_info() { + return [ + 'title' => 'kit', + 'description' => '', + ]; + } + + /** + * Get the default settings of the plugins that should be exported. + * + * @return array{name: string, plugin:string, pluginUri: string, version: string} + */ + private function get_default_settings_selected_plugins() { + $installed_plugins = Plugin::$instance->wp->get_plugins(); + + return $installed_plugins->map( function ( $item, $key ) { + return [ + 'name' => $item['Name'], + 'plugin' => $key, + 'pluginUri' => $item['PluginURI'], + 'version' => $item['Version'], + ]; + } )->all(); + } + + /** + * Get the default settings of all the custom post types that should be exported. + * Should be all the custom post types that are not built in to WordPress and not part of Elementor. + * + * @return array + */ + private function get_default_settings_custom_post_types() { + return Utils::get_registered_cpt_names(); + } + + /** + * Init the zip archive. + */ + private function init_zip_archive() { + if ( ! class_exists( '\ZipArchive' ) ) { + throw new \Error( static::ZIP_ARCHIVE_MODULE_MISSING ); + } + + $zip = new \ZipArchive(); + + $temp_dir = Plugin::$instance->uploads_manager->create_unique_dir(); + + $zip_file_name = $temp_dir . sanitize_title( $this->settings_kit_info['title'] ) . '.zip'; + + $zip->open( $zip_file_name, \ZipArchive::CREATE | \ZipArchive::OVERWRITE ); + + $this->zip = $zip; + } + + /** + * Init the manifest data and add some basic info to it. + */ + private function init_manifest_data() { + $kit_post = Plugin::$instance->kits_manager->get_active_kit()->get_post(); + + $manifest_data = [ + 'name' => sanitize_title( $this->settings_kit_info['title'] ), + 'title' => $this->settings_kit_info['title'], + 'description' => $this->settings_kit_info['description'], + 'author' => get_the_author_meta( 'display_name', $kit_post->post_author ), + 'version' => Module::FORMAT_VERSION, + 'elementor_version' => ELEMENTOR_VERSION, + 'created' => gmdate( 'Y-m-d H:i:s' ), + 'thumbnail' => get_the_post_thumbnail_url( $kit_post ), + 'site' => get_site_url(), + ]; + + $this->manifest_data = $manifest_data; + } + + /** + * Handle the export process output. + * Add the manifest data from the runner to the manifest.json file. + * Create files according to the files array that should be exported by the runner. + * + * @param array $export_result + */ + private function handle_export_result( $export_result ) { + foreach ( $export_result['manifest'] as $data ) { + $this->manifest_data += $data; + } + + if ( isset( $export_result['files']['path'] ) ) { + $export_result['files'] = [ $export_result['files'] ]; + } + + foreach ( $export_result['files'] as $file ) { + $file_extension = pathinfo( $file['path'], PATHINFO_EXTENSION ); + if ( empty( $file_extension ) ) { + $this->add_json_file( + $file['path'], + $file['data'] + ); + } else { + $this->add_file( + $file['path'], + $file['data'] + ); + } + } + } + + /** + * Add json file to the zip archive. + * + * @param string $path The relative path to the file. + * @param array $content The content of the file. + * @param int $json_flags + */ + private function add_json_file( $path, array $content, $json_flags = 0 ) { + if ( ! Str::ends_with( $path, '.json' ) ) { + $path .= '.json'; + } + + $this->add_file( $path, wp_json_encode( $content, $json_flags ) ); + } + + /** + * Add file to the zip archive. + * + * @param string $file + * @param string $content The content of the file. + */ + private function add_file( $file, $content ) { + $this->zip->addFromString( $file, $content ); + } +} diff --git a/core/app/modules/import-export/processes/import.php b/core/app/modules/import-export/processes/import.php new file mode 100644 index 00000000000..74e06388b7d --- /dev/null +++ b/core/app/modules/import-export/processes/import.php @@ -0,0 +1,441 @@ +extracted_directory_path = $this->extract_zip( $path ); + } else { + $elementor_tmp_directory = Plugin::$instance->uploads_manager->get_temp_dir(); + $path = $elementor_tmp_directory . basename( $path ); + + if ( ! is_dir( $path ) ) { + throw new \Exception( static::SESSION_DOES_NOT_EXITS_ERROR ); + } + + $this->extracted_directory_path = $path . '/'; + } + + $this->session_id = basename( $this->extracted_directory_path ); + $this->settings_referrer = ! empty( $settings['referrer'] ) ? $settings['referrer'] : 'local'; + + // Using isset and not empty is important since empty array is a valid option for those arrays. + $this->settings_include = ! empty( $settings['include'] ) ? $settings['include'] : null; + $this->settings_selected_override_conditions = isset( $settings['overrideConditions'] ) ? $settings['overrideConditions'] : null; + $this->settings_selected_custom_post_types = isset( $settings['selectedCustomPostTypes'] ) ? $settings['selectedCustomPostTypes'] : null; + $this->settings_selected_plugins = isset( $settings['plugins'] ) ? $settings['plugins'] : null; + + $this->manifest = $this->read_manifest_json(); + $this->site_settings = $this->read_site_settings_json(); + + $this->set_default_settings(); + } + + /** + * Set default settings for the import. + */ + public function set_default_settings() { + if ( ! is_array( $this->get_settings_include() ) ) { + $this->settings_include( $this->get_default_settings_include() ); + } + + if ( ! is_array( $this->get_settings_selected_override_conditions() ) ) { + $this->settings_selected_override_conditions( $this->get_default_settings_override_conditions() ); + } + + if ( ! is_array( $this->get_settings_selected_custom_post_types() ) ) { + $this->settings_selected_custom_post_types( $this->get_default_settings_custom_post_types() ); + } + + if ( ! is_array( $this->get_settings_selected_plugins() ) ) { + $this->settings_selected_plugins( $this->get_default_settings_plugins() ); + } + } + + /** + * Execute the import process. + * + * @return array The imported data output. + * @throws \Exception + */ + public function run() { + if ( empty( $this->runners ) ) { + throw new \Exception( 'Please specify import runners.' ); + } + + $data = [ + 'include' => $this->settings_include, + 'manifest' => $this->manifest, + 'site_settings' => $this->site_settings, + 'selected_plugins' => $this->settings_selected_plugins, + 'extracted_directory_path' => $this->extracted_directory_path, + 'selected_custom_post_types' => $this->settings_selected_custom_post_types, + ]; + + add_filter( 'elementor/document/save/data', [ $this, 'prevent_saving_elements_on_post_creation' ], 10, 2 ); + + // Set the Request's state as an Elementor upload request, in order to support unfiltered file uploads. + Plugin::$instance->uploads_manager->set_elementor_upload_state( true ); + + foreach ( $this->runners as $runner ) { + if ( $runner->should_import( $data ) ) { + $this->imported_data = $this->imported_data + $runner->import( $data, $this->imported_data ); + } + } + + // After the upload complete, set the elementor upload state back to false. + Plugin::$instance->uploads_manager->set_elementor_upload_state( false ); + + remove_filter( 'elementor/document/save/data', [ $this, 'prevent_saving_elements_on_post_creation' ], 10 ); + + $map_old_new_post_ids = Utils::map_old_new_post_ids( $this->imported_data ); + $this->save_elements_of_imported_posts( $map_old_new_post_ids ); + + Plugin::$instance->uploads_manager->remove_file_or_dir( $this->extracted_directory_path ); + return $this->imported_data; + } + + public function get_manifest() { + return $this->manifest; + } + + public function get_extracted_directory_path() { + return $this->extracted_directory_path; + } + + public function get_session_id() { + return $this->session_id; + } + + public function get_adapters() { + return $this->adapters; + } + + /** + * Get settings by key. + * Used for backward compatibility. + * + * @param string $key The key of the setting. + */ + public function get_settings( $key ) { + switch ( $key ) { + case 'include': + return $this->get_settings_include(); + + case 'overrideConditions': + // BC: Remove it in the future, + // the consumer should work with the actual override_conditions object and not with his keys. + return array_keys( $this->get_settings_selected_override_conditions() ); + + case 'selectedCustomPostTypes': + return $this->get_settings_selected_custom_post_types(); + + case 'plugins': + return $this->get_settings_selected_plugins(); + + default: + return []; + } + } + + public function settings_include( array $settings_include ) { + $this->settings_include = $settings_include; + + return $this; + } + + public function get_settings_include() { + return $this->settings_include; + } + + public function settings_referrer( $settings_referrer ) { + $this->settings_referrer = $settings_referrer; + + return $this; + } + + public function get_settings_referrer() { + return $this->settings_referrer; + } + + public function settings_selected_override_conditions( array $settings_selected_override_conditions ) { + $this->settings_selected_override_conditions = $settings_selected_override_conditions; + + return $this; + } + + public function get_settings_selected_override_conditions() { + return $this->settings_selected_override_conditions; + } + + public function settings_selected_custom_post_types( array $settings_selected_custom_post_types ) { + $this->settings_selected_custom_post_types = $settings_selected_custom_post_types; + + return $this; + } + + public function get_settings_selected_custom_post_types() { + return $this->settings_selected_custom_post_types; + } + + public function settings_selected_plugins( array $settings_selected_plugins ) { + $this->settings_selected_plugins = $settings_selected_plugins; + + return $this; + } + + public function get_settings_selected_plugins() { + return $this->settings_selected_plugins; + } + + /** + * Prevent saving elements on elementor post creation. + * + * @param array $data + * @param Document $document + * + * @return array + */ + public function prevent_saving_elements_on_post_creation( array $data, Document $document ) { + if ( isset( $data['elements'] ) ) { + $this->documents_elements[ $document->get_main_id() ] = $data['elements']; + + $data['elements'] = []; + } + + return $data; + } + + /** + * Extract the zip file. + * + * @param string $zip_path The path to the zip file. + * @return string The extracted directory path. + */ + private function extract_zip( $zip_path ) { + $extraction_result = Plugin::$instance->uploads_manager->extract_and_validate_zip( $zip_path, [ 'json', 'xml' ] ); + + if ( is_wp_error( $extraction_result ) ) { + throw new \Error( static::ZIP_FILE_ERROR_KEY ); + } + + return $extraction_result['extraction_directory']; + } + + /** + * Get the manifest file from the extracted directory and adapt it if needed. + * + * @return string The manifest file content. + */ + private function read_manifest_json() { + $manifest = Utils::read_json_file( $this->extracted_directory_path . 'manifest' ); + + if ( ! $manifest ) { + throw new \Error( static::MANIFEST_ERROR_KEY ); + } + + $this->init_adapters( $manifest ); + + foreach ( $this->adapters as $adapter ) { + $manifest = $adapter->adapt_manifest( $manifest ); + } + + return $manifest; + } + + /** + * Init the adapters and determine which ones to use. + * + * @param array $manifest_data The manifest file content. + */ + private function init_adapters( array $manifest_data ) { + $this->adapters = []; + + /** @var Base_Adapter[] $adapter_types */ + $adapter_types = [ Envato::class, Kit_Library::class ]; + + foreach ( $adapter_types as $adapter_type ) { + if ( $adapter_type::is_compatibility_needed( $manifest_data, [ 'referrer' => $this->get_settings_referrer() ] ) ) { + $this->adapters[] = new $adapter_type( $this ); + } + } + } + + /** + * Get the site settings file from the extracted directory and adapt it if needed. + * + * @return string The site settings file content. + */ + private function read_site_settings_json() { + $site_settings = Utils::read_json_file( $this->extracted_directory_path . 'site-settings' ); + + foreach ( $this->adapters as $adapter ) { + $site_settings = $adapter->adapt_site_settings( $site_settings, $this->manifest, $this->extracted_directory_path ); + } + + return $site_settings; + } + + /** + * Get all the custom post types in the kit. + * + * @return array Custom post types names. + */ + private function get_default_settings_custom_post_types() { + if ( empty( $this->manifest['wp-content'] ) ) { + return []; + } + + $manifest_post_types = array_keys( $this->manifest['wp-content'] ); + + return array_diff( $manifest_post_types, Utils::get_builtin_wp_post_types() ); + } + + /** + * Get the default settings of elementor templates conditions to override. + * + * @return array + */ + private function get_default_settings_override_conditions() { + return apply_filters( 'elementor/import/get_default_settings_override_conditions', [], $this->manifest ); + } + + /** + * Get the default settings of the plugins that should be imported. + * + * @return array + */ + private function get_default_settings_plugins() { + return ! empty( $this->manifest['plugins'] ) ? $this->manifest['plugins'] : []; + } + + /** + * Get the default settings of which content types should be imported. + * + * @return array + */ + private function get_default_settings_include() { + return [ 'templates', 'plugins', 'content', 'settings' ]; + } + + /** + * Save the prevented elements on elementor post creation elements. + * Handle the replacement of all the dynamic content of the elements that probably have been changed during the import. + * + * @param array $map_old_new_post_ids Mapped array of old and new post ids. + */ + private function save_elements_of_imported_posts( array $map_old_new_post_ids ) { + foreach ( $this->documents_elements as $new_id => $document_elements ) { + $document = Plugin::$instance->documents->get( $new_id ); + $updated_elements = $document->on_import_replace_dynamic_content( $document_elements, $map_old_new_post_ids ); + $document->save( [ 'elements' => $updated_elements ] ); + } + } +} diff --git a/core/app/modules/import-export/processes/process-base.php b/core/app/modules/import-export/processes/process-base.php new file mode 100644 index 00000000000..80be5954762 --- /dev/null +++ b/core/app/modules/import-export/processes/process-base.php @@ -0,0 +1,58 @@ +ensure_writing_permissions(); + } + + /** + * Register all the default runners the export can run. (e.g: elementor, plugins, etc.) + */ + public function register_default_runners() { + $this->register( new Site_Settings() ); + $this->register( new Plugins() ); + $this->register( new Templates() ); + $this->register( new Taxonomies() ); + $this->register( new Elementor_Content() ); + $this->register( new Wp_Content() ); + } + + /** + * Register a runner. + * + * @param Runner_Base $runner_instance + */ + public function register( Runner_Base $runner_instance ) { + $this->runners[ $runner_instance::get_name() ] = $runner_instance; + } + + private function ensure_writing_permissions() { + $server = new Server(); + + $server_write_permissions = $server->get_write_permissions(); + + if ( $server_write_permissions['warning'] ) { + throw new \Error( self::NO_WRITE_PERMISSIONS_KEY ); + } + } +} diff --git a/core/app/modules/import-export/runners/elementor-content.php b/core/app/modules/import-export/runners/elementor-content.php new file mode 100644 index 00000000000..801b51e8e3d --- /dev/null +++ b/core/app/modules/import-export/runners/elementor-content.php @@ -0,0 +1,257 @@ +init_page_on_front_data(); + } + + public static function get_name() { + return 'elementor-content'; + } + + public function should_import( array $data ) { + return ( + isset( $data['include'] ) && + in_array( 'content', $data['include'], true ) && + ! empty( $data['manifest']['content'] ) && + ! empty( $data['extracted_directory_path'] ) + ); + } + + public function should_export( array $data ) { + return ( + isset( $data['include'] ) && + in_array( 'content', $data['include'], true ) + ); + } + + public function import( array $data, array $imported_data ) { + $result['content'] = []; + + $elementor_post_types = ImportExportUtils::get_elementor_post_types(); + + foreach ( $elementor_post_types as $post_type ) { + if ( empty( $data['manifest']['content'][ $post_type ] ) ) { + continue; + } + + $posts_settings = $data['manifest']['content'][ $post_type ]; + $path = $data['extracted_directory_path'] . 'content/' . $post_type . '/'; + $imported_terms = ! empty( $imported_data['taxonomies'] ) + ? ImportExportUtils::map_old_new_terms_ids( $imported_data ) + : []; + + $result['content'][ $post_type ] = $this->import_elementor_post_type( $posts_settings, $path, $post_type, $imported_terms ); + } + + return $result; + } + + public function export( array $data ) { + $elementor_post_types = ImportExportUtils::get_elementor_post_types(); + + $files = []; + $manifest = []; + + foreach ( $elementor_post_types as $post_type ) { + $export = $this->export_elementor_post_type( $post_type ); + $files = array_merge( $files, $export['files'] ); + + $manifest[ $post_type ] = $export['manifest_data']; + } + + $manifest_data['content'] = $manifest; + + return [ + 'files' => $files, + 'manifest' => [ + $manifest_data, + ], + ]; + } + + private function import_elementor_post_type( array $posts_settings, $path, $post_type, array $imported_terms ) { + $result = [ + 'succeed' => [], + 'failed' => [], + ]; + + foreach ( $posts_settings as $id => $post_settings ) { + try { + $post_data = ImportExportUtils::read_json_file( $path . $id ); + $import = $this->import_post( $post_settings, $post_data, $post_type, $imported_terms ); + + if ( is_wp_error( $import ) ) { + $result['failed'][ $id ] = $import->get_error_message(); + continue; + } + + $result['succeed'][ $id ] = $import; + } catch ( \Exception $error ) { + $result['failed'][ $id ] = $error->getMessage(); + } + } + + return $result; + } + + private function import_post( array $post_settings, array $post_data, $post_type, array $imported_terms ) { + $post_attributes = [ + 'post_title' => $post_settings['title'], + 'post_type' => $post_type, + 'post_status' => 'publish', + ]; + + if ( ! empty( $post_settings['excerpt'] ) ) { + $post_attributes['post_excerpt'] = $post_settings['excerpt']; + } + + $new_document = Plugin::$instance->documents->create( + $post_settings['doc_type'], + $post_attributes + ); + + if ( is_wp_error( $new_document ) ) { + return $new_document; + } + + $post_data['import_settings'] = $post_settings; + + $new_document->import( $post_data ); + + $new_post_id = $new_document->get_main_id(); + + if ( ! empty( $post_settings['terms'] ) ) { + $this->set_post_terms( $new_post_id, $post_settings['terms'], $imported_terms ); + } + + if ( ! empty( $post_settings['show_on_front'] ) ) { + $this->set_page_on_front( $new_post_id ); + } + + return $new_post_id; + } + + private function export_elementor_post_type( $post_type ) { + $query_args = [ + 'post_type' => $post_type, + 'post_status' => 'publish', + 'posts_per_page' => -1, + 'meta_query' => [ + [ + 'key' => '_elementor_edit_mode', + 'compare' => 'EXISTS', + ], + [ + 'key' => '_elementor_data', + 'compare' => 'EXISTS', + ], + [ + 'key' => '_elementor_data', + 'compare' => '!=', + 'value' => '[]', + ], + ], + ]; + + $query = new \WP_Query( $query_args ); + + if ( empty( $query ) ) { + return [ + 'files' => [], + 'manifest_data' => [], + ]; + } + + $post_type_taxonomies = $this->get_post_type_taxonomies( $post_type ); + + $manifest_data = []; + $files = []; + + foreach ( $query->posts as $post ) { + $document = Plugin::$instance->documents->get( $post->ID ); + + $terms = ! empty( $post_type_taxonomies ) ? $this->get_post_terms( $post->ID, $post_type_taxonomies ) : []; + + $post_manifest_data = [ + 'title' => $post->post_title, + 'excerpt' => $post->post_excerpt, + 'doc_type' => $document->get_name(), + 'thumbnail' => get_the_post_thumbnail_url( $post ), + 'url' => get_permalink( $post ), + 'terms' => $terms, + ]; + + if ( $post->ID === $this->page_on_front_id ) { + $post_manifest_data['show_on_front'] = true; + } + + $manifest_data[ $post->ID ] = $post_manifest_data; + + $files[] = [ + 'path' => 'content/' . $post_type . '/' . $post->ID, + 'data' => $document->get_export_data(), + ]; + } + + return [ + 'files' => $files, + 'manifest_data' => $manifest_data, + ]; + } + + private function get_post_type_taxonomies( $post_type ) { + return get_object_taxonomies( $post_type ); + } + + private function set_post_terms( $post_id, array $terms, array $imported_terms ) { + foreach ( $terms as $term ) { + if ( ! isset( $imported_terms[ $term['term_id'] ] ) ) { + continue; + } + + wp_set_post_terms( $post_id, [ $imported_terms[ $term['term_id'] ] ], $term['taxonomy'], false ); + } + } + + private function get_post_terms( $post_id, array $taxonomies ) { + $terms = wp_get_object_terms( $post_id, $taxonomies ); + + $result = []; + + foreach ( $terms as $term ) { + $result[] = [ + 'term_id' => $term->term_id, + 'taxonomy' => $term->taxonomy, + 'slug' => $term->slug, + ]; + } + + return $result; + } + + private function init_page_on_front_data() { + $this->show_page_on_front = 'page' === get_option( 'show_on_front' ); + + if ( $this->show_page_on_front ) { + $this->page_on_front_id = (int) get_option( 'page_on_front' ); + } + } + + private function set_page_on_front( $page_id ) { + update_option( 'page_on_front', $page_id ); + + if ( ! $this->show_page_on_front ) { + update_option( 'show_on_front', 'page' ); + } + } +} diff --git a/core/app/modules/import-export/runners/plugins.php b/core/app/modules/import-export/runners/plugins.php new file mode 100644 index 00000000000..123da230b92 --- /dev/null +++ b/core/app/modules/import-export/runners/plugins.php @@ -0,0 +1,89 @@ +plugins_manager = $plugins_manager; + } else { + $this->plugins_manager = new Plugins_Manager(); + } + } + + public static function get_name() { + return 'plugins'; + } + + public function should_import( array $data ) { + return ( + isset( $data['include'] ) && + in_array( 'plugins', $data['include'], true ) && + ! empty( $data['manifest']['plugins'] ) && + ! empty( $data['selected_plugins'] ) + ); + } + + public function should_export( array $data ) { + return ( + isset( $data['include'] ) && + in_array( 'plugins', $data['include'], true ) && + is_array( $data['selected_plugins'] ) + ); + } + + public function import( array $data, array $imported_data ) { + $plugins = $data['selected_plugins']; + + $plugins_collection = ( new Collection( $plugins ) ) + ->map( function ( $item ) { + if ( ! Str::ends_with( $item['plugin'], '.php' ) ) { + $item['plugin'] .= '.php'; + } + return $item; + } ); + + $slugs = $plugins_collection + ->map( function ( $item ) { + return $item['plugin']; + } ) + ->all(); + + $installed = $this->plugins_manager->install( $slugs ); + $activated = $this->plugins_manager->activate( $installed['succeeded'] ); + + $ordered_activated_plugins = $plugins_collection + ->filter( function ( $item ) use ( $activated ) { + return in_array( $item['plugin'], $activated['succeeded'], true ); + } ) + ->map( function ( $item ) { + return $item['name']; + } ) + ->all(); + + $result['plugins'] = $ordered_activated_plugins; + + return $result; + } + + public function export( array $data ) { + $manifest_data['plugins'] = $data['selected_plugins']; + + return [ + 'manifest' => [ + $manifest_data, + ], + 'files' => [], + ]; + } +} diff --git a/core/app/modules/import-export/runners/runner-base.php b/core/app/modules/import-export/runners/runner-base.php new file mode 100644 index 00000000000..0327a3a3ed5 --- /dev/null +++ b/core/app/modules/import-export/runners/runner-base.php @@ -0,0 +1,51 @@ +kits_manager->get_active_kit(); + $old_settings = $kit->get_meta( PageManager::META_KEY ); + + if ( ! $old_settings ) { + $old_settings = []; + } + + if ( ! empty( $old_settings['custom_colors'] ) ) { + $new_site_settings['custom_colors'] = array_merge( $old_settings['custom_colors'], $new_site_settings['custom_colors'] ); + } + + if ( ! empty( $old_settings['custom_typography'] ) ) { + $new_site_settings['custom_typography'] = array_merge( $old_settings['custom_typography'], $new_site_settings['custom_typography'] ); + } + + $new_site_settings = array_replace_recursive( $old_settings, $new_site_settings ); + + $new_kit = Plugin::$instance->kits_manager->create_new_kit( $title, $new_site_settings ); + + $result['site-settings'] = (bool) $new_kit; + + return $result; + } + + public function export( array $data ) { + $kit = Plugin::$instance->kits_manager->get_active_kit(); + $kit_data = $kit->get_export_data(); + $kit_tabs = $kit->get_tabs(); + + $excluded_kit_settings_keys = [ + 'site_name', + 'site_description', + 'site_logo', + 'site_favicon', + ]; + + foreach ( $excluded_kit_settings_keys as $setting_key ) { + unset( $kit_data['settings'][ $setting_key ] ); + } + + unset( $kit_tabs['settings-site-identity'] ); + + $kit_tabs = array_keys( $kit_tabs ); + $manifest_data['site-settings'] = $kit_tabs; + + return [ + 'files' => [ + 'path' => 'site-settings', + 'data' => $kit_data, + ], + 'manifest' => [ + $manifest_data, + ], + ]; + } +} diff --git a/core/app/modules/import-export/runners/taxonomies.php b/core/app/modules/import-export/runners/taxonomies.php new file mode 100644 index 00000000000..c1ccf3d1899 --- /dev/null +++ b/core/app/modules/import-export/runners/taxonomies.php @@ -0,0 +1,239 @@ +import_taxonomies( $data['manifest']['taxonomies'][ $post_type ], $path ); + } + + return $result; + } + + public function export( array $data ) { + $wp_builtin_post_types = ImportExportUtils::get_builtin_wp_post_types(); + $selected_custom_post_types = isset( $data['selected_custom_post_types'] ) ? $data['selected_custom_post_types'] : []; + $post_types = array_merge( $wp_builtin_post_types, $selected_custom_post_types ); + + $export = $this->export_taxonomies( $post_types ); + + $manifest_data['taxonomies'] = $export['manifest']; + + return [ + 'files' => $export['files'], + 'manifest' => [ + $manifest_data, + ], + ]; + } + + private function import_taxonomies( array $taxonomies, $path ) { + $result = []; + $imported_taxonomies = []; + + foreach ( $taxonomies as $taxonomy ) { + if ( ! taxonomy_exists( $taxonomy ) ) { + continue; + } + + if ( ! empty( $imported_taxonomies[ $taxonomy ] ) ) { + $result[ $taxonomy ] = $imported_taxonomies[ $taxonomy ]; + continue; + } + + $taxonomy_data = ImportExportUtils::read_json_file( $path . $taxonomy ); + if ( empty( $taxonomy_data ) ) { + continue; + } + + $import = $this->import_taxonomy( $taxonomy_data ); + $result[ $taxonomy ] = $import; + $imported_taxonomies[ $taxonomy ] = $import; + } + + return $result; + } + + private function import_taxonomy( array $taxonomy_data ) { + $terms = []; + + foreach ( $taxonomy_data as $term ) { + $old_slug = $term['slug']; + + $existing_term = term_exists( $term['slug'], $term['taxonomy'] ); + if ( $existing_term ) { + if ( 'nav_menu' === $term['taxonomy'] ) { + $term = $this->handle_duplicated_nav_menu_term( $term ); + } else { + $terms[] = [ + 'old_id' => (int) $term['term_id'], + 'new_id' => (int) $existing_term['term_id'], + 'old_slug' => $old_slug, + 'new_slug' => $term['slug'], + ]; + continue; + } + } + + $parent = $this->get_term_parent( $term, $terms ); + + $args = [ + 'slug' => $term['slug'], + 'description' => wp_slash( $term['description'] ), + 'parent' => (int) $parent, + ]; + + $new_term = wp_insert_term( wp_slash( $term['name'] ), $term['taxonomy'], $args ); + if ( ! is_wp_error( $new_term ) ) { + $terms[] = [ + 'old_id' => $term['term_id'], + 'new_id' => (int) $new_term['term_id'], + 'old_slug' => $old_slug, + 'new_slug' => $term['slug'], + ]; + } + } + + return $terms; + } + + private function handle_duplicated_nav_menu_term( $term ) { + do { + $term['slug'] = $term['slug'] . '-duplicate'; + $term['name'] = $term['name'] . ' duplicate'; + } while ( term_exists( $term['slug'], 'nav_menu' ) ); + + return $term; + } + + private function get_term_parent( $term, array $imported_terms ) { + $parent = $term['parent']; + if ( 0 !== $parent && ! empty( $imported_terms[ $parent ] ) ) { + $parent_term = term_exists( $term[ $imported_terms[ $parent ]['new_id'] ], $term['taxonomy'] ); + + if ( isset( $parent_term['term_id'] ) ) { + return $parent_term['term_id']; + } + } + + return 0; + } + + private function export_taxonomies( array $post_types ) { + $files = []; + $manifest = []; + + $taxonomies = get_taxonomies(); + + foreach ( $taxonomies as $taxonomy ) { + $taxonomy_post_types = get_taxonomy( $taxonomy )->object_type; + $intersected_post_types = array_intersect( $taxonomy_post_types, $post_types ); + + if ( empty( $intersected_post_types ) ) { + continue; + } + + $data = $this->export_terms( $taxonomy ); + + if ( empty( $data ) ) { + continue; + } + + foreach ( $intersected_post_types as $post_type ) { + $manifest[ $post_type ][] = $taxonomy; + } + + $files[] = [ + 'path' => 'taxonomies/' . $taxonomy, + 'data' => $data, + ]; + } + + return [ + 'files' => $files, + 'manifest' => $manifest, + ]; + } + + private function export_terms( $taxonomy ) { + $terms = get_terms( [ + 'taxonomy' => (array) $taxonomy, + 'hide_empty' => true, + 'get' => 'all', + ] ); + + $ordered_terms = $this->order_terms( $terms ); + + if ( empty( $ordered_terms ) ) { + return []; + } + + $data = []; + + foreach ( $ordered_terms as $term ) { + $data[] = [ + 'term_id' => $term->term_id, + 'name' => $term->name, + 'slug' => $term->slug, + 'taxonomy' => $term->taxonomy, + 'description' => $term->description, + 'parent' => $term->parent, + ]; + } + + return $data; + } + + // Put terms in order with no child going before its parent. + private function order_terms( array $terms ) { + $ordered_terms = []; + + while ( $term = array_shift( $terms ) ) { + $is_top_level = 0 === $term->parent; + $is_parent_exits = isset( $ordered_terms[ $term->parent ] ); + + if ( $is_top_level || $is_parent_exits ) { + $ordered_terms[ $term->term_id ] = $term; + } else { + $terms[] = $term; + } + } + + return $ordered_terms; + } +} diff --git a/core/app/modules/import-export/runners/templates.php b/core/app/modules/import-export/runners/templates.php new file mode 100644 index 00000000000..195177ab4e1 --- /dev/null +++ b/core/app/modules/import-export/runners/templates.php @@ -0,0 +1,126 @@ + [], + 'failed' => [], + ]; + + foreach ( $templates as $id => $template_settings ) { + try { + $template_data = ImportExportUtils::read_json_file( $path . $id ); + $import = $this->import_template( $id, $template_settings, $template_data ); + + $result['templates']['succeed'][ $id ] = $import; + } catch ( \Exception $error ) { + $result['templates']['failed'][ $id ] = $error->getMessage(); + } + } + + return $result; + } + + private function import_template( $id, array $template_settings, array $template_data ) { + $doc_type = $template_settings['doc_type']; + + $new_document = Plugin::$instance->documents->create( + $doc_type, + [ + 'post_title' => $template_settings['title'], + 'post_type' => Source_Local::CPT, + 'post_status' => 'publish', + ] + ); + + if ( is_wp_error( $new_document ) ) { + throw new \Exception( $new_document->get_error_message() ); + } + + $template_data['import_settings'] = $template_settings; + $template_data['id'] = $id; + + $new_document->import( $template_data ); + + return $new_document->get_main_id(); + } + + public function export( array $data ) { + $template_types = array_values( Source_Local::get_template_types() ); + + $query_args = [ + 'post_type' => Source_Local::CPT, + 'post_status' => 'publish', + 'posts_per_page' => -1, + 'meta_query' => [ + [ + 'key' => Document::TYPE_META_KEY, + 'value' => $template_types, + ], + ], + ]; + + $templates_query = new \WP_Query( $query_args ); + + $templates_manifest_data = []; + $files = []; + + foreach ( $templates_query->posts as $template_post ) { + $template_id = $template_post->ID; + + $template_document = Plugin::$instance->documents->get( $template_id ); + + $templates_manifest_data[ $template_id ] = $template_document->get_export_summary(); + + $files[] = [ + 'path' => 'templates/' . $template_id, + 'data' => $template_document->get_export_data(), + ]; + } + + $manifest_data['templates'] = $templates_manifest_data; + + return [ + 'files' => $files, + 'manifest' => [ + $manifest_data, + ], + ]; + } +} diff --git a/core/app/modules/import-export/runners/wp-content.php b/core/app/modules/import-export/runners/wp-content.php new file mode 100644 index 00000000000..c5129e76deb --- /dev/null +++ b/core/app/modules/import-export/runners/wp-content.php @@ -0,0 +1,154 @@ +force_element_to_be_last_by_value( $post_types, 'nav_menu_item' ); + + $taxonomies = isset( $imported_data['taxonomies'] ) ? $imported_data['taxonomies'] : []; + $imported_terms = ImportExportUtils::map_old_new_terms_ids( $imported_data ); + + $result['wp-content'] = []; + + foreach ( $post_types as $post_type ) { + if ( ! post_type_exists( $post_type ) ) { + continue; + } + + $import = $this->import_wp_post_type( + $path, + $post_type, + $imported_data, + $taxonomies, + $imported_terms + ); + + $result['wp-content'][ $post_type ] = $import; + $imported_data = array_merge( $imported_data, $result ); + } + + return $result; + } + + public function export( array $data ) { + $post_types = ImportExportUtils::get_builtin_wp_post_types(); + $custom_post_types = isset( $data['selected_custom_post_types'] ) ? $data['selected_custom_post_types'] : []; + + $files = []; + $manifest_data = []; + + foreach ( $post_types as $post_type ) { + $export = $this->export_wp_post_type( $post_type ); + $files[] = $export['file']; + $manifest_data['wp-content'][ $post_type ] = $export['manifest_data']; + } + + foreach ( $custom_post_types as $post_type ) { + $export = $this->export_wp_post_type( $post_type ); + $files[] = $export['file']; + $manifest_data['wp-content'][ $post_type ] = $export['manifest_data']; + + $post_type_object = get_post_type_object( $post_type ); + + $manifest_data['custom-post-type-title'][ $post_type ] = [ + 'name' => $post_type_object->name, + 'label' => $post_type_object->label, + ]; + } + + return [ + 'files' => $files, + 'manifest' => [ + $manifest_data, + ], + ]; + } + + private function import_wp_post_type( $path, $post_type, array $imported_data, array $taxonomies, array $imported_terms ) { + $args = [ + 'fetch_attachments' => true, + 'posts' => ImportExportUtils::map_old_new_post_ids( $imported_data ), + 'terms' => $imported_terms, + 'taxonomies' => ! empty( $taxonomies[ $post_type ] ) ? $taxonomies[ $post_type ] : [], + ]; + + $file = $path . $post_type . '/' . $post_type . '.xml'; + + $wp_importer = new WP_Import( $file, $args ); + $result = $wp_importer->run(); + + return $result['summary']['posts']; + } + + private function export_wp_post_type( $post_type ) { + $wp_exporter = new WP_Exporter( [ + 'content' => $post_type, + 'status' => 'publish', + 'limit' => 20, + 'meta_query' => [ + [ + 'key' => '_elementor_edit_mode', + 'compare' => 'NOT EXISTS', + ], + ], + 'include_post_featured_image_as_attachment' => true, + ] ); + + $export_result = $wp_exporter->run(); + + return [ + 'file' => [ + 'path' => 'wp-content/' . $post_type . '/' . $post_type . '.xml', + 'data' => $export_result['xml'], + ], + 'manifest_data' => $export_result['ids'], + ]; + } + + /** + * @param $array array The array we want to relocate his element. + * @param $element mixed The value of the element in the array we want to shift to end of the array. + * @return mixed + */ + private function force_element_to_be_last_by_value( $array, $element ) { + $index = array_search( $element, $array, true ); + + if ( false !== $index ) { + unset( $array[ $index ] ); + $array[] = $element; + } + + return $array; + } +} diff --git a/core/app/modules/import-export/utils.php b/core/app/modules/import-export/utils.php new file mode 100644 index 00000000000..44699891463 --- /dev/null +++ b/core/app/modules/import-export/utils.php @@ -0,0 +1,81 @@ + true, + 'can_export' => true, + '_builtin' => false, + ] ); + + unset( + $post_types[ Landing_Pages_Module::CPT ], + $post_types[ Source_Local::CPT ] + ); + + return array_keys( $post_types ); + } +} diff --git a/core/app/modules/import-export/wp-cli.php b/core/app/modules/import-export/wp-cli.php index 816a8ed8824..5c5d56d31ed 100644 --- a/core/app/modules/import-export/wp-cli.php +++ b/core/app/modules/import-export/wp-cli.php @@ -6,7 +6,6 @@ use Elementor\Core\Utils\Plugins_Manager; use Elementor\Plugin; use Elementor\Core\App\Modules\KitLibrary\Connect\Kit_Library; -use Elementor\Utils; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly @@ -14,6 +13,8 @@ class Wp_Cli extends \WP_CLI_Command { + const AVAILABLE_SETTINGS = [ 'include', 'overrideConditions', 'selectedCustomPostTypes', 'plugins' ]; + /** * Export a Kit * @@ -39,15 +40,14 @@ public function export( $args, $assoc_args ) { \WP_CLI::line( 'Kit export started.' ); - $export_settings = [ - 'include' => [ 'content', 'templates', 'settings' ], - ]; - + $export_settings = []; foreach ( $assoc_args as $key => $value ) { - $import_settings[ $key ] = explode( ',', $value ); - } + if ( ! in_array( $key, static::AVAILABLE_SETTINGS, true ) ) { + continue; + } - $export_settings = array_merge( $export_settings, $assoc_args ); + $export_settings[ $key ] = explode( ',', $value ); + } try { $exporter = new Export( $export_settings ); @@ -104,56 +104,60 @@ public function import( array $args, array $assoc_args ) { \WP_CLI::line( 'Kit import started' ); - \WP_CLI::line( 'Extracting zip archive...' ); - $assoc_args = wp_parse_args( $assoc_args, [ 'sourceType' => 'local', ] ); $url = null; $file_path = $args[0]; + $import_settings = []; + $import_settings['referrer'] = Module::REFERRER_LOCAL; - if ( 'library' === $assoc_args['sourceType'] ) { - $url = $this->get_url_from_library( $args[0] ); - } elseif ( 'remote' === $assoc_args['sourceType'] ) { - $url = $args[0]; - } - - if ( 'enable' === $assoc_args['unfilteredFilesUpload'] ) { - Plugin::$instance->uploads_manager->set_elementor_upload_state( true ); - Plugin::$instance->uploads_manager->enable_unfiltered_files_upload(); - } + switch ( $assoc_args['sourceType'] ) { + case 'library': + $url = $this->get_url_from_library( $file_path ); + $zip_path = $this->create_temp_file_from_url( $url ); + $import_settings['referrer'] = Module::REFERRER_KIT_LIBRARY; + break; - if ( $url ) { - $file_path = $this->create_temp_file_from_url( $url ); - } + case 'remote': + $zip_path = $this->create_temp_file_from_url( $file_path ); + break; - $extraction_result = Plugin::$instance->uploads_manager->extract_and_validate_zip( $file_path, [ 'json', 'xml' ] ); + case 'local': + $zip_path = $file_path; + break; - if ( is_wp_error( $extraction_result ) ) { - \WP_CLI::error( $extraction_result->get_error_message() ); + default: + \WP_CLI::error( 'Unknown source type.' ); + break; } - $import_settings = [ - 'include' => [ 'templates', 'content', 'settings' ], - 'session' => $extraction_result['extraction_directory'], - ]; + if ( 'enable' === $assoc_args['unfilteredFilesUpload'] ) { + Plugin::$instance->uploads_manager->enable_unfiltered_files_upload(); + } foreach ( $assoc_args as $key => $value ) { + if ( ! in_array( $key, static::AVAILABLE_SETTINGS, true ) ) { + continue; + } + $import_settings[ $key ] = explode( ',', $value ); } - // Remove irrelevant settings from the $import_settings array - $remove_irrelevant = [ 'sourceType', 'unfilteredFilesUpload' ]; - $import_settings = array_diff_key( $import_settings, array_flip( $remove_irrelevant ) ); - try { \WP_CLI::line( 'Importing data...' ); - $import = new Import( $import_settings ); + /** + * Running the import process through the import-export module so the import property in the module will be available to use. + * + * @type Module $import_export_module + */ + $import_export_module = Plugin::$instance->app->get_component( 'import-export' ); + + $import = $import_export_module->import_kit( $zip_path, $import_settings ); - $manifest_data = $this->get_manifest_data( $import_settings['session'] ); - $manifest_data = $import->adapt_manifest_structure( $manifest_data ); + $manifest_data = $import_export_module->import->get_manifest(); /** * Import Export Manifest Data @@ -166,28 +170,18 @@ public function import( array $args, array $assoc_args ) { */ $manifest_data = apply_filters( 'elementor/import-export/wp-cli/manifest_data', $manifest_data ); - if ( isset( $manifest_data['plugins'] ) ) { - $successfully_imported_plugins = $this->import_plugins( $manifest_data['plugins'] ); - - \WP_CLI::line( 'Ready to use plugins: ' . $successfully_imported_plugins ); - } - - Plugin::$instance->app->get_component( 'import-export' )->import = $import; - - $import->run(); - \WP_CLI::line( 'Removing temp files...' ); - Plugin::$instance->uploads_manager->remove_file_or_dir( $import_settings['session'] ); - - // The file was created from remote or library request and it should be removed. + // The file was created from remote or library request, it also should be removed. if ( $url ) { - Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $file_path ) ); + Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $zip_path ) ); } \WP_CLI::success( 'Kit imported successfully' ); } catch ( \Error $error ) { - Plugin::$instance->uploads_manager->remove_file_or_dir( $import_settings['session'] ); + if ( $url ) { + Plugin::$instance->uploads_manager->remove_file_or_dir( dirname( $zip_path ) ); + } \WP_CLI::error( $error->getMessage() ); } @@ -227,6 +221,7 @@ private function get_url_from_library( $kit_id ) { * @return string */ private function create_temp_file_from_url( $url ) { + \WP_CLI::line( 'Extracting zip archive...' ); $response = wp_remote_get( $url ); if ( is_wp_error( $response ) ) { @@ -237,30 +232,15 @@ private function create_temp_file_from_url( $url ) { \WP_CLI::error( "Download file url: {$response['response']['message']}" ); } - return Plugin::$instance->uploads_manager->create_temp_file( $response['body'], 'kit.zip' ); - } - - /** - * Helper to get the manifest data from the 'manifest.json' file. - * - * @param string $extraction_directory - * @return array - */ - private function get_manifest_data( $extraction_directory ) { - $manifest_file_content = Utils::file_get_contents( $extraction_directory . 'manifest.json', true ); + // Set the Request's state as an Elementor upload request, in order to support unfiltered file uploads. + Plugin::$instance->uploads_manager->set_elementor_upload_state( true ); - if ( ! $manifest_file_content ) { - \WP_CLI::error( 'Manifest not found' ); - } - - $manifest_data = json_decode( $manifest_file_content, true ); + $file = Plugin::$instance->uploads_manager->create_temp_file( $response['body'], 'kit.zip' ); - // In case that the manifest content is not a valid JSON or empty. - if ( ! $manifest_data ) { - \WP_CLI::error( 'Manifest content is not valid json' ); - } + // After the upload complete, set the elementor upload state back to false. + Plugin::$instance->uploads_manager->set_elementor_upload_state( false ); - return $manifest_data; + return $file; } /** @@ -271,39 +251,5 @@ private function get_manifest_data( $extraction_directory ) { * @param array $plugins * @return string */ - private function import_plugins( $plugins ) { - $plugins_collection = ( new Collection( $plugins ) ) - ->map( function ( $item ) { - if ( ! $this->ends_with( $item['plugin'], '.php' ) ) { - $item['plugin'] .= '.php'; - } - return $item; - } ); - - $slugs = $plugins_collection - ->map( function ( $item ) { - return $item['plugin']; - } ) - ->all(); - - $plugins_manager = new Plugins_Manager(); - - $install = $plugins_manager->install( $slugs ); - $activate = $plugins_manager->activate( $install['succeeded'] ); - - $names = $plugins_collection - ->filter( function ( $item ) use ( $activate ) { - return in_array( $item['plugin'], $activate['succeeded'], true ); - } ) - ->map( function ( $item ) { - return $item['name']; - } ) - ->implode( ', ' ); - - return $names; - } - private function ends_with( $haystack, $needle ) { - return substr( $haystack, -strlen( $needle ) ) === $needle; - } } diff --git a/core/utils/import-export/wp-exporter.php b/core/utils/import-export/wp-exporter.php index a8086193156..dedef088353 100644 --- a/core/utils/import-export/wp-exporter.php +++ b/core/utils/import-export/wp-exporter.php @@ -43,6 +43,8 @@ class WP_Exporter { */ private $wpdb; + private $terms; + /** * Run export, by requested args. * Returns XML with exported data. @@ -71,7 +73,7 @@ public function run() { } $join = ''; - if ( $this->args['category'] && ( 'post' === $this->args['content'] || 'nav_menu_item' === $this->args['content'] ) ) { + if ( $this->args['category'] && 'post' === $this->args['content'] ) { $term = term_exists( $this->args['category'], 'category' ); if ( $term ) { $join = "INNER JOIN {$this->wpdb->term_relationships} ON ({$this->wpdb->posts}.ID = {$this->wpdb->term_relationships}.object_id)"; @@ -119,62 +121,21 @@ public function run() { // Grab a snapshot of post IDs, just in case it changes during the export. $post_ids = $this->wpdb->get_col( "SELECT ID FROM {$this->wpdb->posts} $join WHERE $where $limit" );// phpcs:ignore + $thumbnail_ids = []; if ( ! empty( $this->args['include_post_featured_image_as_attachment'] ) ) { foreach ( $post_ids as $post_id ) { $thumbnail_id = get_post_meta( $post_id, '_thumbnail_id', true ); - if ( $thumbnail_id && false === array_search( $thumbnail_id, $post_ids, true ) ) { - $post_ids [] = $thumbnail_id; - } - } - } - - /* - * Get the requested terms ready, empty unless posts filtered by category - * or all content. - */ - $cats = []; - $tags = []; - $terms = []; - if ( isset( $term ) && $term ) { - $cat = get_term( $term['term_id'], 'category' ); - $cats = [ $cat->term_id => $cat ]; - unset( $term, $cat ); - } elseif ( 'all' === $this->args['content'] ) { - $categories = (array) get_categories( [ 'get' => 'all' ] ); - $tags = (array) get_tags( array( 'get' => 'all' ) ); - - $custom_taxonomies = get_taxonomies( [ '_builtin' => false ] ); - $custom_terms = (array) get_terms( [ - 'taxonomy' => $custom_taxonomies, - 'get' => 'all', - ] ); - - // Put categories in order with no child going before its parent. - while ( $cat = array_shift( $categories ) ) { - if ( 0 == $cat->parent || isset( $cats[ $cat->parent ] ) ) { - $cats[ $cat->term_id ] = $cat; - } else { - $categories[] = $cat; + if ( $thumbnail_id && ! in_array( $thumbnail_id, $post_ids, true ) ) { + $thumbnail_ids [] = $thumbnail_id; } } - - // Put terms in order with no child going before its parent. - while ( $t = array_shift( $custom_terms ) ) { - if ( 0 == $t->parent || isset( $terms[ $t->parent ] ) ) { - $terms[ $t->term_id ] = $t; - } else { - $custom_terms[] = $t; - } - } - - unset( $categories, $custom_taxonomies, $custom_terms ); } return [ 'ids' => $post_ids, - 'xml' => $this->get_xml_export( $post_ids, $cats, $tags, $terms ), + 'xml' => $this->get_xml_export( array_merge( $post_ids, $thumbnail_ids ) ), ]; } @@ -344,7 +305,7 @@ private function wxr_term_meta( $term ) { * @param object $meta Current meta object. */ if ( ! apply_filters( 'wxr_export_skip_termmeta', false, $meta->meta_key, $meta ) ) { - $result .= sprintf( $this->indent( 3 ) . "\n\t\t\t%s\n\t\t\t%s\n\t\t\n", wxr_cdata( $meta->meta_key ), wxr_cdata( $meta->meta_value ) ); + $result .= sprintf( $this->indent( 3 ) . "\n\t\t\t%s\n\t\t\t%s\n\t\t\n", $this->wxr_cdata( $meta->meta_key ), $this->wxr_cdata( $meta->meta_value ) ); } } @@ -409,8 +370,8 @@ private function wxr_categories_list( array $cats ) { $result .= $this->indent( 3 ) . '' . $this->wxr_cdata( $c->slug ) . '' . PHP_EOL; $result .= $this->indent( 3 ) . '' . $this->wxr_cdata( $c->parent ? $cats[ $c->parent ]->slug : '' ) . '' . PHP_EOL; $result .= $this->wxr_cat_name( $c ) . - $this->wxr_category_description( $c ) . - $this->wxr_term_meta( $c ); + $this->wxr_category_description( $c ) . + $this->wxr_term_meta( $c ); $result .= $this->indent( 2 ) . '' . PHP_EOL; } @@ -434,8 +395,8 @@ private function wxr_tags_list( array $tags ) { $result .= $this->indent( 3 ) . '' . (int) $t->term_id . '' . PHP_EOL; $result .= $this->indent( 3 ) . '' . $this->wxr_cdata( $t->slug ) . '' . PHP_EOL; $result .= $this->wxr_tag_name( $t ) . - $this->wxr_tag_description( $t ) . - $this->wxr_term_meta( $t ); + $this->wxr_tag_description( $t ) . + $this->wxr_term_meta( $t ); $result .= $this->indent( 2 ) . '' . PHP_EOL; } @@ -456,12 +417,13 @@ private function wxr_terms_list( array $terms ) { foreach ( $terms as $t ) { $result .= $this->indent( 2 ) . '' . PHP_EOL; + $result .= $this->indent( 3 ) . '' . $this->wxr_cdata( $t->term_id ) . '' . PHP_EOL; $result .= $this->indent( 3 ) . '' . $this->wxr_cdata( $t->taxonomy ) . '' . PHP_EOL; $result .= $this->indent( 3 ) . '' . $this->wxr_cdata( $t->slug ) . '' . PHP_EOL; $result .= $this->indent( 3 ) . '' . $this->wxr_cdata( $t->parent ? $terms[ $t->parent ]->slug : '' ) . '' . PHP_EOL; $result .= $this->wxr_term_name( $t ) . - $this->wxr_term_description( $t ) . - $this->wxr_term_meta( $t ); + $this->wxr_term_description( $t ) . + $this->wxr_term_meta( $t ); $result .= $this->indent( 2 ) . '' . PHP_EOL; } @@ -639,6 +601,8 @@ private function wxr_nav_menu_terms() { $result = ''; foreach ( $nav_menus as $menu ) { + $this->terms[ $menu->term_id ] = $menu; + $result .= $this->indent( 2 ) . '' . PHP_EOL; $result .= $this->indent( 3 ) . '' . (int) $menu->term_id . '' . PHP_EOL; $result .= $this->indent( 3 ) . 'nav_menu' . PHP_EOL; @@ -679,13 +643,10 @@ private function wxr_post_taxonomy( $post ) { * Get's the XML export. * * @param $post_ids - * @param $cats - * @param $tags - * @param $terms * * @return string */ - private function get_xml_export( array $post_ids, array $cats, array $tags, array $terms ) { + private function get_xml_export( array $post_ids ) { $charset = get_bloginfo( 'charset' ); $generator = get_the_generator( 'export' ); $wxr_version = self::WXR_VERSION; @@ -708,10 +669,7 @@ private function get_xml_export( array $post_ids, array $cats, array $tags, arra } } - $dynamic = $this->wxr_authors_list( $post_ids ) . - $this->wxr_categories_list( $cats ) . - $this->wxr_tags_list( $tags ) . - $this->wxr_terms_list( $terms ); + $dynamic = $this->wxr_authors_list( $post_ids ); ob_start(); /** This action is documented in wp-includes/feed-rss2.php */ diff --git a/core/utils/import-export/wp-import.php b/core/utils/import-export/wp-import.php index d6716cd5575..ae51742d524 100644 --- a/core/utils/import-export/wp-import.php +++ b/core/utils/import-export/wp-import.php @@ -64,12 +64,12 @@ class WP_Import extends \WP_Importer { private $authors = []; private $posts = []; private $terms = []; - private $categories = []; - private $tags = []; private $base_url = ''; private $page_on_front; + private $base_blog_url = ''; // Mappings from old information to new. + private $processed_taxonomies; private $processed_terms = []; private $processed_posts = []; private $processed_authors = []; @@ -200,8 +200,6 @@ private function import( $file ) { wp_suspend_cache_invalidation( true ); $imported_summary = [ - 'categories' => $this->process_categories(), - 'tags' => $this->process_tags(), 'terms' => $this->process_terms(), 'posts' => $this->process_posts(), ]; @@ -252,9 +250,8 @@ private function import_start( $file ) { $this->set_authors_from_import( $import_data ); $this->posts = $import_data['posts']; $this->terms = $import_data['terms']; - $this->categories = $import_data['categories']; - $this->tags = $import_data['tags']; $this->base_url = esc_url( $import_data['base_url'] ); + $this->base_blog_url = esc_url( $import_data['base_blog_url'] ); $this->page_on_front = $import_data['page_on_front']; wp_defer_term_counting( true ); @@ -331,10 +328,10 @@ private function set_author_mapping() { foreach ( (array) $this->args['imported_authors'] as $i => $old_login ) { // Multisite adds strtolower to sanitize_user. Need to sanitize here to stop breakage in process_posts. $santized_old_login = sanitize_user( $old_login, true ); - $old_id = isset( $this->authors[ $old_login ]['author_id'] ) ? intval( $this->authors[ $old_login ]['author_id'] ) : false; + $old_id = isset( $this->authors[ $old_login ]['author_id'] ) ? (int) $this->authors[ $old_login ]['author_id'] : false; if ( ! empty( $this->args['user_map'][ $i ] ) ) { - $user = get_userdata( intval( $this->args['user_map'][ $i ] ) ); + $user = get_userdata( (int) $this->args['user_map'][ $i ] ); if ( isset( $user->ID ) ) { if ( $old_id ) { $this->processed_authors[ $old_id ] = $user->ID; @@ -384,141 +381,18 @@ private function set_author_mapping() { } } - /** - * Create new categories based on import information - * - * Doesn't create a new category if its slug already exists - * - * @return int number of imported categories. - */ - private function process_categories() { - $result = 0; - - $this->categories = apply_filters( 'wp_import_categories', $this->categories ); - - if ( empty( $this->categories ) ) { - return $result; - } - - foreach ( $this->categories as $cat ) { - // if the category already exists leave it alone - $term_id = term_exists( $cat['category_nicename'], 'category' ); - if ( $term_id ) { - if ( is_array( $term_id ) ) { - $term_id = $term_id['term_id']; - } - if ( isset( $cat['term_id'] ) ) { - $this->processed_terms[ intval( $cat['term_id'] ) ] = (int) $term_id; - } - continue; - } - - $parent = empty( $cat['category_parent'] ) ? 0 : category_exists( $cat['category_parent'] ); - $description = isset( $cat['category_description'] ) ? $cat['category_description'] : ''; - - $data = [ - 'category_nicename' => $cat['category_nicename'], - 'category_parent' => $parent, - 'cat_name' => wp_slash( $cat['cat_name'] ), - 'category_description' => wp_slash( $description ), - ]; - - $id = wp_insert_category( $data ); - if ( ! is_wp_error( $id ) && $id > 0 ) { - if ( isset( $cat['term_id'] ) ) { - $this->processed_terms[ intval( $cat['term_id'] ) ] = $id; - } - $result++; - } else { - /* translators: %s: Category name. */ - $error = sprintf( esc_html__( 'Failed to import category %s', 'elementor' ), $cat['category_nicename'] ); - - if ( defined( 'IMPORT_DEBUG' ) && IMPORT_DEBUG ) { - $error .= PHP_EOL . $id->get_error_message(); - } - - $this->output['errors'][] = $error; - continue; - } - - $this->process_termmeta( $cat, $id ); - } - - unset( $this->categories ); - - return $result; - } - - /** - * Create new post tags based on import information - * - * Doesn't create a tag if its slug already exists - * - * @return int number of imported tags. - */ - private function process_tags() { - $result = 0; - - $this->tags = apply_filters( 'wp_import_tags', $this->tags ); - - if ( empty( $this->tags ) ) { - return $result; - } - - foreach ( $this->tags as $tag ) { - // if the tag already exists leave it alone - $term_id = term_exists( $tag['tag_slug'], 'post_tag' ); - if ( $term_id ) { - if ( is_array( $term_id ) ) { - $term_id = $term_id['term_id']; - } - if ( isset( $tag['term_id'] ) ) { - $this->processed_terms[ intval( $tag['term_id'] ) ] = (int) $term_id; - } - continue; - } - - $description = isset( $tag['tag_description'] ) ? $tag['tag_description'] : ''; - $args = [ - 'slug' => $tag['tag_slug'], - 'description' => wp_slash( $description ), - ]; - - $id = wp_insert_term( wp_slash( $tag['tag_name'] ), 'post_tag', $args ); - if ( ! is_wp_error( $id ) ) { - if ( isset( $tag['term_id'] ) ) { - $this->processed_terms[ intval( $tag['term_id'] ) ] = $id['term_id']; - } - $result++; - } else { - /* translators: %s: Tag name. */ - $error = sprintf( esc_html__( 'Failed to import post tag %s', 'elementor' ), $tag['tag_name'] ); - - if ( defined( 'IMPORT_DEBUG' ) && IMPORT_DEBUG ) { - $error .= PHP_EOL . $id->get_error_message(); - } - - $this->output['errors'][] = $error; - continue; - } - - $this->process_termmeta( $tag, $id['term_id'] ); - } - - unset( $this->tags ); - - return $result; - } - /** * Create new terms based on import information * * Doesn't create a term its slug already exists * - * @return int number of imported terms. + * @return array|array[] the ids of succeed/failed imported terms. */ private function process_terms() { - $result = 0; + $result = [ + 'succeed' => [], + 'failed' => [], + ]; $this->terms = apply_filters( 'wp_import_terms', $this->terms ); @@ -537,9 +411,23 @@ private function process_terms() { if ( isset( $term['term_id'] ) ) { if ( 'nav_menu' === $term['term_taxonomy'] ) { - $term = $this->handle_duplicated_nav_menu_term( $term ); + // BC - support old kits that the menu terms are part of the 'nav_menu_item' post type + // and not part of the taxonomies. + if ( ! empty( $this->processed_taxonomies[ $term['term_taxonomy'] ] ) ) { + foreach ( $this->processed_taxonomies[ $term['term_taxonomy'] ] as $processed_term ) { + $old_slug = $processed_term['old_slug']; + $new_slug = $processed_term['new_slug']; + + $this->mapped_terms_slug[ $old_slug ] = $new_slug; + $result['succeed'][ $old_slug ] = $new_slug; + } + continue; + } else { + $term = $this->handle_duplicated_nav_menu_term( $term ); + } } else { - $this->processed_terms[ intval( $term['term_id'] ) ] = (int) $term_id; + $this->processed_terms[ (int) $term['term_id'] ] = (int) $term_id; + $result['succeed'][ (int) $term['term_id'] ] = (int) $term_id; continue; } } @@ -564,10 +452,9 @@ private function process_terms() { $id = wp_insert_term( wp_slash( $term['term_name'] ), $term['term_taxonomy'], $args ); if ( ! is_wp_error( $id ) ) { if ( isset( $term['term_id'] ) ) { - $this->processed_terms[ intval( $term['term_id'] ) ] = $id['term_id']; + $this->processed_terms[ (int) $term['term_id'] ] = $id['term_id']; + $result['succeed'][ (int) $term['term_id'] ] = $id['term_id']; } - $result++; - } else { /* translators: 1: Term taxonomy, 2: Term name. */ $error = sprintf( esc_html__( 'Failed to import %1$s %2$s', 'elementor' ), $term['term_taxonomy'], $term['term_name'] ); @@ -576,6 +463,7 @@ private function process_terms() { $error .= PHP_EOL . $id->get_error_message(); } + $result['failed'][] = $id; $this->output['errors'][] = $error; continue; } @@ -696,7 +584,7 @@ private function process_posts() { $post_parent = $this->processed_posts[ $post_parent ]; // otherwise record the parent for later. } else { - $this->post_orphans[ intval( $post['post_id'] ) ] = $post_parent; + $this->post_orphans[ (int) $post['post_id'] ] = $post_parent; $post_parent = 0; } } @@ -781,7 +669,7 @@ private function process_posts() { } // Map pre-import ID to local ID. - $this->processed_posts[ intval( $post['post_id'] ) ] = (int) $post_id; + $this->processed_posts[ (int) $post['post_id'] ] = (int) $post_id; if ( ! isset( $post['terms'] ) ) { $post['terms'] = []; @@ -816,7 +704,7 @@ private function process_posts() { continue; } } - $terms_to_set[ $taxonomy ][] = intval( $term_id ); + $terms_to_set[ $taxonomy ][] = (int) $term_id; } foreach ( $terms_to_set as $tax => $ids ) { @@ -894,8 +782,8 @@ private function process_posts() { $value = false; if ( '_edit_last' === $key ) { - if ( isset( $this->processed_authors[ intval( $meta['value'] ) ] ) ) { - $value = $this->processed_authors[ intval( $meta['value'] ) ]; + if ( isset( $this->processed_authors[ (int) $meta['value'] ] ) ) { + $value = $this->processed_authors[ (int) $meta['value'] ]; } else { $key = false; } @@ -981,23 +869,35 @@ private function process_menu_item( $item ) { $post_meta_key_value[ $meta['key'] ] = $meta['value']; } + $_menu_item_type = $post_meta_key_value['_menu_item_type']; + $_menu_item_url = $post_meta_key_value['_menu_item_url']; + // Skip menu items 'taxonomy' type, when the taxonomy is not exits. - if ( 'taxonomy' === $post_meta_key_value['_menu_item_type'] && ! get_taxonomy( $post_meta_key_value['_menu_item_object'] ) ) { + if ( 'taxonomy' === $_menu_item_type && ! taxonomy_exists( $post_meta_key_value['_menu_item_object'] ) ) { + return $result; + } + + // Skip menu items 'post_type' type, when the post type is not exits. + if ( 'post_type' === $_menu_item_type && ! post_type_exists( $post_meta_key_value['_menu_item_object'] ) ) { return $result; } $_menu_item_object_id = $post_meta_key_value['_menu_item_object_id']; - if ( 'taxonomy' === $post_meta_key_value['_menu_item_type'] && isset( $this->processed_terms[ intval( $_menu_item_object_id ) ] ) ) { - $_menu_item_object_id = $this->processed_terms[ intval( $_menu_item_object_id ) ]; - } elseif ( 'post_type' === $post_meta_key_value['_menu_item_type'] && isset( $this->processed_posts[ intval( $_menu_item_object_id ) ] ) ) { - $_menu_item_object_id = $this->processed_posts[ intval( $_menu_item_object_id ) ]; + if ( 'taxonomy' === $_menu_item_type && isset( $this->processed_terms[ (int) $_menu_item_object_id ] ) ) { + $_menu_item_object_id = $this->processed_terms[ (int) $_menu_item_object_id ]; + } elseif ( 'post_type' === $_menu_item_type && isset( $this->processed_posts[ (int) $_menu_item_object_id ] ) ) { + $_menu_item_object_id = $this->processed_posts[ (int) $_menu_item_object_id ]; + } elseif ( 'custom' === $_menu_item_type ) { + $_menu_item_url = Url::migrate( $_menu_item_url, $this->base_blog_url ); + } else { + return $result; } $_menu_item_menu_item_parent = $post_meta_key_value['_menu_item_menu_item_parent']; - if ( isset( $this->processed_menu_items[ intval( $_menu_item_menu_item_parent ) ] ) ) { - $_menu_item_menu_item_parent = $this->processed_menu_items[ intval( $_menu_item_menu_item_parent ) ]; + if ( isset( $this->processed_menu_items[ (int) $_menu_item_menu_item_parent ] ) ) { + $_menu_item_menu_item_parent = $this->processed_menu_items[ (int) $_menu_item_menu_item_parent ]; } elseif ( $_menu_item_menu_item_parent ) { - $this->menu_item_orphans[ intval( $item['post_id'] ) ] = (int) $_menu_item_menu_item_parent; + $this->menu_item_orphans[ (int) $item['post_id'] ] = (int) $_menu_item_menu_item_parent; $_menu_item_menu_item_parent = 0; } @@ -1011,10 +911,10 @@ private function process_menu_item( $item ) { 'menu-item-object-id' => $_menu_item_object_id, 'menu-item-object' => $post_meta_key_value['_menu_item_object'], 'menu-item-parent-id' => $_menu_item_menu_item_parent, - 'menu-item-position' => intval( $item['menu_order'] ), - 'menu-item-type' => $post_meta_key_value['_menu_item_type'], + 'menu-item-position' => (int) $item['menu_order'], + 'menu-item-type' => $_menu_item_type, 'menu-item-title' => $item['post_title'], - 'menu-item-url' => $post_meta_key_value['_menu_item_url'], + 'menu-item-url' => $_menu_item_url, 'menu-item-description' => $item['post_content'], 'menu-item-attr-title' => $item['post_excerpt'], 'menu-item-target' => $post_meta_key_value['_menu_item_target'], @@ -1025,7 +925,7 @@ private function process_menu_item( $item ) { $id = wp_update_nav_menu_item( $menu_id, 0, $args ); if ( $id && ! is_wp_error( $id ) ) { - $this->processed_menu_items[ intval( $item['post_id'] ) ] = (int) $id; + $this->processed_menu_items[ (int) $item['post_id'] ] = (int) $id; $result[ $item['post_id'] ] = $id; } @@ -1378,5 +1278,17 @@ public function __construct( $file, $args = [] ) { if ( ! empty( $this->args['fetch_attachments'] ) ) { $this->fetch_attachments = true; } + + if ( isset( $this->args['posts'] ) && is_array( $this->args['posts'] ) ) { + $this->processed_posts = $this->args['posts']; + } + + if ( isset( $this->args['terms'] ) && is_array( $this->args['terms'] ) ) { + $this->processed_terms = $this->args['terms']; + } + + if ( isset( $this->args['taxonomies'] ) && is_array( $this->args['taxonomies'] ) ) { + $this->processed_taxonomies = $this->args['taxonomies']; + } } } diff --git a/core/utils/str.php b/core/utils/str.php index 36bc7c72e50..cfddcbdd419 100644 --- a/core/utils/str.php +++ b/core/utils/str.php @@ -20,4 +20,15 @@ public static function encode_idn_url( $url ) { return $matches[1] . \Requests_IDNAEncoder::encode( $matches[2] ); }, $url ); } + + /** + * Checks if a string ends with a given substring + * + * @param $haystack + * @param $needle + * @return bool + */ + public static function ends_with( $haystack, $needle ) { + return substr( $haystack, -strlen( $needle ) ) === $needle; + } } diff --git a/tests/phpunit/elementor/core/app/import-export/mock/envato-kit.zip b/tests/phpunit/elementor/core/app/import-export/mock/envato-kit.zip new file mode 100644 index 0000000000000000000000000000000000000000..ca6d608103d8d3ed1e606f2c3f984291d5ada76c GIT binary patch literal 2347 zcmZ{mcTf{r7REzDs8TerN(bo(5fK5Y3P=wEODJlnCbW>Cp$O7@l`1G*x*(!-3?M;@ zLg+12k={ai1Rhdk@$Jk$cgMZ=&YYPu_k4f-zB!+fK8TtP007VdpuWqd-G+}H{8EmY!37VJ}+Hgvc=>B*xvYyV^1F3m%Tz&GfgTu zf%;$(3#|K$NA~FJ$TLNA$HoT-atetLQTfjat-^C4&Qc0N9*IZq7AlH=hzAN)XiQ&K zcdfUvP9#Z@Lj@7cL2}mtgJ#jn$J?l6Bu71CG13+!@87=|TEUqdX43Tb8HbvMXh7%~ zO)Xu#lYOWtTyx@WGP2TLGx|C_p1yiWpeZcYE&VEvT_5SmJJ+fBZ0wfuavQ=|A&-?T zTa0+_*XM~b3ks5fz?j9mDDrFDkCtpsF2ZVzUk6z;aeltr>Ybgx^(>}3Ews|8XldAI z)?b~W4bLDcjR`aczkzS@x!Aa}NdB|3rSj3p^ao>@C3poUnlKG^UuVvV>KrH-jVE;N zI(CR=2oK$2QL)RCUUw*@BevNV^W39uEpr_w^wku81~3oHZ`soa3Iemy+1LH1q)q*qBgz<)Un-L!t^FJ z2_{E+h`-QxtM+Q) z7C#})s*+}HyVzKm>ra^RA(b}4CDKayyW2n(>!e}N)XK5?T7NtrI#e9>uq;R}^fQYH_}>ghvLh z%!s?iSDO{N;)r`1+ehnX$0n40zPGB~MSE;2e2lT76;}orR_xv^m~apvtGJ3nuB9@;VCVNvg}SEfhs3Q>9GD4O=R-^%l`N++K|=P zAX7O~U}bV#aa2pXii5}cpFWH3%tUGjpt40lrg<*cpWCy>h$Mg#oD(Z7{D6l_^V9ru^1gh~bVN`Itegpz zQ3p9@LLmY-9e9O5JyEzc%2PkE!ML(5aTI1k(Jx}~1F4s*aT2WUPsK{;>+=Z?EXr7> z^_BA4>=}u*wes9UVrSoE`De8{cuG>{(3Qq%Js{Ni@(gC3HEm2r;Bd!m%{;0^*Wi`X zXr{8=A)Yl?a(EP>!Q|7v!cBBMCA)k}My~h`lzJ1hAiUU!j*MLpKqW699N0ejAp0B|M zWGa8qAbJ)=-+OO*RtS58=;rR4)6fVqY`&%uj_NW_i*#C};?$U*i&>&((zI#uR5?oJ zj@9iV@MmeatCC+^8LTE6geu1*$lT7cSj#21V-{ZIN}CLr>XvSMb+Bn+ZCLLR-vbT1 z2MuBi^;#A}PAr4{S{#Ep>BWRl!9otpRuG|^+86Y$p&p^i#yy3rp3J?H$EiPD7--Oe zLaKu+JIKJgh?F8$dtG8;yxTbrdGD4t34>;`ay5eY+h|pd@~;`R`B=_f2FDra+6nMX zI?~dI^HW~ey3XGT+vHF!FyTmlvN!6v^Q7hqu{x2SNjOdKqw$XSYB#OX(vUV!%RaI? zp;R-)5Ffs6jt*mYv2890Y2tdod>9fld$6+NSZijZGGaEVCi+q$H89;Q+0>|WYkm)j zpJYtsuS%A>Ng5ZrW7;{#sQ!@0s3(7Ni!yN%u6#~4U5_E3DRAuY;twYazSe%rkI{q? zt?34u-)m?qeN^11abWLt1(7PA<*!v2jr6I2Y=HltD$e`>paSs!ENADx zGRCi?zgrhS2mU>3cV?^KE{|U&e&@lzC5*toO8nwTBYiN<&u^f!OE{~hXK@Gs_!rFV BI4uAG literal 0 HcmV?d00001 diff --git a/tests/phpunit/elementor/core/app/import-export/mock/kit-library-manifest-only.zip b/tests/phpunit/elementor/core/app/import-export/mock/kit-library-manifest-only.zip new file mode 100644 index 0000000000000000000000000000000000000000..74fffbb689ac3a1f0cfa387f977c34bb2872408c GIT binary patch literal 646 zcmWIWW@Zs#U|`^2&}z6H@@ck_5f>8!!x9z-240|OZem_$T555LURH5_-qhfOeX|V& z_O9RZ-{8?6wHA$6TGv;#%SDC0+87yn%;&(Wj|$ZuUg1B#^9gKvqqTZfOu;?rXSVxi z+T6d-=kS=3tfM+Yfe8+x9WN^>&cm@$O(|=0VMxZyUEVdTUhuaJr;&ApC6X zfp*X24V4^XwJ)m#b~Y4jI@jo2>+++y@rtMWvDFf{H?bdERyxbDHNR0x$f_$mcdy=> z&3E{--k$K;#&9%A;r@d31&0^BTCvH^I?(jV;*D31e!OCuEcS9v|GOQ_6fPdw_42~m z4}nQDm7|}}7R-CP^OTv^`GmP|Hyyv5Ry{Z5u4(J_ zYpT1O%LMfcw%D9mpO*JHZ~v|Jb99^dYO6whc};&`y?v1X{>ly;7s1JQ`vqk?P6aNU zE47H@W6<6MJM&j^?OOYrRh>C!iS&2A|FHojXC}R{UZWG#`hFriSFcq>$jgQ2NR4o`G4M`w_4+(UA+BmyJy|= zKUA&oT)i{Q$4hTb+=rdNY~;>;J~km;^4+FN?}_5YQ_}71_DbZd-Z2+5lfSlJ@P~f9 zL3H!#-3uAL?(Cb=b48`{^7WFXzjuF*5AbGW5@EodY=9|;fssK0L;(RxA`0+kWdjK^ O0--gKHU*|O1_l73KOM#Z literal 0 HcmV?d00001 diff --git a/tests/phpunit/elementor/core/app/import-export/mock/sample-kit.zip b/tests/phpunit/elementor/core/app/import-export/mock/sample-kit.zip new file mode 100644 index 0000000000000000000000000000000000000000..0395f6d93e3bcca8258bc1df563ef0804d7ec7b9 GIT binary patch literal 11766 zcmZ{q1yEhfwytq^3-0a~T!I95S-3+8?(PuW-6cqHcXxMpch}&AM{@4Ddxu*OYAz;o zRev?AyXQZ;NB?q?pkQb~AV5$+4gO0?b#aQ>VZcB@LtsEaC_q3!b|&^lbaqDe_9m9b zcJ!upR+hC&gO**4NH6F++CuR_dd);&DD_1*0Yw8GLKQnb(Y&J_;F?G<&%!_un`MR?=Z@cD_ospHxBP4sEO z{;R7f{vpwg8Ml*@mM-Jh`bWQUw>u{T5|T#S;PHMuvM8VEu1oVqXr5|m$%&Ay9Uh+n zvPfD=q=PvRJRU_qsY#y2s|D=1DKr5ROs>opMx*%XRN7soqD`P>#!u1pav3NeDC-$> zG?I;&P8Jz2764uJ^AI_4L+1`p=)z<@7aE(B22_NRoL5)t4$nYxe~n!SSwj@r+n7z09SA|5(%2UhGQ4NkrG6Y=MDoUa#qDZ0$ zw5Y#hrZxGm*uJs0-Y(4FOg(2SODhYLH>klI+Stn0`>M?W~OY%N18E`;LKckv;PTKIPbmKFtAweI zt^5}O@h_hEav+p)QL1q%D%plca>ah;WGj6WJOyVXMKfsMJo3JFkuGDvzKhe~BW0=D zTYRSfH%@CSJ9`~_J>x%dk_`&LcoQN4b(HsHz#k>ew@uIq3V;4)->daK=vT&q!xt}a ztzc@^sB2=v!-G#<>cLD1skemQV@IjUmLyIF9(rBQ?Bil3p0yED(8-`bFyO1`>6r!& zdHMbx3Wc-R0r|I3wEu57mU@ml7Dkp1f5Q1Z$OPlf2={5S+3+kYcA_{aE=vG}oX&ze z#M!Bu^Vi)zWLOdD8exPY&}X6`!T}iIrOCT?xbhM;%MZOQ&?Zi+1*P$!HUI(yaGF8^ z+_hcMzrz@JL|oT>3&H8_!g{;@HF|H;!rtz!Tb%#IK{v?#I}V_U;)rw3Am%*)}(s6CV&a@=NFf5eA^Pez{=BX zTO4poVTQOb0YcGHu@Qou65<_;P7m(}YjZ$DUg}L`P#}ST(B8r_u(Gr_vb1OTJyHzJ ztbZapjT5l)Wkl<54{bQ3>Om;s2dD7Hgj*pjq&O_q_?-X8S_~;bO9x|dX*Q5gAmK?) z<_rLam3Cjke^YsdYD>$+u_Oy>DFD0mXV8@SBtlDzfhgcWa6S}F>hgf&nJ0E2PJE{R>?}1DXwXW^ylc&XEKQ1%H7vPr67)E?|h5re8D;ILohvA+ysO@VZY*)?6KG0D|9%ldqi?t zpj9?}R>Xz?$%nH%9HW&zA|Idw zzM2NCR4ZNOVCIxiR8&I3=j(4kvh1VK(|jkDWg!O(T@uFW)&9JHMTJ9I0&NJgV}&D! zV(TnMkrW<6M7lu*W+Z|5070%gB570tZ66-Z0}bs1CuNfaCH2kq>$#Oxy34Lk z7!f4r`Z<+Pd<>cYr7Q9suh|?NQw_n#{fZZo$5Gby(CM&zV#?)DrLxkqf(AiBxm0sp zJ@e(1Sv}s|Hf`_be)slwKoJBG&?f4C1l7r!?yu?p`yHTnwlJ?%m9$#sK;mQX_yq|F zTv?8 z*X}|ITSFqKFqY6sn+6e75oa7{k=U8o>=dg4>>8WaGfshOpQsqT@gb*N(~#X)EO>xF zq$14l;QEwqX~H*)PES}DT=LkDB4{&_=t|D!JJNaa^=8#q3jSzGFf^5daz%)Ews?nuvC<5wgNw?zhG@qQ*=djwdEh`Xy>31 z$k9P7JgWBD_eP^64Z`axMJR&`<8(^)U@;xlVtxr&G-xqX+h9290!}mjq=`~V(g(gY zS47xR)pzKjg=gcxy&aU$r`E@}j@L2bCcp@=aF)N|6+`8SRmzPC9cxkx;=80H9L4%M z3D*Y!ZcJvR)HR8I7s-k^=~f2pl=h*+(c*NHl=D)k_!0?L1P0LqBioD|ogRh+zvjw^ z8<$B((J_5KXVnj((VAKWk=?q-={%g3hD6O!`~0-6AbAC&}(#58miA zw|}ax?hU=}$Od0nugm8ol*th2*S8hGS0JXYg|p2o`iyq!Q$N*0^kI1*fHKAZdH`C4 zZVKHYw8T^%6X^h?hn3m|@IhEarb6h9{Yi#^3MSovbUC)xM@Ma4YfaNBh!(GSa4HC` zrvYnbl;`niKOb5qCf3*{#Qx2)B34^EiGj6gpT|9C! zjQZhRjC;v<2u(X2)+CNA@Q)Qm^HxO8gBGJQ$UUbdGld8_@EcpbW;gq2o?8XTtZaI9 zr9_J;UF15Jond>`Ybz?DFMg_x-W1jw9M~nCl^+uf^G4NuGzfUN#U@0{VcTBF>}jCB z-q)hlrNpkwxMr%bN`8S@^uP}R!Z8wmeqNqk9&R4CB5Tlaf6ch3q+te&L7CPE8hN#C z1WU&Waq2KY7Rm@4D(VPC?n0ql29O?v^@pso+E zm1v6rVeW&=s+;P*jWJ$oNDp=u{&sL4M$PNOtY5~Ul)jV$X|N6drD6F;44ah7!s3jf=yhd#W^&TUZ+=WHT2lMcOAb>8zO!{ovLsAF z2?L|E=p2%>RR&w=dhqsy(^$ZsFGLd`4pP_3%QY#UdPv>IS3ErsJ_=NIpVC?(iT?bQ z)_H}%a(dakiUE>eq7r2zOv+}xCYY&$M?LP@Izz&?EF_sbldij>{J2aPB4LdueU3Pm za8_MRuFDX`yL@1(|?Ez`V$mYUnQqOg&@&!_>5l;j3tlI$lWbxuQ2%?pX zxV?MXpyh0YOn#w^W1ps_i6St<=yO(;biIY<>=2wTx8{sC&lg^oW)o#mlGS$0(KhwN z;R6`;k0bb>GrlT`ur<)nyy~Yopvj(R9uzUfeD!dp+7?aOrpqcT1aXkHy`dyDKR(z)L@k zL^9jSshMZrj$p*V>Ly6WXJO^lNo!Y6YsHOm05$Bn9zc3vQehW$b+?Rgv?n+yeEQMh zF`U)g70Znf$zT-7$}@kfvc2%6!DRr`8iB{}kSo?+|^3(Dpj4dar0gJ9}i zwj{PQYDcXIKh9pjm0RlyZ8l28>u3mD0X=mt(Zl3QNW;D$VsPr5se+B+~brGm7r-u2qvS57MJ^tP> z{5!w>USL?ief-XEttu8)%XJvPR)FsKE804m^eT;-wdx9 zVgE^Rc4DpEZr$LPNQBYO8T&0)X*oZO1Bs0x^-5-rOskScDWnR7^A%3Z$qCNe(mg-w zm2ZXqoIZ?OHJW06w!O_^JA@=DG1{V_P@-12?LMVj9@MO8mFuz&R9RM(joMaWx|B2B zPFkysErY9`3dTy6F#~6hAXDe0N53gZX9IVt2)!&V(+qU}qE=X1omjHt=EEOM5A*%t zGf1zS1!?Opwb7DMm$O3J9qUU84d4Q`xI{N%sU#$y4L7G>`A z{YNMh;LH-#JS~Sgx-Tc(t&mesVr4E;Vlc9>g}MI6GIv_)V+$J6-rS{j6{}!wL8PcJ zGbs3ta>VD~GshRgt0MLrKV;Ti#V#>{E%wLD*cF`X>5MEmZ0!Iq8fI1yP%9tf3qOZq zJ*n=c_R44S4$O4OIPl1?v$0FcpVy+891Qtlv79oR85 z3i2@dZgnT4h%!vuoeZln@UQWDD=W&c;iBOq|4L6K)nvv=0<0^1D-0GdaHk&Wr*~XM zt!X?OB6JlWCFh9NmQJ|dwdL~S)M_&f-7o&2BL%Y5@vDxP&ZoiIHzMyuf`_y#?#wiX zQ>85X0BSA9*?8$BCo20ZlZHsG?hNs<w#csw zKy&iW0-}vdcb8ZOWvChDBwk_)g%!ckWVH$R9{${N?Dg_~YN8$jAPKX#@G&3O0Y@=J zR_8XdRN+KEZ_!te@87G5hG*3W7kl{Yhx(^@w)kU>vf$wl&t7(#AARe$cE$@|o7LB_ z>Mhk`MT!1 z)~f>H%HF)rHXn6Rm{0ZwGXZe5)sed3e%~(MC0I`qMSR`JgGr7v(XW*VpPi&W_7UVk zsC87%P>@#|YYKsdHRz0a3(?EPYGakX*-e-iBRmJ&9v@~(Q^_v6#$DF%MMyMVJDaY` zcD$ct&{iqLXG5GVva#`2`f`_Iv~KwV?mFW3(oX`qDPEAb#e)(104aRXSo54br@H`l zrnLE1)7?b&Xh-w5S7LiIc6Tf1WdAnxzEd_)4K*mCqzHBdSOB%tg74C5AWIXNr>d?n zdD<=cVV7ZN82==0)(g~Z3{<;|e-0cDbOLT#oq-RPXVg>0pnHg)FUO=6j2?e#<@sSD zTFMA;B@rGy2}$`2iWqr-e1x9CL;bk;u9umL>z}cn$eby*qv!ld#o2T#%hl>Oh%Sn z9AzO8RDfhJm2<06De0%;*ORTyV>LvO)un3%7@Dc-YNh9G^)MQDskZuTLZ;L$9MU#J zsL3dDZPyr7@y6pwM$APlJFi18XwHml4i3nzV2+7ySLR7X5I0pdSIt1~G)*1;20cQmlp+CUF(3T8 z2Yjd@C97RA-=Xcw0!E(*p&t8ug+fwUXg!r?s>En9c&Ct;FvskPhDN<-@c9W^sbo*;L=Wy5pZ&mueIJCdwD?F04zSpR{;v&E< zwu}THRe<`LB9h^Ym*3!}s}~vU^X(zt&-+`qQ@r?_G6mV!Tq*Z_-1_zjwBykK4p z-PLm8ok?eteXh9tjuZ+2X0p0ppRKJm`1yXs_4;&nck<8eSVfOw_vE-nnW(Pm?ScM! ztnu#{HuYOVBhPRvTni;C=Z@!n8i%{3{1;I&T$P3x>b``<-7;)7Gt)*^v4(adcln zivv&fYK^!fVhgI8vOWi*c~GXHt;(T6&`s811fvNLMKGOstw+yT`!Ylv{2?m5L7uiR8~!@K+#x=Yth&N>k4)TfZHny&2-R&Af9xa7DKTLk#1q zX1$L>8AE=MM#7E)@@Q!i3}qz#Do!b0>8){XF^bgfM{Ju~p+s2sNh2XIDA4ytzC2OZ znks6%po7TY<-j+O2?Oavmt8`z#3iaI^tNyNCunVy``u~|a;3Eky)80HA(s!+Kundy zg|;x;waK2wSRt1fMrnjZiFtw_;DXT<+knDV_2i)@iH(@_;|dP*uzn2Ljcz*}f_rvT z(h`otCE3N41xxsZeGGA^pb35r)2bQOvqnR>wki9{OU^1Y0=sTOpdX%G+jHbzg;ZrY(7inKb{Bufzcg8oS z;0NDXj^q${1hJ82{4Jo3QLJjH7&lz^F~xC3^g|oeyqxq6$z#%_``H6az}+ChCGc$q9>N{Qv>8zmFX-%AY7f{JuU)Hz*(k`6rWS4buLvsa*zSNiWJ2-y zHfEwE6NFJNQl>6-$vo9Q7VP>YVc_L;`Sisi+%1X=-@k}_eW3SeMdzGMXTZ5G3s294 zrcDP}=*sTs<$OSvDxK72J%T51odkoAOur1yo2BZ}!IveG!{zlu4Ydtic_fwYnNf$1 z=BR50ZV$d$Ha?u1BdZF0iB88^%41%i$zvXz5)0O)mxDV=0#_4mNXG#Tjp{3oie`)5 zVnVYSmhF@~oYC`X0zx|0)5$L^P>|!lBw4E3Wx9KPoQrn48TqM_)Me?HKdy-!66Bl- z>tl9|V@nBh7+$~4q|X}|~tkLpt6e9pW8`mj02rK{O&N$D@n<^|e&UB>(f zBCxvF$ro=l18(29f3Oey+~BBJpxT&er8Rp#Vbr9X1LSjHxK%nDyr|P?I`E6GWh&4H?;^R7KXV}7hzSpbA z(cYiEiI`LAo-aqU%1gO)q)Z4o3D!R)*CefNyZ0;}CPV5n33tT5)w6^cT#ehX(k@%h z_$=B^P0dR=R(ZEml+otav4PB6x?~p|U8d7roAUZ!_tw%hx7=J{qo{Na&?r|c?zT6W zN5HxdQ-;>#_a0;Ia21;mfB)etx>%L57=>Y09FQ8~NT(k11$*dY!^C{A=}jF&U3**p zt#jM#&vbnnK&rwzqPr+wZ&U#{S2kPGXrdaFG5;%&&&J(`hbf(PPq0Ix>Jmovj7-#? zOLqS?>byLZgzpfJLdH_JdK|$;GjX0tWP(W|gL~Cnzd`);Ruw0HfhIbFM!7tRv9q>P zVbz)gqekCWstm-KZq2qZm4xU+=oOr0FkAdvL2A2yQn(5Nx-`K@U{)f z)LxsVEbt4sQav@AQ;U-y7+8avs98hrzXDdLB}?<08Vp-7r1t-|yPo z8~yn@+1_6#;`h_TqbG)KnJZW+{rldF(9OjBK8E}No!i~S>9ULAh2Kxg+FqF%-`e(G z4Ex>hI`n~uMjM7ugfK&rCbI}JyTyc+FO^U<7t)B?=|}BZi{%_!IPVGY*v);;aES}S z&VC?3mHt&}E6`Bj#k$-gaJ^tPk%m*Ucn6KED&+O6k#+n~F zb%4V11Tg&=@dT4doYjBLORD@TmN~cjd&|i@pr(Qi4g|!D00e~n_m=a|DF?%!&)-Qg z9-#4-6wy3oyk8&zh|Asj!;bXFaB6B3*+LJ?=iZ}(Wk?pnMdR2;#S^DsVa85UVm5pv zjqQ>npNLoxQ!J<0ExS)vr4BUlp_|=&Py*giMM>qwKQZ(c$ zBG1d{GmI-?JcPcv>X-vbu)NX%y#7c;3bq)V1coq-^qJ1j8v(B?azwX(%%)pW5%+{9l0E@+Dq{b z(h+Ngv9ShTe*W{w({6ulbt#o(&G#yc+#chRzyKfw@kbxNIQP7vrkYrKC4@KuP@ z=}10@z`uiWkiHx+H0ciM#zfAZtS74~eMR%28LZo!csb1ELfM$>lJ6Ve*XIz%rj@I7 z6}*TowwY50KmEM{yIE#|#oo3%j?K^__UfP*Ffk=RIdqac#b;fEmeOE}bwY&3mUbV_ zC)AcpkW2ijS}TjQde^Zv@icd40<%hb*1*SDDg?eC`@j~(Q23{m&nO}p$gNC1>H@*G zjEAN(6o!K+r&Glx?dG@?N|O1C9i0@_kHWFwbNA&W26)E>Xa%|@wxIHps!M^L(64OC zqav}zlP4ikfXtUFqc6lQ11~k;yDwUQO5-Bqx zjBVt?a11ezAk+XM+(=7;J*4!8+BOq5a^}%bqiwa2Y0LP2?ucfPUi)@Vc23L0S0@Wn z8ND5yd03;;+&8@;=i6Ua~0NaDg|H@M8L2x}Vd6`)`7xhr_N&9R-Wy z{l?H}PEE!60UV%ujqn&!C{E~f6(w`$mClDAWMfcsrzB&AbU6$g&s(xrPhkAwnlxOQ z1q*-$bE=@pZr&z&evQqxwDZhaYBZi+?^tJRjF~y5?xCjIt{PAFK9XK~*U{bE{E2Yl z?8{@SXV(1owA&07TG@PrMLtC3sPJG`m+POaPpP}3^B~iuZ61=%l;zA|f&y3sKu%u% z+FhgJ-P{|OK}51+_JfCdWM6?_&qZbJ#I`Z^ybZn23vi8menG9gZ9hbP$HlAVHGker z4rubzS+|qg6dQ9^z=v!EXU34}zMXKul=Sz(u9|;CzNBz~tsgxZzcxPuU}8HH#o`sJ ztOMYjezbwM4D%B`5iiM=5xGK}JDAa=4<3(yPYjg)=u~bQg{Z(4=PI=jy50$wC;f2Z zq1XJl68Yt2A#tBx`QxT;t?XW`n${8EDM`1MZsb@DH=78?X%S{!Kq^mzT+O%OJ81eG zbc<7@H&*`>msN?Q(&N}&^OA08_=(H->MtocI=#qEoXIkgmaloaFuYbwvG`t5Y)D~M z>YLxZB`9Qy?I!j=2HI}4o-uJhOrV#Z-s45u>a1iX^^H`XTq32JWD4;=B}Re{l36mg zJf!2$2xXEGt3t53g;I78OJI-))ss-1OHFc95KA_Z4U_w()Si0)2Rz0`Q3|O zM6qnw$>S;Kuz2&zYdhGopB}n>XU8L0^ekm(c5^RfS4mW<9zL|cb^Ha>AH#7X<$fHL zIv>%~Mw9oxi05hrUsV6*0BL~(0wVldQSFQj{v)dYz4^DUTK-p82OX!(SqzN?LJ_DQ zkysI$zEi@fbJYdQ<$hAIc|Lb?o}4{g!U8eBOgrbk6Uv_-C!>(fVvW_u8r?Dx{+f27v16Fmei3YH>@>I*$^5uE)3xYS4X{H_NL4t%se|EOt2y3M#?Ja%o(lB z7rR6T%b5Hs1D5(aS zBr!P0H6R?Of5kwvmi9he0gliRV)kPJg*8=08vr-TNa(u1$(0D*M-~OpWXSpYc=+iH zC#CPTDGg^LdVq!>^ zOYiz)PQL4?hxV&OZSdZFma_C`i?hqeuYHtoSeW9L!e- zTlNcU4;~ciC8KjiFZsw;W>9lT93LY)GWQ9Fpw=P@zgPK$YqMiwkWO(aDqMOfr(9i} zM)b2;b)v*m$E3p7tsh1efpWiVc#m)oF>Q$fpa+wV6$< z?6<6<4S(fJAE%fu9()cNp~pzHB8~(ccr|D21#!6f<47KW^Xz9)SBKs9DTR`95?UF# z7!*1NGsrWC?u*MwslUl8hT80ZWR;c5NZxKjT<#<)@br82A6eZ3!h!TU{v)eIABFh8({dRfOJdXu1cw6adVn zQc_h+_9V9r_idL=ozY}UrKY23t)+X*=&qK7LbV=|Bfl=J%{z3Mf1q6PIafUAz&%@E z#h}`VkR0*uK;+ueKhV_18E`Cj0S77*JEAmi6gdY$Uho^HD;6@q)~6kF8jcQQqZ>Wd zw>-sTWyWoFapF2r`N{60V$pTS*Eg}vMfzzP9-s`iWK-DAu$MAFJam;Zv0e$Xxha&l z6=R)Adq6s8dI{ee)#Pak-JmQSu>oAC+0#BVATFD3{%R9ok~mg9V$x&x1Z7F6Bdc)= zI6Vo4Rf*qopk&Z2!tR=M&7}Wv{bMElma5ZLCFNCg3yDs?VSMhMzh|b&AO<}Mf@|t9 zt)ux4EXl5=I&{ud*6855qWa?ws-Fd0WtGox_adf7H($4x$P>h6c3ueeOt% zAmfy4cq|BYDp%=RXVg4yu^t#35HFz-jvP=z|Yh!`tg4pjaau7urEqsduo>O=4P|4tC&=u@1)>X@!v)^dltpBN6JB zf8s@WGb3&2K9bqsbxRvbqx{} z$L(&?=`aS(<7olx*XFG)S`7P`EpVp!g;9pB`BRtBHeDo@Q%|O?;_Qd1l`ck&c8VsL z@uaS#5pE3jn*)!@Xj3NzQc2N$T-IOjeyJvRO%?I5`FI;{J)q8wC=#QR#BosGbH=acqP zKzU$4V!a>N@ZGG7Aa__S=yu&z^tl-2i0DlNfLiroaAYBu!=3HW99*ZkddM3#HBK<6 z03d&FN}95McZIuo6-|yX1QK0G!3{chVEwpxV$ZO>Yto}nUGakBa>f@0d73$l%KJ+v zBbv~EzWICq z;Xloh-d@#z`Pu$*Bfh7+cL)AMY51G+msjvT<-MuzABrgGU$OkR82d*#-c#Ot^8TTW z{Z09^%=%x4-h0e@58Xc)qql|IUzVc(an!vhy!V0qL)d=XO#d(8U#_tCg!f*ie+YVS z8v3tV^&ey3f1OS5Deq5=|Dg!HZRr0^`SJt`9G9M^uH+o9i0D9-TXcGeR1I* zZVm2V+;^ph_nh}j>VG&8#D8)AyRK&V@6GQ8_Iujfactory()->create_and_get_custom_post( [ 'post_type' => 'page' ] ); + $this->factory()->create_and_get_custom_post( [ 'post_type' => 'post' ] ); + + $this->register_post_type( 'tests', 'Tests' ); + register_taxonomy( 'tests_tax', [ 'tests' ], [] ); + $this->factory()->create_and_get_custom_post( [ 'post_type' => 'tests' ] ); + $this->factory()->term->create_and_get( [ 'taxonomy' => 'tests_tax' ] ); + + $this->factory()->documents->publish_and_get(); + + $export = new Export(); + $export->register_default_runners(); + + // Act + $result = $export->run(); + + // Assert + $expected_manifest_base_keys = [ 'name', 'title', 'description', 'author', 'version', 'elementor_version', 'created', 'thumbnail', 'site' ]; + $this->assert_array_have_keys( $expected_manifest_base_keys, $result['manifest'] ); + + $expected_manifest_registered_keys = [ 'site-settings', 'plugins', 'taxonomies', 'content', 'wp-content', 'custom-post-type-title' ]; + $this->assert_array_have_keys( $expected_manifest_registered_keys, $result['manifest'] ); + + $extracted_zip_path = Plugin::$instance->uploads_manager->extract_and_validate_zip( $result['file_name'], [ 'json', 'xml' ] )['extraction_directory']; + $manifest_file = ImportExportUtils::read_json_file( $extracted_zip_path . 'manifest' ); + $this->assertEquals( $result['manifest'], $manifest_file ); + + // Cleanups + unregister_taxonomy_for_object_type( 'tests_tax', 'tests' ); + unregister_post_type( 'tests' ); + + Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_zip_path ); + } + + public function test_run__fails_when_no_runners_are_registered() { + // Expect + $this->expectException( \Exception::class ); + $this->expectExceptionMessage( 'Please specify export runners.' ); + + // Arrange + $export = new Export(); + + // Act + $export->run(); + } + + public function test_run__export_plugins() { + // Arrange + $export = new Export(); + $export->register( new Plugins() ); + + // Act + $result = $export->run(); + + // Assert + $this->assertCount( 2, $result['manifest']['plugins'] ); + + foreach ( $result['manifest']['plugins'] as $plugin ) { + $this->assert_array_have_keys( ['name', 'plugin', 'pluginUri', 'version'], $plugin ); + } + } + + public function test_run__export_site_settings() { + // Arrange + $this->act_as_admin(); + + $custom_colors = [ + '_id' => '0fba91c', + 'title' => 'Light Orange', + 'color' => '#FAB89F', + ]; + $site_settings['custom_colors'] = $custom_colors; + Plugin::$instance->kits_manager->create_new_kit( 'a', $site_settings ); + + $export = new Export(); + $export->register( new Site_Settings() ); + + // Act + $result = $export->run(); + + // Assert + $kit = Plugin::$instance->kits_manager->get_active_kit(); + $kit_tabs = $kit->get_tabs(); + unset( $kit_tabs['settings-site-identity'] ); + $expected_manifest_site_settings = array_keys( $kit_tabs ); + + $this->assertEqualSets( $expected_manifest_site_settings, $result['manifest']['site-settings'] ); + + $kit_data = $kit->get_export_data(); + $extracted_zip_path = Plugin::$instance->uploads_manager->extract_and_validate_zip( $result['file_name'], [ 'json', 'xml' ] )['extraction_directory']; + $site_settings_file = ImportExportUtils::read_json_file( $extracted_zip_path . 'site-settings' ); + + $this->assertEquals( $kit_data, $site_settings_file ); + + // Cleanups + Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_zip_path ); + } + + public function test_run__export_taxonomies() { + $this->register_post_type( 'tests', 'Tests' ); + register_taxonomy( 'tests_tax', [ 'tests' ], [] ); + + $this->factory()->create_and_get_custom_post( [ 'post_type' => 'tests' ] ); + $this->factory()->term->create_and_get( [ 'taxonomy' => 'tests_tax' ] ); + + // Arrange + $export = new Export(); + $export->register( new Taxonomies() ); + + // Act + $result = $export->run(); + + // Assert + $expected_taxonomies = [ + 'post' => [ + 'category' + ], + 'tests' => [ + 'tests_tax' + ], + ]; + $this->assertEquals( $expected_taxonomies, $result['manifest']['taxonomies'] ); + + $extracted_zip_path = Plugin::$instance->uploads_manager->extract_and_validate_zip( $result['file_name'], [ 'json', 'xml' ] )['extraction_directory']; + + foreach ( $result['manifest']['taxonomies'] as $post_type ) { + foreach ( $post_type as $taxonomy ) { + $terms = ImportExportUtils::read_json_file( $extracted_zip_path . 'taxonomies/' . $taxonomy ); + + $expected_terms = get_terms( [ + 'taxonomy' => $taxonomy, + 'hide_empty' => false, + ] ); + + foreach ( $terms as $term ) { + $expected_term = array_shift( $expected_terms ); + + $this->assertEquals( $expected_term->term_id, $term['term_id'] ); + $this->assertEquals( $expected_term->name, $term['name'] ); + $this->assertEquals( $expected_term->slug, $term['slug'] ); + $this->assertEquals( $expected_term->taxonomy, $term['taxonomy'] ); + $this->assertEquals( $expected_term->description, $term['description'] ); + $this->assertEquals( $expected_term->parent, $term['parent'] ); + } + } + } + + // Cleanups + unregister_post_type( 'tests' ); + unregister_taxonomy( 'tests_tax' ); + + Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_zip_path ); + } + + public function test_run__export_templates() { + // Arrange + $export = new Export(); + $export->register( new Templates() ); + + // Act + $result = $export->run(); + + // Assert + $this->assertFalse( isset( $result['manifest']['templates'] ) ); + + $extracted_zip_path = Plugin::$instance->uploads_manager->extract_and_validate_zip( $result['file_name'], [ 'json', 'xml' ] )['extraction_directory']; + + $this->assertFalse( is_dir( $extracted_zip_path . 'templates' ) ); + + // Cleanups + Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_zip_path ); + } + + public function test_run__export_elementor_content() { + // Arrange + $documents = ( new Collection( [ + $this->factory()->documents->publish_and_get( [ 'post_type' => 'page', ] ), + $this->factory()->documents->publish_and_get( [ 'post_type' => 'e-landing-page', ] ), + $this->factory()->documents->publish_and_get(), + ] ) ) + ->map_with_keys( function( $document ) { + return [ $document->get_main_id() => $document ]; + } ) + ->all(); + + // Add a draft document to make sure that it's not getting exported. + $this->factory()->documents->create(); + + $export = new Export(); + $export->register( new Elementor_Content() ); + + // Act + $result = $export->run(); + + // Assert + $this->assert_valid_elementor_content( $result, $documents ); + } + + public function test_run__export_wp_content() { + // Arrange + $this->register_post_type( 'tests', 'Tests' ); + + $this->factory()->create_and_get_custom_post( [ 'post_type' => 'page' ] ); + $this->factory()->create_and_get_custom_post( [ 'post_type' => 'tests' ] ); + + $export = new Export(); + $export->register( new Wp_Content() ); + + // Act + $result = $export->run(); + $selected_custom_post_types = $export->get_settings_selected_custom_post_types(); + + // Assert + $this->assertEquals( [ 'tests' ], $selected_custom_post_types ); + $this->assertArrayHasKey( 'tests', $result['manifest']['wp-content'] ); + $this->assertEquals( 'Tests', $result['manifest']['custom-post-type-title']['tests']['label'] ); + $this->assertEmpty( $result['manifest']['wp-content']['nav_menu_item'] ); + + $this->assert_valid_wp_content( $result ); + + // Cleanups + unregister_post_type( 'tests' ); + } + + public function test_run__export_elementor_content_with_taxonomy() { + register_taxonomy( 'custom_post_tax', [ 'post' ], [] ); + $post_term = $this->factory()->term->create_and_get( [ 'taxonomy' => 'custom_post_tax' ] ); + $elementor_post = $this->factory()->documents->publish_and_get(); + + wp_set_post_terms( $elementor_post->get_id(), [ $post_term->term_id ] , 'custom_post_tax' ); + + $export = new Export(); + $export->register( new Taxonomies() ); + $export->register( new Elementor_Content() ); + + // Act + $result = $export->run(); + + // Assert + $found_the_created_term = false; + foreach ( $result['manifest']['content']['post'][ $elementor_post->get_id() ]['terms'] as $term ) { + if ( $post_term->term_id === $term['term_id'] ) { + $found_the_created_term = true; + $this->assertEquals( $post_term->taxonomy, $term['taxonomy'] ); + $this->assertEquals( $post_term->slug, $term['slug'] ); + break; + } + } + $this->assertTrue( $found_the_created_term ); + + unregister_taxonomy( 'custom_post_tax' ); + } + + private function recursive_unset( &$elements, $unwanted_key ) { + foreach ( $elements as &$element ) { + unset( $element[ $unwanted_key ] ); + $this->recursive_unset( $element['elements'], $unwanted_key ); + } + } + + private function assert_valid_wp_content( $result ) { + $extracted_zip_path = Plugin::$instance->uploads_manager->extract_and_validate_zip( $result['file_name'], [ 'json', 'xml' ] )['extraction_directory']; + + foreach ( $result['manifest']['wp-content'] as $post_type => $posts_ids ) { + $xml_file = \Elementor\Utils::file_get_contents( $extracted_zip_path . 'wp-content/' . $post_type . '/' . $post_type . '.xml', true ); + $this->assertNotEmpty( $xml_file ); + + $query_args = [ + 'post_type' => $post_type, + 'post_status' => 'publish', + 'posts_per_page' => 20, + 'meta_query' => [ + [ + 'key' => '_elementor_edit_mode', + 'compare' => 'NOT EXISTS', + ], + ], + ]; + + $query = new \WP_Query( $query_args ); + + $this->assertCount( count( $query->posts ), $posts_ids ) ; + } + + // Cleanups + Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_zip_path ); + } + + private function register_post_type( $key, $plural_label ) { + register_post_type( $key, [ + 'can_export' => true, + 'public' => true, + 'labels' => [ + 'name' => $plural_label, + ], + ] ); + } + + private function assert_valid_elementor_content( $result, $documents ) { + $extracted_zip_path = Plugin::$instance->uploads_manager->extract_and_validate_zip( $result['file_name'], [ 'json', 'xml' ] )['extraction_directory']; + + foreach ( $result['manifest']['content'] as $post_type_key => $post_type_posts ) { + foreach ($result['manifest']['content'][ $post_type_key ] as $post_id => $post_settings ) { + $expected_document = $documents[ $post_id ]; + $expected_post = $expected_document->get_post(); + + $this->assertEquals( $expected_post->post_title, $post_settings['title'] ); + $this->assertEquals( $expected_post->post_excerpt, $post_settings['excerpt'] ); + $this->assertEquals( $expected_document->get_name(), $post_settings['doc_type'] ); + $this->assertEquals( get_the_post_thumbnail_url($expected_post), $post_settings['thumbnail'] ); + $this->assertEquals( get_permalink($expected_post), $post_settings['url'] ); + $this->assertTrue( isset($post_settings['terms']) ); + + // Unsetting the IDs since the export function change them. + $post_file = ImportExportUtils::read_json_file( $extracted_zip_path . 'content/' . $post_type_key . '/' . $post_id ); + $post_content = $post_file['content']; + $this->recursive_unset( $post_content, 'id' ); + + $expected_post_content = $expected_document->get_json_meta('_elementor_data'); + $this->recursive_unset( $expected_post_content, 'id'); + + $this->assertEquals( $expected_post_content, $post_content ); + } + } + + // Cleanups + Plugin::$instance->uploads_manager->remove_file_or_dir( $extracted_zip_path ); + } +} diff --git a/tests/phpunit/elementor/core/app/import-export/test-import.php b/tests/phpunit/elementor/core/app/import-export/test-import.php new file mode 100644 index 00000000000..2c819f7fe93 --- /dev/null +++ b/tests/phpunit/elementor/core/app/import-export/test-import.php @@ -0,0 +1,494 @@ +getMockBuilder( Plugins_Manager::class ) + ->setMethods( [ 'install', 'activate' ] ) + ->getMock(); + + $plugins_manager_mock->expects( $this->once() ) + ->method( 'install' ) + ->willReturn( [ + 'succeeded' => [ + 'elementor/elementor.php', + 'elementor-pro/elementor-pro.php', + ] + ] ); + + $plugins_manager_mock->expects( $this->once() ) + ->method( 'activate' ) + ->willReturn( [ + 'succeeded' => [ + 'elementor/elementor.php', + 'elementor-pro/elementor-pro.php', + ] + ] ); + + $zip_path = __DIR__ . '/mock/sample-kit.zip'; + $extraction_result = Plugin::$instance->uploads_manager->extract_and_validate_zip( $zip_path, [ 'json', 'xml' ] ); + $session = $extraction_result['extraction_directory']; + $import = new Import( $session ); + $manifest = $import->get_manifest(); + + $import->register( new Plugins( $plugins_manager_mock ) ); + $import->register( new Site_Settings() ); + $import->register( new Taxonomies() ); + $import->register( new Templates() ); + $import->register( new Elementor_Content() ); + $import->register( new Wp_Content() ); + + // Act + $result = $import->run(); + + // Assert + $this->assertEquals( [ 'Elementor', 'Elementor Pro' ], $result['plugins']); + $this->assertTrue( $result['site-settings'] ); + $this->assert_valid_taxonomies( $result ); + $this->assertCount( 1, $result['content']['post']['succeed'] ); + $this->assertCount( 1, $result['content']['page']['succeed'] ); + $this->assertCount( 1, $result['wp-content']['post']['succeed'] ); + $this->assertCount( 1, $result['wp-content']['page']['succeed'] ); + $this->assertCount( 1, $result['wp-content']['tests']['succeed'] ); + $this->assertCount( 9, $result['wp-content']['nav_menu_item']['succeed'] ); + + $this->assert_valid_terms_with_elementor_content( $result, $manifest ); + $this->assert_valid_terms_with_wp_content( $result ); + + // Cleanups + unregister_taxonomy_for_object_type( 'tests_tax', 'tests' ); + unregister_post_type( 'tests' ); + unregister_post_type( 'sectests' ); + } + + public function test_run__fail_when_not_registered_runners() { + // Expect + $this->expectException( \Exception::class ); + $this->expectExceptionMessage( 'Please specify import runners.' ); + + // Arrange + $import = new Import( __DIR__ . '/mock/sample-kit.zip', [] ); + + // Act + $import->run(); + } + + public function test_run__import_plugins_all_plugins_by_default() { + // Arrange + $plugins_manager_mock = $this->getMockBuilder( Plugins_Manager::class ) + ->setMethods( [ 'install', 'activate' ] ) + ->getMock(); + + $plugins_manager_mock->expects( $this->once() ) + ->method( 'install' ) + ->willReturn( [ + 'succeeded' => [ + 'elementor/elementor.php', + 'elementor-pro/elementor-pro.php', + ] + ] ); + + $plugins_manager_mock->expects( $this->once() ) + ->method( 'activate' ) + ->willReturn( [ + 'succeeded' => [ + 'elementor/elementor.php', + 'elementor-pro/elementor-pro.php', + ] + ] ); + + $import_settings = [ + 'include' => [ 'plugins' ], + ]; + + $import = new Import( __DIR__ . '/mock/sample-kit.zip', $import_settings ); + $import->register( new Plugins( $plugins_manager_mock ) ); + + // Act + $result = $import->run(); + + // Assert + $this->assertCount( 1, $result ); + $this->assertEquals( [ 'Elementor', 'Elementor Pro' ], $result['plugins'] ); + } + + public function test_run__import_plugins_selected_plugin() { + // Arrange + $plugins_manager_mock = $this->getMockBuilder( Plugins_Manager::class ) + ->setMethods( [ 'install', 'activate' ] ) + ->getMock(); + + $plugins_manager_mock->expects( $this->once() ) + ->method( 'install' ) + ->willReturn( [ 'succeeded' => [ + 'elementor/elementor.php', + ] ] ); + + $plugins_manager_mock->expects( $this->once() ) + ->method( 'activate' ) + ->willReturn( [ 'succeeded' => [ + 'elementor/elementor.php', + ] ] ); + + $import_settings = [ + 'include' => [ 'plugins' ], + 'plugins' => [ + [ + 'name' => 'Elementor', + 'plugin' => 'elementor/elementor', + 'pluginUri' => 'https://elementor.com/?utm_source=wp-plugins&utm_campaign=plugin-uri&utm_medium=wp-dash', + 'version' => '3.6.5', + ], + ], + ]; + + $import = new Import( __DIR__ . '/mock/sample-kit.zip', $import_settings ); + $import->register( new Plugins( $plugins_manager_mock ) ); + + // Act + $result = $import->run(); + + // Assert + $this->assertCount( 1, $result ); + $this->assertEquals( [ 'Elementor', ], $result['plugins'] ); + } + + public function test_run__import_site_settings() { + // Arrange + $this->act_as_admin(); + + $import_settings = [ + 'include' => [ 'settings' ], + ]; + $import = new Import( __DIR__ . '/mock/sample-kit.zip', $import_settings ); + $import->register( new Site_Settings() ); + + $extracted_directory_path = $import->get_extracted_directory_path(); + $site_settings = ImportExportUtils::read_json_file( $extracted_directory_path . 'site-settings' ); + $expected_custom_colors = $site_settings['settings']['custom_colors']; + $expected_custom_typography = $site_settings['settings']['custom_typography']; + + // Act + $result = $import->run(); + + // Assert + $this->assertCount( 1, $result ); + $this->assertTrue( $result['site-settings'] ); + + $new_active_kit = Plugin::$instance->kits_manager->get_active_kit(); + $this->assertEquals( 'Imported Kit', $new_active_kit->get_post()->post_title ); + + $new_settings = $new_active_kit->get_meta( PageManager::META_KEY ); + $this->assertEquals( $expected_custom_colors, $new_settings['custom_colors'] ); + $this->assertEquals( $expected_custom_typography, $new_settings['custom_typography'] ); + } + + public function test_run__import_templates_will_be_empty_without_the_pro() { + // Arrange + $import_settings = [ + 'include' => [ 'templates' ], + ]; + $import = new Import( __DIR__ . '/mock/sample-kit.zip', $import_settings ); + $import->register( new Templates() ); + + // Act + $result = $import->run(); + + // Assert + $this->assertEmpty( $result ); + } + + public function test_run__import_taxonomies_without_register_custom_taxonomies() { + // Arrange + $import_settings = [ + 'include' => [ 'content' ], + ]; + $import = new Import( __DIR__ . '/mock/sample-kit.zip', $import_settings ); + $import->register( new Taxonomies() ); + + // Act + $result = $import->run(); + + // Assert + $this->assertCount( 1, $result ); + $this->assert_valid_taxonomies( $result ); + } + + public function test_run__import_taxonomies_with_register_custom_taxonomies() { + // Arrange + register_post_type( 'tests' ); + register_taxonomy( 'tests_tax', [ 'tests' ], [] ); + + $import_settings = [ + 'include' => [ 'content' ], + ]; + $import = new Import( __DIR__ . '/mock/sample-kit.zip', $import_settings ); + $import->register( new Taxonomies() ); + + // Act + $result = $import->run(); + + // Assert + $this->assertCount( 1, $result ); + $this->assert_valid_taxonomies( $result ); + + // Cleanups + unregister_taxonomy_for_object_type( 'tests_tax', 'tests' ); + unregister_post_type( 'tests' ); + } + + public function test_run__import_elementor_content_only() { + // Arrange + $this->act_as_admin(); + + $import_settings = [ + 'include' => [ 'content' ], + 'selectedCustomPostTypes' => [], + ]; + + $zip_path = __DIR__ . '/mock/sample-kit.zip'; + $import = new Import( $zip_path, $import_settings ); + $import->register( new Elementor_Content() ); + $manifest = $import->get_manifest(); + + // Act + $result = $import->run(); + + // Assert + $this->assertCount( 1, $result ); + $this->assertCount( 1, $result['content']['post']['succeed'] ); + $this->assertCount( 1, $result['content']['page']['succeed'] ); + + $this->assert_valid_elementor_content( $result, $manifest, $zip_path ); + } + + public function test_run__import_wp_content_with_one_cpt_register_and_one_not() { + // Arrange + register_post_type( 'tests' ); + + $import_settings = [ + 'include' => [ 'content' ], + ]; + + $import = new Import( __DIR__ . '/mock/sample-kit.zip', $import_settings ); + $import->register( new Wp_Content() ); + + // Act + $result = $import->run(); + + $this->assertCount( 1, $result ); + $this->assertCount( 1, $result['wp-content']['post']['succeed'] ); + $this->assertCount( 1, $result['wp-content']['page']['succeed'] ); + $this->assertCount( 1, $result['wp-content']['tests']['succeed'] ); + $this->assertCount( 4, $result['wp-content']['nav_menu_item']['succeed'] ); + $this->assertFalse( isset( $result['wp-content']['sectests'] ) ); + + unregister_post_type( 'tests' ); + } + + public function test_run__import_content_with_one_cpt_selected_and_one_not() { + // Arrange + register_post_type( 'tests' ); + register_post_type( 'sectests' ); + + $import_settings = [ + 'include' => [ 'content' ], + 'selectedCustomPostTypes' => [ 'tests' ], + ]; + + $import = new Import( __DIR__ . '/mock/sample-kit.zip', $import_settings ); + $import->register( new Elementor_Content() ); + $import->register( new Wp_Content() ); + + // Act + $result = $import->run(); + + // Assert + $this->assertCount( 1, $result['content']['post']['succeed'] ); + $this->assertCount( 1, $result['content']['page']['succeed'] ); + $this->assertCount( 1, $result['wp-content']['post']['succeed'] ); + $this->assertCount( 1, $result['wp-content']['page']['succeed'] ); + $this->assertCount( 1, $result['wp-content']['tests']['succeed'] ); + $this->assertCount( 6, $result['wp-content']['nav_menu_item']['succeed'] ); + $this->assertFalse( isset( $result['wp-content']['sectests'] ) ); + + // Cleanup + unregister_post_type( 'tests' ); + unregister_post_type( 'sectests' ); + } + + public function test_run__envato_kit() { + // Arrange + $import = new Import( __DIR__ . '/mock/envato-kit.zip', [] ); + $import->register_default_runners(); + + // Act + $result = $import->run(); + + // Assert + $this->assertTrue( isset( $result['site-settings'] ) ); + $this->assertFalse( isset( $result['templates'] ) ); + } + + // Test the set default function. In this test we are also testing the import process by session ID. + public function test_set_default__import_by_session() { + // Arrange + $zip_path = __DIR__ . '/mock/sample-kit.zip'; + $extraction_result = Plugin::$instance->uploads_manager->extract_and_validate_zip( $zip_path, [ 'json', 'xml' ] ); + $session = $extraction_result['extraction_directory']; + + // Act + $import = new Import( $session ); + + // Assert + $manifest = $import->get_manifest(); + $expected_settings_include = [ 'templates', 'plugins', 'content', 'settings' ]; + $expected_settings_referrer = 'local'; + $expected_settings_selected_custom_post_types = [ 'tests', 'sectests' ]; + $expected_settings_selected_override_conditions = []; + $expected_settings_selected_plugins = $manifest['plugins']; + + $settings_include = $import->get_settings_include(); + $settings_referrer = $import->get_settings_referrer(); + $settings_selected_custom_post_types = $import->get_settings_selected_custom_post_types(); + $settings_selected_override_conditions = $import->get_settings_selected_override_conditions(); + $settings_selected_plugins = $import->get_settings_selected_plugins(); + + $this->assertEquals( $expected_settings_include, $settings_include ); + $this->assertEquals( $expected_settings_referrer, $settings_referrer ); + $this->assertEqualSets( $expected_settings_selected_custom_post_types, $settings_selected_custom_post_types ); + $this->assertEquals( $expected_settings_selected_override_conditions, $settings_selected_override_conditions ); + $this->assertEquals( $expected_settings_selected_plugins, $settings_selected_plugins ); + } + + public function test_construct__importing_a_not_existing_session_throws_an_error() { + // Arrange + $elementor_tmp_directory = Plugin::$instance->uploads_manager->get_temp_dir(); + + // Expect + $this->expectExceptionMessage( 'session-does-not-exits-error' ); + + // Act + $import = new Import( $elementor_tmp_directory . 'session-not-exits', [] ); + } + + // Test if the kit-library adapter is running and performing correctly. + public function test_get_manifest__kit_library() { + $import_settings = [ + 'referrer' => 'kit-library', + ]; + + $import = new Import( __DIR__ . '/mock/kit-library-manifest-only.zip', $import_settings ); + $manifest = $import->get_manifest(); + + foreach ( $manifest['content']['page'] as $page ) { + $this->assertFalse( $page['thumbnail'] ); + } + + foreach ( $manifest['templates'] as $template ) { + $this->assertFalse( $template['thumbnail'] ); + } + } + + private function assert_valid_taxonomies( $result ) { + $this->assertNotEmpty( $result['taxonomies'] ); + + foreach ( $result['taxonomies'] as $post_type_taxonomies ) { + foreach ( $post_type_taxonomies as $taxonomy_key => $imported_terms ) { + foreach ( $imported_terms as $imported_term ) { + $imported_term_id = $imported_term['new_id']; + $imported_term_slug = $imported_term['new_slug']; + + $term = get_term( $imported_term_id ); + $this->assertTrue( $term->taxonomy === $taxonomy_key ); + $this->assertTrue( $term->slug === $imported_term_slug ); + } + } + } + } + + private function recursive_unset( &$elements, $unwanted_key ) { + foreach ( $elements as &$element ) { + unset( $element[ $unwanted_key ] ); + $this->recursive_unset( $element['elements'], $unwanted_key ); + } + } + + // Assertions for elementor content by testing if the post containing the "JSON" content. + // The "JSON" is located in the content folder inside the kit. + private function assert_valid_elementor_content( $result, $manifest, $zip_path) { + $import_process_tmp_dir = Plugin::$instance->uploads_manager->extract_and_validate_zip( $zip_path )['extraction_directory']; + + foreach ( $manifest['content'] as $elementor_post_type => $elementor_posts ) { + foreach ( $elementor_posts as $post_id => $post_settings ) { + $expected_post_data = ImportExportUtils::read_json_file( $import_process_tmp_dir . '/content/' . $elementor_post_type . '/' . $post_id ); + $expected_post_content = $expected_post_data['content']; + + $imported_post_id = $result['content'][ $elementor_post_type ]['succeed'][ $post_id ]; + $new_post = Plugin::$instance->documents->get( $imported_post_id, false ); + $post_content = $new_post->get_json_meta('_elementor_data'); + + $this->recursive_unset( $post_content, 'isInner' ); + $this->recursive_unset( $expected_post_content, 'isInner' ); + + $this->assertEquals( $expected_post_content, $post_content ); + } + } + + // Cleanup + Plugin::$instance->uploads_manager->remove_file_or_dir( $import_process_tmp_dir ); + } + + // Assertions for imported taxonomies and imported Elementor content by testing the terms of every Elementor post. + private function assert_valid_terms_with_elementor_content( $result, $manifest ) { + foreach ( $manifest['content'] as $elementor_post_type => $elementor_posts ) { + foreach ( $elementor_posts as $post_id => $post_settings ) { + $expected_post_terms = $manifest['content'][ $elementor_post_type ][ $post_id ]['terms']; + $imported_post_id = $result['content'][ $elementor_post_type ]['succeed'][ $post_id ]; + + foreach ( $expected_post_terms as $term ) { + $post_terms = get_the_terms( $imported_post_id, $term['taxonomy'] ); + $this->assertEquals( $term['slug'], $post_terms[0]->slug ); + } + } + } + } + + // Assertions for imported taxonomies and imported WP content by testing the terms of every WP post. + private function assert_valid_terms_with_wp_content( $result ) { + foreach ( $result['wp-content'] as $wp_post_type => $wp_posts ) { + foreach ( $wp_posts['succeed'] as $new_post_id ) { + if ( ! isset( $result['taxonomies'][ $wp_post_type ] ) ) { + continue; + } + + foreach ( $result['taxonomies'][ $wp_post_type ] as $taxonomy => $terms ) { + $post_terms = get_the_terms( $new_post_id, $taxonomy ); + $this->assertNotEmpty( $post_terms ); + } + } + } + } +} diff --git a/tests/phpunit/elementor/core/utils/import-export/test-wp-exporter.php b/tests/phpunit/elementor/core/utils/import-export/test-wp-exporter.php index 46bd96c3791..1407b15ca48 100644 --- a/tests/phpunit/elementor/core/utils/import-export/test-wp-exporter.php +++ b/tests/phpunit/elementor/core/utils/import-export/test-wp-exporter.php @@ -45,35 +45,6 @@ private function remove_space_eols_and_tabulation( $content ) { return preg_replace('/[\s\t\n]/', '', $content); } - public function test_run__ensure_match_to_export_wp() { - // Arrange. - $replace_pub_date_timestamp = function ( $xml_data ) { - // Since the pubDate depends on time they cannot be always the same. - return preg_replace( '#().*?()#', 'same-for-tests', $xml_data ); - }; - - require ABSPATH . 'wp-admin/includes/export.php'; - - $this->expected_error( 'Cannot modify header information' ); - - ob_start(); - export_wp(); - $original_wp_export_output = ob_get_clean(); - - $clean_wp_export_output = $this->remove_space_eols_and_tabulation( $original_wp_export_output ); - - // Act. - $elementor_export_output = ( new WP_Exporter() )->run(); - $elementor_export_output = $elementor_export_output['xml']; - $clean_elementor_export_output = $this->remove_space_eols_and_tabulation( $elementor_export_output ); - - $clean_wp_export_output = $replace_pub_date_timestamp( $clean_wp_export_output ); - $clean_elementor_export_output = $replace_pub_date_timestamp( $clean_elementor_export_output ); - - // Assert. - $this->assertEquals( $clean_wp_export_output, $clean_elementor_export_output ); - } - // TODO: To be sure it have the same data in all cases, its require to insert the data for all the cases. //public function test_run__ensure_match_to_export_wp_in_all_content_cases() { // @@ -168,7 +139,7 @@ public function test_run__ensure_include_post_featured_image_as_attachment() { 'post_type' => 'attachment', ] ); - $this->factory()->post->create_and_get( [ + $post = $this->factory()->post->create_and_get( [ 'meta_input' => [ '_thumbnail_id' => $attachment->ID, ], @@ -190,9 +161,33 @@ public function test_run__ensure_include_post_featured_image_as_attachment() { $content = $exporter->run(); // Assert. - $this->assertCount( 2, $content['ids'] ); + // The featured image is included as attachment and will not count at the content ids. + $this->assertEquals( [ $post->ID ], $content['ids'] ); + + $include_attachment = (boolean) strstr( + $content['xml'], + '' + ); - $include_attachment = (boolean) strstr( $content['xml'], '' ); $this->assertTrue( $include_attachment ); } + + /** + * Return wrapped given string in XML CDATA tag. + * + * @param string $str String to wrap in XML CDATA tag. + * + * @return string + */ + private function wxr_cdata( $str ) { + $str = (string) $str; + + if ( ! seems_utf8( $str ) ) { + $str = utf8_encode( $str ); + } + + $str = '', ']]]]>', $str ) . ']]>'; + + return $str; + } } diff --git a/tests/phpunit/elementor/core/utils/import-export/test-wp-import.php b/tests/phpunit/elementor/core/utils/import-export/test-wp-import.php index 79b4b504de7..3d52b25a78e 100644 --- a/tests/phpunit/elementor/core/utils/import-export/test-wp-import.php +++ b/tests/phpunit/elementor/core/utils/import-export/test-wp-import.php @@ -13,23 +13,7 @@ public function setUp() { $this->remove_default_kit(); } - private function assert_valid_result( $expected_succeed, $result ) { - $this->assertEquals( [ - 'status' => 'success', - 'errors' => [], - 'summary' => [ - 'categories' => 0, - 'tags' => 0, - 'terms' => 0, - 'posts' => [ - 'failed' => [], - 'succeed' => $expected_succeed, - ], - ], - ], $result ); - } - - public function test_run_import_menu() { + public function test_run__import_native_wp_content() { // Arrange. $page_importer = new WP_Import( __DIR__ . '/mock/page.xml' ); $post_importer = new WP_Import( __DIR__ . '/mock/post.xml' ); @@ -47,8 +31,9 @@ public function test_run_import_menu() { $this->assertEqualSets( [ 1 ],array_keys( $post_result['summary']['posts']['succeed'] ) ); $this->assertNotNull( get_posts( $post_result['summary']['posts']['succeed'][1] ) ); - $this->assertEqualSets( [ 17, 18 ],array_keys( $menu_result['summary']['posts']['succeed'] ) ); + $this->assertEqualSets( [ 17 ],array_keys( $menu_result['summary']['terms']['succeed'] ) ); + $this->assertEqualSets( [ 17 ],array_keys( $menu_result['summary']['posts']['succeed'] ) ); + $this->assertNotNull( get_term( $menu_result['summary']['terms']['succeed'][17], 'nav_menu' ) ); $this->assertNotNull( get_posts( $menu_result['summary']['posts']['succeed'][17] ) ); - $this->assertNotNull( get_posts( $menu_result['summary']['posts']['succeed'][18] ) ); } } diff --git a/tests/phpunit/elementor/core/utils/test-str.php b/tests/phpunit/elementor/core/utils/test-str.php index 3b8294bd100..a33104b9aaa 100644 --- a/tests/phpunit/elementor/core/utils/test-str.php +++ b/tests/phpunit/elementor/core/utils/test-str.php @@ -39,4 +39,14 @@ public function test_encode_idn_url__encodes_idn_url() { // Assert. $this->assertEquals( $expected, $encoded_url ); } + + public function test_ends_with() { + // Arrange + $str1 = 'test-str'; + $str2 = 'test-str-2'; + + // Act & Assert + $this->assertTrue( Str::ends_with( $str1, 'str' ) ); + $this->assertFalse( Str::ends_with( $str2, 'str' ) ); + } } From 71a386bbfea16d514ac6e240ed45416ce5b2a6d0 Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Thu, 18 Aug 2022 11:35:52 +0300 Subject: [PATCH 031/130] Fix: Importing fails when post type file is missing [ED-8002] (#19518) --- core/app/modules/import-export/runners/wp-content.php | 8 ++++++++ core/app/modules/import-export/utils.php | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/core/app/modules/import-export/runners/wp-content.php b/core/app/modules/import-export/runners/wp-content.php index c5129e76deb..10c39231239 100644 --- a/core/app/modules/import-export/runners/wp-content.php +++ b/core/app/modules/import-export/runners/wp-content.php @@ -54,6 +54,10 @@ public function import( array $data, array $imported_data ) { $imported_terms ); + if ( empty( $import ) ) { + continue; + } + $result['wp-content'][ $post_type ] = $import; $imported_data = array_merge( $imported_data, $result ); } @@ -105,6 +109,10 @@ private function import_wp_post_type( $path, $post_type, array $imported_data, a $file = $path . $post_type . '/' . $post_type . '.xml'; + if ( ! file_exists( $file ) ) { + return []; + } + $wp_importer = new WP_Import( $file, $args ); $result = $wp_importer->run(); diff --git a/core/app/modules/import-export/utils.php b/core/app/modules/import-export/utils.php index 44699891463..27aa00c7d87 100644 --- a/core/app/modules/import-export/utils.php +++ b/core/app/modules/import-export/utils.php @@ -25,13 +25,13 @@ public static function map_old_new_post_ids( array $imported_data ) { if ( isset( $imported_data['content'] ) ) { foreach ( $imported_data['content'] as $post_type ) { - $result += $post_type['succeed']; + $result += $post_type['succeed'] ?? []; } } if ( isset( $imported_data['wp-content'] ) ) { foreach ( $imported_data['wp-content'] as $post_type ) { - $result += $post_type['succeed']; + $result += $post_type['succeed'] ?? []; } } From a537f75e2afedb36b983e1d07d034eac7b46956c Mon Sep 17 00:00:00 2001 From: TzviRabinovitch <99259629+TzviRabinovitch@users.noreply.github.com> Date: Mon, 22 Aug 2022 10:50:55 +0300 Subject: [PATCH 032/130] Internal: Experiment - Introduce internal experiment [ED-8016] (#19548) --- core/experiments/manager.php | 5 ++-- docs/core/experiments/manager.md | 17 +++++------ .../core/experiments/test-manager.php | 28 +++++++++++++++++-- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/core/experiments/manager.php b/core/experiments/manager.php index 3eac820a77e..5cf3d3394cd 100644 --- a/core/experiments/manager.php +++ b/core/experiments/manager.php @@ -67,6 +67,7 @@ public function add_feature( array $options ) { 'release_status' => self::RELEASE_STATUS_ALPHA, 'default' => self::STATE_INACTIVE, 'mutable' => true, + 'hidden' => false, 'new_site' => [ 'default_active' => false, 'always_active' => false, @@ -75,7 +76,7 @@ public function add_feature( array $options ) { 'on_state_change' => null, ]; - $allowed_options = [ 'name', 'title', 'tag', 'description', 'release_status', 'default', 'mutable', 'new_site', 'on_state_change', 'dependencies' ]; + $allowed_options = [ 'name', 'title', 'tag', 'description', 'release_status', 'default', 'mutable', 'hidden', 'new_site', 'on_state_change', 'dependencies' ]; $experimental_data = $this->merge_properties( $default_experimental_data, $options, $allowed_options ); @@ -419,7 +420,7 @@ private function register_settings_fields( Settings $settings ) { $fields = []; foreach ( $features as $feature_name => $feature ) { - if ( ! $feature['mutable'] ) { + if ( ! $feature['mutable'] || $feature['hidden'] ) { unset( $features[ $feature_name ] ); continue; diff --git a/docs/core/experiments/manager.md b/docs/core/experiments/manager.md index 02c47f43a4c..8eae394a349 100644 --- a/docs/core/experiments/manager.md +++ b/docs/core/experiments/manager.md @@ -59,16 +59,17 @@ default state (active / inactive) and more! Even a callback could be supplied to (using the `on_state_change` key in the experiment settings array). ### Available Options: -| Option | Type | Default | Description -| :-----------------------------------------| :---------------------------------------------------------------------------------------------------------------------------------------------------------| :-------------------------| :------------- -| `description` | `{String}` | `''` | Description that will be shown in the admin panel. -| `release_status` | `{String}` Constant, one of: `RELEASE_STATUS_DEV`, `RELEASE_STATUS_ALPHA`, `RELEASE_STATUS_BETA`, `RELEASE_STATUS_RC`, `RELEASE_STATUS_STABLE`. | `RELEASE_STATUS_ALPHA` | Experiment release status. -| `default` | `{String}` Constant, one of: `STATE_ACTIVE`, `STATE_INACTIVE`. | `STATE_INACTIVE` | Default state (active/inactive). -| `new_site` | `{Array}` | | Experiment settings for new sites. -| `new_site.default_active` | `{Boolean}` | `false` | Whether the experiment is active by default. -| `new_site.always_active` | `{Boolean}` | `false` | Whether the experiment is active and the state immutable. +| Option | Type | Default | Description +|:------------------------------------------| :---------------------------------------------------------------------------------------------------------------------------------------------------------| :-------------------------| :------------- +| `description` | `{String}` | `''` | Description that will be shown in the admin panel. +| `release_status` | `{String}` Constant, one of: `RELEASE_STATUS_DEV`, `RELEASE_STATUS_ALPHA`, `RELEASE_STATUS_BETA`, `RELEASE_STATUS_RC`, `RELEASE_STATUS_STABLE`. | `RELEASE_STATUS_ALPHA` | Experiment release status. +| `default` | `{String}` Constant, one of: `STATE_ACTIVE`, `STATE_INACTIVE`. | `STATE_INACTIVE` | Default state (active/inactive). +| `new_site` | `{Array}` | | Experiment settings for new sites. +| `new_site.default_active` | `{Boolean}` | `false` | Whether the experiment is active by default. +| `new_site.always_active` | `{Boolean}` | `false` | Whether the experiment is active and the state immutable. | `new_site.minimum_installation_version` | `{String}` | `null` | Minimum version to determine if the current installation is a new one. | `on_state_change` | `{Callable}` | `null` | A callback that runs on each state change. +| `hidden` | `{Boolean}` | `false` | Whether the experiment is displayed to the end user. Then, the experiment state (active or inactive) can be checked directly through the manager: diff --git a/tests/phpunit/elementor/core/experiments/test-manager.php b/tests/phpunit/elementor/core/experiments/test-manager.php index 0e151d6c128..e7821a6d6ba 100644 --- a/tests/phpunit/elementor/core/experiments/test-manager.php +++ b/tests/phpunit/elementor/core/experiments/test-manager.php @@ -44,6 +44,7 @@ public function test_add_feature() { 'minimum_installation_version' => null, ], 'mutable' => true, + 'hidden' => false, ]; $new_feature = $this->add_test_feature( $test_feature_data ); @@ -66,8 +67,8 @@ public function test_add_feature__ensure_wrap_core_dependency() { 'name' => 'depended_feature', 'state' => Experiments_Manager::STATE_INACTIVE, 'dependencies' => [ - 'core_feature' - ] + 'core_feature', + ], ]; $this->add_test_feature( $test_core_feature ); @@ -82,6 +83,29 @@ public function test_add_feature__ensure_wrap_core_dependency() { $this->assertEquals( 'core_feature', $depended_feature_dependency->get_name() ); } + public function test_feature_can_be_added_as_hidden() { + // Act + $args = [ 'hidden' => true ]; + $this->add_test_feature( $args ); + + // Assert + $feature = $this->experiments->get_features( 'test_feature' ); + $this->assertNotEmpty( $feature ); + $this->assertTrue( $feature['hidden'] ); + } + + public function test_features_are_added_as_not_hidden_by_default() { + // Act + $this->add_test_feature(); + + // Assert + $features = $this->experiments->get_features(); + $this->assertNotEmpty( $features ); + foreach ( $features as $feature ) { + $this->assertFalse( $feature['hidden'] ); + } + } + public function test_get_features() { $experiments = $this->experiments; From 436448a98a1d13f53868e3c768fd02dbb37fce20 Mon Sep 17 00:00:00 2001 From: Ariel Klikstein Date: Tue, 23 Aug 2022 17:16:18 +0300 Subject: [PATCH 033/130] Tweak: Increase inputs in Replace URL tool to support long URLs [ED-8030] (#19565) --- assets/dev/scss/admin/_tools.scss | 13 +++++++++++-- includes/settings/tools.php | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/assets/dev/scss/admin/_tools.scss b/assets/dev/scss/admin/_tools.scss index db6f3185d04..f5915a8b93e 100644 --- a/assets/dev/scss/admin/_tools.scss +++ b/assets/dev/scss/admin/_tools.scss @@ -8,9 +8,18 @@ } } -#elementor_rollback, -#elementor_rollback_pro, #elementor_replace_url { + > div { + max-width: 800px; + + input { + margin-bottom: 6px; + } + } +} + +#elementor_rollback, +#elementor_rollback_pro { > div { display: flex; diff --git a/includes/settings/tools.php b/includes/settings/tools.php index 31848e6bd83..02196fbf4ae 100644 --- a/includes/settings/tools.php +++ b/includes/settings/tools.php @@ -323,7 +323,7 @@ protected function create_tabs() { 'label' => esc_html__( 'Update Site Address (URL)', 'elementor' ), 'field_args' => [ 'type' => 'raw_html', - 'html' => sprintf( '', wp_create_nonce( 'elementor_replace_url' ), esc_html__( 'Replace URL', 'elementor' ) ), + 'html' => sprintf( '', wp_create_nonce( 'elementor_replace_url' ), esc_html__( 'Replace URL', 'elementor' ) ), 'desc' => esc_html__( 'Enter your old and new URLs for your WordPress installation, to update all Elementor data (Relevant for domain transfers or move to \'HTTPS\').', 'elementor' ), ], ], From 67a840ac6d941d20012ea3b7f7a0470e6fbf485d Mon Sep 17 00:00:00 2001 From: StyleShit <32631382+StyleShit@users.noreply.github.com> Date: Tue, 23 Aug 2022 18:47:30 +0300 Subject: [PATCH 034/130] Internal: Experiments Manager - Prevent depending on a hidden experiment [ED-8028] (#19561) --- core/experiments/manager.php | 5 ++++ .../core/experiments/test-manager.php | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/core/experiments/manager.php b/core/experiments/manager.php index 5cf3d3394cd..2d1e4f367e8 100644 --- a/core/experiments/manager.php +++ b/core/experiments/manager.php @@ -107,6 +107,11 @@ public function add_feature( array $options ) { if ( ! empty( $experimental_data['dependencies'] ) ) { foreach ( $experimental_data['dependencies'] as $key => $dependency ) { $feature = $this->get_features( $dependency ); + + if ( ! empty( $feature['hidden'] ) ) { + throw new Exceptions\Dependency_Exception( 'Depending on a hidden experiment is not allowed.' ); + } + if ( ! class_exists( $dependency ) && ! empty( $feature ) ) { $experimental_data['dependencies'][ $key ] = new Wrap_Core_Dependency( $feature ); } else { diff --git a/tests/phpunit/elementor/core/experiments/test-manager.php b/tests/phpunit/elementor/core/experiments/test-manager.php index e7821a6d6ba..e0f0760239f 100644 --- a/tests/phpunit/elementor/core/experiments/test-manager.php +++ b/tests/phpunit/elementor/core/experiments/test-manager.php @@ -1,6 +1,7 @@ add_test_feature( [ + 'name' => 'regular-dependency', + 'state' => Experiments_Manager::STATE_ACTIVE, + ] ); + + $this->add_test_feature( [ + 'name' => 'hidden-dependency', + 'state' => Experiments_Manager::STATE_ACTIVE, + 'hidden'=> true, + ] ); + + // Expect. + $this->expectException( Dependency_Exception::class ); + $this->expectExceptionMessage( 'Depending on a hidden experiment is not allowed.' ); + + // Act. + $this->add_test_feature( [ + 'name' => 'dependant', + 'state' => Experiments_Manager::STATE_ACTIVE, + 'dependencies' => [ + 'regular-dependency', + 'hidden-dependency', + ], + ] ); + } + public function test_get_features() { $experiments = $this->experiments; From 15c4739d071c9a7cc23a8e00ff2e1ea1c565c73e Mon Sep 17 00:00:00 2001 From: Ariel Klikstein Date: Tue, 23 Aug 2022 21:09:34 +0300 Subject: [PATCH 035/130] Fix: The title of editor control are not responsive [ED-8034] (#19577) Co-authored-by: Mati Horowitz <21468434+matipojo@users.noreply.github.com> --- assets/dev/scss/editor/panel/_controls.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/dev/scss/editor/panel/_controls.scss b/assets/dev/scss/editor/panel/_controls.scss index d2584120565..7e3bc9af5ee 100644 --- a/assets/dev/scss/editor/panel/_controls.scss +++ b/assets/dev/scss/editor/panel/_controls.scss @@ -337,6 +337,7 @@ > .elementor-control-title { flex-shrink: 0; + max-width: 60%; } > .elementor-control-input-wrapper { From 507e199026a5ea42810d0bc46dc0bc55f0d25f87 Mon Sep 17 00:00:00 2001 From: Ariel Klikstein Date: Thu, 25 Aug 2022 10:54:50 +0300 Subject: [PATCH 036/130] Tweak: Add Dynamic Tags for Global Colors [ED-8050] (#19598) Co-authored-by: Mati Horowitz <21468434+matipojo@users.noreply.github.com> --- core/kits/documents/tabs/global-colors.php | 1 - 1 file changed, 1 deletion(-) diff --git a/core/kits/documents/tabs/global-colors.php b/core/kits/documents/tabs/global-colors.php index 89ef6b2df4c..9a0b68b25f9 100644 --- a/core/kits/documents/tabs/global-colors.php +++ b/core/kits/documents/tabs/global-colors.php @@ -62,7 +62,6 @@ protected function register_tab_controls() { [ 'type' => Controls_Manager::COLOR, 'label_block' => true, - 'dynamic' => [], 'selectors' => [ '{{WRAPPER}}' => '--e-global-color-{{_id.VALUE}}: {{VALUE}}', ], From d0dbaec982c2f7a85c2c898a8c1e4899105accbd Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Thu, 25 Aug 2022 11:09:08 +0300 Subject: [PATCH 037/130] Fix: Import/Export - WooCommerce products are not being imported [ED-7932] (#19603) --- .../shared-context/shared-context-provider.js | 2 +- .../import-export/processes/import.php | 4 ++-- .../runners/elementor-content.php | 2 +- .../app/import-export/mock/sample-kit.zip | Bin 11766 -> 12651 bytes .../core/app/import-export/test-export.php | 9 ++++++++- .../core/app/import-export/test-import.php | 11 ++++++++++- 6 files changed, 22 insertions(+), 6 deletions(-) diff --git a/core/app/modules/import-export/assets/js/context/shared-context/shared-context-provider.js b/core/app/modules/import-export/assets/js/context/shared-context/shared-context-provider.js index 277b65e9e7d..fdd4813e791 100644 --- a/core/app/modules/import-export/assets/js/context/shared-context/shared-context-provider.js +++ b/core/app/modules/import-export/assets/js/context/shared-context/shared-context-provider.js @@ -11,7 +11,7 @@ export default function SharedContextProvider( props ) { includes: kitContentData.map( ( item ) => item.type ), referrer: null, customPostTypes: [], - selectedCustomPostTypes: [], + selectedCustomPostTypes: null, currentPage: null, }, [ data, dispatch ] = useReducer( reducer, initialState ); diff --git a/core/app/modules/import-export/processes/import.php b/core/app/modules/import-export/processes/import.php index 74e06388b7d..7817cfd80a9 100644 --- a/core/app/modules/import-export/processes/import.php +++ b/core/app/modules/import-export/processes/import.php @@ -389,11 +389,11 @@ private function read_site_settings_json() { * @return array Custom post types names. */ private function get_default_settings_custom_post_types() { - if ( empty( $this->manifest['wp-content'] ) ) { + if ( empty( $this->manifest['custom-post-type-title'] ) ) { return []; } - $manifest_post_types = array_keys( $this->manifest['wp-content'] ); + $manifest_post_types = array_keys( $this->manifest['custom-post-type-title'] ); return array_diff( $manifest_post_types, Utils::get_builtin_wp_post_types() ); } diff --git a/core/app/modules/import-export/runners/elementor-content.php b/core/app/modules/import-export/runners/elementor-content.php index 801b51e8e3d..d81b76f1d14 100644 --- a/core/app/modules/import-export/runners/elementor-content.php +++ b/core/app/modules/import-export/runners/elementor-content.php @@ -10,7 +10,7 @@ class Elementor_Content extends Runner_Base { private $page_on_front_id; - public function __constructor() { + public function __construct() { $this->init_page_on_front_data(); } diff --git a/tests/phpunit/elementor/core/app/import-export/mock/sample-kit.zip b/tests/phpunit/elementor/core/app/import-export/mock/sample-kit.zip index 0395f6d93e3bcca8258bc1df563ef0804d7ec7b9..6c464c1a469b04e940fb05a11650ff2dcca8088d 100644 GIT binary patch delta 6925 zcmaJ`1z1#D*B-i?VJImHX{4kDL^_8S=|*~nR2T+HK?DYAlo~n&q??fjDG`(o5u_xP z68MM9^?vt$@vnK#J~OlTyVhRkJ?E@_-t*IJ(}qe{0}GoP007_v8p1yt(DCJ-JVgA& zVTIlH=n^6iza(su#42*hu-p8&!)It{s`3Pzs8_iT3mJ83ks+Tks%WzoCkfLDKKhk( zgZhCam~_AX20p2zOuonvXE!b7o7GHRWcU+25x!*PSnaZ=feAQuQaKQgN2WN<<>taK z;ViDgjd}yBA3yNTxl?vXDQvd8-g=MkFda73F~}f3u6Xm?9ZI3-8Mu))G(QdD+K`p{ zq$!=D+`NB~NEQ4g#vYdbBkI?MfR>}A?_dj8l>MmvOnBRqFSbrS4LOgwYj zyYwR47PF0e`VzCpG)91>x2$h`t1LuYV&evi>T8~{dB&Is>rrGLcaX%Tbsy36n+sTN z6{}h836WZT!h94ARV7f79B=59lCry7uoGZynZ${%04VVQ zfGZ|!J=~%8h$w7|zjJ`0fOMVvoP{jm8H^U}?5axGmgin>KT^!ra$>zLV*7ppu^@Zb zo-A#QsWx&ohzu-`iGZFaA)QGnBn~aUbtzOwCOMXNrK=NhYFJpwmX@($z*SfobH!^D zFi8d*!9U)B{GR#Oi<%k5V{gYX20^2cpR!>$`~y(951f?Fm0dLV=Hz)DrACKL#b>ou z<;;h(KDw{o$3zoaHS1C10LhGzcrKXUEu2>Z7U62|^Os>#>Bu(%uQ=!PBBgL6wrLv- zVWX@V3&5?s5bKYMM5#K<&f;0-ha(!5eL^xsw*y69-e_e3K_wn678a7luv?+NO~HC1 z_$JpXvFDTnsV;~jn;JeT71;g$@mywSr>G|2A?I`>@F!eg9*(d9$I-1U9%=tqm zYKeJ+Y~mNcy9lX>pcaG@}37P{pYjTj*%W1&4EuJLK2i;1ZDu}i4l zRy4m+ax9aZ;s(r8tqyn>LG2Ri=^*!fZEv{GW6JpExj(i2V!84wKYc>>VjlT8*1Ja*PP>B57? zyXL0{Uz}*lXzEM5x7Hm>s`>AyIxUh?V7yeca>i0e4jFIu2ksB}XF|wrG)=;yjPXt} z^WTY51oqaXkk{RR_kz~?q5qvcbrv#74T*t?rxXJQy^BNvES`!rhG1cy&o-Gk*iz#+ zR?^y0@;0ROx*op%q7hd_3QTz~VV@snm&Q!M zs|_b#t6nM$v00RTcEc9TD{e>$$)(hEJDn%g`yt_QUglz9KhOGX7Qx8bv1MH8 zKB1Xqy)|Q%tL#aR9SvcDKlY2tMoX#V?M=~!OLqf`0dH6s)v1ZolkPpeG=*40ho9Z5 z`8UX<@@2m*cqltk2?Z{1C9)q&I@UG}EodMT-gxmc+w)!A1_h73<=p?V3XSz!F_rCE zo&;JdCR5Fo75u7QY&~h=zSZ&NVKH*WxWAf4*g>y|p>%yYxKH;;I>h;h_d}9TQMAto z+t#b6a(Gl=LeHa~<+yb(mDq5}!;@wh&SyN=9Skk{QD-DI23$ki&8+pUmu8o4#- zStu__HLfj_#jZ+QKQV}ZFPd^{mPUOnW{0puQI=n%xiC@GD;=jgHTS0$!{^5t$#!QttJ;>kf}Mb6De306 z80_{l*B!4GcoU2re=Hyh;=BcwsXxUGn7Tz)x*GiA7`I zGNM8~kUzE5P43t}oVG*l_!BI*`&G|Vy2O-=1`I4^ris*VrH#@lMz{)Heow_wO5;c- z`AN(=3{!u|2Y{ZxoT( zxalnv2}jLT;jgIEVw({Od%Ym?b^+2fY7>tbcV}%k5xRUv6iZpFp<beX43FVYRV`)T9D*6gc|JkFhw%X3)VufoXD%I(=Nv+it;ICA2cgN-Twe*41On_7;PUl5rHg6wcF)$vl6#G^ zlM3+ZJ4a7e!?{aiXYIHP!6bOo5g5-};QL7p@{MrrxdG7_>t0-VuQ+90qc|+)fQ-l1awgPrWI4X&$NbCoc#PW+4Uup^X)RZrd^A(Cs8vGP*@!=mXKWQGh)9 z-g>qFZFGndAS3m^?!8xQj%T#aFFo-Pc|bAPLo<&Vaq3|AkaIjEvKf@ipl@b|V>8hM zsOnf`uG$#Med|$5w?_%83i->lsEadF!6vCJ+j8IWSUB8d`GoZDs|-1IuLwbpJo35t zFud5fO!wv$7Dd@LJgA(voJFg1mel%}W2@tqNk!wBkemM2htV7tXJMXkeY>H$uaDPZ zs4pDpIIIc~MYT|z+4Kta2wDs3gqc(h%qqGERiX+qFq<=nyGoSEx#_60*~H!|BN>pgM$y)9lXBY73Ds5gEwi zj@2gonHPe~7$;zIqS`8c`dqC8Xv^x~Jo+Rbfx}&Bw9E=h3gbAmW-!+k@T7(DK)CAt zhB{gLcq+Wb!nQT0gBh|Ovo*k7bD75?lhRvxDek)Dz3}RLV>w_okmLDMg-(E)Yl|~p z(#qiV0~*c#ZZ9*#E@41o4a*Xymc4F;&qp>!USkO$QL<-{=X5`{myxjUy*H_6VS)uW z^Yu?7IHIgPtY=%|H;ih(^3$%s*cVi347-UM!?XKV`bY-kDEzS@f~>-Fw0hMB;>f32 zZ#7Qzda;CtdDO??T?o?M2{k4EZ9=gLBzXZJXVbpD_59?t1Lqq%gCzK4zR2ftVRyX) zvn(nnCEb6-=^c5F-t`uh!nio`|Aw)=NT)>h+QUU4rZrC$a(|C!9=|06fI5P7gy6Ql`h?nw0kLbC5x5Nt@jI- z)c6Z#3q3~B zf1UGM`nwoZL|Nyacsoey4z_5^TcWw)6=qVNDMSaeAF#TiA|s?eBrbB~ZaXY6DA?yhGSrjH zvMqM-mKzu^5g*T*q~Un-1Er?B(|kJf^P;moET%|*u^b7u%lCOUrha+24#R3Bmcphn znDf{IeC%~^F{e;Za*MY1YLf#3L_$x5p+wS%K>r9O9J&Ccw{Pw*$CODQxCfp67XS2c#&NrHx0vZpdBv_>xrr#U zZTB&j*fUmLKLaIa!;Fy$fWuuFnbLRZ?{eM_607eTiTK=V%+;y#rF0IP(i*Th6rwHt z?+xe&nLZr~vBcxn3=$)2e)7HlA@ff|&6>e)O_eq;CCg;<0-wTmOp}pafpeX9OwpB6 z8^ltrVqAm?(!yk42%@+X_PY?E(BSVPp2H>C7?d_xZ(YGiOa4JraJX}A<))c@5WK|9 zE=qc?R{~=Ir$B$t!w3@P+DZVGR2z!rpDQ{AmNqC!Kbnc&N**8`sL+mvNUDGA1^Y;< z;4mtJ{HIF2RA6bqse*#q_y?@7`|Fq_>2BbSb=(w=x~WoOkluR;!>ve+jp{g!i;n3) zJgVmT-t9F>QA4#FA+|+AIstCkA2sm&ta{)%6(yQu)H0DapXlJ&dpLclv)rHdhNE)6 z-y+JbU!CyRjRQ)FG=y8gb}9moCzPsMoM09u4Q0>aar&u(de>ZXZ6bBV9BkW@ag0- z^k1P#lY&O=Pwt$4Y4DdaJqPDmP6+nCxZlp0Zc%k=KfzvoisWuBI7Ln^5LNM;_G|eL z4Sq{0;DeP1SDhlOf+e|MX&beFSf4r^R14q0`j*nR0W7r?*J3NROdo$#Vo7>*&sD?7 zsNGdz;9E-MxL_q%z$7fcz&{u45UIZQ)?eF{LqE^bQ1}&3O>$X5FPn3m=9!6FjkAPU zyr|T|(QCcu{<4O$kS36gS@mZPwTfqjBo^an70;b7$f{ZEG#-8YI3>`juDU`vP@KT6mLo8Xy@iA*12e0{#f19nl zQJ1Lw$z_rd-goiK%9ML2l~TQz09_4{YboGA%QiW>e*1ay|M6t%4i)sYcC;7#vxwKI zl4{`zUe))1ul4^9@_;~pgAh)5X0YzP_JyT;lpLSjAk!@JHr{O>5eMuy+5`BA4&}r0 zGx?vIN|2CSbC2Ab5qK)-x64_HdB`al{aS}}U7(P%Q&8EmvCkblfieL`ZB5rd`gO+a zZ4QotSyxmCVe-evI^-z9d#hE;imYu4k1dGUi`iJyH8VpWg@fNy7Z4x5ApyZSjI2Oi zk1R?__ac>mDeA9s2|WmYsRfu)7J$IIEnh;v84d}*Gt>@a4G+?pXm3&Gn9qAanSWRn zyYcKMhY*6HqlmE-H%dG-B}&BR!=u|n#5KMCQ`H@o)8SYWBOwj!%WztdlUZpfV35A> z$j7Gx8294l1A0fgvnPH4kzE{Er%CP7{Z2m?twl|6g1UgzrUUEgyZR7O#}6tZv<%dl zFO&2LRE%fuj>{BFbNI*f&~F2c2@N zp1cNpEzYf5w2e86Ja0d0H`eR%df69wmU|22%St$TtIg&UuadjgWqwDMN4lymc){_t zAu5m(l$*EUuw+WUVLqaySCOfc`&8lqd?Y%A;+?+2TbPiIouggL(^lfvSEchkS5=73 zP?#Ias|*fKUu2gIpedAe&~^L1TVtYU7{B@mE9z!*c0J+14uZnAQ~%++gijy9bP2`T zFWve3d+A*|#Of8EM&Gp5#VQRvrwL7&{kTP~Fe|5+^-btAK)|9!8K%9&6-TdNOXV;_ zpUBVZy8ne{$VqN<*c?_nE&J>xkv}G0TwZ57m6@%Y(dRN?!;f`3l~B1r^Y7b&Ic5s- zs7mCU$;@BA<7X|orotk9I|sVh)3-F1zb;hFTg;mW^LEZHpB=qZF->5NPfDf1vbsna za2-kj3@s7s;`ge*l`i2t!UeN)m-JmoiY%pU9=G#K8S$0X02Rc*BgyozFMtlI1jU)A%7u z`P3(R?mSz96A*x8?3MVhXIpq`&&~QvNkocZBxM7$>YoBI@x( z*C#1XZp<^mmVF!rqPu*%B`udGWk31x@nXJoYjRsDF>(Mr?zq3*ZTk^XpJC)9I)1+S zajWEITWm$PA!Vd%?A@6UJXFK{`Lu9ud9@EzpwB z%Q!k!o;V2vyW7+iJPfRt^0VgH{=gg(S4ASoCjD^o2h4Kr7sm^eb}zD;Q@_M}v!|~n zeafEJoa0w1Ga*~s=={Q}`e=jg0*6KqpLkukc>VNN{YVl|F_OT#Z(HFWcX&L@xVq3Z^lSkmmMATO`I;7SI$Lb06^|V2tb_7IA zp;oJh=VFBMEZxFZvq4#U9uq79yX?#OTuY;B&$&p$+QxTbmr}PG!rLh5^3G~{%Srd< zu)kTqc#nd2&=xQ3H6<3x?m5(MQWsBwmiy)&Epgh@*6N^4+8q&BrSE@LK57Ij8wl_B zL13ZL~xgO<@7?G+kr z*A9H~5qy~R1b;iWBzi2$L@%Y^fXFSMla_bwzs;$J<^ybSo){zM58vAoQV ze-GZl(Gbsp_Q-?Yu2{LU>%oJB007k9&C}HyO^=|k@L!X^hX3axhVB}TZm*Uz%tVM% zAj5w!bFE+i04*lhF|RP!@ri|+Vu%cLv7bp%qX|F+Wl^F%-d^8L$8rhPTpYrFdPjQ*cauUBIKJiAaUIYuRDZkNy#_$Ofv^oSrldX4`thpX2X*LD>y zmGvLtAojMuuZ7=vSn>bPV}KR$l%MlY_WtwW{ATa^;Iwo8!|}g){qq%;aG$9$Jq`dM mO9}v>^ZvuG$=KmUj50FP=xX4g^F&{F=noJ*P@eDV*Z%>+W2kZf delta 6070 zcmZWt1z1$g8eUSmyQCZG4ke^J6%bfbYN@4TS&&+qrCUN$QW|NHE@_aIMp{aci~hg& z-v8b?&zWQ&f&YXAO{KDvwrV0`=5dab1iOK;P0Cn-;-4TB^kxc>sTj-Dp z8cNSYOZ!D+tG@QcOLF3`uZZ&+7t zn%2=A`psXQM9av(=^~&(fB%7QX1#-+oRC47Z}S~3scHcujwXIT!(S7<5vwUCU4>?ZCMw zu7~O(P69MW4>q%xes}01J^H?jel}w5y7>y&0t!mMa41!OF>#zntWn5LUg=Y!wE{eN z#%xc)yMObOd*R-cCAw*S=;#1!=W#f89{;U)``!nlK(kACZZGcX`O1vvb;C{YnD3>h z1p`BqYsAn$8pISmESam{T{&bEaags=y zflMr?mB%V6K7(^pw{#7#$nz||K{K0xl(m5;-zd$B_h6pqcuv3T$t-Gq;^2|{4`Ml{ zo?|1TwFwJ0+E~%k(-rqyz@Lc$J|TtgVn`q$!u`>T9_n)Rn1?!sixe(_?(}dcj**Ow z2tWfghAil=^&4ra!rvm$L8P66c!)l=!@O;9@+O#;JQfd4lC5kp{GVCasu_W!uD)Ed zH)GebHI^xuK<>}SHb@Qoqb`ai87sLI5zvPxuVs_piOQ{x`<7rnQo>{#n+XxDBT?0F z?cgbUp9g@3(H`XIOzC3?aBeGytm!SWt-rGMD9=S(2&MS=J$%w(0)o@pYN4RNBQqO` zta@T?mP9C7Gt4H`I+}WS&M&OrQpJst+Xd@!U9sj$ZX|M{$Vuzv%imMxXL(xeC6OiH zQJ}BA;Zk5H5xVH%i012x6nGkSEjU;YRqAV zpVnS3*>BwqSI7aHG%X`x_itdr<$`KnhDS;{E#0URU(tZYu_rqhs?W#M5n-PKb$j?zl^sI}|-fO5$ z%UFbm7qHEU^~_eX=Jo`NyR`lLWk=v4h0jpPLFP}|SJq?+m_!}j=4hXpyS6!no-tCl zd$VGGV35%sP448(L=CS>v`KVK=}c+ygc~6Ez%zTsSO~!>IuWa+`IW|&!a<4={ZC<4 zQI>%jVDMQz&6v3(L<7>>{RI?=iRF#vkslNXtjU2%6-sW*PwX$X(LqnFmPq#~gRT(=-0aeKL+DSJeELJr zsY%0E1v~|c#Fm&ZCo|oY44;dY_;7wj$jpn)C%(!=Ba@aOmizIDLH>gQer$vUhgV-a$?yXNMC$C;5dno)v{V^LxmIdP?ybfyma^=;su_q*)le%nR zGMuQVk$h@I;%0BV2wgn^ZsU?}fjW(PFBM6whoaOb6ev=I=~I?_AVtngBGLPtDou?m z2|o?PaCaubuly~lu^Xj8s>msdU{&d?6P?$9wW>ZjS)K=~Ck^v<0F8D=LAdB;=2t~PQwP3Pk;fNvB=&|I6;$gRUJ`%I($XlC&xfQ#Ts?qp9Th?v{JggU7TJVY8i53YBch@&%R>i;6qLz_-qas zzISax&Z2~Qc39xcW=9Q{c7zdkGhJ6xOAgRQ+omEVAS@G-dn4RqEkTrCmp35gY}Dtc z?hI%Rw9a$AZST=yc?dMNvQ5PM1YFHtDufUH*}_Q{mulXP?A07<+cPwzCNtnddOt=MS{&jV^)NZ+?$=FD0WG2KJyB0-K>Q)L&C@*2|}s{bMsS{3TM^rIcceaZ-ROGU#V`ZEx1ow1WniL zYB2DIC-;v`6N{)!*I29*1F^xhpUDvd?&!uzcQTeMD~(xx^gtMW$Cd*8aRjAny1#Kc z;VFE7mf3lV!~gB1Dp+#Ahf~hRCCB2(PE|{`2 zwb~KxX!2og8HX>fSZj z(heGFGu$28!7vmYrg@(IT324E@yXP^dAd81#!=2*apYO#_4WDm^?t98|5kcXQLZiF z_|DeHwh3@sc49{Ad$yG2_oJ^~M38yV-h!Kw|bncN1+{_(mOB2PxZwyzYL-NoDx;EcfUkIhxBG z4xRtvvs+(yl%%|JF&aZ|CQM zOPQ>nFw|#GVSDYFS=7{#*QK5TChAEdh~x%icn=^e@l#GkWrV|NalAZuDy>H+UY-R{oevr-K^tiAl?G+yi)N~x zR^h#s!jx&wG|Z`3xfta<9~5`Zx%AobA$CQ^jgqPrxQZhf#lKd=qlkk5{9Bu4B6;Xv zE3qn72O6C@j^K3%)4OI=>C)CeGfFND4+}cis!Y*vW{Vpu?w||t-U%w?CBY-@a!Za- zJ|R><-w0}dhHgS|wOK2|th;;+TxU{|^(Orc;H{=FamCoEOAD|ehnpW}5LYMlFx|`xn zXetSHVHdOyj&nJ$BzJWu|N8n#hybzZL>4#YSw(bK4mxL+zN4AOS71IVzUuo4Gl4y9 z=8qG|*s)nB5rxxiJ*G4o44PDu!Gw{nVM{lRYCThi=~@q-A?#Cx6(e>X_&0tFY18RNsky>c+2_WP8stQfn|4I8}XQZdFx z*ve&r&QGx+gx(*#j`-$~uGeP7%#2$=tRYH55TxF-3cede=`YKjQb|@*DB!;Boo$5M zMh{@Ic^5cMy4L&6h14r)vfetXCC1S$p{z}mOS8_3FU=_#BfKp9mo?eS_UqBTFiW-}Qun7fBfZ~yQ^+Q>0`B&v^%e@a z7lbye-EUP%Xc5gXePr&MPXum4GY2b%hoQ}B&a4v$Tp!2Sile4NGHG%Cc6`Te2 zLWr{<@4Vu@lPs3$M26?^)&?`Wf0QxPA)M zy>Z3jVtGQPBPlP@Y@Xf&psSaw{&rl>JrV9HFBV8@r_|%Nyz@St5zcC%DF+QwYG*HW z8zw$JZlN!Z;X3jZ%S_p__4KPk2d*?7=%pSIAmgWCC~O_VNk-s2LUnyAfnkRFM?0Qya8yLcje0gI)JE9S zXt!*$l!=6c729Y*Fs8<^ZE#8eyrB3Ac!Yc!H(qMfJb8)b=Dd15cZ<6|#J`s960QE2 zspDSkC6a=7OYRqC%JIWa zMAvT#hFI;ln76LxS5~G0qPrOFQCRI{0lTd2RJhm=H@vszSDP+ZR=?e8;1JW8U)J5d zAKV-2r=cD~^ZeepxEo?)i8g+V&nphJvp)-TP1?<1Jw< zFuq5OY5cN$z6nv43*{^=B^-)w=5brjiuwDFUR%-ewA*fxGOG4k}N4GZ96sZn98btTQ6=t@gX*$t?BeL7uGZ5UY#qjkg^dKQCG>cNcgoQhEEA4NL?aZMhLO1w<7}lLhlo%cL@R z8UCDAG5A@ge&qDeUtzxfmj)Cl06;A=ixdjVZyl+2g6Pmkl;e`%M8X8OPvym}Jk7zcj|;0;%Zfu+ z&>`NNGlCv9siS6NOa{ij77f8n85Qpu%q)_1#@x=cxJU*Zk~sB+&m2CszT(~{YsIoF zDv7iFSTuQp?$X6jJ^91#qmuA$Mzyz9lben$SrVfUV~j61c&+~?jcD?qST!}iPt5uC z<pty<`A;mO9zpE=?ZGq;vZHhe84R=Eka2Q<;5 z4YQhi?spR8#rOmLnT6TfYwoM_Mk4JAKKrVsX=R-I9^37!Rz*E+(^H~6-A{SxagPmA zizw5=L)aZKK6Y0aAz(^*tgrS) zjV_*cIMk=0jac@J&KbpHR5V3@A@G1KzMXersiKC0U&(6v@GP+6dmHq5JFub+VOms6 z;w|_XnvvVyV5Cg~F|musE0Gi#0?*Whg&sS9eP*&3S{e2Uw;@<;=yKXyMm!3Rv{8Q= zf27DdtZ?3_&;H_iV0f-T#7}6~0mZbeb}$e#BT**5SYPYPjxl}Z@|0@rG@coPGl&>p z&mxXAv*UcTb^zwy*tG32XRo@W^gfh|d-N@5h*0vUX?8rVb8i|gwjd56)}T5mFLE9s zmRHh}O~Obzl<PL~VnV&`Td_ zNdJiHkmq^6Ptl>nQ;BsN!^lHw5xdit`PmI4-xV5)C5X#RcJV$$Qw0I>Dbin3D=FJU zGW;&}&|eofTd)hDqyZG6yw(J9dXGiVGKCE71< zJyZb+Ud=^=@)vW8Cx6VNNN`OIO3r_`_-_I7fhNI2!V~@J|93xD$nXkIihuC=t)xAG z3I7kgfdY5nr1*PK1RhF`zqkM&fS%4=7EU0r6$s4j?Bw=W^~B53;onT){@i~^O5?zD zx&Il1zc%dvKfactory()->documents->publish_and_get( [ 'post_type' => 'page', ] ); + + update_option( 'page_on_front', $elementor_page->get_id() ); + update_option( 'show_on_front', 'page' ); + $documents = ( new Collection( [ - $this->factory()->documents->publish_and_get( [ 'post_type' => 'page', ] ), + $elementor_page, $this->factory()->documents->publish_and_get( [ 'post_type' => 'e-landing-page', ] ), $this->factory()->documents->publish_and_get(), ] ) ) @@ -212,6 +217,8 @@ public function test_run__export_elementor_content() { // Assert $this->assert_valid_elementor_content( $result, $documents ); + + $this->assertTrue( $result['manifest']['content']['page'][ $elementor_page->get_id() ]['show_on_front'] ); } public function test_run__export_wp_content() { diff --git a/tests/phpunit/elementor/core/app/import-export/test-import.php b/tests/phpunit/elementor/core/app/import-export/test-import.php index 2c819f7fe93..99956497f28 100644 --- a/tests/phpunit/elementor/core/app/import-export/test-import.php +++ b/tests/phpunit/elementor/core/app/import-export/test-import.php @@ -263,6 +263,9 @@ public function test_run__import_elementor_content_only() { // Arrange $this->act_as_admin(); + update_option( 'page_on_front', 0 ); + update_option( 'show_on_front', 'posts' ); + $import_settings = [ 'include' => [ 'content' ], 'selectedCustomPostTypes' => [], @@ -277,11 +280,17 @@ public function test_run__import_elementor_content_only() { $result = $import->run(); // Assert + $page_on_front = get_option( 'page_on_front' ); + $show_on_front = get_option( 'show_on_front' ); + $this->assertCount( 1, $result ); $this->assertCount( 1, $result['content']['post']['succeed'] ); $this->assertCount( 1, $result['content']['page']['succeed'] ); $this->assert_valid_elementor_content( $result, $manifest, $zip_path ); + + $this->assertEquals( array_pop( $result['content']['page']['succeed'] ), $page_on_front ); + $this->assertEquals( 'page', $show_on_front ); } public function test_run__import_wp_content_with_one_cpt_register_and_one_not() { @@ -440,7 +449,7 @@ private function recursive_unset( &$elements, $unwanted_key ) { // The "JSON" is located in the content folder inside the kit. private function assert_valid_elementor_content( $result, $manifest, $zip_path) { $import_process_tmp_dir = Plugin::$instance->uploads_manager->extract_and_validate_zip( $zip_path )['extraction_directory']; - + foreach ( $manifest['content'] as $elementor_post_type => $elementor_posts ) { foreach ( $elementor_posts as $post_id => $post_settings ) { $expected_post_data = ImportExportUtils::read_json_file( $import_process_tmp_dir . '/content/' . $elementor_post_type . '/' . $post_id ); From 43c20c1e549845f2426401e5064c0515a9c1c1b4 Mon Sep 17 00:00:00 2001 From: StyleShit <32631382+StyleShit@users.noreply.github.com> Date: Thu, 25 Aug 2022 15:27:31 +0300 Subject: [PATCH 038/130] Tweak: Improve the UX of dependencies between experiments [ED-7494] (#19037) --- assets/dev/scss/admin/_experiments.scss | 18 +- assets/dev/scss/global/_dialog.scss | 10 + core/admin/admin.php | 22 +++ .../admin/behaviors/experiments-dependency.js | 171 ++++++++++++++++++ core/experiments/assets/js/admin/module.js | 9 + core/experiments/manager.php | 70 ++++--- core/experiments/wrap-core-dependency.php | 8 + tests/jest/jest.config.js | 2 + tests/jest/setup-tests.js | 1 + .../behaviors/experiments-dependency.test.js | 141 +++++++++++++++ .../assets/js/admin/behaviors/utils.js | 113 ++++++++++++ .../elementor/core/admin/test-admin.php | 63 +++++++ .../core/experiments/test-manager.php | 44 ++--- 13 files changed, 614 insertions(+), 58 deletions(-) create mode 100644 core/experiments/assets/js/admin/behaviors/experiments-dependency.js create mode 100644 tests/jest/setup-tests.js create mode 100644 tests/jest/unit/core/experiments/assets/js/admin/behaviors/experiments-dependency.test.js create mode 100644 tests/jest/unit/core/experiments/assets/js/admin/behaviors/utils.js diff --git a/assets/dev/scss/admin/_experiments.scss b/assets/dev/scss/admin/_experiments.scss index 28e0683c219..9190127e3e4 100644 --- a/assets/dev/scss/admin/_experiments.scss +++ b/assets/dev/scss/admin/_experiments.scss @@ -42,8 +42,10 @@ margin:30px 0; } - &__status { + &__dependency, &__status { + margin-top: 4px; font-size: 0.9em; + line-height: 18px; font-weight: bold; font-style: italic; } @@ -53,20 +55,10 @@ } &__dependency { + color: $wordpress; &__title { - color: $editor-darkest; - - } - - &__item { - margin: 0 1px; - border: 1px solid; - padding: 2px; - font-size: 13px; - color: $editor-dark; - font-weight: bold; - background: $editor-background-light; + font-weight: inherit; } } } diff --git a/assets/dev/scss/global/_dialog.scss b/assets/dev/scss/global/_dialog.scss index 6823985b4b3..fb9e9f33854 100644 --- a/assets/dev/scss/global/_dialog.scss +++ b/assets/dev/scss/global/_dialog.scss @@ -139,6 +139,16 @@ } } +#e-experiments-dependency-dialog { + .dialog-confirm-header { + font-weight: 600; + } + + .dialog-ok { + color: $editor-success; + } +} + .dialog-prevent-scroll { overflow: hidden; diff --git a/core/admin/admin.php b/core/admin/admin.php index c20c47f6353..473db39e8fb 100644 --- a/core/admin/admin.php +++ b/core/admin/admin.php @@ -7,6 +7,7 @@ use Elementor\Core\App\Modules\Onboarding\Module as Onboarding_Module; use Elementor\Core\Base\App; use Elementor\Core\Upgrade\Manager as Upgrade_Manager; +use Elementor\Core\Utils\Collection; use Elementor\Plugin; use Elementor\Settings; use Elementor\User; @@ -758,6 +759,7 @@ protected function get_init_settings() { 'option_enabled' => 'no' !== $elementor_beta, 'signup_dismissed' => $beta_tester_signup_dismissed, ], + 'experiments' => $this->get_experiments(), ]; /** @@ -779,6 +781,26 @@ protected function get_init_settings() { return $settings; } + private function get_experiments() { + return ( new Collection( Plugin::$instance->experiments->get_features() ) ) + ->map( function ( $experiment_data ) { + $dependencies = $experiment_data['dependencies'] ?? []; + + $dependencies = ( new Collection( $dependencies ) ) + ->map( function ( $dependency ) { + return $dependency->get_name(); + } )->all(); + + return [ + 'name' => $experiment_data['name'], + 'title' => $experiment_data['title'] ?? $experiment_data['name'], + 'state' => $experiment_data['state'], + 'default' => $experiment_data['default'], + 'dependencies' => $dependencies, + ]; + } )->all(); + } + private function register_menu() { $this->menus['main'] = new MainMenu(); } diff --git a/core/experiments/assets/js/admin/behaviors/experiments-dependency.js b/core/experiments/assets/js/admin/behaviors/experiments-dependency.js new file mode 100644 index 00000000000..c1d74db37fa --- /dev/null +++ b/core/experiments/assets/js/admin/behaviors/experiments-dependency.js @@ -0,0 +1,171 @@ +const STATE_ACTIVE = 'active'; +const STATE_INACTIVE = 'inactive'; +const STATE_DEFAULT = 'default'; + +export default class ExperimentsDependency { + elements = {}; + + constructor( { selects, submit } ) { + this.elements = { + /** + * @type {HTMLSelectElement[]} + */ + selects, + + /** + * @type {HTMLInputElement} + */ + submit, + }; + } + + bindEvents() { + this.elements.selects.forEach( ( select ) => { + select.addEventListener( 'change', ( e ) => this.onExperimentStateChange( e ) ); + } ); + } + + onExperimentStateChange( e ) { + const { experimentId } = e.currentTarget.dataset, + experimentNewState = this.getExperimentActualState( experimentId ); + + switch ( experimentNewState ) { + case STATE_ACTIVE: + if ( this.shouldShowDependenciesDialog( experimentId ) ) { + this.showDependenciesDialog( experimentId ); + } + break; + + case STATE_INACTIVE: + this.deactivateDependantExperiments( experimentId ); + break; + + default: + break; + } + } + + getExperimentData( experimentId ) { + return elementorAdminConfig.experiments[ experimentId ]; + } + + getExperimentDependencies( experimentId ) { + return this + .getExperimentData( experimentId ) + .dependencies + .map( ( dependencyId ) => ( + this.getExperimentData( dependencyId ) + ) ); + } + + getExperimentSelect( experimentId ) { + return this.elements.selects.find( ( select ) => select.matches( `[data-experiment-id="${ experimentId }"]` ) ); + } + + setExperimentState( experimentId, state ) { + this.getExperimentSelect( experimentId ).value = state; + } + + getExperimentActualState( experimentId ) { + const state = this.getExperimentSelect( experimentId ).value; + + if ( state !== STATE_DEFAULT ) { + return state; + } + + // Normalize the "default" state to the actual state value. + return this.isExperimentActiveByDefault( experimentId ) + ? STATE_ACTIVE + : STATE_INACTIVE; + } + + isExperimentActive( experimentId ) { + return ( this.getExperimentActualState( experimentId ) === STATE_ACTIVE ); + } + + isExperimentActiveByDefault( experimentId ) { + return ( this.getExperimentData( experimentId ).default === STATE_ACTIVE ); + } + + areAllDependenciesActive( dependencies ) { + return dependencies.every( ( dependency ) => this.isExperimentActive( dependency.name ) ); + } + + deactivateDependantExperiments( experimentId ) { + Object + .entries( elementorAdminConfig.experiments ) + .forEach( ( [ id, experimentData ] ) => { + const isDependant = ( experimentData.dependencies.includes( experimentId ) ); + + if ( isDependant ) { + this.setExperimentState( id, STATE_INACTIVE ); + } + } ); + } + + shouldShowDependenciesDialog( experimentId ) { + const dependencies = this.getExperimentDependencies( experimentId ); + + return ! this.areAllDependenciesActive( dependencies ); + } + + showDependenciesDialog( experimentId ) { + const experiment = this.getExperimentData( experimentId ), + dependencies = this.getExperimentDependencies( experimentId ); + + const dependenciesList = this.joinDepenednciesNames( dependencies.map( ( d ) => d.title ), ', ', ' & ' ); + + // Translators: %1$s: Experiment title, %2$s: Experiment dependencies list + const message = __( 'In order to use %1$s, first you need to activate %2$s.', 'elementor' ) + .replace( '%1$s', `${ experiment.title }` ) + .replace( '%2$s', `${ dependenciesList }` ); + + elementorCommon.dialogsManager.createWidget( 'confirm', { + id: 'e-experiments-dependency-dialog', + headerMessage: __( 'First, activate another experiment.', 'elementor' ), + message, + position: { + my: 'center center', + at: 'center center', + }, + strings: { + confirm: __( 'Activate', 'elementor' ), + cancel: __( 'Cancel', 'elementor' ), + }, + hide: { + onOutsideClick: false, + onBackgroundClick: false, + onEscKeyPress: false, + }, + onConfirm: () => { + dependencies.forEach( ( dependency ) => { + this.setExperimentState( dependency.name, STATE_ACTIVE ); + } ); + + this.elements.submit.click(); + }, + onCancel: () => { + this.setExperimentState( experimentId, STATE_INACTIVE ); + }, + } ).show(); + } + + joinDepenednciesNames( array, glue, finalGlue = '' ) { + if ( '' === finalGlue ) { + return array.join( glue ); + } + + if ( ! array.length ) { + return ''; + } + + if ( 1 === array.length ) { + return array[ 0 ]; + } + + const clone = [ ...array ], + lastItem = clone.pop(); + + return clone.join( glue ) + finalGlue + lastItem; + } +} diff --git a/core/experiments/assets/js/admin/module.js b/core/experiments/assets/js/admin/module.js index bb0cef5e0a2..0aa19f50a1d 100644 --- a/core/experiments/assets/js/admin/module.js +++ b/core/experiments/assets/js/admin/module.js @@ -1,3 +1,5 @@ +import ExperimentsDependency from './behaviors/experiments-dependency'; + export default class ExperimentsModule extends elementorModules.ViewModule { getDefaultSettings() { return { @@ -49,6 +51,13 @@ export default class ExperimentsModule extends elementorModules.ViewModule { onInit() { super.onInit(); + this.experimentsDependency = new ExperimentsDependency( { + selects: this.elements.$experimentSelects.toArray(), + submit: this.elements.$experimentForm.find( '#submit' ).get( 0 ), + } ); + + this.experimentsDependency.bindEvents(); + if ( this.elements.$experimentIndicators.length ) { import( /* webpackIgnore: true */ diff --git a/core/experiments/manager.php b/core/experiments/manager.php index 2d1e4f367e8..6f13cae742a 100644 --- a/core/experiments/manager.php +++ b/core/experiments/manager.php @@ -3,6 +3,7 @@ use Elementor\Core\Base\Base_Object; use Elementor\Core\Upgrade\Manager as Upgrade_Manager; +use Elementor\Core\Utils\Collection; use Elementor\Modules\System_Info\Module as System_Info; use Elementor\Plugin; use Elementor\Settings; @@ -544,32 +545,62 @@ private function render_settings_intro() { * @param array $feature */ private function render_feature_settings_field( array $feature ) { + $control_id = 'e-experiment-' . $feature['name']; + $control_name = $this->get_feature_option_key( $feature['name'] ); + + $status = sprintf( + esc_html__( 'Status: %s', 'elementor' ), + $this->release_statuses[ $feature['release_status'] ] + ); + ?>
- states as $state_key => $state_title ) { ?> - + -

+ +

+ +

+ + render_feature_dependency( $feature ); ?> + -
release_statuses[ $feature['release_status'] ] ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
+
+ +
- render_feature_dependency( $feature ); + + $dependencies = ( new Collection( $feature['dependencies'] ?? [] ) ) + ->map( function ( $dependency ) { + return $dependency->get_title(); + } ) + ->implode( ', ' ); + + if ( empty( $dependencies ) ) { + return; + } + + ?>
- : - - get_name() ); ?> - + : +
- get_features() as $current_feature ) { if ( empty( $current_feature['dependencies'] ) ) { continue; @@ -758,16 +789,7 @@ private function validate_dependency( array $feature, $new_state ) { foreach ( $current_feature['dependencies'] as $dependency ) { if ( self::STATE_ACTIVE === $current_feature_state && $feature['name'] === $dependency->get_name() ) { - $rollback( $feature_option_key, self::STATE_ACTIVE ); - - /* translators: 1: feature_name_that_change_state, 2: dependency_feature_name. */ - throw new Exceptions\Dependency_Exception( - sprintf( - esc_html__( 'Cannot turn off `%1$s`, Experiment: `%2$s` is still active!', 'elementor' ), - $feature['name'], - $current_feature['name'] - ) - ); + update_option( $this->get_feature_option_key( $current_feature['name'] ), static::STATE_INACTIVE ); } } } diff --git a/core/experiments/wrap-core-dependency.php b/core/experiments/wrap-core-dependency.php index 92f1198c4b2..8b390b1a9eb 100644 --- a/core/experiments/wrap-core-dependency.php +++ b/core/experiments/wrap-core-dependency.php @@ -17,6 +17,14 @@ public function get_name() { return $this->feature_data['name']; } + public function get_title() { + return $this->feature_data['title']; + } + + public function is_hidden() { + return $this->feature_data['hidden']; + } + public static function instance( $feature_data ) { return new static( $feature_data ); } diff --git a/tests/jest/jest.config.js b/tests/jest/jest.config.js index 7e109ad2a4b..0408fbf8ccd 100644 --- a/tests/jest/jest.config.js +++ b/tests/jest/jest.config.js @@ -4,11 +4,13 @@ const paths = { currentDir: __dirname, webpackAlias: path.resolve( __dirname, '../../.grunt-config/webpack.alias' ), babelConfig: path.resolve( __dirname, './babel.config' ), + jestSetup: path.resolve( __dirname, './setup-tests' ), }; module.exports = { verbose: true, testMatch: [ './**/?(*.)+(spec|test).[jt]s?(x)' ], + setupFilesAfterEnv: [ paths.jestSetup ], transform: { '\\.js$': [ 'babel-jest', { configFile: paths.babelConfig } ], }, diff --git a/tests/jest/setup-tests.js b/tests/jest/setup-tests.js new file mode 100644 index 00000000000..af06c027f2d --- /dev/null +++ b/tests/jest/setup-tests.js @@ -0,0 +1 @@ +global.__ = ( text ) => text; diff --git a/tests/jest/unit/core/experiments/assets/js/admin/behaviors/experiments-dependency.test.js b/tests/jest/unit/core/experiments/assets/js/admin/behaviors/experiments-dependency.test.js new file mode 100644 index 00000000000..0464d4b84a0 --- /dev/null +++ b/tests/jest/unit/core/experiments/assets/js/admin/behaviors/experiments-dependency.test.js @@ -0,0 +1,141 @@ +import ExperimentsDependency from 'elementor/core/experiments/assets/js/admin/behaviors/experiments-dependency'; +import { + mockExperimentsConfig, + mockExperimentsForm, + activateExperiment, + deactivateExperiment, + resetExperiment, + getExperimentState, + mockDialog, +} from './utils'; + +describe( 'ExperimentsDependency Behavior', () => { + let experimentsDependency, elements; + + beforeEach( () => { + mockExperimentsConfig(); + + const form = mockExperimentsForm(); + + document.body.innerHTML = ''; + document.body.appendChild( form ); + + elements = { + form, + selects: [ ...form.querySelectorAll( 'select' ) ], + submit: form.querySelector( 'input[type="submit"]' ), + }; + + experimentsDependency = new ExperimentsDependency( elements ); + experimentsDependency.bindEvents(); + } ); + + it( 'Should show a dependency dialog when activating an experiment that has dependencies', () => { + // Arrange. + const { show } = mockDialog(); + + // Act. + activateExperiment( 'depends_on_inactive' ); + + // Assert. + expect( show ).toHaveBeenCalledTimes( 1 ); + } ); + + it( 'Should not show a dependency dialog when activating an experiment that has no dependencies', () => { + // Arrange. + const { show } = mockDialog(); + + // Act. + activateExperiment( 'inactive_dependency' ); + + // Assert. + expect( show ).not.toHaveBeenCalled(); + } ); + + it( 'Should not show a dependency dialog when activating an experiment that has only active dependencies', () => { + // Arrange. + const { show } = mockDialog(); + + // Act. + activateExperiment( 'depends_on_active' ); + + // Assert. + expect( show ).not.toHaveBeenCalled(); + } ); + + it( 'Should activate the experiment dependencies and submit the form on dialog confirm', () => { + // Arrange. + const { confirm } = mockDialog(); + const submitMock = jest.fn(); + + /** + * Prevent form submission to avoid JSDOM `not-implemented` error. + * + * @see https://github.com/jsdom/jsdom/issues/1937 + * @see https://github.com/jsdom/jsdom#unimplemented-parts-of-the-web-platform + * @see https://oliverjam.es/blog/frontend-testing-node-jsdom/#loading-external-resources + */ + elements.form.addEventListener( 'submit', ( e ) => { + submitMock(); + + e.preventDefault(); + } ); + + // Act. + activateExperiment( 'depends_on_inactive' ); + confirm(); + + // Assert. + expect( getExperimentState( 'inactive_dependency' ) ).toBe( 'active' ); + expect( getExperimentState( 'depends_on_active' ) ).toBe( 'inactive' ); // Make sure not to touch others. + expect( submitMock ).toHaveBeenCalledTimes( 1 ); + } ); + + it( 'Should deactivate the experiment and don\'t send the form on dialog cancel', () => { + // Arrange. + const { cancel } = mockDialog(); + const submitMock = jest.fn(); + + elements.form.addEventListener( 'submit', ( e ) => { + submitMock(); + + e.preventDefault(); + } ); + + // Act. + activateExperiment( 'depends_on_inactive' ); + cancel(); + + // Assert. + expect( getExperimentState( 'depends_on_inactive' ) ).toBe( 'inactive' ); + expect( getExperimentState( 'inactive_dependency' ) ).toBe( 'inactive' ); + expect( submitMock ).not.toHaveBeenCalled(); + } ); + + it( 'Should deactivate the experiments when deactivating their dependency ("state = active")', () => { + // Arrange. + activateExperiment( 'inactive_dependency' ); + activateExperiment( 'depends_on_inactive' ); + + // Act. + deactivateExperiment( 'inactive_dependency' ); + + // Assert. + expect( getExperimentState( 'inactive_dependency' ) ).toBe( 'inactive' ); + expect( getExperimentState( 'depends_on_inactive' ) ).toBe( 'inactive' ); + } ); + + it( 'Should deactivate the experiments when deactivating their dependency ("state = default")', () => { + // Arrange. + activateExperiment( 'inactive_dependency' ); + activateExperiment( 'depends_on_inactive' ); + + // Act. + resetExperiment( 'inactive_dependency' ); + + // Assert. + expect( getExperimentState( 'inactive_dependency' ) ).toBe( 'default' ); + expect( getExperimentState( 'depends_on_inactive' ) ).toBe( 'inactive' ); + } ); +} ); + diff --git a/tests/jest/unit/core/experiments/assets/js/admin/behaviors/utils.js b/tests/jest/unit/core/experiments/assets/js/admin/behaviors/utils.js new file mode 100644 index 00000000000..378ea6959b8 --- /dev/null +++ b/tests/jest/unit/core/experiments/assets/js/admin/behaviors/utils.js @@ -0,0 +1,113 @@ +import { fireEvent } from '@testing-library/dom'; + +export function activateExperiment( experimentId ) { + setExperimentState( experimentId, 'active' ); +} + +export function deactivateExperiment( experimentId ) { + setExperimentState( experimentId, 'inactive' ); +} + +export function resetExperiment( experimentId ) { + setExperimentState( experimentId, 'default' ); +} + +function setExperimentState( experimentId, state ) { + const experiment = document.querySelector( `[data-experiment-id="${ experimentId }"]` ); + + fireEvent.change( experiment, { target: { value: state } } ); +} + +export function getExperimentState( experimentId ) { + return document.querySelector( `[data-experiment-id="${ experimentId }"]` ).value; +} + +export function mockDialog() { + const show = jest.fn(); + + let currentConfig = {}; + + const confirm = () => { + return currentConfig.onConfirm(); + }; + + const cancel = () => { + return currentConfig.onCancel(); + }; + + window.elementorCommon = { + dialogsManager: { + createWidget: ( type, config ) => { + currentConfig = config; + + return { + show, + }; + }, + }, + }; + + return { + show, + confirm, + cancel, + }; +} + +export function mockExperimentsConfig() { + window.elementorAdminConfig = { + experiments: { + active_dependency: { + name: 'active_dependency', + state: 'default', + default: 'active', + dependencies: [], + }, + inactive_dependency: { + name: 'inactive_dependency', + state: 'inactive', + default: 'inactive', + dependencies: [], + }, + depends_on_active: { + name: 'depends_on_active', + state: 'inactive', + default: 'inactive', + dependencies: [ + 'active_dependency', + ], + }, + depends_on_inactive: { + name: 'depends_on_inactive', + state: 'inactive', + default: 'inactive', + dependencies: [ + 'inactive_dependency', + ], + }, + }, + }; +} + +export function mockExperimentsForm() { + const form = document.createElement( 'form' ); + + Object.values( window.elementorAdminConfig.experiments ).forEach( ( experiment ) => { + form.innerHTML += ` + `; + } ); + + form.innerHTML += ``; + + return form; +} diff --git a/tests/phpunit/elementor/core/admin/test-admin.php b/tests/phpunit/elementor/core/admin/test-admin.php index eb0ca553841..a670f860602 100644 --- a/tests/phpunit/elementor/core/admin/test-admin.php +++ b/tests/phpunit/elementor/core/admin/test-admin.php @@ -1,6 +1,8 @@ assertRegExp( '/elementor-editor-active/', $result ); } + + public function test_get_init_settings__returns_experiments_config() { + // Arrange. + $admin = new Admin(); + + $original_experiments = Plugin::$instance->experiments; + + $mock_experiments = $this + ->getMockBuilder( Experiments_Manager::class ) + ->setMethods( [ 'get_features' ] ) + ->getMock(); + + $experiment1 = [ + 'name' => 'experiment-1', + 'default' => Experiments_Manager::STATE_ACTIVE, + 'title' => 'Experiment 1', + 'state' => Experiments_Manager::STATE_ACTIVE, + 'other-prop' => 'some-value', + ]; + + $experiment2 = [ + 'name' => 'experiment-2', + 'default' => Experiments_Manager::STATE_INACTIVE, + 'title' => 'Experiment 2', + 'state' => Experiments_Manager::STATE_ACTIVE, + 'other-prop-2' => 'some-value-2', + 'dependencies' => [ + new Wrap_Core_Dependency( $experiment1 ), + ], + ]; + + $mock_experiments->method( 'get_features' )->willReturn( [ $experiment1, $experiment2 ] ); + + Plugin::$instance->experiments = $mock_experiments; + + // Act. + $settings = $admin->get_settings(); + + // Assert. + $this->assertEqualSets( [ + [ + 'name' => 'experiment-1', + 'default' => Experiments_Manager::STATE_ACTIVE, + 'title' => 'Experiment 1', + 'state' => Experiments_Manager::STATE_ACTIVE, + 'dependencies' => [], + ], + [ + 'name' => 'experiment-2', + 'default' => Experiments_Manager::STATE_INACTIVE, + 'title' => 'Experiment 2', + 'state' => Experiments_Manager::STATE_ACTIVE, + 'dependencies' => [ + 'experiment-1', + ], + ], + ], $settings['experiments'] ); + + // Cleanup. + Plugin::$instance->experiments = $original_experiments; + } } diff --git a/tests/phpunit/elementor/core/experiments/test-manager.php b/tests/phpunit/elementor/core/experiments/test-manager.php index e0f0760239f..c764707f8eb 100644 --- a/tests/phpunit/elementor/core/experiments/test-manager.php +++ b/tests/phpunit/elementor/core/experiments/test-manager.php @@ -281,7 +281,7 @@ public function test_remove_feature() { $this->assertNull( $feature ); } - public function test_validate_dependency__ensure_error_dependency_not_available() { + public function test_validate_dependency__throws_when_a_dependency_is_not_available() { // Arrange. $test_feature_data = [ 'name' => Module_A::instance()->get_name(), @@ -304,24 +304,24 @@ public function test_validate_dependency__ensure_error_dependency_not_available( ); } - public function test_validate_dependency__ensure_cannot_depend_cannot_be_activated() { + public function test_validate_dependency__throws_when_a_dependency_is_inactive_and_user_activates_a_dependant_experiment() { // Arrange. - $test_feature_data_a = [ + $dependant = [ 'name' => Module_A::instance()->get_name(), 'dependencies' => [ Module_B::class, ], ]; - $test_feature_data_b = [ + $dependency = [ 'name' => Module_B::instance()->get_name(), ]; - $this->add_test_feature( $test_feature_data_a ); - $this->experiments->set_feature_default_state( $test_feature_data_a['name'], Experiments_Manager::STATE_INACTIVE ); + $this->add_test_feature( $dependant ); + $this->experiments->set_feature_default_state( $dependant['name'], Experiments_Manager::STATE_INACTIVE ); - $this->add_test_feature( $test_feature_data_b ); - $this->experiments->set_feature_default_state( $test_feature_data_b['name'], Experiments_Manager::STATE_INACTIVE ); + $this->add_test_feature( $dependency ); + $this->experiments->set_feature_default_state( $dependency['name'], Experiments_Manager::STATE_INACTIVE ); // Assert. $this->expectException( \WPDieException::class ); @@ -329,39 +329,41 @@ public function test_validate_dependency__ensure_cannot_depend_cannot_be_activat // Act. update_option( - $this->experiments->get_feature_option_key( $test_feature_data_a['name'] ), + $this->experiments->get_feature_option_key( $dependant['name'] ), Experiments_Manager::STATE_ACTIVE ); } - public function test_test_validate_dependency__ensure_depend_cannot_be_activated_if_dependency_is_inactive() { + public function test_validate_dependency__deactivates_an_experiment_when_its_dependency_is_inactivated() { // Arrange. - $test_feature_data_a = [ + $dependant = [ 'name' => Module_A::instance()->get_name(), 'dependencies' => [ Module_B::class, ], ]; - $test_feature_data_b = [ + $dependency = [ 'name' => Module_B::instance()->get_name(), ]; - $this->add_test_feature( $test_feature_data_a ); - $this->experiments->set_feature_default_state( $test_feature_data_a['name'], Experiments_Manager::STATE_ACTIVE ); + $this->add_test_feature( $dependant ); + $this->experiments->set_feature_default_state( $dependant['name'], Experiments_Manager::STATE_ACTIVE ); - $this->add_test_feature( $test_feature_data_b ); - $this->experiments->set_feature_default_state( $test_feature_data_b['name'], Experiments_Manager::STATE_ACTIVE ); - - // Assert. - $this->expectException( \WPDieException::class ); - $this->expectExceptionMessage( '

Cannot turn off `module-b`, Experiment: `module-a` is still active!

Back

' ); + $this->add_test_feature( $dependency ); + $this->experiments->set_feature_default_state( $dependency['name'], Experiments_Manager::STATE_ACTIVE ); // Act. update_option( - $this->experiments->get_feature_option_key( $test_feature_data_b['name'] ), + $this->experiments->get_feature_option_key( $dependency['name'] ), Experiments_Manager::STATE_INACTIVE ); + + // Assert. + $this->assertEquals( + Experiments_Manager::STATE_INACTIVE, + get_option( $this->experiments->get_feature_option_key( $dependant['name'] ) ) + ); } private function add_test_feature( array $args = [] ) { From 1891d10ff2b8862a4bd4ab258e30a4bd3d72c900 Mon Sep 17 00:00:00 2001 From: ManorHazaz <95690086+ManorHazaz@users.noreply.github.com> Date: Sat, 27 Aug 2022 11:36:10 +0300 Subject: [PATCH 039/130] Fix: Import/Export CLI - Import not overriding all templates conditions [ED-8045] (#19607) --- core/app/modules/import-export/module.php | 9 ++-- .../import-export/processes/import.php | 44 +++++++++++++++++-- core/app/modules/import-export/utils.php | 2 + 3 files changed, 47 insertions(+), 8 deletions(-) diff --git a/core/app/modules/import-export/module.php b/core/app/modules/import-export/module.php index 9461e16069a..fb19d279dc4 100644 --- a/core/app/modules/import-export/module.php +++ b/core/app/modules/import-export/module.php @@ -182,7 +182,7 @@ public function upload_kit( $file, $referrer ) { return [ 'session' => $this->import->get_session_id(), 'manifest' => $this->import->get_manifest(), - 'conflicts' => $this->import->get_settings_selected_override_conditions(), + 'conflicts' => $this->import->get_settings_conflicts(), ]; } @@ -324,11 +324,12 @@ private function handle_upload_kit() { if ( ! empty( $conflicts ) ) { $result['conflicts'] = $conflicts; + } else { + // Moved into the IE process \Elementor\Core\App\Modules\ImportExport\Processes\Import::get_default_settings_conflicts + // TODO: remove in 3.10.0 + $result = apply_filters( 'elementor/import/stage_1/result', $result ); } - // For BC with our PRO plugin. - $result = apply_filters( 'elementor/import/stage_1/result', $result ); - wp_send_json_success( $result ); } diff --git a/core/app/modules/import-export/processes/import.php b/core/app/modules/import-export/processes/import.php index 7817cfd80a9..bb60f3df9ba 100644 --- a/core/app/modules/import-export/processes/import.php +++ b/core/app/modules/import-export/processes/import.php @@ -73,6 +73,13 @@ class Import extends Process_Base { */ private $settings_referrer; + /** + * All the conflict between the exited templates and the kit templates. + * + * @var array + */ + private $settings_conflicts; + /** * Selected elementor templates conditions to override. * @@ -146,6 +153,10 @@ public function set_default_settings() { $this->settings_include( $this->get_default_settings_include() ); } + if ( ! is_array( $this->get_settings_conflicts() ) ) { + $this->settings_conflicts( $this->get_default_settings_conflicts() ); + } + if ( ! is_array( $this->get_settings_selected_override_conditions() ) ) { $this->settings_selected_override_conditions( $this->get_default_settings_override_conditions() ); } @@ -230,9 +241,7 @@ public function get_settings( $key ) { return $this->get_settings_include(); case 'overrideConditions': - // BC: Remove it in the future, - // the consumer should work with the actual override_conditions object and not with his keys. - return array_keys( $this->get_settings_selected_override_conditions() ); + return $this->get_settings_selected_override_conditions(); case 'selectedCustomPostTypes': return $this->get_settings_selected_custom_post_types(); @@ -265,6 +274,16 @@ public function get_settings_referrer() { return $this->settings_referrer; } + public function settings_conflicts( array $settings_conflicts ) { + $this->settings_conflicts = $settings_conflicts; + + return $this; + } + + public function get_settings_conflicts() { + return $this->settings_conflicts; + } + public function settings_selected_override_conditions( array $settings_selected_override_conditions ) { $this->settings_selected_override_conditions = $settings_selected_override_conditions; @@ -398,13 +417,30 @@ private function get_default_settings_custom_post_types() { return array_diff( $manifest_post_types, Utils::get_builtin_wp_post_types() ); } + /** + * Get the default settings of elementor templates conditions to override. + * + * @return array + */ + private function get_default_settings_conflicts() { + if ( empty( $this->manifest['templates'] ) ) { + return []; + } + + return apply_filters( 'elementor/import/get_default_settings_conflicts', [], $this->manifest['templates'] ); + } + /** * Get the default settings of elementor templates conditions to override. * * @return array */ private function get_default_settings_override_conditions() { - return apply_filters( 'elementor/import/get_default_settings_override_conditions', [], $this->manifest ); + if ( empty( $this->settings_conflicts ) ) { + return []; + } + + return array_keys( $this->settings_conflicts ); } /** diff --git a/core/app/modules/import-export/utils.php b/core/app/modules/import-export/utils.php index 27aa00c7d87..bef8bddcec9 100644 --- a/core/app/modules/import-export/utils.php +++ b/core/app/modules/import-export/utils.php @@ -23,6 +23,8 @@ public static function read_json_file( $path ) { public static function map_old_new_post_ids( array $imported_data ) { $result = []; + $result += $imported_data['templates']['succeed'] ?? []; + if ( isset( $imported_data['content'] ) ) { foreach ( $imported_data['content'] as $post_type ) { $result += $post_type['succeed'] ?? []; From d1a284def540c2d91aa93ab1605e32d2597ea8ee Mon Sep 17 00:00:00 2001 From: yossi-elementor <87371461+yossi-elementor@users.noreply.github.com> Date: Mon, 29 Aug 2022 13:42:41 +0300 Subject: [PATCH 040/130] Fix: Changed link to https (#19630) --- .../js/shared/process-failed-dialog/process-failed-dialog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/app/modules/import-export/assets/js/shared/process-failed-dialog/process-failed-dialog.js b/core/app/modules/import-export/assets/js/shared/process-failed-dialog/process-failed-dialog.js index d169963b1d8..2120667cbd8 100644 --- a/core/app/modules/import-export/assets/js/shared/process-failed-dialog/process-failed-dialog.js +++ b/core/app/modules/import-export/assets/js/shared/process-failed-dialog/process-failed-dialog.js @@ -41,7 +41,7 @@ export default function ProcessFailedDialog( { errorType, onApprove, onDismiss, if ( isTryAgainAction ) { onApprove(); } else { - window.open( 'http://go.elementor.com/app-import-download-failed', '_blank' ); + window.open( 'https://go.elementor.com/app-import-download-failed', '_blank' ); } onLearnMore?.(); }, From 777aea9fea622d58dac4357f38bba687ca7fe0e7 Mon Sep 17 00:00:00 2001 From: Rodolphe Bertozzo <56270626+rodolphebertozzo@users.noreply.github.com> Date: Mon, 29 Aug 2022 23:23:22 +0200 Subject: [PATCH 041/130] Tweak: Added clarification for the 'a' tag to the container element (#19599) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added a note to clarify for users who are not familiar with HTML that the a tag allows you to add a link before clicking on it. ![Capture d’écran 2022-08-27 202527](https://user-images.githubusercontent.com/56270626/187043380-12f10f1f-23ed-496f-acb1-749e386bc1b0.png) Co-authored-by: Yakir Sitbon --- includes/elements/container.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/elements/container.php b/includes/elements/container.php index e122a63b1f2..6d588af5cd8 100644 --- a/includes/elements/container.php +++ b/includes/elements/container.php @@ -492,7 +492,7 @@ protected function register_items_layout_controls() { 'section' => 'section', 'aside' => 'aside', 'nav' => 'nav', - 'a' => 'a', + 'a' => 'a ' . __( '(link)', 'elementor' ), ]; $options = [ From 0f70272d2eea123644449fb1df60811674243f13 Mon Sep 17 00:00:00 2001 From: elementorbot Date: Tue, 30 Aug 2022 08:12:50 +0000 Subject: [PATCH 042/130] Bump 3.8.0-cloud1 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4624d9c0721..6ca657c8902 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "slug": "elementor", "version": "3.7.3", "last_beta_version": "3.7.0-beta4", - "last_cloud_version": "3.7.0-cloud1", + "last_cloud_version": "3.8.0-cloud1", "prev_stable_version": "3.1.4", "author": "Elementor Team", "homepage": "https://elementor.com/", @@ -102,4 +102,4 @@ "react-redux": "^7.2.6", "write": "^2.0.0" } -} +} \ No newline at end of file From 260796229ab446f4554e62788c8398330590a06d Mon Sep 17 00:00:00 2001 From: udidol <36724484+udidol@users.noreply.github.com> Date: Tue, 30 Aug 2022 20:20:57 +0300 Subject: [PATCH 043/130] Internal: Remove `__wakeup` PHPUnit test which causes an exception in the CI's PHP 7.4 [ED-8101] (#19645) --- tests/phpunit/elementor/base/test-bootstrap.php | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/phpunit/elementor/base/test-bootstrap.php b/tests/phpunit/elementor/base/test-bootstrap.php index 83a66092ffa..25af8866c1f 100644 --- a/tests/phpunit/elementor/base/test-bootstrap.php +++ b/tests/phpunit/elementor/base/test-bootstrap.php @@ -17,10 +17,4 @@ public function test_Clone() { $obj_cloned = clone \Elementor\Plugin::$instance; } - - public function test_Wakeup() { - $this->expect_doing_it_wrong('__wakeup'); - - unserialize( serialize( \Elementor\Plugin::$instance ) ); - } } From 84ffbe0d31836b3b878074885d8316d8a234f216 Mon Sep 17 00:00:00 2001 From: Rodolphe Bertozzo <56270626+rodolphebertozzo@users.noreply.github.com> Date: Tue, 30 Aug 2022 21:35:28 +0200 Subject: [PATCH 044/130] Fix: Translation (#19652) The native translation method of Wordpress esc_html__() is missing for adding the HTML tag 'a' to the container --- includes/elements/container.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/includes/elements/container.php b/includes/elements/container.php index 6d588af5cd8..0aea77987ea 100644 --- a/includes/elements/container.php +++ b/includes/elements/container.php @@ -492,7 +492,7 @@ protected function register_items_layout_controls() { 'section' => 'section', 'aside' => 'aside', 'nav' => 'nav', - 'a' => 'a ' . __( '(link)', 'elementor' ), + 'a' => 'a ' . esc_html__( '(link)', 'elementor' ), ]; $options = [ From 3eeb86bcf8a865b9b6869a45cb4bd6cc8f299952 Mon Sep 17 00:00:00 2001 From: Ariel Klikstein Date: Tue, 30 Aug 2022 22:36:01 +0300 Subject: [PATCH 045/130] Tweak: Add more units to icon and icon-box widgets [ED-8103] (#19651) Co-authored-by: Mati Horowitz <21468434+matipojo@users.noreply.github.com> --- includes/widgets/icon-box.php | 2 ++ includes/widgets/icon.php | 1 + 2 files changed, 3 insertions(+) diff --git a/includes/widgets/icon-box.php b/includes/widgets/icon-box.php index 37db5022739..6d04389b4d5 100644 --- a/includes/widgets/icon-box.php +++ b/includes/widgets/icon-box.php @@ -348,6 +348,7 @@ protected function register_controls() { [ 'label' => esc_html__( 'Spacing', 'elementor' ), 'type' => Controls_Manager::SLIDER, + 'size_units' => [ 'px', '%', 'em', 'rem' ], 'default' => [ 'size' => 15, ], @@ -368,6 +369,7 @@ protected function register_controls() { [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, + 'size_units' => [ 'px', '%', 'em', 'rem' ], 'range' => [ 'px' => [ 'min' => 6, diff --git a/includes/widgets/icon.php b/includes/widgets/icon.php index 1d55d9648fa..a94baf4cc40 100644 --- a/includes/widgets/icon.php +++ b/includes/widgets/icon.php @@ -297,6 +297,7 @@ protected function register_controls() { [ 'label' => esc_html__( 'Size', 'elementor' ), 'type' => Controls_Manager::SLIDER, + 'size_units' => [ 'px', '%', 'em', 'rem' ], 'range' => [ 'px' => [ 'min' => 6, From ed777bf84162fc087dfe332651865e8e7f63c81c Mon Sep 17 00:00:00 2001 From: Rodolphe Bertozzo <56270626+rodolphebertozzo@users.noreply.github.com> Date: Tue, 30 Aug 2022 21:45:13 +0200 Subject: [PATCH 046/130] Tweak: Added em unit for border radius to layout elements (#19491) Co-authored-by: Yakir Sitbon --- includes/elements/column.php | 2 +- includes/elements/container.php | 4 ++-- includes/elements/section.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/includes/elements/column.php b/includes/elements/column.php index ecbbcc500e7..75a9331e0cd 100644 --- a/includes/elements/column.php +++ b/includes/elements/column.php @@ -529,7 +529,7 @@ protected function register_controls() { [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, - 'size_units' => [ 'px', '%' ], + 'size_units' => [ 'px', '%', 'em' ], 'selectors' => [ '{{WRAPPER}} > .elementor-element-populated, {{WRAPPER}} > .elementor-element-populated > .elementor-background-overlay, {{WRAPPER}} > .elementor-background-slideshow' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], diff --git a/includes/elements/container.php b/includes/elements/container.php index 0aea77987ea..343e1d6e57b 100644 --- a/includes/elements/container.php +++ b/includes/elements/container.php @@ -883,7 +883,7 @@ protected function register_border_controls() { [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, - 'size_units' => [ 'px', '%' ], + 'size_units' => [ 'px', '%', 'em' ], 'selectors' => [ '{{WRAPPER}}' => '--border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], @@ -922,7 +922,7 @@ protected function register_border_controls() { [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, - 'size_units' => [ 'px', '%' ], + 'size_units' => [ 'px', '%', 'em' ], 'selectors' => [ '{{WRAPPER}}:hover' => '--border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], diff --git a/includes/elements/section.php b/includes/elements/section.php index d4738fce1ba..7b805b7831f 100644 --- a/includes/elements/section.php +++ b/includes/elements/section.php @@ -835,7 +835,7 @@ protected function register_controls() { [ 'label' => esc_html__( 'Border Radius', 'elementor' ), 'type' => Controls_Manager::DIMENSIONS, - 'size_units' => [ 'px', '%' ], + 'size_units' => [ 'px', '%', 'em' ], 'selectors' => [ '{{WRAPPER}}, {{WRAPPER}} > .elementor-background-overlay' => 'border-radius: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};', ], From 0773e30c71463185c87e312bfca58e519036edd0 Mon Sep 17 00:00:00 2001 From: TzviRabinovitch <99259629+TzviRabinovitch@users.noreply.github.com> Date: Wed, 31 Aug 2022 08:46:33 +0300 Subject: [PATCH 047/130] Internal: Merge loop builder CORE to 3.8 CORE [ED-7714] (#19193) --- assets/dev/js/admin/admin.js | 2 + assets/dev/js/admin/new-template/layout.js | 16 ++++++ .../admin/new-template/template-controls.js | 30 +++++++++++ .../commands/internal/attach-preview.js | 6 ++- .../documents/commands/internal/load.js | 4 +- .../components/documents/commands/open.js | 4 +- .../components/documents/commands/switch.js | 4 +- core/admin/admin.php | 8 ++- core/base/document.php | 3 +- includes/admin-templates/new-template.php | 21 ++++---- includes/autoloader.php | 1 + .../data/endpoints/templates.php | 1 + .../forms/new-template-form.php | 52 +++++++++++++++++++ 13 files changed, 131 insertions(+), 21 deletions(-) create mode 100644 assets/dev/js/admin/new-template/template-controls.js create mode 100644 includes/template-library/forms/new-template-form.php diff --git a/assets/dev/js/admin/admin.js b/assets/dev/js/admin/admin.js index 4d500e1d75e..b22cd0909b4 100644 --- a/assets/dev/js/admin/admin.js +++ b/assets/dev/js/admin/admin.js @@ -3,6 +3,7 @@ import ExperimentsModule from 'elementor/core/experiments/assets/js/admin/module import environment from '../../../../core/common/assets/js/utils/environment'; import Events from 'elementor-utils/events'; import FilesUploadHandler from '../editor/utils/files-upload-handler'; +import TemplateControls from './new-template/template-controls.js'; ( function( $ ) { var ElementorAdmin = elementorModules.ViewModule.extend( { @@ -339,6 +340,7 @@ import FilesUploadHandler from '../editor/utils/files-upload-handler'; if ( elementorCommon.config.experimentalFeatures[ 'landing-pages' ] ) { new LandingPagesModule(); } + this.templateControls = new TemplateControls(); new ExperimentsModule(); }, diff --git a/assets/dev/js/admin/new-template/layout.js b/assets/dev/js/admin/new-template/layout.js index d594b45eb36..92d642bc740 100644 --- a/assets/dev/js/admin/new-template/layout.js +++ b/assets/dev/js/admin/new-template/layout.js @@ -18,6 +18,9 @@ module.exports = elementorModules.common.views.modal.Layout.extend( { initialize() { elementorModules.common.views.modal.Layout.prototype.initialize.apply( this, arguments ); + const lookupControlIdPrefix = 'elementor-new-template__form__'; + const templateTypeSelectId = `${ lookupControlIdPrefix }template-type`; + this.showLogo(); this.showContentView(); @@ -26,6 +29,19 @@ module.exports = elementorModules.common.views.modal.Layout.extend( { this.lockProBehavior = new LockPro( this.elements ); this.lockProBehavior.bindEvents(); + + const dynamicControlsVisibilityListener = () => { + elementorAdmin.templateControls.setDynamicControlsVisibility( lookupControlIdPrefix, elementor_new_template_form_controls ); + }; + + this.getModal().onShow = () => { + dynamicControlsVisibilityListener(); + document.getElementById( templateTypeSelectId ).addEventListener( 'change', dynamicControlsVisibilityListener ); + }; + + this.getModal().onHide = () => { + document.getElementById( templateTypeSelectId ).removeEventListener( 'change', dynamicControlsVisibilityListener ); + }; }, initElements() { diff --git a/assets/dev/js/admin/new-template/template-controls.js b/assets/dev/js/admin/new-template/template-controls.js new file mode 100644 index 00000000000..7af9a089d76 --- /dev/null +++ b/assets/dev/js/admin/new-template/template-controls.js @@ -0,0 +1,30 @@ +export default class TemplateControls { + setDynamicControlsVisibility( lookupControlIdPrefix, controls ) { + if ( undefined === controls ) { + return; + } + + const controlsArray = Object.entries( controls ); + + for ( const [ controlId, controlSettings ] of controlsArray ) { + this.setVisibilityForControl( lookupControlIdPrefix, controlSettings, controlId ); + } + } + + setVisibilityForControl( lookupControlIdPrefix, controlSettings, controlId ) { + const conditions = Object.entries( controlSettings.conditions ?? {} ); + + conditions.forEach( ( condition ) => { + this.changeVisibilityBasedOnCondition( lookupControlIdPrefix, condition, controlId ); + } ); + } + + changeVisibilityBasedOnCondition( lookupControlIdPrefix, condition, controlId ) { + const [ conditionKey, conditionValue ] = condition; + const targetControlWrapper = document.getElementById( lookupControlIdPrefix + controlId + '__wrapper' ); + const lookupControl = document.getElementById( lookupControlIdPrefix + conditionKey ); + + targetControlWrapper.classList.toggle( 'elementor-hidden', ! lookupControl || conditionValue !== lookupControl.value ); + } +} + diff --git a/assets/dev/js/editor/components/documents/commands/internal/attach-preview.js b/assets/dev/js/editor/components/documents/commands/internal/attach-preview.js index e614eba2fd9..b58210f3c9b 100644 --- a/assets/dev/js/editor/components/documents/commands/internal/attach-preview.js +++ b/assets/dev/js/editor/components/documents/commands/internal/attach-preview.js @@ -34,7 +34,7 @@ export class AttachPreview extends $e.modules.CommandInternalBase { } attachDocumentToPreview( document, args ) { - const { selector = '.elementor-' + document.id } = args; + const { selector = '.elementor-' + document.id, shouldScroll = true } = args; return new Promise( ( resolve, reject ) => { // Not yet loaded. @@ -71,7 +71,9 @@ export class AttachPreview extends $e.modules.CommandInternalBase { document.container.view = elementor.getPreviewView(); document.container.model.attributes.elements = elementor.elements; - elementor.helpers.scrollToView( document.$element ); + if ( shouldScroll ) { + elementor.helpers.scrollToView( document.$element ); + } document.$element .addClass( 'elementor-edit-area-active' ) diff --git a/assets/dev/js/editor/components/documents/commands/internal/load.js b/assets/dev/js/editor/components/documents/commands/internal/load.js index 8c7a9f1e0fd..d095d3388f9 100644 --- a/assets/dev/js/editor/components/documents/commands/internal/load.js +++ b/assets/dev/js/editor/components/documents/commands/internal/load.js @@ -7,7 +7,7 @@ export class Load extends $e.modules.CommandInternalBase { } apply( args ) { - const { config } = args; + const { config, scroll = true } = args; if ( elementorCommon.config.experimentalFeatures.additional_custom_breakpoints ) { // When the Responsive Optimization experiment is active, the responsive controls are generated on the @@ -50,7 +50,7 @@ export class Load extends $e.modules.CommandInternalBase { // TODO: Find better solution - Fix issue when globals does not render after saving from kit. // The issue is that the css-parser is depends upon cache and cache is not available during this time. return $e.data.get( 'globals/index' ).then( () => - $e.internal( 'editor/documents/attach-preview' ), + $e.internal( 'editor/documents/attach-preview', { scroll } ), ); } diff --git a/assets/dev/js/editor/components/documents/commands/open.js b/assets/dev/js/editor/components/documents/commands/open.js index 0841d21f1cd..56ed4f3baf1 100644 --- a/assets/dev/js/editor/components/documents/commands/open.js +++ b/assets/dev/js/editor/components/documents/commands/open.js @@ -4,7 +4,7 @@ export class Open extends $e.modules.CommandBase { } apply( args ) { - const { id, selector } = args, + const { id, selector, scroll = true } = args, currentDocument = elementor.documents.getCurrent(); // Already opened. @@ -22,7 +22,7 @@ export class Open extends $e.modules.CommandBase { elementorCommon.elements.$body.addClass( `elementor-editor-${ config.type }` ); // Tell the editor to load the document. - return $e.internal( 'editor/documents/load', { config, selector } ); + return $e.internal( 'editor/documents/load', { config, selector, scroll } ); } ) .always( () => { // TODO: move to $e.hooks.ui. diff --git a/assets/dev/js/editor/components/documents/commands/switch.js b/assets/dev/js/editor/components/documents/commands/switch.js index 6ed181a1e90..637ce384bc2 100644 --- a/assets/dev/js/editor/components/documents/commands/switch.js +++ b/assets/dev/js/editor/components/documents/commands/switch.js @@ -4,7 +4,7 @@ export class Switch extends $e.modules.CommandBase { } apply( args ) { - const { id, mode, onClose } = args; + const { id, mode, onClose, scroll = true } = args; return $e.run( 'editor/documents/close', { id: elementor.documents.getCurrentId(), @@ -12,7 +12,7 @@ export class Switch extends $e.modules.CommandBase { onClose, } ) .then( () => { - return $e.run( 'editor/documents/open', { id } ); + return $e.run( 'editor/documents/open', { id, scroll } ); } ) .then( () => { elementor.getPanelView().getPages( 'menu' ).view.addExitItem(); diff --git a/core/admin/admin.php b/core/admin/admin.php index 473db39e8fb..24dc76b7c15 100644 --- a/core/admin/admin.php +++ b/core/admin/admin.php @@ -562,8 +562,6 @@ public function admin_action_new_post() { $post_data = isset( $_GET['post_data'] ) ? $_GET['post_data'] : []; - $meta = []; - /** * Create new post meta data. * @@ -573,6 +571,12 @@ public function admin_action_new_post() { * * @param array $meta Post meta data. */ + $meta = []; + + if ( isset( $_GET['meta'] ) && is_array( $_GET['meta'] ) ) { + $meta = array_map( 'sanitize_text_field', $_GET['meta'] ); + } + $meta = apply_filters( 'elementor/admin/create_new_post/meta', $meta ); $post_data['post_type'] = $post_type; diff --git a/core/base/document.php b/core/base/document.php index 05d2c5dacb9..65a5bc1dd28 100644 --- a/core/base/document.php +++ b/core/base/document.php @@ -328,7 +328,8 @@ public function get_container_attributes() { } } - return $attributes; + // apply this filter to allow the attributes to be modified by different sources + return apply_filters( 'elementor/document/wrapper_attributes', $attributes, $this ); } /** diff --git a/includes/admin-templates/new-template.php b/includes/admin-templates/new-template.php index 8039a6bc2cf..d56b3524080 100644 --- a/includes/admin-templates/new-template.php +++ b/includes/admin-templates/new-template.php @@ -2,11 +2,12 @@ namespace Elementor; use Elementor\Core\Base\Document; +use Elementor\TemplateLibrary\Forms\New_Template_Form; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } - +$new_template_control_form = new New_Template_Form( [ 'id' => 'form' ] ); $document_types = Plugin::$instance->documents->get_document_types(); $types = []; @@ -40,6 +41,8 @@ * @param Document $document_types Document types. */ $types = apply_filters( 'elementor/template-library/create_new_dialog_types', $types, $document_types ); +ksort( $types ); + ?>